如何高效安装MindSpore的GPU版本

2023-11-17

作者:王磊

更多精彩分享,欢迎访问和关注:https://www.zhihu.com/people/wldandan

MindSpore的GPU版本以前的安装指南,只写清楚了安装依赖,但没有明确指出安装具体执行的命令,缺乏实操性,比较依赖开发者自身的能力去完成安装,导致开发者在安装过程中会出现一些影响安装效率的问题。在新版本中,安装方面进行了优化,提供了自动化的脚本以及step by step的安装指南来帮助开发者完成Ubuntu+GPU版本的安装。

基于自动化脚本完成Ubuntu18.04 + GPU版本的安装

新的安装指南给出了自动化以及step by step安装方式,包括pip方式Conda方式源码编译方式。如果环境是全新的,可以使用自动化脚本安装,如果已经安装了一部分软件,也可以考虑跟随指南中后面的step by step的安装方式来完成安装。

在安装前,用户需要先执行nvidia-smi 来查看是否安装驱动,或者驱动是否匹配CUDA10.1/11.1。没有安装或者没有达到最低要求的驱动,需要按照指南先把驱动安装好。

sudo apt-get update
sudo apt-get install ubuntu-drivers-common
sudo ubuntu-drivers autoinstall

接下来只需要执行自动化脚本即可,假设我们需要用安装Python 3.9并使用pip完成1.6.1 的MindSpore版本安装,那么可以运行以下的脚本:

wget https://gitee.com/mindspore/mindspore/raw/master/scripts/install/ubuntu-gpu-pip.sh
# 安装MindSpore 1.6.1,Python 3.9和CUDA 11.1。
PYTHON_VERSION=3.9 MINDSPORE_VERSION=1.6.1 bash -i ./ubuntu-gpu-pip.sh

如果你的网络条件比较好,那么在10-15分钟就能完成安装,自动化脚本在执行的结尾还会自动做run check检查以及运行简单的代码验证,最终你看到的结果应该是这样的:

MindSpore version:  1.6.1
The result of multiplication calculation is correct, MindSpore has been installed successfully!
[[[[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]

  [[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]

  [[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]]]

自动化脚本解释

pip方式安装脚本为例,我们来看下脚本的实现,理解脚本可以帮助大家更好的修改和扩展脚本。脚本整体可以分为四个部分: 1. 参数设置及检查; 2. 三方依赖安装; 3. CUDA及CUDNN安装; 4. MindSpore安装及验证;

其中三方依赖安装和MindSpore比较简单,下面着重介绍下参数设置检查和CUDA安装,对于理解脚本使用以及扩展功能会有所帮助。

影响脚本的运行的参数

脚本的第一段提供了三个可调整的参数,Python版本(3.7,3.8,3.9)、MindSpore的版本(>=1.6.0)以及Cuda的版本(10.1,11.1),用户通过环境变量控制需要配置的环境,如

PYTHON_VERSION=3.9 MINDSPORE_VERSION=1.6.1 CUDA_VERSION=10.1 bash -i ./ubuntu-gpu-pip.sh

可以完成Python3.9、Cuda10.1以及MindSpore 1.6.1的版本安装。

PYTHON_VERSION=${PYTHON_VERSION:-3.7}
MINDSPORE_VERSION=${MINDSPORE_VERSION:EMPTY}
CUDA_VERSION=${CUDA_VERSION:-11.1}

这里脚本用到点shell的小技巧,PYTHON_VERSION=${PYTHON_VERSION:-3.7} 指PYTHON_VERSION 缺省为3.7,但如果用户在脚本执行前设置了新值,则使用新的值。

CUDA和CUDDN的安装

Nvidia自身其实提供了cuda相关软件包的国内镜像源,基于镜像源,可以快速下载cuda的run包,使用静默方式完成cuda的安装。然后用同样的方式用apt-get的方式安装cudnn和libcudnn-dev。如果想安装其它的小版本,可以打开“https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/”和“https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64/”地址来查找小版本号然后替换后执行脚本完成安装。

# 下载并安装Cuda
echo "installing CUDA and cuDNN"
cd /tmp
declare -A cuda_url_map=()
cuda_url_map["10.1"]=https://developer.download.nvidia.cn/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
cuda_url_map["11.1"]=https://developer.download.nvidia.cn/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
cuda_url=${cuda_url_map[$CUDA_VERSION]}
wget $cuda_url
sudo sh ${cuda_url##*/} --silent --toolkit
cd -
# 添加cudnn/libcuda的镜像源
sudo apt-key adv --fetch-keys https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo add-apt-repository "deb https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
declare -A cudnn_name_map=()
cudnn_name_map["10.1"]="libcudnn7=7.6.5.32-1+cuda10.1 libcudnn7-dev=7.6.5.32-1+cuda10.1"
cudnn_name_map["11.1"]="libcudnn8=8.0.4.30-1+cuda11.1 libcudnn8-dev=8.0.4.30-1+cuda11.1"
sudo apt-get install --no-install-recommends ${cudnn_name_map[$CUDA_VERSION]} -y

# 添加cuda到PATH和LD_LIBRARY_PATH中
set +e && source ~/.bashrc
set -e
add_env PATH /usr/local/cuda/bin
add_env LD_LIBRARY_PATH /usr/local/cuda/lib64
add_env LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu
set +e && source ~/.bashrc

自动化脚本存在的不足

自动化脚本在设计时,考虑到测试验证的成本问题,并没有将Ubuntu20.04和WSL加入到验收的范围,导致这两类用户在执行的时候报错,相应的问题已经转化为issue(Ubuntu 20.04支持WSL支持)。

如何拓展脚本完成Ubuntu20.04以及WSL上的自动化安装

拓展支持Ubuntu 20.04

如果我们再看下脚本解释中cuda安装的部分,可以看到“repos/ubuntu1804”如果更换为“repos/ubuntu2004”,就可以支持Ubuntu20.04了。所以我们需要在脚本中抽取一个Ubuntu版本的变量,通过Linux命令获得Ubuntu版本号,然后填充到下载地址就可以了。 具体的修改如下,通过lsb_release -a | grep Release 获取到包含版本的字符串如"Release: 20.04",然后基于Linux字符串的魔法功能${release_info//[!0-9]/} 从字符串中抽取出数字2004。这里要增加一个额外的判断,因为Ubuntu 20.04不支持Cuda 10.1。后面的安装部分只要将硬编码的版本号改为引用变量即可。

release_info=$(lsb_release -a | grep Release)
UBUNTU_VERSION=${release_info//[!0-9]/}

[[ "$UBUNTU_VERSION" == "2004" &&  "$CUDA_VERSION" == "10.1" ]] && echo "CUDA 10.1 is not supported on Ubuntu 20.04" && exit 1
#...
sudo apt-key adv --fetch-keys https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu${UBUNTU_VERSION}/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu${UBUNTU_VERSION}/x86_64/ /"
sudo add-apt-repository "deb https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu${UBUNTU_VERSION}/x86_64/ /"
sudo

解决WSL上自动化安装的问题

原有的脚本在WSL上执行到下面的脚本时会遇到一个错误。

driver_version=$(modinfo nvidia | grep ^version | awk '{printf $2}')
if [[ $driver_version < ${minimum_driver_version_map[$CUDA_VERSION]} ]]; then
    echo "CUDA $CUDA_VERSION minimum required driver version is ${minimum_driver_version_map[$CUDA_VERSION]}, \
        but current nvidia driver version is $driver_version, please upgrade your driver manually."
    exit 1
fi

错误信息如下:

iambowen@LAPTOP-ESJAVHR4:~/jenkins$ MINDSPORE_VERSION=1.6.1 bash -i ubuntu-gpu-pip.sh
modinfo: ERROR: Module alias nvidia not found.
CUDA 11.1 minimum required driver version is 450.80.02,         but current nvidia driver version is , please upgrade your driver manually.

错误的原因在于获取驱动信息的命令modinfo nvidia 在WSL执行会直接报modinfo: ERROR: Module alias nvidia not found. 错误。解决的办法是使用nvidia-smi --query-gpu=driver_version --format=csv,noheader --id=0 获取到Nvidia驱动的信息。如果驱动没有安装,命令执行返回为空,后面的检查逻辑也可以正常运行,提示安装升级驱动版本。

driver_version=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader --id=0)
if [[ $driver_version < ${minimum_driver_version_map[$CUDA_VERSION]} ]]; then
    echo "CUDA $CUDA_VERSION minimum required driver version is ${minimum_driver_version_map[$CUDA_VERSION]}, \
        but current nvidia driver version is $driver_version, please upgrade your driver manually."
    exit 1
fi

相关脚本在华为云以及WSL的Ubuntu18.04/20.04上都完成验证,应该可行,修改已发送Pull Request

总结

当前MindSpore的Master分支中,除了GPU版本的自动化安装,针对昇腾和CPU等的版本,也提供了自动化脚本和简化安装的指南,相信这些脚本和指南可以持续提升MindSpore在多平台下的安装体验。

说明:严禁转载本文内容,否则视为侵权。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何高效安装MindSpore的GPU版本 的相关文章

随机推荐

  • uni-app实现PDA采集器扫码

    uni app实现PDA采集器扫码 一 开发建议 1 建议使用nvue开发 体检会非常好 使用uni preloadPage url pages index 预加载页面 页面的流畅程度会提高非常多 单独vue的写法 打包成安卓体验很不好 模
  • IntelliJ IDEA 编译程序出现非法字符的解决方法

    最近编码完成后总是报非法字符 项目启动不起来 网上有很多说是File gt Setting gt File Encoding 将IDE Encoding和Project Encoding 都设置为UTF 8就行 可是我试了不行 后来看到另外
  • 不会把if-else重构成高质量代码的程序员,不是个优秀的程序员

    为什么我们写的代码都是 if else 程序员想必都经历过这样的场景 刚开始自己写的代码很简洁 逻辑清晰 函数精简 没有一个 if else 可随着代码逻辑不断完善和业务的瞬息万变 比如需要对入参进行类型和值进行判断 这里要判断下对象是否为
  • 3、backbone中的model实例

    关于backbone 最基础的一个东西就是model 这个东西就像是后端开发中的数据库映射那个model一样 也是数据对象的模型 并且应该是和后端的model有相同的属性 仅是需要通过前端来操作的属性 下面就从实例来一步一步的带大家来了解b
  • 文心一言、讯飞星火与GPT-4/3.5在回答中文历史问题的表现

    最近 随着备受关注的文心一言正式免费向全社会开放 再次引起了社会层面对国产大模型的兴趣 以文心一言为代表的国产大模型性能究竟如何 如果将它们相互比较 并且和GPT系列模型等国际前沿水平的LLM进行比较 会得到什么样的结果呢 笔者对此非常好奇
  • Python所有方向的学习路线图

    在放这个路线图之前 我先做一个简单的介绍 避免新手小白有什么不理解的 这个学习路线上面写的是某个方向建议学习和掌握的知识带你 这样学习下来之后会更加容易掌握 知识体系会比较全面 比自己单纯的自学效果好很多 不至于看到什么就学什么 容易走弯路
  • 二,ES6中新增const关键字的使用方法

    之前用var声明变量 变量想怎么改就怎么改 这里const关键字也是声明变量的 不过声明的是常量 常量就是固定的一个值 不能改变 例如 const name 唐僧 name 老沙 报错 因为它要更改常量name 只在块级作用于起作用 和le
  • Windows10 java环境变量的配置详细教程(Windows10 和Windows11)

    java环境变量的配置详细教程 1 首先要区分一下Windows10 2021年之前的版本和Windows10 2021年之后的版本 Windows10 2021年之后的版本和Windows11 系统在配置java上差不多 故不作区分 1
  • Intellij IDEA svn的使用记录

    这里的忽略一直灰色的 可以进入 这里的版本控制里进行忽略选择 或者 这里进行添加 这里有三个选择 按照顺序 1 忽略指定的文件 2 忽略文件夹下所有文件 3 忽略符合匹配规则的文件 到Commit Changes 这里有几个选项需要了解的
  • Vue实例挂载的过程

    一 思考与分析 我们都听过知其然知其所以然这句话 那么不知道是否思考过new Vue 这个过程中究竟做了些什么 过程中是如何完成数据的绑定 又是如何将数据渲染到视图的等等 首先找到vue的构造函数 源码位置 src core instanc
  • 因为强行关机, 而导致的fedora23 不能重新启动, 卡在开机logo那里的 修复 解决方案...

    其实 fedora23的U盘live 也很好用 很流畅 主要还是 要用一个比较好的 快的 U盘 这样live U盘在4GB 3 75GiB 的内存中还是较快的 原来的U盘live系统用得很卡 可能是因为 U盘太烂的原因 要方便的使用live
  • SAXParserFactoryImpl cast SAXParserFactory异常

    Caused by java lang ClassCastException com sun org apache xerces internal jaxp SAXParserFactoryImpl cannot be cast to ja
  • web攻击日志分析之新手指

    0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象 比如针对你的一个站点的URL进行SQL注入测试等等 这时候需要你从日志当中分析到底是个什么情况 如果非常严重的话 可能需要调查取证谁来做的这个事情 攻击流程是什么样子的
  • AlibabaProtect 卸载,不使用其他软件

    背景 发现系统中存在AlibabaProtect服务 停止不掉 文件夹也删除不掉 还占用内存 CPU 在网上也搜了很多其他的步骤 发现不太容易 这是整理的比较简单的 不需要装其他软件 步骤 1 删除注册表 AlibabaProtect搜索之
  • 华为OD机试-最长连续方波信号

    Online C compiler to run C program online include
  • docker-engine安装

    最近一直在使用docker 做一些试验 每个新机器都需要部署docker的环境 环境信息如下 RedHat 7 2 安装 docker官方的安装 docker engine 1 sudo rpm import https sks keyse
  • Webpack5优化之提高代码运行性能(Preload、Network Cache、Core-js、PWA)

    文章目录 一 Preload Prefetch 1 1 为什么 1 2 是什么 1 2 1 共同点 1 2 2 区别 1 2 3 问题 1 2 4 总结 1 3 怎么样 1 3 1 安装依赖 1 3 2 配置 1 3 3 测试 二 Netw
  • python获取微信群消息_python-itchat 统计微信群、好友数量,及原始消息数据的实例...

    coding utf 8 import itchat from itchat content import TEXT from itchat content import import sys import time import re r
  • LeetCode Week 4

    LeetCode Week 4 练腿是最虐的项目 没有之一 问题集合 1 Reverse Words in a String III Easy 557 Given a string you need to reverse the order
  • 如何高效安装MindSpore的GPU版本

    作者 王磊 更多精彩分享 欢迎访问和关注 https www zhihu com people wldandan MindSpore的GPU版本以前的安装指南 只写清楚了安装依赖 但没有明确指出安装具体执行的命令 缺乏实操性 比较依赖开发者