需求:
已經安裝 Ubuntu 20.04 or 18.04
目標:
1. 安裝 Nvidia driver
清除原有的nvidia driver (如果你有的話)
sudo apt-get purge nvidia*
加入顯卡 ppa
sudo add-apt-repository ppa:graphics-drivers
package 更新
sudo apt-get update
sudo apt upgrade
Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
找出目前支援的GPU driver 版本
ubuntu-drivers list
安裝 nvidia driver
sudo apt install nvidia-driver-VERSION_NUMBER_HERE
我目前 (2021/7) 使用 460 版本
sudo apt install nvidia-driver-460
安裝完後重啟
sudo reboot
檢查是否安裝成功
nvidia-smi
2. 安裝 CUDA 11.2.2
https://developer.nvidia.com/cuda-toolkit-archive
從官網安裝指定版本,選用 linux、ubuntu、18.04、runfile(local)
如果想要安裝 tensorflow 2.5 以下版本請選用 CUDA Toolkit 11.0 Update1
wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.runsudo sh cuda_11.2.2_460.32.03_linux.run
如果已經安裝好了顯卡驅動,在執行上就選擇不安裝 cuda 提供的顯卡驅動程式
因為沒有選擇安裝 nvidia driver,會出現警告資訊,可以不用理會
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 460.00 is required for CUDA 11.2 functionality to work.
在 /home/<user_name> 底下的 .bashrc 檔案最下方新增並儲存
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
重新開啟 terminal 或使用
source ~/.bashrc
更新 terminal 環境,之後檢查 cuda 版本
nvcc -V
正確會顯示
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_14_21:12:58_PST_2021
Cuda compilation tools, release 11.2, V11.2.152
Build cuda_11.2.r11.2/compiler.29618528_0
3. 安裝 cuDNN
先登入 nvidia cudnn 安裝官網,註冊並同意使用者條款,選擇 ubuntu18.04 版本安裝 cudnn下載。
https://developer.nvidia.com/rdp/cudnn-download
安裝方法分成兩種
(1)tar file 安裝
下載 cuDNN Library for Linux,是一個壓縮檔 tar ,要將其內容解壓縮複製到安裝 cuda 的資料夾內
解壓縮
tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz
複製檔案,貼到安裝 cuda 的資料夾內
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
(2)deb file 安裝
下載以下三個檔案
cuDNN Runtime Library for Ubuntu18.04 (Deb)
cuDNN Developer Library for Ubuntu18.04 (Deb)
cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)
使用 dpkg -i <file_name> 執行安裝
安裝 cuDNN runtime library
sudo dpkg -i libcudnn8_8.2.1.32–1+cuda11.3_amd64.deb
會看到出現
/sbin/ldconfig.real: /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link
安裝 cuDNN developer library
sudo dpkg -i libcudnn8-devel_8.2.1.32–1+cuda11.3_amd64.deb
安裝 cuDNN sample 和 user guide
sudo dpkg -i libcudnn8-doc_8.2.1.32–1+cuda11.3_amd64.deb
測試 cuDNN 是否正確安裝,在原先 cuDNN 檔案下載位置使用
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
執行完看到 Test passed! 表示成功安裝
FreeImage.h: No such file or directory
4. 安裝虛擬環境
可以選擇使用 virtualenv 或是 Anaconda,推薦在 ubuntu 上可以使用比較輕量的 virtualenv
(1)virtualenv 安裝
安裝 virtualenv
sudo apt-get install python3-pip
sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper
在 /home/<user_name> 底下的 .bashrc 檔案最下方新增並儲存
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=<python3_path>
source /usr/local/bin/virtualenvwrapper.sh
<python3_path> 可以使用
which python3
找到你的 python3 執行檔案位置,一般會在
/usr/bin/python3
完成後開啟新的一個 terminal,或是使用
source ~/.bashrc
更新 terminal 環境
創造新的虛擬環境
mkvirtualenv <venv_name>
之後也可以用 workon 啟動已經存在的虛擬環境
workon <venv_name>
(2)Anaconda 安裝
選擇個人版本的 anaconda 下載
確定使用的是有 sudo 權限的 user 來安裝 anaconda
bash Anaconda3–2021.05-Linux-x86_64.sh
一路 enter 到最底選 yes
Do you approve the license terms? [yes|no]
同意使用 conda 進行安裝
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/fishworm/.bashrc ? [yes|no]
安裝完成後,檢查安裝內容
conda list
anaconda 創造虛擬環境
conda create --name <venv_name> python3 numpy
啟動 conda 虛擬環境
conda activate <venv_name>
5. 安裝 pytorch
啟動虛擬環境
找到 stable for linux ,選擇對應的 cuda 版本
以下是以 anaconda 為虛擬環境的執行碼
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c nvidia
執行後自動下載安裝
測試是否正確安裝,啟動 python 輸入
>>> import torch
>>> torch.cuda.is_available()
True
輸出 True 代表正確安裝
6. 安裝 tensorflow
啟動虛擬環境,安裝 tensorflow
pip install tensorflow
pip 目前 (2021/7) 所安裝的 tensorflow 2.5 本身就包含了 gpu 功能
測試是否正確安裝,啟動 python 輸入
>>> import tensorflow as tf
>>> physical_devices = tf.config.list_physical_devices('GPU')
>>> print("Num GPUs:", len(physical_devices))
Num GPUs:1
正確的話以上程序會顯示你所擁有的 gpu 數量
7. 安裝 TensorRT
目前 (2022/3) TensorRT 8.2 GA 支援 CUDA
10.2
11.0 update 1
11.1 update 1
11.2 update 2
11.3 update 1
11.4 update 3
11.5 update 1
11.6
想要使用 TensorRT python API 需要安裝 pycuda
注意 pycuda 需要在已經安裝完 CUDA 和 numpy 後才安裝
python3 -m pip install 'pycuda<2021.1'
如果出現 nvcc not in path 錯誤,去 ~/.bashrc 下添加
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_ROOT=$CUDA_ROOT:/usr/local/cuda/
找到 TensorRT 下載位置
https://developer.nvidia.com/nvidia-tensorrt-download
可以選擇用 deb or tar 的方式安裝,在此選用 tar 方式,下載後解壓縮
version="8.x.x.x"
arch=$(uname -m)
cuda="cuda-x.x"
cudnn="cudnn8.x"
tar -xzvf TensorRT-${version}.Linux.${arch}-gnu.${cuda}.${cudnn}.tar.gz
對我而言是
tar -zxvf TensorRT-8.2.3.0.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
在 ~/.bashrc 內加上 TensorRT 解壓縮後的位置
gedit ~/.bashrc
到最後一行加上
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>
我個人解壓縮位置選在 $HOME
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/TensorRT-8.2.3.0/lib
啟動虛擬環境後安裝 Python TensorRT wheel file
以下所有安裝都是處於虛擬環境之下
workon <env_name>
cd TensorRT-${version}/python
使用 python3.x
pip3 install tensorrt-*-cp3x-none-linux_x86_64.whl
選用的版本 cp3x 的 x 對應你的 python3 版本
安裝 Python UFF wheel file,只有要使用 tensorflow + TensorRT 的人才需要
cd TensorRT-${version}/uff
pip3 install uff-0.6.9-py2.py3-none-any.whl
檢查安裝
which convert-to-uff
安裝 Python graphsurgeon wheel file
cd TensorRT-${version}/graphsurgeon
pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl
安裝 Python onnx-graphsurgeon wheel file
cd TensorRT-${version}/onnx_graphsurgeon
pip3 install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
確認是否安裝成功,啟動 python 輸入
import pycuda
import tensorrtimport tensorflow
from tensorflow.python.compiler.tensorrt import trt_convert as trt
測試是否正確安裝可以使用 sampleMNIST 做測試
8. 安裝 mxnet & nccl
從 mxnet 1.8+cu112 之後開始,mxnet 需要安裝 nccl 模組才能正確執行
沒有安裝 nccl 在嘗試 import mxnet 時會出現
OSError: libnccl.so.2: cannot open shared object file: No such file or directory
安裝 nccl 可以選擇兩種方法
(1)從網路上下載
wget https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/cuda-<distro>.pinsudo mv cuda-<distro>.pin /etc/apt/preferences.d/cuda-repository-pin-600
<distro> 是 OS 版本,例如 ubuntu1604、ubuntu1804、ubuntu2004
<architecture> 是 CPU 架構,例如 x86_64、ppc64le、sbsa
加入 apt-key,並更新
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/7fa2af80.pubsudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/ /"sudo apt-get update
(2)下載 deb 檔
需要先註冊
https://developer.nvidia.com/nccl/nccl-download
選擇指定版本下載,並安裝
sudo dpkg -i nccl-repo-<version>.deb
完成以上兩種方法的任一種之後,執行以下命令安裝 nccl
sudo apt install libnccl2=<nccl_version>+<cuda_version> libnccl-dev=<nccl_version>+<cuda_version>
再安裝 mxnet 支援 cuda 11.2 版本
pip install mxnet-cu112
測試安裝是否成功
>>> import mxnet as mx
>>> a = mx.nd.ones((2, 3), mx.gpu())
>>> b = a * 2 + 1
>>> b.asnumpy()
array([[ 3., 3., 3.],
[ 3., 3., 3.]], dtype=float32)
參考:
https://www.mvps.net/docs/install-nvidia-drivers-ubuntu-18-04-lts-bionic-beaver-linux/
https://www.digitalocean.com/community/tutorials/how-to-install-anaconda-on-ubuntu-18-04-quickstart
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
https://docs.nvidia.com/deeplearning/nccl/install-guide/
解決 libcudnn.so.8 is not a symbolic link 警告
這是因為在 copy cudnn file 時失去了 symlink 而產生
cd /usr/local/cuda/lib64
ls -lha libcudnn*
理論上應該要是
lrwxrwxrwx 1 root root 13 三 13 15:37 libcudnn.so -> libcudnn.so.8
lrwxrwxrwx 1 root root 17 三 13 15:37 libcudnn.so.8 -> libcudnn.so.8.2.1
-rwxr-xr-x 1 root root 439M 三 13 10:26 libcudnn.so.8.2.1
-rw-r — r — 1 root root 413M 三 13 10:26 libcudnn_static.a
實際上我的內容是
-rwxr-xr-x 1 root root 439M 三 13 10:26 libcudnn.so
-rwxr-xr-x 1 root root 439M 三 13 10:26 libcudnn.so.8
-rwxr-xr-x 1 root root 439M 三 13 10:26 libcudnn.so.8.2.1
-rw-r — r — 1 root root 413M 三 13 10:26 libcudnn_static.a
連結喪失,需要重新連結
sudo ln -sf libcudnn.so.8.2.1 libcudnn.so.8
sudo ln -sf libcudnn.so.8 libcudnn.so
依此類推所有 libcudnn 的檔案
全部連結後執行刷新
sudo ldconfig
如果沒有出現 … is not a symbolic link 表示解決問題!
以下是各種遇到的各種 Bug
Bug 1: 無法進行更新
E: Could not get lock /var/lib/dpkg/lock — open (11: Resource temporarily unavailable)E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
遇到上述狀況表示有檔案被鎖住,檢查有甚麼檔案在運行
方法一
用 APT package management tool 檢查 Ubuntu Software Center
或 Synaptic Package Manager有無正在運行的程式
或用Linux command line找出正在使用apt-get的行動,並停止它
ps aux | grep -i apt
上述會顯示id號碼
sudo kill -9 <process id>
或是全部刪除
sudo killall apt apt-get
方法二
因為突然斷網或關機,導致更新到一半的程式被鎖住,此時不會有運行id但仍產生錯誤,因為有了lock file
lock file是為了避免檔案同時被多個程式存取,apt-get運行時會產生lockfile,若沒有正常關閉則lockfile無法消失,並阻擋安裝
用 lsof 檢查有無lockfile
lsof /var/lib/dpkg/lock
lsof /var/lib/apt/lists/lock
lsof /var/cache/apt/archives/lock
回傳的單一數值就是之前運行lockfille的執行號碼,刪除他(PID是號碼)
sudo kill -9 PID
再刪除lockfile
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
重新配置packages
sudo dpkg — configure -a
若仍有錯誤會出現
“dpkg: error: dpkg frontend is locked by another process”
使用額外步驟,找出保有lockfile的執行號碼
lsof /var/lib/dpkg/lock-frontend
刪除他
sudo kill -9 PID
移除lockfile並再試一次
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg — configure -a
Bug 2: CUDA 安裝失敗,移除步驟
移除 CUDA
sudo apt-get remove nvidia-cuda-toolkit
移除cuda和關聯檔案
sudo apt-get remove — auto-remove nvidia-cuda-toolkit
徹底清除資料
sudo apt-get purge nvidia-cuda-toolkit or sudo apt-get purge — auto-remove nvidia-cuda-toolkit
Bug 3: cuDNN 驗證失敗
. ubuntu@ubuntu:$ ./mnistCUDNN
cudnnGetVersion() : 7003 , CUDNN_VERSION from cudnn.h : 7003 (7.0.3)
Cuda failurer version : GCC 5.4.0
Error: CUDA driver version is insufficient for CUDA runtime version
error_util.h:93
Aborting…
根據
https://devtalk.nvidia.com/default/topic/1025828/cudnn/failed-cudnn-test-mnistcudnn-/1
表示重新開機一次就成功了
Bug 4:FreeImage.h: No such file or directory
cudnn 驗證用的 smaple code 需要安裝 FreeImage,使用
sudo apt-get install libfreeimage3 libfreeimage-dev
完成安裝