ethOSでNVIDIA製GPUを制御する!

NVIDI製GPUのチューニングを行います。マイニング用のマシンに使用したGPUは、「GeForce GTX 1060 3GB」×2です。

使用した環境

  • ethOS 1.2.7

GPUのチューニング項目

GPUの以下の値のチューニングを行い、マイニングの最適値を探ります。

  • 消費電力
  • コアクロック
  • メモリクロック
  • ファンの回転速度

OSからのGPU確認

OSからのGPUが認識されていることをlspicコマンドで確認します。※オンボードのVGAは、BIOSで無効化しています。

# lspci | grep VGA
02:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 3GB] (rev a1)
03:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 3GB] (rev a1)

Xの設定の確認

/etc/X11/xorg.confの設定を確認します。Coolbitsが31など、グラフィックボードの設定変更が可能であることを確認します。

# less /etc/X11/xorg.conf
...
    Option         "Coolbits" "31"
...

消費電力の設定

NVIDIAのグラフィックボードは、nvidia-smiコマンドで状態確認や設定を行うことができます。消費電力の設定を行うため状況確認を行います。

# nvidia-smi
Sat Apr  7 06:52:14 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.90                 Driver Version: 384.90                    |
|-------------------------------+----------------------+----------------------+
| 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 GTX 106...  On   | 00000000:02:00.0 Off |                  N/A |
| 85%   54C    P2    83W / 120W |   2612MiB /  3011MiB |     99%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 106...  On   | 00000000:03:00.0 Off |                  N/A |
| 85%   58C    P2    89W / 120W |   2593MiB /  3013MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2602      G   /usr/bin/X                                    27MiB |
|    0      5613      C   /opt/miners/claymore/claymore               2573MiB |
|    1      2602      G   /usr/bin/X                                     8MiB |
|    1      5613      C   /opt/miners/claymore/claymore               2573MiB |
+-----------------------------------------------------------------------------+

GPU0、GPU1の消費電力が、80〜90W程度なので、消費電力の設定を80Wに制限してみます。GPUは、-iオプションで個別に指定できます。

# sudo nvidia-smi i 0 -pl 80
Power limit for GPU 00000000:02:00.0 was set to 80.00 W from 120.00 W.
# sudo nvidia-smi i 1 -pl 80
Power limit for GPU 00000000:03:00.0 was set to 80.00 W from 120.00 W.
All done.

消費電力が80W以下になっていることを確認します。

# nvidia-smi
Sat Apr  7 06:52:41 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.90                 Driver Version: 384.90                    |
|-------------------------------+----------------------+----------------------+
| 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 GTX 106...  On   | 00000000:02:00.0 Off |                  N/A |
| 85%   53C    P2    78W /  80W |   2612MiB /  3011MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 106...  On   | 00000000:03:00.0 Off |                  N/A |
| 85%   57C    P2    78W /  80W |   2593MiB /  3013MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2602      G   /usr/bin/X                                    27MiB |
|    0      5613      C   /opt/miners/claymore/claymore               2573MiB |
|    1      2602      G   /usr/bin/X                                     8MiB |
|    1      5613      C   /opt/miners/claymore/claymore               2573MiB |
+-----------------------------------------------------------------------------+

GPUのコアクロックの設定

GPUのクコアロックをオフセット値で設定してみます。GeForce GTX 1060は、nvidia-smiコマンドでは、GPUのコアクロック設定が難しいようなので、nvidia-settingsコマンドを使用して設定を行います。

# nvidia-smi -q -d CLOCK
...
GPU 00000000:02:00.0
    Clocks
        Graphics                    : 1847 MHz
        SM                          : 1847 MHz
        Memory                      : 3802 MHz
        Video                       : 1657 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    SM Clock Samples
        Duration                    : 13.13 sec
        Number of Samples           : 100
        Max                         : 1847 MHz
        Min                         : 1822 MHz
        Avg                         : 1842 MHz
...
GPU 00000000:03:00.0
    Clocks
        Graphics                    : 1746 MHz
        SM                          : 1746 MHz
        Memory                      : 3802 MHz
        Video                       : 1569 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    SM Clock Samples
        Duration                    : 9.20 sec
        Number of Samples           : 100
        Max                         : 1759 MHz
        Min                         : 1708 MHz
        Avg                         : 1736 MHz
...

GPUのクロックを最大値にするため、GPU0は100MHz、GPU1は200MHz程度、クロックアップしてみます。※しばらく運用していたらGPU0がGPUの最大値、GPU1→GPU0、GPU2→GPU1、...となってしまったので、値を変更しながらどのGPUに紐付いているか確認が必要です。

# sudo nvidia-settings -a '[gpu:0]/GPUGraphicsClockOffset[3]=100'
# sudo nvidia-settings -a '[gpu:1]/GPUGraphicsClockOffset[3]=200'

結果を確認します。

# nvidia-smi -q -d CLOCK
...
GPU 00000000:02:00.0
    Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 3802 MHz
        Video                       : 1708 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    SM Clock Samples
        Duration                    : 16.40 sec
        Number of Samples           : 100
        Max                         : 1936 MHz
        Min                         : 1898 MHz
        Avg                         : 1924 MHz
...

GPU 00000000:03:00.0
    Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 3802 MHz
        Video                       : 1708 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    SM Clock Samples
        Duration                    : 13.53 sec
        Number of Samples           : 100
        Max                         : 1923 MHz
        Min                         : 1898 MHz
        Avg                         : 1916 MHz

GPUのクロックを最大値の1911MHzに上げることができました。

GPUのメモリクロックの設定

GPUのメモリクロックをオフセット値で設定してみます。GeForce GTX 1060は、nvidia-smiコマンドでは、GPUのメモリクロックの設定が難しいようなので、nvidia-settingsコマンドを使用して設定を行います。

# nvidia-smi -q -d CLOCK
...
GPU 00000000:02:00.0
    Clocks
        Graphics                    : 1898 MHz
        SM                          : 1898 MHz
        Memory                      : 3802 MHz
        Video                       : 1695 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...

    Memory Clock Samples
        Duration                    : 9.04 sec
        Number of Samples           : 100
        Max                         : 3802 MHz
        Min                         : 3802 MHz
        Avg                         : 3802 MHz
...

GPU 00000000:03:00.0
    Clocks
        Graphics                    : 1898 MHz
        SM                          : 1898 MHz
        Memory                      : 3802 MHz
        Video                       : 1695 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    Memory Clock Samples
        Duration                    : 11.63 sec
        Number of Samples           : 100
        Max                         : 3802 MHz
        Min                         : 3802 MHz
        Avg                         : 3802 MHz

GPUのメモリクロックを最大値にするため、GPU0、GPU1は200MHz程度、クロックアップしてみます。

# sudo nvidia-settings -a '[gpu:0]/GPUMemoryTransferRateOffset[3]=200'
# sudo nvidia-settings -a '[gpu:1]/GPUMemoryTransferRateOffset[3]=200'

結果を確認します。

# nvidia-smi -q -d CLOCK
...
GPU 00000000:02:00.0
    Clocks
        Graphics                    : 1898 MHz
        SM                          : 1898 MHz
        Memory                      : 3898 MHz
        Video                       : 1695 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...
    Memory Clock Samples
        Duration                    : 27.22 sec
        Number of Samples           : 100
        Max                         : 3902 MHz
        Min                         : 3898 MHz
        Avg                         : 3898 MHz
...

GPU 00000000:03:00.0
    Clocks
        Graphics                    : 1873 MHz
        SM                          : 1873 MHz
        Memory                      : 3898 MHz
        Video                       : 1683 MHz
...
    Max Clocks
        Graphics                    : 1911 MHz
        SM                          : 1911 MHz
        Memory                      : 4004 MHz
        Video                       : 1708 MHz
...

    Memory Clock Samples
        Duration                    : 9.19 sec
        Number of Samples           : 100
        Max                         : 3902 MHz
        Min                         : 3898 MHz
        Avg                         : 3899 MHz

GPUのメモリクロックは、指定値の約半分の100MHz程度クロックアップされました。

GPUのファンの回転速度の設定

GPUのファンの回転速度を設定します。ethOSを使用している場合、ethOSのlocal.confで設定している値が使用されますが、リアルタイムで回転数を変更する場合は、nvidia-settingsコマンドを使用すると便利です。まずは、ファンの回転速度の設定が可能であることを確認します。

# nvidia-settings -q GPUFanControlState

  Attribute 'GPUFanControlState' (025aeb:0[gpu:0]): 1.
    'GPUFanControlState' is a boolean attribute; valid values are: 1 (on/true) and 0 (off/false).
    'GPUFanControlState' can use the following target types: GPU.
  Attribute 'GPUFanControlState' (025aeb:0[gpu:1]): 1.
    'GPUFanControlState' is a boolean attribute; valid values are: 1 (on/true) and 0 (off/false).
    'GPUFanControlState' can use the following target types: GPU.

GPUの温度を確認します。

# nvidia-settings -q GPUCoreTemp

  Attribute 'GPUCoreTemp' (025aeb:0.0): 54.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: X Screen, GPU.
  Attribute 'GPUCoreTemp' (025aeb:0.1): 57.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: X Screen, GPU.
  Attribute 'GPUCoreTemp' (025aeb:0[gpu:0]): 54.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: X Screen, GPU.
  Attribute 'GPUCoreTemp' (025aeb:0[gpu:1]): 57.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: X Screen, G

問題なさそうであれば、GPUのファンの回転速度を調整してみます。以下は、FANの回転数を70%に設定しています。

# nvidia-settings -a GPUTargetFanSpeed=70

ethOS起動時の設定

ethOS起動時にグラフィックボードの設定を変更するためには、ethosユーザのホームディレクトリにあるcustom.shにコマンドを記載しておきます。ファンの回転数は、ethOSのlocal.confで指定する方針です。

# vi ~/custom.sh
#!/bin/bash
sudo nvidia-smi -pl 80

sudo nvidia-settings -a '[gpu:0]/GPUMemoryTransferRateOffset[3]=200'
sudo nvidia-settings -a '[gpu:1]/GPUMemoryTransferRateOffset[3]=200'

exit 0

おわりに

GPUの設定を、GPUメーカのコマンドを使用して変更しました。