読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Ubuntu 12.10にCUDA 5.0を入れてみた

修論のテーマとして, 「PerlでCUDAをいい感じに使えるモジュール」を作ることになったので, いろいろ理由を付けて買ってもらったGPGPU用PCに64bit版のUbuntu 12.10を入れて, そこにCUDA 5.0をインストールしてみました.

というかアレです, 「俺も修論/卒論でそういうの作ってるわ...」とか, 「趣味でそういうモジュール書いてるわ...」とか, 「これから頑張るみたいだけど, それ既にあるよ...」等の情報お待ちしております.
いろいろ調べてみた結果, Ruby版(Ikra)やPython版(PyCUDA)はあるんですが, Perlでは「これだ!」という感じのいいモジュールがない, という感じだったので... GPGPU関連で勝手に師匠と仰いでいる@moznion君に聞いても, 知らないって言ってたし...

それはおいといて, 後々困らないように, インストールの手順とか詰まったところをメモしておきます.
以下のサイトを参考にして, なんとか... できたっぽいのでよかったです. ありがとうございます!

CUDA - インストール(Linux編)
Ubuntu 12.04にCUDA 4.2をインストールした時のメモ
CentOS 5.6にCUDA 4.0の開発環境を構築する

ダウンロード

NVIDIAのサイトから落としてきます. CUDA 4までは, "CUDA Toolkit"と"GPU Computing SDK"を別々にダウンロードする必要があったようですが, CUDA 5からは統合されているようです.
というわけで, "LINUX: CUDA 5.0 Production Release"の"Ubuntu"→"11.10"→"64bit"をクリックして必要なファイルをダウンロードします.

インストール

11月6日現在, ダウンロードできるファイルの名前は"cuda_5.0.35_linux_64_ubuntu11.10-1.run"です.
これを実行するとドライバ, Toolkit, サンプルの3つが導入できるのですが, ドライバをインストールする場合, Xサーバが起動しているとうまくできないようです.

というわけで, まずはXサーバを使わずにドライバだけインストールして, その後にToolkitとサンプルを導入する, という順番で行きます.

ドライバのインストール

まずXサーバを落しましょう. Ubuntu 11.10からは従来のgdmではなくlightdmを使っているようなので,

$ sudo service lightdm stop

このコマンドで, Xサーバを落します. Ctrl+Alt+F1でログインして,

$ chmod a+x cuda_5.0.35_linux_64_ubuntu11.10-1.run
$ sudo ./cuda_5.0.35_linux_64_ubuntu11.10-1.run -silent -driver

で, ドライバのみのインストールができるようです.

$ sudo service lightdm start

無事インストールが終わったら, Xサーバを再び起動しましょう.

Toolkit/サンプルのインストール

ドライバのインストールが終わったら, 次はToolkitとサンプルの導入です.

$ sudo ./cuda_5.0.35_linux_64_ubuntu11.10-1.run

実行すると, ライセンスとかいろいろ説明が出てきます. "Do you accept the previously read EURA?"とか聞かれるので, "accept"と答えて次へ.

ドライバ, CUDAのToolkit, CUDA 5.0のサンプルをインストールするかをそれぞれ聞いてきますが, 既にインストール済みのドライバで'n'と答える以外は全て'y'で.
ToolkitとサンプルはLocationを聞いてきますが, デフォルトのまま(Enterを押す)でOKです.

しばらく待つと,

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-5.0
Samples:  Installed in /usr/local/cuda-5.0/samples (pristine) and /home/********/NVIDIA_CUDA-5.0_Samples (writable)

* Please make sure your PATH includes /usr/local/cuda-5.0/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /usr/local/cuda-5.0/lib
*   for 64-bit Linux distributions includes /usr/local/cuda-5.0/lib64:/lib
* OR
*   for 32-bit Linux distributions add /usr/local/cuda-5.0/lib
*   for 64-bit Linux distributions add /usr/local/cuda-5.0/lib64 and /lib
* to /etc/ld.so.conf and run ldconfig as root

* To uninstall CUDA, remove the CUDA files in /usr/local/cuda-5.0
* Installation Complete

Please see CUDA_Getting_Started_Guide_For_Linux.pdf in /usr/local/cuda-5.0/doc/pdf for detailed information on setting up CUDA.

こんな感じで結果が出てきます. Toolkit, Samplesともに問題なければ, このような出力になります.
出力にあるように, .bashrcあたりに

export PATH=/usr/local/cuda-5.0/bin:${PATH}
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-5.0/lib64:/usr/local/cuda-5.0/lib

と書いておきましょう.

もし, 結果が

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-5.0
Samples:  Installation Failed. Missing required libraries.

となっていて, "Missing required library libglut.so"というログが残っている場合,

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so.3 /usr/lib/libglut.so

で, 解決するようです.

※こちらを参考にしました: Installing cuda 5 samples in Ubuntu 12.10

サンプルのmake

無事インストールが終われば, ホームディレクトリに"NVIDIA_CUDA-5.0_Samples"というディレクトリができているはずです.
この中でmakeを叩けば, サンプルなどを作ることができます.

$ cd ~/NVIDIA_CUDA-5.0_Samples
$ make

GCCのバージョンエラー

...が, CUDAはgccの4.7以上をサポートしていないらしく, 標準で入っているgccのバージョンが4.7.2だった為, このようなエラーが出ました.

/usr/local/cuda-5.0/include/host_config.h:82:2: エラー: #error -- unsupported GNU version! gcc 4.7 and up are not supported!

この場合,

$ sudo apt-get install gcc-4.6 g++-4.6

で, バージョン4.6のgccを導入してから,

$ sudo ln -s /usr/bin/gcc-4.6 /usr/local/cuda/bin/gcc

で, 強制的にバージョン4.6台のgccを使わせることができるようです.

※こちらを参考にしました: CUDA incompatible with my gcc version

GCCのバージョンエラー(別解)

※2012年12月05日追記

おそらくこちらの方がスマートだと思います...

$ sudo apt-get install gcc-4.6 g++-4.6

で, バージョン4.6のgccを導入してから,

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7

update-alternativesというツールを使って, gccのバージョンを切り替えられるようにします.

$ sudo update-alternatives --config gcc
alternative gcc (/usr/bin/gcc を提供) には 2 個の選択肢があります。

  選択肢    パス            優先度  状態
------------------------------------------------------------
* 0            /usr/bin/gcc-4.7   60        自動モード
  1            /usr/bin/gcc-4.6   40        手動モード
  2            /usr/bin/gcc-4.7   60        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください:

ここで'1'を入力してエンターを押せば, gccというコマンドで'/usr/bin/gcc-4.6'を呼びに行くようになります.

確認

インストールには結構な時間がかかります. 気長に待ちましょう.
終了すると, "NVIDIA_CUDA-5.0_Sample/bin/linux/release"に, 実行可能なバイナリができているはずです.

例えば, "deviceQuery"を実行してみると...

$ ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 660 Ti"
  CUDA Driver Version / Runtime Version          5.0 / 5.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2047 MBytes (2146762752 bytes)
  ( 7) Multiprocessors x (192) CUDA Cores/MP:    1344 CUDA Cores

こんな感じで, CUDAやGPUの情報を確認することができます.

"NVIDIA X Server Settings"とか見ていると, サンプルを実行するとPerformance LevelやGPUの温度が上昇して, 終了したら下がるっぽい挙動を示しているので, ちゃんとGPUを使って演算ができている... ようですね.