我正在與西阿諾,一個深度學習基準測試,在新安裝的 Ubuntu Mate 16.04 機器上進行。 Theano 可以使用 GPU 加速來加快運算速度。我有一塊支援 CUDA 且已正確安裝的 NVIDIA K2200M 顯示卡,如nvidia-smi
指令所示:
+------------------------------------------------------+
| NVIDIA-SMI 361.42 Driver Version: 361.42 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K2200M Off | 0000:01:00.0 Off | N/A |
| N/A 31C P8 N/A / N/A | 212MiB / 2047MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1090 G /usr/lib/xorg/Xorg 200MiB |
| 0 7931 G /usr/lib/firefox/firefox 1MiB |
+-----------------------------------------------------------------------------+
一些背景知識:需要設定 Theano,以便定義一些環境變量,例如$CUDA_ROOT
,這些是指,/usr/local/cuda
但從官方 Ubuntu Mate 儲存庫安裝nvidia-cuda-*
不會建立這些資料夾。儘管如此,Theano 提供了一個 python 程式碼,可以幫助確定計算是使用 CPU 還是 GPU 進行,令人驚訝的是 Theano 找到了 CUDA 安裝。
問題來了:CUDA 被系統識別,但 CUDA 似乎找不到我的 GPU,並且出現錯誤WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable)
。
我寫信askubuntu.com
給 Theano 開發人員,而不是寫給 Theano 開發人員,因為發現這個問題,我卸載了 CUDA nvidia-cuda-*
,並從 NVIDIA 提供的官方包中安裝了 CUDA,如下這指南,這樣就/usr/local/cuda
創建了上述內容,並且 Theano 代碼再次識別了 CUDA 安裝,但它仍然找不到我的 GPU。這就是為什麼我認為這可能是 Ubuntu 問題,而不是 Theano 方面的錯誤實作。
答案1
我有點發現這不是 Ubuntu 問題,而是 Theano 問題,因為我從 OP 中提到的源再次安裝了 CUDA,並且我成功地正確運行了 NVIDIA 提供的 CUDA 包中的示例數據,排除了(在我的經驗不足)NVIDIA-cuda-toolkit 和NVIDIA-drivers 之間的整合問題。
對於那些(將來)與我有相同問題的人,問題似乎出在模組中theano.sandbox.cuda
,當__init__.py
嘗試cuda_ndarray.cu
在第 168-175 行進行編譯時(我相信,因為我只是稍微修改了文件),當該文件調用function compiler.compile_str(...)
,我相信這是由Theano 開發團隊創建的文件。 NVCC 運作正確,但編譯出現問題cuda_ndarray
。
因此,一旦askubuntu允許我,我就會將此問題標記為已回答。
答案2
如果您使用 CUDA 7.5,請確保遵循官方說明:
CUDA 7.5 不支援預設的 g++ 版本。安裝支援的版本並將其設為預設版本。
sudo apt-get install g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
如果theano GPU測試程式碼有錯誤:
錯誤(theano.sandbox.cuda):無法編譯cuda_ndarray.cu:libcublas.so.7.5:無法開啟共享物件檔案:沒有這樣的檔案或目錄警告(theano.sandbox.cuda):CUDA已安裝,但裝置GPU未安裝不可用(錯誤:cuda 不可用)
只需使用ldconfig
命令連結 CUDA 7.5 的共享物件:
sudo ldconfig /usr/local/cuda-7.5/lib64