メモ CUDA/製品

NVIDIA GeForce GT 710 を今更ながら購入した。超がつくほどのエントリーなグラフィックカードです。
このカードを選んだのは安価で、音もなく、Compute Capabilityが3.5とあるから。
https://developer.nvidia.com/cuda-gpusここには書いてないけど...

この安いカードでCUDA対応なアプリを試してみた。
*当然Teslaやハイエンドカードなら研究者にとって満足な速度を得られるのでしょうが、ここはそうゆうのを目的にしてないので、、

まずこのカードをCentOS 7マシンに搭載してみた。

[root@e ~]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.2.1511 (Core)
Release:        7.2.1511
Codename:       Core
[root@e ~]#
[root@e ~]# lspci -vv 
(略
01:00.0 VGA compatible controller: NVIDIA Corporation Device 128b (rev a1) (prog-if 00 [VGA controller])
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device 8c93
 :
                LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM not supported, Exit Latency L0s <512ns, L1 <4us
 :
                LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
(略
01:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device 8c93
 :
                LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM not supported, Exit Latency L0s <512ns, L1 <4us
 :
                LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
(略
[root@e ~]#

pcie2.0の x8 で接続されている。物理的なインターフェースはx16なのだが、、まぁいい。チップはGK208。

CUDA環境のインストール

ここからhttps://developer.nvidia.com/cuda-downloads CentOS 7 向けのパッケージを選択してインストールします。
ここではネットワーク経由でインストールする rpm(network) を選びました
2016y08m16d_214059017.png

入手したインストーラー(cuda-repo-rhel7-7.5-18.x86_64.rpm)をまずCentOS7にインストールして、

[root@e ~]# rpm -qpli ./cuda-repo-rhel7-7.5-18.x86_64.rpm
警告: ./cuda-repo-rhel7-7.5-18.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5c37d3be: NOKEY
Name        : cuda-repo-rhel7
Version     : 7.5
Release     : 18
Architecture: x86_64
Install Date: (not installed)
Group       : NVIDIA
Size        : 185
License     : NVIDIA License
Signature   : DSA/SHA1, 2016年01月29日 09時35分40秒, Key ID d88c3d385c37d3be
Source RPM  : cuda-repo-rhel7-7.5-18.src.rpm
Build Date  : 2016年01月29日 09時35分40秒
Build Host  : vm-fedora21-x64-001.nvidia.com
Relocations : /
Summary     : CUDA repo configuration files.
Description :
 Contains configuration files needed to set up access to the
 CUDA repository.
.
/etc/yum.repos.d/cuda.repo
 
[root@e ~]#
[root@e ~]# yum localinstall ./cuda-repo-rhel7-7.5-18.x86_64.rpm

その後に本体をインストールします。がepelリポジトリにある dkms が必要なので、事前にepelリポジトリはインストールしておきます。

[root@e ~]# yum -y install epel-release
[root@e ~]# yum install cuda

テスト

nvidia-smiで確認してみようかと思ったのだが、、、

[root@e ~]# nvidia-smi -h
(略
Supported products:
- Full Support
    - All Tesla products, starting with the Fermi architecture
    - All Quadro products, starting with the Fermi architecture
    - All GRID products, starting with the Kepler architecture
    - GeForce Titan products, starting with the Kepler architecture
- Limited Support
    - All Geforce products, starting with the Fermi architecture
(略

とあるようにこのデバイスは、nvidia-smiのLimited Supportに該当するようだ。
そのためだろうか、

[root@e ~]# nvidia-smi
Tue Aug 16 22:18:08 2016
+------------------------------------------------------+
| NVIDIA-SMI 352.93     Driver Version: 352.93         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 710      Off  | 0000:01:00.0     N/A |                  N/A |
| 50%   59C    P0    N/A /  N/A |      5MiB /  2047MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
+-----------------------------------------------------------------------------+
[root@e ~]#

としても物理的な状態(fan、温度、メモリーら)は提示してくれるが、Process情報がでてこない。Not Supportedである。

CUDA対応のNAMDで計算を行うと

[root@e ~]# nvidia-smi
Tue Aug 16 22:53:17 2016
+------------------------------------------------------+
| NVIDIA-SMI 352.93     Driver Version: 352.93         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 710      Off  | 0000:01:00.0     N/A |                  N/A |
| 54%   63C    P0    N/A /  N/A |    161MiB /  2047MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
+-----------------------------------------------------------------------------+
[root@e ~]#

とメモリー使用量が跳ね上がる。だが、プロセス情報とかは見えない。
NAMDのテストデータ(apoa1.namd)で実際にCUDA有無で計算してみた。
CPUはi7-4771,MEM 16GBのシングルノード2coreでの計算

CUDA結果
GeForce GT 710Info: Benchmark time: 2 CPUs 0.168253 s/step 1.94737 days/ns 263.074 MB memory
NoInfo: Benchmark time: 2 CPUs 0.37438 s/step 4.3331 days/ns 470.238 MB memory

Quadro K600

昔購入したQuadro K600。GeForce GT 710から挿し代えてみた。
仕様的には「PCI Express 2.0 x16」なのだが、

[root@e ~]# lspci -vv |less
(略
01:00.0 VGA compatible controller: NVIDIA Corporation GK107GL [Quadro K600] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: NVIDIA Corporation Device 094b
 :
                LnkCap: Port #0, Speed 5GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 <4us
 :
                LnkSta: Speed 2.5GT/s, Width x16, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
 :
01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller (rev a1)
        Subsystem: NVIDIA Corporation Device 094b
 :
                LnkCap: Port #0, Speed 5GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 <4us
 :
                LnkSta: Speed 2.5GT/s, Width x16, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
(略

とPCIExpress 1.0 の x16で接続しているように見える。だが、nvidia-smiを実行すると

[root@e ~]# nvidia-smi
modprobe: ERROR: could not insert 'nvidia': No such device
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. (略

とエラーが発生して、どうやら繋がっていない模様。
BIOS側で当該のPCIEスロットをPCIE2.0に限定するとようやく nvidia-smi が使えるようになった。
*BIOSでPCIE2.0と限定しても「lspci -vv」の値に変化はなかった

[root@e ~]# nvidia-smi -q |less
(略
    PCI
        Bus                         : 0x01
        Device                      : 0x00
        Domain                      : 0x0000
        Device Id                   : 0x0FFA10DE
        Bus Id                      : 0000:01:00.0
        Sub System Id               : 0x094B10DE
        GPU Link Info
            PCIe Generation
                Max                 : 2
                Current             : 2
            Link Width
                Max                 : 16x
                Current             : 16x
(略
[root@e ~]#

とnvidia-smiの出力からは PCIE2.0のx16と仕様と同様の接続ができている。lspciの出力が間違い?
再度、NAMDのテストデータ(apoa1.namd)で実際にCUDA有無で計算してみた。
quadraカードなのでProcess情報も表示してくれる。

[root@e ~]# nvidia-smi
Wed Aug 17 20:42:36 2016
+------------------------------------------------------+
| NVIDIA-SMI 352.93     Driver Version: 352.93         |
|-------------------------------+----------------------+----------------------+
| 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 K600         Off  | 0000:01:00.0     Off |                  N/A |
| 29%   58C    P0    N/A /  N/A |    159MiB /  1023MiB |     99%      Default |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1112    C   ...MD_2.11_Linux-x86_64-multicore-CUDA/namd2   151MiB |
+-----------------------------------------------------------------------------+
[root@e ~]#
CUDA結果
Quadro K600
(GK107,876 MHz,192コア,1GB DDR3)
Compute Capability: 3.0
Info: Benchmark time: 2 CPUs 0.27054 s/step 3.13125 days/ns 223.168 MB memory

まぁ、Hzの違いもあるが、大きくは Compute Capability の違いで差が出たのかな?

(再掲)

CUDA結果
GeForce GT 710
(GK208,954 MHz,192コア,2GB DDR3)
Compute Capability: 3.5
Info: Benchmark time: 2 CPUs 0.168253 s/step 1.94737 days/ns 263.074 MB memory
NoInfo: Benchmark time: 2 CPUs 0.37438 s/step 4.3331 days/ns 470.238 MB memory

cuda-z

cpu-zと名称が似ているのだが、GUIで搭載GPUカードの詳細を教えてくれるアプリケーションがある
http://cuda-z.sourceforge.net/
Linux64bit版(CUDA-Z-0.10.251-64bit.run)をダウンロードして、GeForce GT 710を搭載したマシンで実行してみた

[root@s ~]# ./CUDA-Z-0.10.251-64bit.run

暫くすると画面が表示される(Xming経由でwindowsから撮影してます)
2016y11m14d_221259135.png
この画面の「Performance」タブを選択すると、リアルタイムでGPUのベンチを取ってくれる。
画面下部に「Export」ボタンがあり、そこから「to Text」を選んで数値を保存することもできます。
2016y11m14d_221624844.png
保存したTextには

[root@s ~]# less CUDA-Z.txt
 :
GPU Core Performance
        Single-precision Float: 293.395 Gflop/s
        Double-precision Float: 15.2506 Gflop/s
 :
[root@s ~]#

と書かれていた。倍精度計算は、単精度計算の20分の1って感じですね。

めも

新規のマシンにCentOS7を載せて cuda をインストールしても

[root@s ~]# nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. (略

lsmodで確かめてロードされていないことが分かったが、/lib/modules/`uname -r`/extra をみると正しく入っている
調べてみるとマザーボードのSecure Bootが原因だった。これを無効にしたらすんなり行けた

消費電力、Hz、温度をcsvに書き出す場合

nvidia-smi --query-gpu=index,timestamp,power.draw,clocks.sm,clocks.mem,clocks.gr,temperature.gpu --format=csv -l 10 | tee -a log

とする。「-l」で採取間隔が指定できる。単位は秒

各GPUがどんなプロセスで使われているか知るには

nvidia-smi pmon -c 1

と実行する. 「-c 1」は1回だけ表示. 無指定だと繰り返して表示させられる
下記のような結果が返ってくる。

# gpu     pid  type    sm   mem   enc   dec   command
# Idx       #   C/G     %     %     %     %   name
    0   10441     C    85     2     0     0   relion_refine_m
    1   10442     C    74     2     0     0   relion_refine_m
    2   10443     C    79     2     0     0   relion_refine_m
    3   10444     C    46     1     0     0   relion_refine_m

メモ cuda-8.0 GA2

cuda 8.0.44-1から GA2の 8.0.61 にアップグレードしようとして
cuda-repo-rhel7-8-0-local-ga2-8.0.61-1.x86_64.rpm
を入手した。っで、既存のcuda8を全て削除して yum localinstall でこれをインストールしたら
エラーが発生。なんでも fanse.h がないとかで。

しかたなくnetworkインストールとなる「cuda-repo-rhel7-8.0.61-1.x86_64.rpm」からインストールを行った
これなら上手く行くみたい

ベンチマークテスト

cudaをインストールしたディレクトリにsamplesがある

[saber@c ~]$ ls -l /usr/local/cuda/
total 16
drwxr-xr-x  3 root root 4096 May  3 01:23 bin
drwxr-xr-x  5 root root   56 May  3 01:23 doc
drwxr-xr-x  5 root root   53 May  3 01:23 extras
lrwxrwxrwx  1 root root   28 May  3 01:22 include -> targets/x86_64-linux/include
lrwxrwxrwx  1 root root   24 May  3 01:22 lib64 -> targets/x86_64-linux/lib
drwxr-xr-x  8 root root  226 May  3 01:23 libnsight
drwxr-xr-x  7 root root  209 May  3 01:23 libnvvp
-rw-r--r--  1 root root  366 Sep 15  2016 LICENSE
drwxr-xr-x  3 root root   21 May  3 01:22 nvml
drwxr-xr-x  7 root root   85 May  3 01:22 nvvm
-rw-r--r--  1 root root  366 Sep 15  2016 README
drwxr-xr-x 11 root root  201 May  3 01:22 samples        <--- これ
drwxr-xr-x  3 root root   17 May  3 01:22 share
drwxr-xr-x  2 root root  201 May  3 01:22 src
drwxr-xr-x  3 root root   26 Sep 15  2016 targets
drwxr-xr-x  2 root root   43 May  3 01:22 tools
-rw-r--r--  1 root root   20 Sep  5  2016 version.txt
[saber@c ~]$

この「samples」のnbodyでベンチが取れる。

[root@c ~]# cd /usr/local/cuda/samples/5_Simulations/nbody
[root@c nbody]# make
  :
mkdir -p ../../bin/x86_64/linux/release
cp nbody ../../bin/x86_64/linux/release
[root@c nbody]#

コンパイル完了したものが「/usr/local/cuda/samples/bin/x86_64/linux/release」に置かれる
っで、使ってみる

[root@c ~]# export PATH=${PATH}:/usr/local/cuda/samples/bin/x86_64/linux/release
[root@c ~]# nbody -benchmark -numbodies=1000 -numdevices=1 -fp64

numbodiesを大きくすれば長時間ベンチが行われる。まぁー負荷テストには十分かな

cuda10

CentOS7.5にcuda10(rpm,local)を入れようとしたら

エラー: パッケージ: 3:nvidia-driver-libs-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libglvnd-gles(x86-64) >= 0.2
エラー: パッケージ: 3:nvidia-driver-libs-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libglvnd(x86-64) >= 0.2
エラー: パッケージ: 3:nvidia-driver-libs-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libglvnd-opengl(x86-64) >= 0.2
エラー: パッケージ: 3:nvidia-driver-libs-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libglvnd-egl(x86-64) >= 0.2
エラー: パッケージ: 3:nvidia-driver-libs-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libglvnd-glx(x86-64) >= 0.2
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

と言われた。「libglvnd」に関連する一連のパッケージが入手できないからである。
もともとは「libglvnd」はepelから入手できていたのだが、事情で消されたみたい。
っで、このままでは仕事にならないので、回避策としては消される前のを入手するか
次にCentOS7.6-CRを利用する。ここでは消されたパッケージを入手してみた
入手場所は「https://koji.fedoraproject.org/koji/buildinfo?buildID=1096712」で
入手するファイルは

libglvnd-1.0.1-0.1.git5baa1e5.el7.x86_64.rpm
libglvnd-egl-1.0.1-0.1.git5baa1e5.el7.x86_64.rpm
libglvnd-gles-1.0.1-0.1.git5baa1e5.el7.x86_64.rpm
libglvnd-glx-1.0.1-0.1.git5baa1e5.el7.x86_64.rpm
libglvnd-opengl-1.0.1-0.1.git5baa1e5.el7.x86_64.rpm

これらを「yum localisntall」でインストールすれば、一応cuda-10-0もインストール可能です。

181208
どうやらcentosリポジトリで「libglvnd-1.0.1-0.8.git5baa1e5.el7.x86_64.rpm」を流し始めた模様。
っが、「yum install cuda-10-0」を実行すると下記で止まる....

Transaction check error:
  file /usr/lib64/libGL.so.1 from install of libglvnd-glx-1:1.0.1-0.8.git5baa1e5.el7.x86_64 conflicts with file from 
package mesa-libGL-17.2.3-8.20171019.el7.x86_64
  file /usr/lib64/libGLESv2.so.2 from install of libglvnd-gles-1:1.0.1-0.8.git5baa1e5.el7.x86_64 conflicts with file from 
package mesa-libGLES-17.2.3-8.20171019.el7.x86_64
  file /usr/lib64/libEGL.so.1 from install of libglvnd-egl-1:1.0.1-0.8.git5baa1e5.el7.x86_64 conflicts with file from 
package mesa-libEGL-17.2.3-8.20171019.el7.x86_64

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2018-12-08 (土) 23:14:01 (7d)