源码编译方式安装Linux LuoJiaNET GPU版本¶
本文档介绍如何在GPU环境的Linux系统上,使用源码编译方式快速安装LuoJiaNET。下面以Ubuntu 18.04为例说明LuoJiaNET编译安装步骤。
环境准备¶
下表列出了编译安装LuoJiaNET GPU所需的系统环境和第三方依赖。
软件名称 | 版本 | 作用 |
---|---|---|
Ubuntu | 18.04 | 编译和运行LuoJiaNET的操作系统 |
CUDA | 10.1/10.2/11.1 | LuoJiaNET GPU使用的并行计算架构 |
cuDNN | 7.6.x或8.0.x | LuoJiaNET GPU使用的深度神经网络加速库 |
Python | 3.7.x | LuoJiaNET的使用依赖Python环境 |
wheel | 0.32.0及以上 | LuoJiaNET使用的Python打包工具 |
setuptools | 44.0及以上 | LuoJiaNET使用的Python包管理工具 |
GCC | 7.5到9.4.0之间 | 用于编译LuoJiaNET的C++编译器 |
git | - | LuoJiaNET使用的源代码管理工具 |
CMake | 3.18.3及以上 | 编译构建LuoJiaNET的工具 |
Autoconf | 2.69及以上版本 | 编译构建LuoJiaNET的工具 |
Libtool | 2.4.6-29.fc30及以上版本 | 编译构建LuoJiaNET的工具 |
Automake | 1.15.1及以上版本 | 编译构建LuoJiaNET的工具 |
gmp | 6.1.2 | LuoJiaNET使用的多精度算术库 |
Flex | 2.5.35及以上版本 | LuoJiaNET使用的词法分析器 |
tclsh | - | LuoJiaNET sqlite编译依赖 |
patch | 2.5及以上 | LuoJiaNET使用的源代码补丁工具 |
NUMA | 2.0.11及以上 | LuoJiaNET使用的非一致性内存访问库 |
Open MPI | 4.0.3 | LuoJiaNET使用的高性能消息传递库(可选,单机多卡/多机多卡训练需要) |
LLVM | 12.0.1 | LuoJiaNET使用的编译器框架(可选,图算融合以及稀疏计算需要) |
TensorRT | 7.2.2 | LuoJiaNET使用的高性能深度学习推理SDK(可选,Serving推理需要) |
下面给出第三方依赖的安装方法。
安装CUDA & cuDNN¶
LuoJiaNET GPU支持CUDA 10.x和CUDA 11.1。NVIDIA官方给出了多种安装方式和安装指导,详情可查看CUDA下载页面和CUDA安装指南。
完成CUDA的安装后,在cuDNN页面登录并下载对应的cuDNN安装包。如果之前安装了CUDA 10.1,下载配套CUDA 10.1的cuDNN v7.6.x;如果之前安装了CUDA 11.1,下载配套CUDA 11.1的cuDNN v8.0.x。注意下载后缀名为tgz的压缩包。假设下载的cuDNN包名为cudnn.tgz
,安装的CUDA版本为11.1,执行以下命令安装cuDNN。
如果安装cudnn完成,可将如下环境变量添加至系统路径中:
export CUDNN_HOME=/usr/local/cuda export CUDA_HOME=/usr/loca/cuda export CUDA_TOOLKIT_HOME=/usr/local/cuda
安装Python¶
可进入Anaconda集成安装包在Anaconda页面下载Anaconda并安装
安装GCC、git等依赖¶
可以通过以下命令安装GCC,git,Autoconf,Libtool,Automake,gmp,Flex,tclsh,patch,NUMA。
sudo apt-get install gcc-7 git automake autoconf libtool libgmp-dev tcl patch libnuma-dev flex -y
如果要安装更高版本的GCC,使用以下命令安装GCC 8。
sudo apt-get install gcc-8 -y
或者安装GCC 9。
sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 -y
安装CMake¶
可以通过以下命令安装CMake。
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
sudo apt-get install cmake -y
安装Open MPI(可选)¶
可以通过以下命令编译安装Open MPI。
curl -O https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz
tar xzf openmpi-4.0.3.tar.gz
cd openmpi-4.0.3
./configure --prefix=/usr/local/openmpi-4.0.3
make
sudo make install
echo -e "export PATH=/usr/local/openmpi-4.0.3/bin:\$PATH" >> ~/.bashrc
echo -e "export LD_LIBRARY_PATH=/usr/local/openmpi-4.0.3/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
cd -
安装LLVM(可选)¶
可以通过以下命令安装LLVM。
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-12 main"
sudo apt-get update
sudo apt-get install llvm-12-dev -y
安装TensorRT(可选)¶
完成CUDA和cuDNN的安装后,在TensorRT下载页面下载配套CUDA 11.1的TensorRT 7.2.2,注意选择下载TAR格式的安装包。假设下载的文件名为TensorRT-7.2.2.3.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.0.tar.gz
。使用以下命令安装TensorRT。
tar xzf TensorRT-7.2.2.3.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.0.tar.gz
cd TensorRT-7.2.2.3
echo -e "export TENSORRT_HOME=$PWD" >> ~/.bashrc
echo -e "export LD_LIBRARY_PATH=\$TENSORRT_HOME/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
cd -
从代码仓下载源码¶
git clone https://github.com/WHULuoJiaTeam/luojianet.git
编译LuoJiaNET¶
进入LuoJiaNET根目录,然后执行编译脚本:
cd luojianet
bash build_gdal.sh
bash build.sh -e gpu -j 4
其中:
build_gdal.sh 用于从源码编译依赖库GDAL,需要较长时间请耐心等待
build.sh
中默认的编译线程数为8,如果编译机性能较差可能会出现编译错误,可在执行中增加-j{线程数}来减少线程数量。如bash build.sh -e gpu -j4
。默认从gitee下载依赖源码。
注意1:编译build_gdal.sh过程,出现如下错误:
error in GDAL setup command: uset_2to3 is invalid
则需要降低setuptools的版本:
pip install setuptools==57.5.0
注意2:build.sh在CUDA 11.x环境下,输入python -c “import luojianet_ms;luojianet_ms.run_check()“ 后报错:
首先尝试:https://bbs.huaweicloud.com/forum.php?mod=viewthread&tid=176058&extra=&ordertype=1
中export CUDA_VISIBLE_DEVICES=0,1,2,3操作;如果失败,则检查是否以管理员权限sudo xxx 执行当前命令行窗口
安装LuoJiaNET¶
pip install output/luojianet_gpu-*.whl
注意:如果在Python环境下验证,出现如下错误:
ImportError: libnccl.so.2: cannot open shared object file: No such file or directory
则进入LuoJiaNETMS目录,执行如下命令,将libnccl.so.2复制到/usr/lib目录下:
cp ./build/luojianet_ms/.mslib/nccl_2.7.6-1_61a836137d0a4c5c98b93dfe3a7daf0d/lib/libcudnn* /usr/lib
在联网状态下,安装LuoJiaNET时会自动下载LuoJiaNET安装包的依赖项(依赖项详情参见setup.py中的required_package),其余情况需自行安装。运行模型时,常见依赖可以参考requirements.txt。
验证是否成功安装¶
方法一:
python -c "import luojianet_ms;luojianet_ms.run_check()"
如果输出:
LuoJiaNET version: 版本号
The result of multiplication calculation is correct, LuoJiaNET has been installed successfully!
说明LuoJiaNET安装成功。
方法二:
import numpy as np
from luojianet_ms import Tensor
import luojianet_ms.ops as ops
import luojianet_ms.context as context
context.set_context(device_target="GPU")
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))
如果输出:
[[[[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.]]]]
说明LuoJiaNET安装成功。