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

heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その2:Tesla C1060 ドライバと CUDA Toolkit のインストール )

CUDA 環境構築 Ubuntu

nvidia-1201074_640.jpg

目次

目的

以前、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 などはよく読みましょうということを改めて学びました。

以上。