Theano との CUDA 統合

Theano との CUDA 統合

私はテアノディープラーニングのベンチマークである を、新しくインストールした 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。これらは を参照しますが、公式の Ubuntu Mate リポジトリから/usr/local/cudaインストールしても、nvidia-cuda-*これらのフォルダーは作成されません。ただし、Theano は、計算が CPU で行われているのか GPU で行われているのかを判断するのに役立つ Python コードを提供しており、驚くべきことに、Theano は CUDA インストールを検出します。

ここで問題が発生します。CUDA はシステムによって認識されますが、CUDA が GPU を見つけられないようで、エラーが発生しますWARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable)

私はaskubuntu.comTheano開発者にではなく、この問題を発見したのでアンインストールしnvidia-cuda-*、NVIDIAが提供する公式パッケージからCUDAをインストールしたので、ここに書いています。これガイドに従って、前述のもの/usr/local/cudaが作成されましたが、Theano コードは CUDA インストールを認識しましたが、それでも GPU を見つけることができませんでした。これが、Theano 側の実装の欠陥ではなく、Ubuntu の問題である可能性があると考える理由です。

答え1

私は、OP で言及したソースから CUDA を再度インストールし、NVIDIA が提供する CUDA パッケージからサンプル データを正しく実行できたため、これは Ubuntu の問題ではなく、Theano の問題であるとわかりました。これにより、(経験の浅い私の意見では) NVIDIA-cuda-toolkit と NVIDIA ドライバー間の統合の問題は排除されました。

将来、私と同じ問題に遭遇する人のために、問題はモジュールにあるようです。 がtheano.sandbox.cuda168行目から 175 行目 (ファイルを少し変更しただけだと思います) で__init__.pyコンパイルしようとするcuda_ndarray.cuと、そのファイルが関数 を呼び出します。このファイル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

関連情報