問題描述
已經(jīng)安裝CUDA與Pytorch。但執(zhí)行如下Python腳本,輸出結(jié)果為False:
import torch print(torch.cuda.is_available())
出現(xiàn)這個問題的原因很多,很多文章的分析并不全面。博主遇到這個問題時,也是不斷整合網(wǎng)絡(luò)上零零散散的信息,浪費了不少功夫,因此寫下了本文。如果你也遇到了這個問題,本文致力于幫助你通過這一篇文章解決這一問題。如果本篇文章對你有幫助,希望能點贊鼓勵一下。
注意,本文解決的問題是,import torch不報錯,但Pytorch與cuda沒有正確匹配上。如果你的import torch報錯,說明你沒有正確安裝Pytorch,請參考這一鏈接,安裝合適的Pytorch版本。
為了方便說明,本文以CUDA 10.2與PyTorch 1.11.0(GPU版本)為例。
總覽:導(dǎo)致問題的原因
導(dǎo)致這一問題的原因主要分為如下四個方面,在這里先作總結(jié),具體方法在之后展開。有經(jīng)驗的同學(xué)可以直接根據(jù)本節(jié)進(jìn)行快速排查,以提高效率。
- CUDA版本與驅(qū)動程序不兼容:CUDA版本需與GPU驅(qū)動程序兼容。
- CUDA庫的路徑設(shè)置存在問題:如果CUDA庫路徑未正確配置,PyTorch將無法找到CUDA庫文件。
- PyTorch版本與CUDA版本不匹配:安裝的PyTorch版本需與CUDA版本匹配。
- 編譯問題:如果使用預(yù)編譯的PyTorch二進(jìn)制文件,可能存在與CUDA版本不匹配的問題。
- 沖突:可能存在其他軟件包或庫與PyTorch或CUDA發(fā)生沖突。
絕大多數(shù)的問題都可以通過前三步解決。
請按照1-5的順序排查,直至問題解決。
可能1:CUDA版本與驅(qū)動程序不兼容
驅(qū)動程序與CUDA的兼容,指的是GPU驅(qū)動程序與安裝的CUDA版本相匹配,并且能夠正確地與CUDA庫進(jìn)行通信和協(xié)作??梢园凑杖缦虏襟E排查二者是否兼容:
1. 查看CUDA版本。
在終端輸入如下指令:

或者:
cat /usr/local/cuda/version.txt
例如,我的CUDA版本是10.2。
2. 查看GPU驅(qū)動程序版本。
在終端輸入如下指令:
nvidia-smi
找到第一行的Driver Version,例如我的是440.44。
3. 檢查二者是否兼容。
驅(qū)動程序與CUDA的兼容性是非常重要的,因為PyTorch和其他基于CUDA的庫需要與GPU驅(qū)動程序進(jìn)行交互才能正確運行。如果驅(qū)動程序與CUDA不兼容,可能會導(dǎo)致無法正常使用CUDA功能或出現(xiàn)錯誤。
檢查上述二者的版本,確保二者是匹配的。例如,CUDA 10.2對應(yīng)的推薦驅(qū)動程序版本為NVIDIA驅(qū)動程序版本440.33或更高版本,我的版本是440.44,因此兼容。
CUDA版本與GPU驅(qū)動的兼容性表格(Linux請參照第一二列,Windows請參照第一三列)如下,請根據(jù)自己的版本自行比對:
注:引用自此鏈接。
4. 更新驅(qū)動程序或更改CUDA版本。
若二者不匹配,可以選擇更新驅(qū)動程序或更改CUDA版本。
可以通過訪問NVIDIA官方網(wǎng)站下載并安裝適當(dāng)?shù)尿?qū)動程序版本。在安裝新的驅(qū)動程序之前,請確保先卸載舊的驅(qū)動程序,并按照安裝指南進(jìn)行正確的安裝,這里不做展開。如對CUDA版本無特殊要求,建議優(yōu)先選擇更改安裝的CUDA版本。
可能2:CUDA庫的路徑設(shè)置存在問題
簡單來說,如果CUDA庫路徑未正確配置,PyTorch將無法找到CUDA庫文件。在這種情況下,即便CUDA與Pytorch的安裝都是正確的,也會導(dǎo)致錯誤。
請按照如下步驟,將CUDA路徑添加到Linux系統(tǒng)的環(huán)境變量中(Windows平臺下的操作與之類似,這里以Linux為例,供參考):
- 在終端輸入如下指令:
vim ~/.bashrc
即使用vim文本編輯器打開~/.bashrc文件。也可以選擇通過其他的文本編輯器打開。
- 以vim為例,按下字母i,進(jìn)入編輯模式,在文件的末尾添加以下行:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
其中,/usr/local/cuda為CUDA的安裝路徑。如果你的CUDA的安裝路徑不是/usr/local/cuda,請?zhí)钅愕膶嶋H路徑。
該操作會將CUDA的bin目錄添加到PATH環(huán)境變量中,以便系統(tǒng)可以找到CUDA可執(zhí)行文件,同時將CUDA的lib64目錄添加到LD_LIBRARY_PATH環(huán)境變量中,以便系統(tǒng)可以找到CUDA庫文件。
- 按下ESC,然后輸入:wq,之后按下回車,保存~/.bashrc文件。
- 在終端窗口中,運行以下命令以使環(huán)境變量更改生效:
source ~/.bashrc
該命令會重新加載.bashrc文件,使添加的環(huán)境變量生效。
- 檢查CUDA路徑是否成功添加到環(huán)境變量中。
在終端窗口中,運行以下命令:
echo $PATH
echo $LD_LIBRARY_PATH
上述命令將顯示環(huán)境變量的當(dāng)前值。檢查輸出中是否包含CUDA的路徑(/usr/local/cuda/bin和/usr/local/cuda/lib64),以確保添加成功。
如果輸出中不包含CUDA的路徑,或包含多個CUDA路徑,請繼續(xù)參考如下步驟操作。
- 排查環(huán)境變量問題。
如果環(huán)境變量的當(dāng)前值不正確,那么這個問題可能是由其他配置文件或環(huán)境變量引起的。除了~/.bashrc文件之外,還可能存在其他配置文件,這些文件也可能包含CUDA庫路徑的設(shè)置。打開這些文件并查找類似PATH、LD_LIBRARY_PATH的設(shè)置行,以確定是否在其他文件中設(shè)置了/usr/local/cuda路徑。
- 檢查其他環(huán)境變量。
除了LD_LIBRARY_PATH環(huán)境變量之外,還可能存在其他與CUDA相關(guān)的環(huán)境變量設(shè)置,這些設(shè)置可能導(dǎo)致/usr/local/cuda/lib64路徑被添加到LD_LIBRARY_PATH中。運行如下指令檢查是否存在其他環(huán)境變量與CUDA相關(guān):
env | grep CUDA
如果有的話,可能是由于執(zhí)行過其他的CUDA相關(guān)的操作引起的,可以參照下一條將其清除。
- 清除舊的環(huán)境變量。
如果曾經(jīng)安裝過其他版本的CUDA或執(zhí)行過其他與CUDA相關(guān)的操作,舊的環(huán)境變量設(shè)置可能仍然存在于系統(tǒng)中。可以手動清除這些環(huán)境變量,然后重新設(shè)置正確的CUDA庫路徑。
首先,運行如下指令:
env
這將列出所有當(dāng)前的環(huán)境變量。在輸出中查找與CUDA或舊版本相關(guān)的環(huán)境變量設(shè)置,使用unset命令來刪除指定的環(huán)境變量。例如,假設(shè)存在名為OLD_CUDA_PATH的環(huán)境變量,可以運行以下命令刪除它:
unset OLD_CUDA_PATH
對每個需要刪除的環(huán)境變量重復(fù)此步驟。注意,除非確定環(huán)境變量存在問題,否則不要輕易刪除環(huán)境變量。
- 重新加載配置文件。
運行指令:
source ~/.bashrc
注意,如果此時報錯:/bin/lesspipe: 1: /bin/lesspipe: basename: not found,可能是由于刪除了PATH環(huán)境變量,請參考此鏈接。
- 再次檢查環(huán)境變量。
運行env命令再次檢查環(huán)境變量,確保舊的環(huán)境變量已成功刪除。
可能3:PyTorch版本與CUDA版本不匹配
有些同學(xué)可能直接通過下面的指令安裝Pytorch:
pip install pytorch
conda install pytorch
這些指令都是不合適的,可能導(dǎo)致安裝的PyTorch版本與CUDA版本不匹配。也有些同學(xué)訪問Pytorch官網(wǎng),看到安裝指令之后直接復(fù)制粘貼,而沒有進(jìn)一步檢查Pytorch與CUDA的匹配性。
更加推薦的安裝方式是,訪問Previous PyTorch Versions | PyTorch,找到與CUDA版本相符的Pytorch版本,再復(fù)制安裝。
可能4:編譯問題
我沒有遇到過這種情況,我也不推薦使用源代碼編譯PyTorch。如果排查到這一步依舊沒有解決問題,建議首先更換Pytorch版本嘗試(例如由conda安裝改為pip安裝)。如果依舊無法解決,再參照使用源代碼編譯PyTorch的相關(guān)文章。
可能5:軟件包或庫沖突
為了避免這種情況,建議新建一個conda環(huán)境,在新的conda環(huán)境下安裝Pytorch。
寫在最后
上面五點是博主根據(jù)個人經(jīng)驗與網(wǎng)上的相關(guān)文章總結(jié)的,如果有補充,歡迎同學(xué)們在評論區(qū)討論。文章來源:http://www.zghlxwxcb.cn/news/detail-489859.html
如果這篇文章幫助到了你,希望能點贊或評論支持一下,大家的鼓勵是我持續(xù)創(chuàng)作的最大動力。文章來源地址http://www.zghlxwxcb.cn/news/detail-489859.html
到了這里,關(guān)于【一文解決】已安裝CUDA與Pytorch但torch.cuda.is_available()為False的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!