前文已经给出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. Scrapy框架(七)--中间件及Selenium应用

    中间件 下载中间件(Downloader Middlewares) 位于scrapy引擎和下载器之间的一层组件. 作用:批量拦截到整个工程中所有的请求和响应 - 拦截请求: - UA伪装:proces ...

  2. linux入门篇:查看系统用户信息,以及修改用户密码

    From https://blog.csdn.net/dieyong/article/details/86578472 1 用户列表文件$ cat /etc/passwd 2 用户组列表文件$ cat ...

  3. AGE SORT

    AGE SORT 你有所有城市的人的年齡資料,而且這城市的人們都大於1歲,且都不會活超過100歲.現在你有個簡單的任務以升冪去排序所有的年齡 Input 接下來會有很多筆的資料,每筆資料從輸入n 開始 ...

  4. 效率提升利器:一个在线的.NET源码查询网站

    前言 你是否有这样的苦恼,有时候需要查询.NET中的某个类型.方法.属性或程序集的源代码,但又不想从GitHub中下载源代码.今天大姚分享一个在线且实用的.NET源码查询网站. 在线查询地址 http ...

  5. 数据分析---matplotlib模块的使用

    1.摘要 在数据可视化.统计绘图和图表生成领域,Python 被广泛使用,其中 Matplotlib 是一个极其重要的基础三方库.本博客旨在介绍 Python 及其三方库 Matplotlib 的详细 ...

  6. Golang基于Mysql分布式锁实现集群主备

    背景 集群中如果需要主备,可以基于Redis.zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现. 原理 数据库中包含数据字段(此处为Master的主机名).版本号和上一次更新时间. ...

  7. .Net Core 全局捕获异常-过滤器

    1.代码版本 .Net Core 版本 2.2 2.自定义异常捕获类 新建一个类 CustomerExceptionFilter.cs 继承 Microsoft.AspNetCore.Mvc.Filt ...

  8. VS2017 error CS0234: 命名空间“Microsoft”中不存在类型或命名空间名“Office”问题的一种解决方案

    最近需要使用VS2017编辑C#,但在编译时软件报错:error CS0234: 命名空间"Microsoft"中不存在类型或命名空间名"Office" 在网上 ...

  9. Aspose Excel 单元格合并后边框显示不全

    /// <summary> /// 解决合并后的单元格没有边框,设置合并单元格格式,让合并过的单元格中每一个单元格上都添加上加边框的样式 /// </summary> /// ...

  10. @Autowired和@Resource有哪些区别

    一.注解的作用 @Autowired和@Resource都是用来实现Bean的自动注入功能. 二.@Autowired和@Resource的区别 1.所属的包不同 @Autowired是Spring的 ...