国产计算框架mindspore在gpu环境下1.3.0版本的分布式计算组件安装 ——(openmpi 和 nccl 的安装,配置,示例代码的运行)
前文已经给出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 的安装:
下载地址:
解压文件:
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 的安装:
下载地址:
(具体版本需要根据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 的安装,配置,示例代码的运行)的更多相关文章
- 国产计算框架Mindspore1.3.0 gpu源代码中的cmake文件存在问题(bug),openmpi的url错误,导致不能正常编译——成功解决mindspore-gpu-1.3.0版本不能从源代码中编译的问题
mindspore 的 r1.3 分支 在gpu方式编译下存在问题,无法编译,具体编译结果参考: https://www.cnblogs.com/devilmaycry812839668/p/1505 ...
- 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法
在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...
- eclipse环境下基于tomcat-7.0.82构建struts2项目
开山第一篇,毕业4个月目前接触最多的框架还是s2sh框架.... 具备完整的开发环境下,在eclipse下启动tomcat出现如下所示画面表示环境构建成功. 第一步:创建web项目,截图如下 此页面只 ...
- CentOs环境下给PHP7.0安装fileinfo扩展
由于项目搭建处于一个初步阶段,由于环境的不成熟出现过一系列的问题是难免的,在关于文件操作的程序中,报出一个缺少扩展的错误,已经解决~ 看一下官方给出的说明,http://php.net/manual/ ...
- 全网最详细的大数据集群环境下多个不同版本的Cloudera Hue之间的界面对比(图文详解)
不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 安装Hue后的一些功能 ...
- [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”
在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...
- Windows下python 3.0版本django的安装、配置、与启动
使用的环境是Windows操作系统,python的环境是3.6,django是官网上最新的版本1.10.6,本文介绍从安装python之后怎样用过pip管理工具安装django,以及django的项目 ...
- Golang框架Beego在Windows环境下小试牛刀
Beego官网beego官网 : https://beego.me/github : https://github.com/beego Beego安装前提: ①Go 1.1+ 以确保所有功能的正常使用 ...
- Centos环境下给PHP7.0安装yaf扩展
首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下. 下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的 ...
- Ubuntu14.04环境下Qt5.5以上版本无法输入中文的解决教程
1.前言 由于Qt5.4之后对之前的Qt5版本不再二进制兼容,所以网上很多简单的旧的办法已经失效了,所以本教程的办法是重新编译fcitx-qt5,生成最新的libfcitxplatforminputc ...
随机推荐
- 字节面试:MySQL自增ID用完会怎样?
在一些中小型项目开发中,我们通常会使用自增 ID 来作为主键的生成策略,但随着时间的推移,数据库的信息也会越来越多,尤其是使用自增 ID 作为日志表的主键生成策略时,可能很快就会遇到 ID 被用完的情 ...
- skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求
skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求 # skywalking-agent.jar的本地磁盘路径-javaagent:D:\SkyWalking\sky ...
- PHP 程序员转 Go 语言的经历分享
大家好,我是码农先森. 之前有朋友让我分享从 PHP 转 Go 的经历,这次它来了.我主要从模仿.进阶.应用这三个方面来描述转 Go 的经历及心得.模仿是良好的开端,进阶是艰难的成长,应用是认知的提升 ...
- 容器镜像安全:安全漏洞扫描神器Trivy
目录 一.系统环境 二.前言 三.Trivy简介 四.Trivy漏洞扫描原理 五.利用trivy检测容器镜像的安全性 六.总结 一.系统环境 本文主要基于Docker version 20.10.14 ...
- zabbix数据库
1. 安装MySQL 5.6 操作系统为CentOS7 X64 MySQL文件下载地址 http://dev.mysql.com/downloads/repo/yum/ 卸载已存在文件 rpm -qa ...
- AtCoder Beginner Contest 302 H. Ball Collector 题解 可撤销并查集
为了更好的阅读体验,请单击这里 AtCoder Beginner Contest 302 H. Ball Collector 题意跳过. 可以视作将 \(a_i, b_i\) 之间连了一条边,然后 \ ...
- 基于 UDP 的 组播、广播详解
背景 有些时候我们在网络通信中也需要用到 组播(多播).广播.现在我们来介绍如何实现. 建议:在此之前,关闭防火墙. ubuntu: service ufw stop windows: 控制面板关闭 ...
- 在WPF中使用着色器
概念类比 范畴 CPU GPU 二进制文件 .exe .cso / .ps 二进制指令 机器码 CSO(shader指令) 助记符 汇编 SL 高级语言 C# HLSL 高级语言文件 .cs .hls ...
- aiohttp 子线程启动/中止服务
import time, threading from aiohttp import web import asyncio async def handler(request): return web ...
- mac idea 配置Tomcat
官网下载Tomcat 下载地址:点我直达 配置Idea 设置Application Servers 操作步骤:Intellij IDEA->Preferences->Application ...