一、開發環境
作業系統:Ubuntu 18.04 LTS
顯示卡:NVIDIA RTX 2080 Super
顯示卡驅動:專有驅動450.142.00
CUDA:10.2
PyCharm版本:2020.2.5
二、問題描述
最近在GitHub上閒逛,Git了一個YOLOv3目標檢測的專案。
Git下來並且配置好環境開始執行,發現TensorFlow找不到動態庫libcudart.so.10.1。
開始能夠想到的原因是我在本地安裝的CUDA版本是10.2,專案的Tensorflow版本是2.1.0,兩者可能不適配。
我首先嚐試在COCO資料集上執行模型訓練演算法,發現是可以執行的,只是訓練的速度實在有點慢。
看了下輸出資訊,發現TensorFlow沒有找到物理GPU。
我繼續在Pycharm的Python Console上面測試Tensorflow能否找到GPU:
import tensorflow as tf
print(tf.test.is_gpu_available())
結果顯示False
,的確這裡的TensorFlow2.1.0沒有找到GPU。
於是我將原來的CUDA解除安裝,重新安裝了10.1版本,並且安裝了對應的cuDNN。
通過Anaconda建立了新的虛擬環境,安裝了Tensorflow2.1.0。
在新的虛擬環境下通過系統的Terminal開啟Python,測試了剛才的Python程式碼。
發現Tesorflow是可以找到物理GPU,但是接下來奇怪的事情發生了。
我在PyCharm裡配置了剛才的虛擬環境,然後開啟內建的Terminal,再次測試剛才的程式碼,發現Tensorflow又找不到物理GPU了!
到這裡我基本可以確定,問題一定在PyCharm上,而不是TensorFlow、CUDA、cuDNN的版本對應關係。
三、解決辦法
方法一:建立動態連線庫
在Pyharm內建的Terminal中輸入以下命令:
sudo ldconfig /usr/local/cuda/lib64
該命令等同於開啟檔案/etc/ld.so.conf.d/cuda.conf
,在其中加入路徑/usr/local/cuda/lib64
,然後輸入以下命令使得動態庫生效:
sudo ldconfig
不論採用哪一種,每次啟動Pyharm的時候都需要在Terminal中操作一遍。
方法二:在PyCharm中修改執行配置
在File -> Settings -> Build, Execution, Deployment -> Console -> Python Console -> Environment -> Environment variables
中,設定LD_LIBRARY_PATH=/usr/local/cuda-xx.x/lib64
四、原因分析
應該是我PyCharm專案所在目錄和CUDA的安裝目錄不在同一個硬碟(我的開發環境安裝了雙硬碟),導致PyCharm找不到CUDA的環境變數。