前文已经给出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. django通过celery定时任务

    settings.py   # Broker配置,使用Redis作为消息中间件 BROKER_URL = 'redis://127.0.0.1:6379/0' # BACKEND配置,这里使用redi ...

  2. vue饼图

    结果图 原型 1 <template> 2 <!-- 左右柱状图 --> 3 <div ref="rankEcharts" :style=" ...

  3. nordic—RTC+PPI定时驱动某外设做非单次触发(本次测试为驱动GPIO口做电平翻转)

    简介:在nordic的开发中使用到RTC时,对于比较通道0/1/2/3的中断来说,如果不进行相关配置(如SDK中例子,使用的RTC比较通道就只能触发一次,不能多次触发),会导致比较中断只进入一次,如果 ...

  4. bean反射比较两个bean属性值的修改明细

    1.期望:将[username]从'111'改成'222';将[address]从'这是一个测试数据'改成'这是一个真实数据'; 2.导入jar <dependency> <grou ...

  5. 订单推送设计思路-基于支付ID而不是订单号来推送

    订单推送设计思路-基于支付ID而不是订单号来推送 方案:不是基于订单号来核销和分账的,抖音是基于每一笔抖音支付来做订单推送,核销和分账现象:这样会在抖音的订单中心中会出现很多条订单推送的记录. 抖音A ...

  6. 如何判断APP页面是原生还是H5

    如何判断APP页面是原生还是H5 1.打开设置,搜索"开发者选项",点击"开发者选项" 华为手机进入开发者模式方法 1.打开华为手机的[设置],找到并点击进入[ ...

  7. radis简单学习笔记

    原来写接口只用了本机缓存cache 来学习一下radis,用法应该跟cache一样吧,为了配套负载均衡的多服务器是多个服务器都可以读取缓存 一.下载 找了好长时间 github有的时候能上有的时候就上 ...

  8. 2019南京区域赛ABCHJK题解 & KM-bfs(O(n^3))板子

    A.Hard Problem 题目大意:给你一个数n,然后让你计算一个子集大小,这个大小的子集要保证一定存在一个数是另一个数的约数,求出这个最小的数. 做法:显然后面的\(\frac{n}{2}\)个 ...

  9. spring cloud 上云的情况下,Ribbon 客户端负载均衡 与 ALB 服务端负载均衡的选择

    在云环境(例如AWS)中,由于云提供商通常提供强大的负载均衡服务(如AWS的ALB),一般不再需要使用Ribbon这种客户端负载均衡方案.云环境中的负载均衡器通常能够提供更高的可靠性.可扩展性和简化的 ...

  10. C#开发单实例应用程序并响应后续进程启动参数

    C#默认的WinForm模板是不支持设置单实例的,也没有隔壁大哥VB.NET那样有个"生成单个实例应用程序"的勾选选项(VB某些时候要比C#更方便),实现单实例可以有多种方法: 检 ...