本文记录于2021年初。不满于网络上的资料大多过时和有瑕疵,重新整理 Ubuntu 环境下配置 CUDA 开发套件的步骤。

  • 本文介绍的步骤主要面向 CUDA 相关的机器学习开发环境配置。所以它包含 CUDA、cuDNN、TensorRT、onnx。如果你不需要其中某些组件,直接跳过即可。
  • 本文涉及的版本信息:Ubuntu 18.04、CUDA 10.2、cuDNN v8.0.5、TensorRT 7.1 GA。请根据你自己的需要选择恰当的版本,唯一注意的是:这几个组件之间的版本必须严格对应,请跟自己的团队确认好版本之后再执行安装,否则会遇到很多版本兼容性问题。

C++ 和 python

C++ 编译链

sudo apt install g++
sudo snap install cmake --classic

确保安装的是最新版 cmake:https://cmake.org/download/
(我安装的时候是 3.19.1)

Anaconda

官网上下载,然后:

bash ./Anaconda3-2019.10-Linux-x86_64.sh

一路 yes,然后重启 terminal 生效

CUDA 相关底层支持

安装 CUDA 工具包

非常值得参考的官方文档:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

与网上大部分教程不同,我们无需先安装显卡驱动,cuda 包里自带驱动。

在这里下载 CUDA Toolkit 10.2 (Nov 2019) :https://developer.nvidia.com/cuda-toolkit-archive
(如果要求注册账号就注册一下,后续也会用到)

注意版本选择 CUDA 10.2

里面再选 Linux -> x86_64 -> Ubuntu -> 18.04 -> deb(local)

注释:为什么选 deb(local),不按网上其他教程选 run,因为后面安装 TensorRT 会变简单。何况有 deb 包为什么不用呢,软件管理起来都更方便。

然后按下载页面内指示安装,(2021.2.24 下面代码框内容来自官方页面的安装指南信息,可能会过期):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

完成后打上页面内提供的两个补丁。(先把这两个补丁包下载到本地,然后执行命令)

sudo dpkg -i cuda-repo-ubuntu1804-10-2-local_10.2.1-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-2-local_10.2.2-1_amd64.deb

完事重启,让显卡驱动生效。

[ IMPORTANT ! ]

参考官方文档最后的要求:Post-installation Actions

新增环境变量

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

检查 cuda 版本(确认是否安装成功):
nvcc --version

安装cuDNN

官方指引文档:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

下载地址:https://developer.nvidia.com/rdp/cudnn-download

填写问卷,同意协议后,
选择跟 CUDA 版本对应的版本: Download cuDNN v8.0.5 (November 9th, 2020), for CUDA 10.2

找到 Ubuntu18.04 的 Deb 包,这两个都要下:

cuDNN Runtime Library for Ubuntu18.04 (Deb)
cuDNN Developer Library for Ubuntu18.04 (Deb)

下载完后安装:

sudo dpkg -i libcudnn8_x.x.x-1+cudax.x_arm64.deb
sudo dpkg -i libcudnn8-dev_8.x.x.x-1+cudax.x_arm64.deb

安装 TensorRT

务必参考 Nvidia 的官方文档严格执行,否则非常多坑:https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html

下载地址:https://developer.nvidia.com/nvidia-tensorrt-download

选择 TensorRT 7 -> TensorRT 7.1 GA -> TensorRT 7.1 for Linux -> TensorRT 7.1.3.4 for Ubuntu 1804 and CUDA 10.2 DEB local repo package 下载

版本必须跟团队一致,因为 TensorRT 不提供跨版本兼容。确定版本后先设置shell变量:

os="ubuntu1804"
tag="cuda10.2-trt7.1.3.4-ga-20200617"

以上两项的参数根据你当时使用的包决定,不能有错

sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${tag}/7fa2af80.pub

sudo apt-get update
sudo apt-get install tensorrt

sudo apt-get install python3-libnvinfer-dev

其他

独立安装 onnx

(参考这篇里的onnx部分:https://zhuanlan.zhihu.com/p/158895888

git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
mkdir build && cd build
cmake ..
make -j
sudo make install

如果你的 CUDA 版本安装有误

To remove cuda toolkit:

sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"

To remove Nvidia drivers:

sudo apt-get --purge remove "*nvidia*"

Remove related pkg:

sudo apt autoremove

If you have installed via source files (assuming the default location to be /use/local) then remove it using:

sudo rm -rf /usr/local/cuda*

If you get the problem of broken packages, it has happened since you added repo to the apt/sources.lst. Run the following to delete it:

sudo vim /etc/apt/sources.list

Go to the line containing reference to Nvidia repo and comment it by appending # in front of the line, for e.g.:

# deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /

检查这个路径下有没有 CUDA 相关的 source,有就删掉,否则会干扰新版本的源:

/etc/apt/sources.list.d

Then run

sudo apt-get update