CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その2:Tesla C1060 ドライバと CUDA Toolkit のインストール )
目次
目的
以前、ubuntu(12.04) 4台で NFS にてファイル共有を行い、OpenMPI でホスト間通信させることで、Linuxクラスタ環境を構築しました。
そして前エントリでは、このクラスタ環境の2ホスト上にCUDA対応ビデオカードを追加し、2ホスト間でGPGPUを行うことを目的として、その前段階としてCUDA対応ビデオカード配置を行いました。
本エントリでは、Tesla C1060 ビデオカードドライバと CUDA Toolkit のインストールを行う。
方法
CUDA developer ページを参考にした。
http://developer.download.nvidia.com/compute/cuda/6_5/rel/docs/CUDA_Getting_Started_Linux.pdf
NVIDIA® Tesla® C1060
CUDA が使えるグラボを認識しているか調べる
ito@calc1:~$ lspci | grep -i nvidia 01:00.0 3D controller: NVIDIA Corporation GT200GL [Tesla C1060 / M1060] (rev a1)
グラボの認識は大丈夫そうです。
CUDA がサポートしているOSかどうか調べる
ito@calc1:~$ uname -m && cat /etc/*release x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS" NAME="Ubuntu" VERSION="12.04.4 LTS, Precise Pangolin" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu precise (12.04.4 LTS)" VERSION_ID="12.04"
ubuntu12.04 は "DEPRECATED " バージョンですが、良しとします。
gcc のバージョン確認
ito@calc1:~$ gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ito@calc1:~$ ito@calc1:~$ icc --version icc (ICC) 14.0.1 20131008 (C) 1985-2013 Intel Corporation. 無断での引用、転載を禁じます。
gcc は 4.6以上ですし、icc は14.01なので、対象バージョンです。
ドライバ・CUDA のインストール
このセクションで問題が発生しまして、手順通り apt-get でレポジトリからドライバ・CUDA のインストールを
行ったのですが、Tesla C1060 のドライバは "340.xx Legacy drivers" でないといけないようで、
加えてドライババージョンに合わせて CUDA v6.5 バージョンをインストールする必要がありました。
上記に気づいたのは CUDA v7.0 をインストールした後の起動時の "dmseg" に下記出力があったからです。
[ 10.597739] NVRM: The NVIDIA Tesla C1060 GPU installed in this system is [ 10.597739] NVRM: supported through the NVIDIA 340.xx Legacy drivers. Please [ 10.597739] NVRM: visit http://www.nvidia.com/object/unix.html for more [ 10.597739] NVRM: information. The 346.46 NVIDIA driver will ignore [ 10.597739] NVRM: this GPU. Continuing probe... [ 10.597746] NVRM: No NVIDIA graphics adapter found! [ 10.597823] NVRM: NVIDIA init module failed!
ドライバ・CUDA のインストール (リトライ)
"NVIDIA 340.87 driver" を下記から入手し、ドライバインストールを行いました。
NVIDIA DRIVERS Tesla Driver for Linux x64
CUDA v6.5 は下記から入手して、ドライバ以外のCUDA Toolkit のインストールを行いました。
インストール後に設定するべき項目と、再起動実行後の確認事項
".bashrc" に下記設定を追加した。
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
インストール後の出力に「再起動後に module のロードが行われる」と記載がありましたので、このタイミングで再起動を行います。
その後下記を実行し、CUDA Toolkit のコマンドが使えるか確認します。
ito@calc1:~$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2014 NVIDIA Corporation Built on Thu_Jul_17_21:41:27_CDT_2014 Cuda compilation tools, release 6.5, V6.5.12
パスも通っており、コマンドも無事使えました。
サンプル実行
ito@calc1:/home/ito/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release# ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla C1060" CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 1.3 Total amount of global memory: 4096 MBytes (4294770688 bytes) (30) Multiprocessors, ( 8) CUDA Cores/MP: 240 CUDA Cores GPU Clock rate: 1296 MHz (1.30 GHz) Memory Clock rate: 800 Mhz Memory Bus Width: 512-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: 16384 Warp size: 32 Maximum number of threads per multiprocessor: 1024 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.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = Tesla C1060 Result = PASS
ito@calc1:/home/ito/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release# ./bandwidthTest [CUDA Bandwidth Test] - Starting... Running on... Device 0: Tesla C1060 Quick Mode Host to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 5368.2 Device to Host Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 5626.7 Device to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 75741.6 Result = PASS
サンプルプログラムの実行も大丈夫でした。
"deviceQuery" と同様の情報はネットでも取得できるとは思いますが、出力結果の一部の値は
CUDAプログラムの最適化の際に利用しますので、実行結果を手元に控えておくことをお勧めいたします。
補足
CUDA Toolkit インストール後に下記出力がありました。
Missing recommended library: libGLU.so Missing recommended library: libX11.so Missing recommended library: libXi.so Missing recommended library: libXmu.so
下記サイトのコメントを見るに、freeglut のインストールを行い、共有ライブラリのシンボリックリンクを
/usr/libに作れば良いみたいですので、今後問題が起きたら実行したいと思います。
所感
実は、CUDA v7.0 を誤ってインストールしてからの試行錯誤やネットで情報収集したりと、
すんなりここまで実行できなかったりしました。
問題発生時の OS 起動時の "dmesg" や、"syslog" 、CUDAインストール後の "/tmp/cuda_install_xxxxx.log" 、
加えてソフトの README などはよく読みましょうということを改めて学びました。
以上。