Ubuntu18.04 安裝 CUDA 配置 Pytorch 踩坑過程


最近由於項目原因,需要使用 Pytorch 進行深度學習的算法開發,於是采購了 Dell T640 服務器並搭載兩張 Nvidia 的 GeForce RTX3090 GPU,服務器本身已安裝好 Ubuntu18.04 系統和 Nvidia 顯卡驅動,要想正常使用 GPU 版的 Pytorch,后續還需要手動安裝 CUDA,Nvidia APEX 等。以下詳細介紹踩坑全過程,很多地方理解不深,懇請通過留言補充。


 

 

 

1. 關於 CUDA 版本:

配置深度學習 Pytorch 環境的大致步驟一般為:安裝 Nvidia 驅動 -> 安裝 CUDA -> 安裝 Pytorch,但在安裝好顯卡驅動后,可以通過 nvidia-smi 查詢顯卡信息,這時候如下圖所示在右上角也可以看到一個 CUDA 版本的信息 CUDA Version: 11.1

但是這時通過 nvcc --version 我查不到 CUDA 信息,也就是 nvcc --version 和 nvidia-smi 顯示的 CUDA 版本不同,這是因為 CUDA 有兩類主要的 API,一種是 Driver API,一種是 Runtime API。而這兩種 API 都有對應的 CUDA 版本,Driver API 依賴於 Nvidia Driver,由 nvidia-smi 可以查看,Runtime API 可通過 nvcc --version 查看,一般 Driver API version >= Runtime API version 即可。

  

用於支持 Driver API 的必要文件(如 libcuda.so 和 nvidia-smi)是由 GPU Driver Installer 安裝的。而用於支持 Runtime API 的必要文件(如 libcudart.so 和 nvcc)則是由 CUDA Toolkit Installer 安裝的,CUDA Toolkit Installer 有時可能會集成了 GPU Driver Installer。nvcc 是與 CUDA Toolkit 一起安裝的 CUDA compiler-driver tool,它只知道它自身構建時的 CUDA Runtime 版本,不知道安裝了什么版本的 GPU Driver,甚至不知道是否安裝了 GPU Driver。綜上,Driver API 和 Runtime API 的 CUDA 版本不一致是因為我使用的是單獨的 GPU Driver Installer,而不是 CUDA Toolkit Installer 里的 GPU Driver Installer。因此還需要單獨安裝 CUDA Toolkit 的 11.1 以下版本。

 

GPU Driver 版本、CUDA 版本和 cuDNN 版本應該相對應,一般安裝順序為:GPU Driver -> CUDA Toolkit -> cuDNN


 

 

  

2. 禁用 Nouveau 驅動:

在安裝 CUDA 前,需要通過以下命令禁用 Nouveau:

# lsmod | grep nouveau

若無內容輸出,則禁用成功,否則可通過以下操作來禁用 Nouveau:

# sudo vim /etc/modprobe.d/blacklist.conf    //打開blacklist.conf

然后插入以下語句:

blacklist nouveau
options nouveau modeset=0

然后 :wq! 保存退出,再禁用 Nouveau:

# echo options nouveau modeset=0
# sudo update-initramfs -u

 

  

 

3. 下載和安裝 CUDA Toolkit:

CUDA Toolkit 的安裝,在下載 CUDA Toolkit 的時候要注意版本應和之前安裝的顯卡驅動版本相兼容匹配,可通過官方文檔查看

由於之前已安裝的 GPU Driver 版本為 455.23,而 CUDA Driver API 的版本為 11.1,需要滿足 GPU Driver -> CUDA Toolkit,結合上圖顯卡版本要求,最終選定安裝 CUDA Toolkit 11.0。

 

安裝方式有 runfile 和 deb 兩種,這里我嘗試的是 runfile 方法,前往官網一步步選擇,如下圖所示:

選擇好之后在下面官方推薦可以直接在命令行用 wget 進行下載,然后安裝:

$ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run
$ sudo sh cuda_11.0.2_450.51.05_linux.run

但如果 wget 相對瀏覽器直接下載慢太多的話也可以直接 copy 這個網址到瀏覽器直接下載,再傳到服務器,然后執行第二句進行安裝。安裝的時候記得不要再選擇安裝 GPU Driver 了,其余都選 yes 即可。另外,如果需要卸載 CUDA Toolkit,需要在 /usr/local/cuda-11.0/bin 目錄中找到並運行 cuda-uninstaller:

$ sudo /usr/local/cuda-11.0/bin/cuda-uninstaller
$ sudo rm -rf /usr/local/cuda-11.0/

如果需要卸載 GPU Driver 重新安裝:

$ sudo /usr/bin/nvidia-uninstall

 

 

 

4. 設置環境變量:

上述安裝完成之后還需要添加環境變量,具體操作就是打開 .bashrc 文件插入兩行環境變量,首先用 vim 打開 .bashrc 文件,這個文件在 ~ 目錄下:

$ vim ~/.bashrc

然后按 i 進入 vim 的編輯模式進行插入,在最后插入兩行環境變量:

export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"

然后按 esc 退出編輯模式,在按 :wq! 回車保存退出,然后執行:

$ source ~/.bashrc

完成環境變量配置。


 

 

 

5. 測試:

至此 CUDA Toolkit 已經完全安裝完成,現在可以測試一下:

$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ sudo make
$ ./deviceQuery

輸出以下內容則證明安裝成功:


 

 

 

6. CUDA 多版本管理:

CUDA Toolkit 默認安裝在 /usr/local ,可以使用 ls -l /usr/local | grep cuda 查看該目錄下有哪些 CUDA 版本,如下圖所示:

上圖輸出表示當前系統安裝了CUDA Toolkit 10.2 和 11.0 兩個版本,這是因為剛開始的時候我安裝了 10.2,后面發現與 Pytorch 還有 Nvidia apex 混合精度運算庫匹配有問題,所以又直接多裝了一個 11.0,而原來的 10.2 並沒有卸載。

 

其中 cuda -> /usr/local/cuda-11.0 是一個軟鏈接,將 /usr/local/cuda 鏈接到了 /usr/local/cuda-11.0 目錄,表示當前系統使用的是 cuda-11.0 版本,如果想在已安裝的 cuda 中進行版本更改,則刪除當前軟鏈接,然后重新建立軟鏈接指向想要的版本,最后修改環境變量與想要修改的版本一致即可,例如想改用 10.2:

$ sudo rm -rf cuda
$ sudo ln -s /usr/local/cuda-10.2 /usr/local/cuda

記得修改環境變量,或者,可以將 ~/.bashrc 中環境變量的 /usr/local/cuda-11.0/ 全都改成 /usr/local/cuda/ ,之后再切換 CUDA 版本的時候就不再需要修改環境變量了。


 

 

 

7. Pytorch 安裝:

CUDA Toolkit 安裝好之后,就可以安裝 Pytorch 的 GPU 版本了:

直接用 pip 安裝非常慢,可以更換 pip 源為國內的阿里雲源:

$ mkdir -p ~/.pip
$ touch ~/.pip/pip.conf
$ vim ~/.pip/pip.conf

插入如下語句:

[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

以上為 Ubuntu 系統,如果是 win10:

先打開文件資源管理器,然后在路徑那里輸入:%APPDATA%,如下圖所示:

 

然后新建一個 pip 目錄並新建一個文件 pip.ini,然后輸入以下內容:

[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/

 

注意,無論是用 pip 還是 pip3,都是按上述流程,創建的都是 pip 文件夾。安裝完成之后可以通過以下方式查看當前 Pytorch 使用的 CUDA 版本:

import torch
print(torch.version.cuda)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM