計算機視覺2-> 深度學習 | anaconda+cuda+pytorch環境配置

climerecho發表於2022-01-14

 

00 想說的

深度學習的環境我配置了兩個階段,暑假的時候在一個主攻視覺的實驗室幹活,閒暇時候就順手想給自己的Ubuntu1804配置一個深度學習的環境。這會兒配到了anaconda+pytorch+cuda,但是記憶裡是顯示卡始終配不好。

1 torch.cuda.is_available()
2 >> False
3 # 表示顯示卡不配套

當時我以為就崩了。

確實是崩了,應該是navigator出現了一些問題。

事實上根據後續的回憶,是當時的自己對這些東西沒有一個清楚的認識,pytorch裝好就開始配顯示卡,然後anaconda跟pytorch不匹配;顯示卡本身雖然麻煩但是也不至於崩。

後來

另一個階段就是2021年年末,在西安疫情封校的這段時間,沒課沒考試,所以繼續配置deep learning的環境。這一階段主要是搞顯示卡的事情。於12月30號配好。

這篇記錄寫出來不會那麼容易

  1. 因為暑假的時候沒有具體寫自己的記錄,只記錄了follow的教程;

  2. 而年末配好的時候,因為長出一口氣也沒有來做記錄這件事情。

  3. 過程中反覆做的事情很多,中間甚至刪了一些東西。我在寫到這裡時不敢說自己就能完成這篇總結。

    我儘量回憶出一個邏輯清晰的鏈條。

但還是要做這件事情的,

  1. 是加深一下對相關概念的理解,

  2. 是給自己後續重灌系統或者換電腦提供一個親身體驗的參考。

  3. 會帶有一些記錄性質,同時保持教程的可用性。

01 思路概覽

01-1 關係

pytorch是深度學習的框架,在python中以一個包的形式進入程式設計。

anaconda是python的發行版;

cuda是N卡的一種計算架構,不同的N卡版本對應不同的CUDA版本。

01-2 難點

N卡、Cuda、anaconda、pytorch各個環節的版本適配問題。

01-3 思路

現在想想,其實兩個階段做了很多無用功,主要思路應該是:

  1. python

    (對於深度學習步驟來說非必須的步驟,因為第二步包含了第一步)

    雖然Ubuntu上會自帶python,但是18.04上是2.7和3.5(預設使用2.7),有時候會不符合自己的要求。

    1 # 檢視自帶版本
    2 python2 --version
    3 python3 --version

    若符合,此步略過;

    若不符合,動手

    1. 將python版本指向3版本

    2. 安裝更高階的python(如3.9)

    若後續發現python不合適,仍跳回這一步。

    ps:anaconda是python的一個發行版本,有管理工具conda,所以安裝anaconda不需要額外安裝python;這裡主要是說python版本的事情。

  2. Anaconda

    這步比較常規,按照教程做就可以,留意的點是注意anaconda3的包很大,注意給自己的系統預留12G以上的空間。

    1 #檢視anaconda版本
    2 conda -v
  3. 顯示卡

    深度學習在CPU上也可以跑,但是在GPU上跑得更快。所以呼叫英偉達的顯示卡也是必要的。

  4. cuda

    2022-0114補充:

    cuda和顯示卡是要互相配套的,互相決定對方的版本。

    我們可以先到pytorch上看一下我們想下什麼版本的pytorch。比如:

    所以這裡我們決定安裝cuda10.2,並據此決定顯示卡驅動的版本。

  5. pytorch

    在pytorch官網直接下載,即可大功告成。

下面是我的配置經驗。

0113 再記錄:

由於學習真空期確實比較閒,在windows10下又配置了一遍,感覺windows比ubuntu好配置一點,也有可能是已經有了一些環境基礎(pycharm+各種包),加之已經過了一遍整個過程,所以比較快。

02 Anaconda

python跳過,我們來談Anaconda,我主要的參考:

  1. https://blog.csdn.net/qq_15192373/article/details/81091098

  2. https://blog.csdn.net/guolindonggld/article/details/82595473

02-1 簡單瞭解

Anaconda是Python的一個開源發行版本,主要面向科學計算。我們可以簡單理解為,Anaconda是一個預裝了很多我們用的到或用不到的第三方庫的Python。

而且相比於已經熟悉的pip install命令,Anaconda中增加了conda install命令,而後者在該平臺下更為方便。

另外還有一個優點是它可以指定任意版本的Python(實際上Pycharm上也可以,只不過是智慧切換PythonProject下的python版本,就在頁面左下角)

02-2 安裝

02-2-1 .sh檔案

我們使用wget下載Anaconda的sh檔案,

有關wget命令:

wget是一個下載檔案的工具,它用在命令列下。對於Linux使用者是必不可少的工具,我們經常要下載一些軟體或從遠端伺服器恢復備份到本地伺服器。

1 wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh # 官網 如果網路一般,下載較慢
2 # 這裡我使用的是第一種官網下載,網路良好,下的還比較快
3 wget https://mirrors.ustc.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh # 中科大   在中科大源下載

同理其實也可以在其他源下載sh檔案,這個並不關鍵。

mark一下清華源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

後面在裝pytorch的時候,我還會提到這個換源下載的好處:快。

02-2-2 環境變數

開啟終端:

1 echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc
2 # 將anaconda的bin寫入環境變數

02-2-3 sh檔案安裝

在放置anaconda的目錄下,比如你放在下面這個主目錄下:

就在這裡開啟終端,執行sh檔案

1 bash Anaconda3-5.3.1-Linux-x86_64.sh
2 #  一路yes enter即可,不過每一步注意看資訊的反饋。
3 4 #如果不想輸入yes enter之類的,嘗試以下命令:
5 bash Anaconda3-5.2.0-Linux-x86_64.sh -b -u

看到下列資訊即為安裝完成:

在最後的問題“Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]”,輸入no;

這表示不要重複安裝VSCode(預設讀者不需要或者已安裝)

02-2-4 重新整理

關閉終端,重啟一個終端

 source ./bashrc 

測試python

 python

如果仍然顯示ubuntu自帶的python版本,我們執行:

1 sudo gedit ~/.bashrc
2 export PATH="/home/xupp/anaconda3/bin:$PATH"
3 source ~/.bashrc

02-3 使用

02-3-1 conda命令

Anaconda有很多使用技巧,基礎的、進階的都有;但是我沒怎麼探索,畢竟這個用用就上手了。

 1 conda create -n python369 python=3.6.9
 2 # 建立一個Python 3.6.9版本的環境
 3 conda create -n example --clone base 
 4 # 直接Copy跟Base一樣的環境
 5 conda env remove -n python369
 6 # 刪除指定環境
 7 conda activate python369
 8 # 啟用指定環境
 9 conda remove -n python369 pandas 
10 # 刪除指定環境的指定包

02-3-2 常用庫的安裝

另外附上anaconda的安裝包的問題:

對於python的正常使用,我們需要numpy、matplotlib、pandas等庫,所以我們需要安裝一下這些庫:

 1 #於2022-0109記錄
 2 conda install numpy
 3 # 含有numpy的語句可以使用了
 4 conda install pandas,
 5  6 # 這之後pandas和matplotlib以及sys就都能用了
 7 # 我疑心直接install pandas,numpy也可以使用了
 8  9 import d2lzh_pytorch as d2l
10 # 這個語句也可以用了。

02-4 關於適配問題

希望大家不要遇到我這樣的問題。但我還是要記錄一下:

我現在的Ubuntu18.04下是沒有anaconda-navigator的,我在終端輸入

1 anaconda-navigator

是沒有反應的,這才發覺我在暑假遇到的問題是什麼,那就是python等各個版本與這個模組的不相容,當時我從那考各個教程都沒有什麼結果,於是一狠心就把這個包給刪掉了,jupyter notebook還能正常使用。

至於怎麼一個不相容,大家可以看一下我重新執行

1 conda update anaconda-navigator

語句產生的結果:

可以看到python版本有一個降級,這點我也不甚明瞭,但是後面的東西我都配好了,所以我先就維持原狀了,不配置navigator了。

PS:

大家如果出現了這個問題,可以在這一步就調整一下自己的python版本,anaconda的每一個虛擬分支都是可以指定python版本的。然後再進行後面的安裝。保證各個環節的匹配,從而避免我的問題。

如果哪天重灌,或者升級系統,自己或許會再操作一下這個部分。

02-5 測試

在終端輸入

1 jupyter notebook

就會彈出jupyter notebook的視窗,進行程式設計。

具體使用可以參見:

https://www.zhihu.com/question/46309360/answer/254638807

進階用法:

https://www.zhihu.com/question/46309360/answer/742984819

這個文章寫的已經很詳細了。用法也沒必要特意總結。

(或者哪天有了自己的東西,我也要寫[doge])

03 CUDA

如果著急安裝可以直接跳轉到03-2

03-1 CUDA是什麼?

CUDA(Compute Unified Device Architecture),是一種由NVIDIA推出的通用平行計算架構(注意並不是N卡驅動本身),該架構使GPU能夠解決複雜的計算問題。

簡單來講cuda是n卡的加速器。

包含:

  1. CUDA指令集架構(ISA

  2. GPU內部的平行計算引擎

我們可以使用C語言來為CUDA架構編寫程式,所編寫出的程式可以在支援CUDA的處理器上以超高效能執行。從CUDA3.0開始已經支援C++和FORTRAN。

利用CUDA,我們可以進行多執行緒程式設計。這也是今天計算機組成與系統結構老師提到的提高程式效能的一種方法。

03-2 安裝

03-2-1 準備1 | 支援CUDA

不是每一個電腦都能安裝CUDA的,我們首先需要檢視一下自己的電腦是否支援CUDA加速。

可以通過命令列:

lspci | grep -i nvidia
# 檢視電腦顯示卡資訊
ubuntu-drivers devices
# 查詢對應的驅動程式
nvidia-smi
# 如果知道是N卡,可以直接這個命令,顯示具體顯示卡型號
# 但不同電腦情況不同,比如你的電腦現在還不是N卡驅動,這個命令就不會生效

03-2-2 準備2 | gcc

cuda依賴c語言,所以檢查自己的系統是否已經有gcc。

 gcc -v
 # 若沒有
 sudo apt-get install gcc

03-2-3 N卡驅動安裝/更新

然後就是裝驅動/更新驅動,這裡驅動與CUDA是有一個配套情況的,高版本的CUDA是需要高版本的N卡驅動的。

cuda官網檢視版本適配情況:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#title-resolved-issues

 

  這裡我推薦大家使用450以上的驅動版本。

也要根據ubuntu-drivers devices推薦(recommended)的版本進行安裝。

分兩種情況:

  1. 如果你的ubuntu-drivers devices命令中顯示了有450以上的版本:

    那就直接開啟軟體與更新,進行更換:

  2. 如果沒有,需要安裝N卡驅動

    1 sudo apt-get install nvidia-driver-450
    2 sudo apt update
    3 4 # 或者
    5 sudo add-apt-repository ppa:graphics-drivers/ppa
    6 sudo apt update
    7 sudo ubuntu-drivers autoinstall
    8 sudo apt update

03-2-4 CUDA安裝

CUDA安裝有兩種方法,我應用的是第一種:

1 sudo apt install nvidia-cuda-toolki
2 # 地址在/usr/include和/usr/lib/cuda/lib64
3 # 自動安裝的是9.1版本,大家可以嘗試一下,如果後續適配方面不好,就在這一步採取第二種做法,手動官網安裝

第二種辦法是在官網或者映象源下載。

官網:https://developer.nvidia.com/zh-cn/cuda-toolkit

右上角->下載->CUDA->立即下載:

然後根據頁面指示做即可。CUDA官網的教程相當友好。

例如deb本地下載:

 1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
 2  3 sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
 4  5 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb
 6  7 sudo dpkg -i cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb
 8  9 sudo apt-key add /var/cuda-repo-ubuntu1804-11-6-local/7fa2af80.pub
10 11 sudo apt-get update
12 13 sudo apt-get -y install cuda

deb聯網下載:

 1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
 2  3 sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
 4  5 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
 6  7 sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
 8  9 sudo apt-get update
10 11 sudo apt-get -y install cuda

03-2-5 呼叫路徑

開啟終端輸入

1 sudo gedit /etc/profile

在文末加入以下三行

1 export CUDA_HOME=/usr/local/cuda-<version>
2 3 export PATH=/usr/local/cuda-<version>/bin${PATH:+:${PATH}}
4 5 exportLD_LIBRARY_PATH=/usr/local/cuda-<version>/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
6 7 # 需要根據自己的版本進行配置
8 source ~/.bashrc

03-3 測試

1 nvcc -v
2 # 檢視cuda版本
3 # CUDA Runtime API

1 nvidia-smi
2 # 此時應該都能開啟這個命令了
3 #  CUDA Driver API

PS:關於為什麼兩個地方的cuda版本不一樣?

在安裝CUDA 時候會安裝3大元件,分別是

  1. cuda 驅動程式

    用來控制 GPU 硬體

  2. toolkit cuda工具包

    包括nvcc編譯器等

  3. samples

    CUDA軟體開發包程式碼例項

    包括很多樣例程式包括查詢裝置、頻寬測試等等

理論上安裝完驅動以後只需要安裝CUDA toolkit就可以保證CUDA相關的程式執行。這也是03-2-4的命令列的意思。

上面說的 CUDA Driver API是依賴於 NVIDIA 驅動 安裝的;表示驅動所能支援的最大執行API版本。我的情況是11.0。

而CUDA Runtime API 是通過CUDA toolkit 安裝的。這就是我們一般所說的CUDA版本。

但是為什麼我們的cuda版本會比下面的pytorch適配的低,還能正常執行呢?

裝了Anaconda之後Anaconda也會提供一個cudatoolkit工具包,同樣包含了CUDA的執行API,可以用來替代官方CUDA的CUDA Toolkit。這也就是為什麼有時候我們通過nvcc-V檢視的cuda版本很低(比如9.1),但是能成功執行cuda10.2的pytorch的原因。

本部分主要參考:

https://zhuanlan.zhihu.com/p/396344997

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/

https://blog.csdn.net/ljp1919/article/details/102640512

04 PyTorch

04-1 安裝

進入pytorch官網https://pytorch.org/

從上面可以看到自己的cuda是9.1,

而pytroch官網已經是10+了

我們繼續:

實際上這並不影響,我現在用的是好的,沒有出現不適配的現象。(原因上一部分的末尾我有說明)。

大家可以在上一步就安裝與此步完全適配的cuda。

我們看到下面Run this Command:

1 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

但是根據我在windows下配置的經歷,這一步可能會很慢(ubuntu網路配置的好的話可能沒問題,我當時應該是官網直接下載)。所以建議如下命令:

1 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch -i https://pypi.tuna.tsinghua.edu.cn/simple

意思是優先從清華源下載相關包。

在Windows下這樣執行下載速度極快。

04-2 測試

1 conda list | grep torch
2 # 安裝的pytorch及其版本號

下面測試顯示卡、cuda等的適配情況

1 jupyter notebook

輸入:

import torch 
torch.cuda.is_available()

若返回True,則一切正常,大功告成。

若返回Flase,則為顯示卡驅動,cuda,pytorch不匹配

很可能是cuda版本高,顯示卡驅動版本低。重新檢查一下03部分的內容是否出錯。事實上照著以上思路走下來,出現問題概率不大。畢竟我又在window也配了一遍了。



相關文章