# 源码编译方式安装Linux LuoJiaNET GPU版本 - [源码编译方式安装LuoJiaNET GPU版本](#源码编译方式安装luojianet-gpu版本) - [环境准备](#环境准备) - [安装CUDA](#安装cuda) - [安装cuDNN](#安装cudnn) - [安装Python](#安装python) - [安装wheel和setuptools](#安装wheel和setuptools) - [安装GCC、git等依赖](#安装gccgit等依赖) - [安装CMake](#安装cmake) - [安装Open MPI(可选)](#安装open-mpi可选) - [安装LLVM(可选)](#安装llvm可选) - [安装TensorRT(可选)](#安装tensorrt可选) - [从代码仓下载源码](#从代码仓下载源码) - [编译LuoJiaNET](#编译luojianet) - [安装LuoJiaNET](#安装luojianet) - [验证是否成功安装](#验证是否成功安装) 本文档介绍如何在GPU环境的Linux系统上,使用源码编译方式快速安装LuoJiaNET。下面以Ubuntu 18.04为例说明LuoJiaNET编译安装步骤。 ## 环境准备 下表列出了编译安装LuoJiaNET GPU所需的系统环境和第三方依赖。 |软件名称|版本|作用| |-|-|-| |Ubuntu|18.04|编译和运行LuoJiaNET的操作系统| |[CUDA](#安装cuda)|10.1/10.2/11.1|LuoJiaNET GPU使用的并行计算架构| |[cuDNN](#安装cudnn)|7.6.x或8.0.x|LuoJiaNET GPU使用的深度神经网络加速库| |[Python](#安装python)|3.7.x|LuoJiaNET的使用依赖Python环境| |[wheel](#安装wheel和setuptools)|0.32.0及以上|LuoJiaNET使用的Python打包工具| |[setuptools](#安装wheel和setuptools)|44.0及以上|LuoJiaNET使用的Python包管理工具| |[GCC](#安装gccgit等依赖)|7.5到9.4.0之间|用于编译LuoJiaNET的C++编译器| |[git](#安装gccgit等依赖)|-|LuoJiaNET使用的源代码管理工具| |[CMake](#安装cmake)|3.18.3及以上|编译构建LuoJiaNET的工具| |[Autoconf](#安装gccgit等依赖)|2.69及以上版本|编译构建LuoJiaNET的工具| |[Libtool](#安装gccgit等依赖)|2.4.6-29.fc30及以上版本|编译构建LuoJiaNET的工具| |[Automake](#安装gccgit等依赖)|1.15.1及以上版本|编译构建LuoJiaNET的工具| |[gmp](#安装gccgit等依赖)|6.1.2|LuoJiaNET使用的多精度算术库| |[Flex](#安装gccgit等依赖)|2.5.35及以上版本|LuoJiaNET使用的词法分析器| |[tclsh](#安装gccgit等依赖)|-|LuoJiaNET sqlite编译依赖| |[patch](#安装gccgit等依赖)|2.5及以上|LuoJiaNET使用的源代码补丁工具| |[NUMA](#安装gccgit等依赖)|2.0.11及以上|LuoJiaNET使用的非一致性内存访问库| |[Open MPI](#安装open-mpi可选)|4.0.3|LuoJiaNET使用的高性能消息传递库(可选,单机多卡/多机多卡训练需要)| |[LLVM](#安装llvm可选)|12.0.1|LuoJiaNET使用的编译器框架(可选,图算融合以及稀疏计算需要)| |[TensorRT](#安装tensorrt可选)|7.2.2|LuoJiaNET使用的高性能深度学习推理SDK(可选,Serving推理需要)| 下面给出第三方依赖的安装方法。 ### 安装CUDA & cuDNN LuoJiaNET GPU支持CUDA 10.x和CUDA 11.1。NVIDIA官方给出了多种安装方式和安装指导,详情可查看[CUDA下载页面](https://developer.nvidia.com/cuda-toolkit-archive)和[CUDA安装指南](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)。 完成CUDA的安装后,在[cuDNN页面](https://developer.nvidia.com/zh-cn/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页面](https://anaconda.org)下载Anaconda并安装 ### 安装wheel和setuptools 在安装完成Python后,使用以下命令安装。 ```bash pip install wheel pip install -U setuptools ``` ### 安装GCC、git等依赖 可以通过以下命令安装GCC,git,Autoconf,Libtool,Automake,gmp,Flex,tclsh,patch,NUMA。 ```bash sudo apt-get install gcc-7 git automake autoconf libtool libgmp-dev tcl patch libnuma-dev flex -y ``` 如果要安装更高版本的GCC,使用以下命令安装GCC 8。 ```bash sudo apt-get install gcc-8 -y ``` 或者安装GCC 9。 ```bash 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](https://cmake.org/)。 ```bash 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](https://www.open-mpi.org/)。 ```bash 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](https://llvm.org/)。 ```bash 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下载页面](https://developer.nvidia.com/nvidia-tensorrt-7x-download)下载配套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。 ```bash 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 - ``` ## 从代码仓下载源码 ```bash git clone https://github.com/WHULuoJiaTeam/luojianet.git ``` ## 编译LuoJiaNET 进入LuoJiaNET根目录,然后执行编译脚本: ```bash 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`。 - 默认从github下载依赖源码。 - 注意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()“ 后报错: ```asm 首先尝试:https://bbs.huaweicloud.com/forum.php?mod=viewthread&tid=176058&extra=&ordertype=1 中export CUDA_VISIBLE_DEVICES=0,1,2,3操作;如果失败,则检查是否以管理员权限sudo xxx 执行当前命令行窗口 ``` ## 安装LuoJiaNET ```bash 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](https://github.com/WHULuoJiaTeam/luojianet/tree/master/setup.py)中的required_package),其余情况需自行安装。运行模型时,常见依赖可以参考[requirements.txt](https://github.com/WHULuoJiaTeam/luojianet/tree/master/requirements.txt)。 ## 验证是否成功安装 方法一: ```bash python -c "import luojianet_ms;luojianet_ms.run_check()" ``` 如果输出: ```text LuoJiaNET version: 版本号 The result of multiplication calculation is correct, LuoJiaNET has been installed successfully! ``` 说明LuoJiaNET安装成功。 方法二: ```python 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)) ``` 如果输出: ```text [[[[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安装成功。