ubuntu搭建深度學習環境

2023-04-13 21:00:38

安裝vscode

方法一:

依次輸入如下命令

1.sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make 
2.sudo apt-get update 
3.sudo apt-get install ubuntu-make 
4.umake ide visual-studio-code

可以在應用找到vscode即為成功

安裝git

1.sudo apt update
2.sudo apt install git

可以在git --version列印出版本即為成功

安裝cuda

在這裡找CUDA Toolkit Archive | NVIDIA Developer

(nvcc -V的話是查詢系統安裝的cuda版本,而nvidia-smi是檢視GPU使用情況的(也可以用來檢查驅動是否安裝成功)。nvidia-smi之所以會出現cuda version,我印象裡谷歌給的解釋是,release這個顯示卡驅動時英偉達使用的cuda版本。只需要保證nvidia-smi顯示的cuda version比nvcc -V顯示的版本高就行)

1.wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
2.sudo sh cuda_11.3.0_465.19.01_linux.run

以下這樣即為成功

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.2/
Samples:  Installed in /home/wohu/, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-10.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

多種方式驗證cuda是否安裝成功

ll /usr/local/

若看到 /usr/local/ 目錄下已經有 cuda -> /usr/local/cuda-10.2// 軟連結,則為成功

然後繼續設定cuda環境變數

開啟.bashrc並修改

sudo vi ~/.bashrc

進入檔案後使用上下左右移動鍵將遊標移動到最後一行,然後使用字母按鍵o插入一行

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}

繼而接著再插入一行

export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

最後按下esc按鍵,然後輸入:wq即可儲存

然後還要使得設定的環境變數生效,所以繼續輸入

sudo source  ~/.bashrc

如果遇到source command not found情況,可以切換到root使用者,使用sudo -s切換,然後執行source ~/.bashrc 即可成功

當一切搞定,就可以測試cuda,檢視cuda版本使用nvcc -V

解除安裝cuda

在cuda10.2裡對應torch1.7.0和torchvision0.8.1使用nvidia 3090不太行(原因:算力7.0的顯示卡可以在支援最高算力7.5的CUDA版本下執行,但是算力7.5的顯示卡不可以在支援最高算力7.0的CUDA版本下執行,同理算力8.x的顯示卡不可以在支援最高算力7.x的CUDA版本下執行),會報錯,所以此時只能升級torch版本

這裡感覺裝了兩個無用cuda版本有點難受,所以解除安裝他們

cd /usr/local/cuda-xx.x/bin/ 
sudo ./cuda-uninstaller

當下載cuda提示連線超時時,建議直接重啟電腦

胡亂解除安裝導致nvidia-smi找不到裝置了,故重新安裝nvidia驅動

首先安裝驅動前一定要更新軟體列表和安裝必要軟體、依賴(必須)

sudo apt-get update   #更新軟體列表
 
sudo apt-get install g++
 
sudo apt-get install gcc
 
sudo apt-get install make

lspci | grep -i nvidia或者ubuntu-drivers devices 檢視顯示卡型號,然後進入這個網站

https://www.nvidia.cn/Download/index.aspx?lang=cn

解除安裝原有驅動

sudo apt-get remove --purge nvidia*   # 或者nvidia-*

禁用nouveau(nouveau是通用的驅動程式)(必須)

sudo gedit /etc/modprobe.d/blacklist.conf 或者(blacklist-nouveau.conf)

在開啟的blacklist.conf末尾新增如下,儲存文字關閉

blacklist nouveau
 
options nouveau modeset=0

在終端輸入如下更新,更新結束後重啟電腦(必須)

sudo update-initramfs –u

重啟後在終端輸入如下,沒有任何輸出表示遮蔽成功

lsmod | grep nouveau

安裝lightdm,lightdm是顯示管理器,主要管理登入介面,ubuntu20.04、21.04、22.04需要自行安裝,然後上下鍵選擇lightdm即可

sudo apt-get install lightdm

為了安裝新的Nvidia驅動程式,我們需要停止當前的顯示伺服器。最簡單的方法是使用telinit命令更改為執行級別3。在終端輸入以下linux命令後,顯示伺服器將停止。(必須)

sudo telinit 3

進入黑漆漆的文字介面tty(如果進不去,就按Ctrl + Alt + F1~F6中的一個 (分別對應進入tty1~tty6)),然後輸入使用者名稱和密碼

在文字介面中,禁用X-window服務,在終端輸入(必須)

(如果是預設的gdm3顯示管理器,命令為sudo /etc/init.d/gdm3 stop)

sudo /etc/init.d/lightdm stop或者(sudo service lightdm stop)

cd命令進入到你存放驅動的目錄,輸入命令:

sudo chmod 777 NVIDIA-Linux-x86_64-430.26.run   #給你下載的驅動賦予可執行許可權,才可以安裝

sudo ./NVIDIA-Linux-x86_64-430.26.run (–no-opengl-files)   #安裝

簡潔版

sudo apt-get update   #更新軟體列表
 
sudo apt-get install g++  #安裝必要依賴
sudo apt-get install gcc
sudo apt-get install make
 
sudo apt-get remove --purge nvidia*  #解除安裝原有所有驅動(或者nviida-*)
 
sudo gedit /etc/modprobe.d/blacklist.conf   #禁用nouveau,末尾新增如下兩行命令儲存
blacklist nouveau   
options nouveau modeset=0
 
sudo update-initramfs –u   #更新
reboot   #重啟電腦
lsmod | grep nouveau   #檢查,輸入之後無其他輸出,成功,繼續
 
sudo telinit 3  #進入文字介面
sudo service gdm3 stop   #停止顯示服務
sudo chmod 777 NVIDIA-Linux-x86_64-430.26.run   #給你下載的驅動賦予可執行許可權,才可以安裝
sudo ./NVIDIA-Linux-x86_64-430.26.run    #安裝
 
sudo  service  gdm3 start   #重啟顯示服務,完成

安裝anconda

Index of /anaconda/archive/ | 清華大學開源軟體映象站 | Tsinghua Open Source Mirror

在映象源下載anconda3-5.2.0-linux-x86_64版本

然後在下載檔案位置開啟終端,執行(bash+檔名)

bash Anaconda3-2020.02-Linux-x86_64.sh

一直enter,然後兩次都yes

最後conda -v檢視conda版本即可

設定conda映象源

首先看安裝地址有沒有.condarc檔案,沒有則執行

conda config --set show_channel_urls yes

然後,如果有視覺化介面,直接使用text editor編輯負責這一段進.condarc檔案即可

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud
  msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud
  bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud
  menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud
  pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.bfsu.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud

實戰專案

接下來以實戰專案為例:fairmot的復現

首先我們去找到專案的github

遇到的第一個問題:cuda是11.4,沒有適配的torch,所以需要去安裝其他版本cuda,這裡準備降到10.2版本

多cuda版本使用

多版本cuda動態切換(舉例):
1、更改環境變數,將cuda-10.1變為cuda-9.0
sudo gedit ~/.bashrc
註釋掉原來的cuda10.1版本的環境變數,替換為cuda9.0的環境變數
export PATH="$PATH:/usr/local/cuda-9.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-9.0/lib64"
2、刪除之前的軟連線,並生成新的軟連線
sudo rm -rf /usr/local/cuda #刪除之前建立的軟連結
sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda #建立新 cuda 的軟連結

對應專案所需torch去下載

https://download.pytorch.org/whl/cu113/torch_stable.html

  • cu102:表示cuda版本為10.2,(可以直接更改這個跳轉連結)
  • torch-1.7.1:表示torch版本為1.7.1
  • cp38:表示適用python版本為3.8
  • linux:表示適用於linux系統
  • x86_64:表示同時相容32和64位元系統

然後在檔案位置命令列執行pip install +檔名 -i https://mirrors.bfsu.edu.cn/pypi/web/simple