前文已经给出1.3.0gpu版本的编译及安装,本文在此基础上进行分布式组件的安装,前文信息参看:

国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第一部分:依赖环境的安装

国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行

===============================================================

准备工作:

(因为mindspore对应的nccl2.7.6对应的cuda版本为10.1,因此我们这里需要安装cuda10.1,需要注意的是我们前面两个文章介绍的是在cuda11.1环境下编译源代码,但是如果要使用分布式功能的话必须使用cuda10.1版本,因此前面的两个介绍mindspore源码编译的文章中对应的cuda版本和cudnn版本也需要进行替换)

cuda10.1的安装:

下载地址:

https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run

安装:

sudo sh ./cuda_10.1.105_418.39_linux.run --toolkit  --silent

cudnn 的安装:

下载地址:

https://developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.5.32/Production/10.1_20191031/cudnn-10.1-linux-x64-v7.6.5.32.tgz

解压文件:

tar -zxvf cudnn-10.1-linux-x64-v7.6.5.32.tgz

拷贝解压后的文件到cuda安装目录内:

 sudo cp cuda/include/*  /usr/local/cuda/include

 sudo cp cuda/lib64/*  /usr/local/cuda/lib64

配置环境变量:

修改  .bashrc  文件

export PATH=/usr/local/cuda/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

重新载入  .bashrc 文件:

source ~/.bashrc

===============================================================

OpenMPI 的安装:

OpenMPI-4.0.3:MindSpore采用的多进程通信库。

OpenMPI-4.0.3源码下载地址:

https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz

参考OpenMPI官网教程安装:https://www.open-mpi.org/faq/?category=building#easy-build

先安装依赖环境:

sudo apt-get install libibverbs1

解压:

tar -zxvf openmpi-4.0.3.tar.gz

配置:

./configure --prefix=/usr/local --enable-mpi-threads --enable-progress-threads --enable-shared --with-threads=poxis --enable-mpi-thread-multiple --with-cuda=/usr/local/cuda

(注意:这里我们假设cuda的安装目录为: /usr/local/cuda ,  该地址可以按照具体情况进行修改)

编译并安装:

make&&sudo make install

测试openmpi是否安装成功:

进入到examples文件夹中,执行make命令编译一下测试代码,如果编译没有报错执行下面的测试语句:

mpirun -np 4 hello_c

验证已经成功安装openmpi 。

NCCL 的安装:

下载地址:

https://developer.nvidia.com/compute/machine-learning/nccl/secure/v2.7/prod/nccl-repo-ubuntu1804-2.7.6-ga-cuda10.1_1-1_amd64.deb

(具体版本需要根据mindspore的版本来决定,这里对应的mindspore版本为1.3.0)

1. 根据nccl官网进行系统配置:

In the following commands, please replace<architecture>with your CPU architecture:x86_64,ppc64le, orsbsa, and replace<distro>with the Ubuntu version, for exampleubuntu1604,ubuntu1804, orubuntu2004.

本机环境:<architecture> 为 x86_64 , <distro> 为ubuntu1804 。

于是需执行命令:

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

2. 安装刚才下载的  deb 文件:

sudo dpkg -i nccl-repo-ubuntu1804-2.7.6-ga-cuda10.1_1-1_amd64.deb

3.   更新 apt

sudo apt update

4.  Install thelibnccl2package with APT. Additionally, if you need to compile applications with NCCL, you can install thelibnccl-devpackage as well

安装  libnccl2 、  libnccl-dev

从刚才的官方nccl下载页面可以知道,对应的  libnccl2 、  libnccl-dev  版本。

sudo apt install libnccl2=2.7.6-1+cuda10.1 libnccl-dev=2.7.6-1+cuda10.1

5.  使用  nccl-test  来测试是否安装成功

本机为8核心CPU:I7-9700K, 单卡GPU:2060SUPER

因此测试命令:

./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1

mpirun -np 8 ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1

nccl的测试方法具体参看:https://www.cnblogs.com/devilmaycry812839668/p/15023221.html

测试安装号openmpi及nccl组件后的mindspore是否可以成功运行分布式代码:

(参看:https://www.cnblogs.com/devilmaycry812839668/p/15022320.html

(mindspore的安装这里不进行介绍,具体可以参看前文)

============================================================================

安装好openmpi 和 nccl 后需要配置主机的免登录:

免密登陆配置:

主机间免密登陆(涉及多机训练时需要)。若训练涉及多机,则需要配置多机间免密登陆,可参考以下步骤进行配置:

  • 每台主机确定同一个用户作为登陆用户(不推荐root);
  • 执行ssh-keygen -t rsa -P ""生成密钥;
  • 执行ssh-copy-id DEVICE-IP设置需要免密登陆的机器IP;
  • 执行ssh DEVICE-IP,若不需要输入密码即可登录,则说明以上配置成功;
  • 在所有机器上执行以上命令,确保两两互通。

如果只设置本机,操作如下:

ssh-keygen -t rsa -P ""

ssh-copy-id 127.0.0.1

以上为配置的全部步骤,下面进行测试环境是否可以成功运行:

运行代码:(      test_nonlinear.py     )

from mindspore import context
from mindspore.communication.management import init
context.set_context(mode=context.GRAPH_MODE, device_target="GPU")
init() import numpy as np
from mindspore import dataset as ds
from mindspore import nn, Tensor, Model
import time
from mindspore.train.callback import Callback, LossMonitor, ModelCheckpoint, CheckpointConfig
from mindspore.context import ParallelMode
import mindspore as ms
ms.common.set_seed(0) start_time = time.time()
def get_data(num, a=2.0, b=3.0, c=5.0):
for _ in range(num):
x = np.random.uniform(-1.0, 1.0)
y = np.random.uniform(-1.0, 1.0)
noise = np.random.normal(0, 0.03)
z = a * x ** 2 + b * y ** 3 + c + noise
yield np.array([[x**2], [y**3]],dtype=np.float32).reshape(1,2), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1):
input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['xy','z'])
input_data = input_data.batch(batch_size)
input_data = input_data.repeat(repeat_size)
return input_data data_number = 1600
batch_number = 64
repeat_number = 20 context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)
ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)
dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell):
def __init__(self):
super(LinearNet, self).__init__()
self.fc = nn.Dense(2, 1, 0.02, 0.02) def construct(self, x):
x = self.fc(x)
return x net = LinearNet()
model_params = net.trainable_params()
print ('Param Shape is: {}'.format(len(model_params)))
for net_param in net.trainable_params():
print(net_param, net_param.asnumpy())
net_loss = nn.loss.MSELoss() optim = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.6)
ckpt_config = CheckpointConfig()
ckpt_callback = ModelCheckpoint(prefix='data_parallel', config=ckpt_config) model = Model(net, net_loss, optim) epoch = 1000
#model.train(epoch, ds_train, dataset_sink_mode=True)
#model.train(epoch, ds_train, callbacks=[ckpt_callback], dataset_sink_mode=True)
model.train(epoch, ds_train, callbacks=[LossMonitor(500)], dataset_sink_mode=True) for net_param in net.trainable_params():
print(net_param, net_param.asnumpy()) print ('The total time cost is: {}s'.format(time.time() - start_time))

代码原地址:

https://www.cnblogs.com/dechinphy/p/dms.html

由于运行的服务器是有1卡,因此我们的运行命令如下:

mpirun -n 1  python ./test_nonlinear.py

-------------------------------------------------

神奇的一点是我们安装的是gpu版本的mindspore, 执行mpirun的时候-n 后的数值为gpu的卡数,如果只有一个卡的话则-n 1, 两个卡就是-n 2,以此类推,-n 4则是分别在4张卡上并行运行。其中,-n 后的数值一点要小于本机的GPU卡数,否则报错。

如在一张卡的机器上运行命令:

mpirun -n 2  python ./test_nonlinear.py

报错信息:

RuntimeError: mindspore/ccsrc/runtime/device/gpu/gpu_device_manager.cc:27 InitDevice] Op Error: Failed to set current device id | Error Number: 0

参考:

https://blog.csdn.net/adsjlnmj66029/article/details/101567978

https://www.cnblogs.com/devilmaycry812839668/p/15023229.html

https://www.cnblogs.com/devilmaycry812839668/p/15023221.html

https://www.cnblogs.com/devilmaycry812839668/p/15022320.html

国产计算框架mindspore在gpu环境下1.3.0版本的分布式计算组件安装 ——(openmpi 和 nccl 的安装,配置,示例代码的运行)的更多相关文章

  1. 国产计算框架Mindspore1.3.0 gpu源代码中的cmake文件存在问题(bug),openmpi的url错误,导致不能正常编译——成功解决mindspore-gpu-1.3.0版本不能从源代码中编译的问题

    mindspore 的 r1.3 分支 在gpu方式编译下存在问题,无法编译,具体编译结果参考: https://www.cnblogs.com/devilmaycry812839668/p/1505 ...

  2. 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法

    在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...

  3. eclipse环境下基于tomcat-7.0.82构建struts2项目

    开山第一篇,毕业4个月目前接触最多的框架还是s2sh框架.... 具备完整的开发环境下,在eclipse下启动tomcat出现如下所示画面表示环境构建成功. 第一步:创建web项目,截图如下 此页面只 ...

  4. CentOs环境下给PHP7.0安装fileinfo扩展

    由于项目搭建处于一个初步阶段,由于环境的不成熟出现过一系列的问题是难免的,在关于文件操作的程序中,报出一个缺少扩展的错误,已经解决~ 看一下官方给出的说明,http://php.net/manual/ ...

  5. 全网最详细的大数据集群环境下多个不同版本的Cloudera Hue之间的界面对比(图文详解)

    不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 安装Hue后的一些功能 ...

  6. [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”

    在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...

  7. Windows下python 3.0版本django的安装、配置、与启动

    使用的环境是Windows操作系统,python的环境是3.6,django是官网上最新的版本1.10.6,本文介绍从安装python之后怎样用过pip管理工具安装django,以及django的项目 ...

  8. Golang框架Beego在Windows环境下小试牛刀

    Beego官网beego官网 : https://beego.me/github : https://github.com/beego Beego安装前提: ①Go 1.1+ 以确保所有功能的正常使用 ...

  9. Centos环境下给PHP7.0安装yaf扩展

    首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下. 下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的 ...

  10. Ubuntu14.04环境下Qt5.5以上版本无法输入中文的解决教程

    1.前言 由于Qt5.4之后对之前的Qt5版本不再二进制兼容,所以网上很多简单的旧的办法已经失效了,所以本教程的办法是重新编译fcitx-qt5,生成最新的libfcitxplatforminputc ...

随机推荐

  1. [踩坑记录] Vue3 customRef 传入对象没有进入set方法

    问题描述 学习Vue3 Ref 相关 API 的时候,遇到了 customRef 这个 API,它可以让我们自定义 ref 的更新的过程 但是使用 customRef 有一个问题就是,如果你传入的是初 ...

  2. flutter 创建第一个项目(二)

    新建flutter project 项目 这样就创建出了第一个项目

  3. 前端实现预览PDF

    下载包 npm install react-pdf 我使用的是react-pdf@5.7.2版本 以下例子使用的是react创建的项目 直接上代码=>cv可用,保证高效 1.新增依赖 yarn ...

  4. MyBatis 关于查询语句上配置的详细内容

    1. MyBatis 关于查询语句上配置的详细内容 @ 目录 1. MyBatis 关于查询语句上配置的详细内容 2. 准备工作 3. SQL查询结果,返回为POJO实体类型 4. SQL查询结果,返 ...

  5. docker制作springboot镜像

    以下步骤在具有Docker环境的Linux机器上操作. 把springboot-1.0.0.jar放到/usr/local/springboot目录下,并在该目录下创建Dockerfile文件,内容为 ...

  6. 为ssh服务器添加2fa认证,一个python脚本全搞定

    服务器ssh如果被别人登陆就是一场灾难,所以我研究了ssh认证,我发现Google Authenticator PAM可以实现ssh的2fa认证,但是安装和配置比较麻烦.因此我用python实现了ss ...

  7. Nuxt3 的生命周期和钩子函数(八)

    title: Nuxt3 的生命周期和钩子函数(八) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:本文介绍了Nuxt ...

  8. SpringBoot能同时处理多少请求

    SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的.所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求. 关于Tomca ...

  9. HTML5、CSS3 里面都新增了那些新特性?

    HTML5 新的语义标签 article 独立的内容. aside 侧边栏. header 头部. nav 导航. section 文档中的节. footer 页脚. 画布(Canvas) API 地 ...

  10. yb课堂 课程总结