cuda 6.0をubuntu serverに導入する
昔使ってたワークステーションにXPが載ってたんですが、サポートも切れたし…ということで最近ubuntu serverに変更しました。
そのワークステーションには古いグラボが載ってて学生の頃にはcudaで遊んでたので、また遊べるようにセットアップしてみます。
cuda 6.0を選択したのは、詳しくないけど、どうせなら新しいものをということで。unified memoryなのも便利そうだし。
環境
- OS: ubuntu server 13.10
- GPU: Leadtek WinFast PX8600 GT (GeForce 8600GT)
- CUDA 6.0.26 RC
手順
Xの停止
自分の環境ではubuntu-desktop
パッケージを入れているので、まずXを止める。Xのサーバが立ってない環境では不要なはず。
sudo service lightdm stop
cuda toolkitのインストール
次にcuda toolkitを入れる。現時点でcuda 6.0はRC。
wget http://developer.download.nvidia.com/compute/cuda/6_0/rc/installers/cuda_6.0.26_rc_linux64.run chmod 755 cuda_6.0.26_rc_linux64.run sudo ./cuda_6.0.26_rc_linux64.run -silent -driver # ドライバのインストール sudo ./cuda_6.0.26_rc_linux64.run # 利用許諾の同意やサンプルの導入など
.zshrc
や.bashrc
に各種バイナリへのパスを通す。
# .zshrc export PATH includes="/usr/local/cuda-6.0/bin" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-6.0/lib64"
サンプルの実行(1)
これでサンプルなども含めて一式が入ったのでサンプルをビルドしてみる。
sudo aptitude install g++ cd ~/NVIDIA_CUDA-6.0_Samples make
さっそく実行!と思ってサンプルをいくつか実行してみるも、自分の環境では以下のようなエラーが出てしまった(サンプルによって出力はことなるが、エラーコードが35)。
cudaGetDeviceCount returned 35
nvidiaドライバのインストール
これはデフォルトで使用されているnouveauというドライバが問題なようなので、nvidiaのドライバを入れる。以下のサイトから適切なドライバをダウンロードし、インストールする。
chmod 755 NVIDIA-Linux-x86_64-331.67.run sudo ./NVIDIA-Linux-x86_64-331.67.run
しかし、nouveauドライバが有効になっている場合にはインストールに失敗する。
この場合には自動的に/etc/modprobe.d/nvidia-installer-disable-nouveau.conf
というファイルが作成され次回起動時からnouveauドライバを読み込まないようになるため、再起動する。
sudo reboot
再度ドライバのnvidiaドライバのインストール。
sudo ./NVIDIA-Linux-x86_64-331.67.run
Xの再開
冒頭でXを止めた場合は再開する。
sudo service lightdm start
サンプルの実行(2)
これでようやくサンプルを実行できる。
cd ~/NVIDIA_CUDA-6.0_Samples/bin/x86_64/linux/release ./deviseQuery
出力はこんな感じ。ちゃんとCUDA 6.0が入っていて、動いているのが確認できる。
./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce 8600 GT" CUDA Driver Version / Runtime Version 6.0 / 6.0 CUDA Capability Major/Minor version number: 1.1 Total amount of global memory: 256 MBytes (268107776 bytes) ( 4) Multiprocessors, ( 8) CUDA Cores/MP: 32 CUDA Cores GPU Clock rate: 1188 MHz (1.19 GHz) Memory Clock rate: 700 Mhz Memory Bus Width: 128-bit Maximum Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536, 32768), 3D=(2048, 2048, 2048) Maximum Layered 1D Texture Size, (num) layers 1D=(8192), 512 layers Maximum Layered 2D Texture Size, (num) layers 2D=(8192, 8192), 512 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes Total number of registers available per block: 8192 Warp size: 32 Maximum number of threads per multiprocessor: 768 Maximum number of threads per block: 512 Max dimension size of a thread block (x,y,z): (512, 512, 64) Max dimension size of a grid size (x,y,z): (65535, 65535, 1) Maximum memory pitch: 2147483647 bytes Texture alignment: 256 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): No Device PCI Bus ID / PCI location ID: 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.0, CUDA Runtime Version = 6.0, NumDevs = 1, Device0 = GeForce 8600 GT Result = PASS
ついでにcublasも試す。
./matrixMulCUBLAS
出力はこんな感じ。なんだか昔より速くなってる気がする(うろ覚え)。
[Matrix Multiply CUBLAS] - Starting... GPU Device 0: "GeForce 8600 GT" with compute capability 1.1 MatrixA(160,320), MatrixB(160,320), MatrixC(160,320) Computing result using CUBLAS...done. Performance= 21.99 GFlop/s, Time= 0.745 msec, Size= 16384000 Ops Computing result using host CPU...done. Comparing CUBLAS Matrix Multiply with CPU results: PASS