Bagaimana cara menyesuaikan kecepatan kipas GPU NVIDIA pada node tanpa kepala?

9

Bagaimana mungkin untuk mengontrol kecepatan kipas dari beberapa GPU NVIDIA konsumen seperti Titan dan 1080 Ti pada node tanpa kepala yang menjalankan Linux?

Aleksandr Dubinsky
sumber

Jawaban:

5

Berikut ini adalah metode sederhana yang tidak memerlukan skrip, menghubungkan monitor palsu, atau mengutak-atik dan dapat dieksekusi melalui SSH untuk mengontrol beberapa penggemar GPU NVIDIA. Ini telah diuji di Arch Linux.

Identifikasi ID PCI kartu Anda:

Sunting : Saya sekarang tidak yakin apa metode yang terbaik. Sebelumnya, saya menyarankan lspci -k | grep -A 2 -E "(VGA|3D)". Namun, ini tidak memberikan ID yang benar pada sistem Threadripper baru saya.

Apa yang berhasil adalah sudo startx, buka /var/log/Xorg.0.log(atau lokasi apa pun yang startX daftar dalam outputnya di bawah baris "Log file:"), dan cari baris NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>.

Edit /etc/X11/xorg.conf

Berikut adalah contoh untuk mesin tiga GPU:

Section "ServerLayout"
        Identifier "dual"
        Screen 0 "Screen0"
        Screen 1 "Screen1" RightOf "Screen0"
        Screen 1 "Screen2" RightOf "Screen1"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:5:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:6:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:9:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Screen"
        Identifier     "Screen0"
        Device         "Device0"
EndSection

Section "Screen"
        Identifier     "Screen1"
        Device         "Device1"
EndSection

Section "Screen"
        Identifier     "Screen2"
        Device         "Device2"
EndSection

The BusIDharus sesuai dengan ID PCI kami mengidentifikasi di langkah sebelumnya. Opsi ini AllowEmptyInitialConfigurationmemungkinkan X untuk memulai walaupun tidak ada monitor yang terhubung. Opsi ini Coolbitsmemungkinkan penggemar dikendalikan. Itu juga dapat memungkinkan overclocking, tetapi ini belum diuji oleh saya.

Edit /root/.xinitrc

nvidia-settings -q fans
nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUTargetFanSpeed=75
nvidia-settings -a [gpu:1]/GPUFanControlState=1 -a [fan:1]/GPUTargetFanSpeed=75
nvidia-settings -a [gpu:2]/GPUFanControlState=1 -a [fan:2]/GPUTargetFanSpeed=75

cat

Saya menggunakan .xinitrc untuk menjalankan pengaturan nvidia untuk kenyamanan, meskipun mungkin ada cara lain. Di sini, saya mengatur penggemar ke 75%. Saya mencegah X server menutup dengan catperintah kosong . Ini tidak sepenuhnya diperlukan, tetapi saya kadang-kadang menemukan masalah dengan kartu yang menolak untuk meninggalkan status daya rendah P8 jika X ditutup. Baris pertama akan mencetak setiap kipas GPU di sistem.

Luncurkan X

sudo startx -- :0

Anda dapat menjalankan perintah ini dari SSH. Outputnya adalah:

Current version of pixman: 0.34.0
    Before reporting problems, check http://wiki.x.org
    to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
    (++) from command line, (!!) notice, (II) informational,
    (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat May 27 02:22:08 2017
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"

  Attribute 'GPUFanControlState' (pushistik:0[gpu:0]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:0]) assigned value 75.


  Attribute 'GPUFanControlState' (pushistik:0[gpu:1]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:1]) assigned value 75.


  Attribute 'GPUFanControlState' (pushistik:0[gpu:2]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:2]) assigned value 75.

Pantau suhu dan kecepatan jam

nvidia-smidapat digunakan untuk mengamati suhu dan daya tarik. Temperatur yang lebih rendah akan memungkinkan kartu untuk clock lebih tinggi dan meningkatkan daya tariknya. Anda dapat menggunakan sudo nvidia-smi -pl 150untuk membatasi penarikan daya dan menjaga kartu tetap dingin, atau menggunakannya sudo nvidia-smi -pl 300untuk membuatnya overclock. 1080 Ti saya berjalan pada 1480 MHz jika diberikan 150W, dan lebih dari 1800 MHz jika diberikan 300W, tetapi ini tergantung pada beban kerja. Anda dapat memonitor kecepatan jam mereka dengan nvidia-smi -qatau lebih khusus,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

Kembali ke manajemen kipas otomatis.

Mulai ulang. Saya belum menemukan cara lain untuk membuat para penggemar otomatis.

Aleksandr Dubinsky
sumber
Apakah Anda dapat mengontrol kipas secara individual di setiap GPU dengan cara ini? Saya telah melihat bahwa kartu EVGA 1080 Ti menggunakan metode ini hanya mengubah # 1 (dari 3 penggemar). Adakah rekomendasi untuk merek ramah Linux yang tidak menggunakan Metode konfigurasi non-standar (seperti yang dilakukan EVGA)?
ehiller
@ehiller Saya hanya memiliki kartu Edisi Pendiri yang memiliki kipas gaya blower tunggal. Pendingin seperti itu berfungsi lebih baik ketika banyak kartu berada dalam suatu sistem. Apa yang nvidia-settings -q fansditunjukkan? (Anda dapat menjalankannya di dalam .xinitrc) Mungkin Anda dapat menyesuaikan semua penggemar jika Anda mengatasinya dengan benar.
Aleksandr Dubinsky
1
@Arin Tidak yakin, tetapi apakah sudah AllowEmptyInitialConfigurationdiatur dengan benar untuk PCI ID yang benar di xorg.conf? File itu bisa rumit.
Aleksandr Dubinsky
1
Ada alat yang disediakan oleh NVIDIA untuk menghasilkan file xorg.conf secara otomatis dan berfungsi dengan sangat baik:nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
Hubert Perron
1
Afaik Anda tidak dapat undervolt GPU NVIDIA tanpa mengacaukan BIOS kustom. Sebaliknya aku menetapkan perangkat lunak nilai batas daya di watt: nvidia-smi -pl 120. Ini akan membatasi konsumsi daya setiap GPU hingga 120W. Anda juga dapat melakukan overclock / underclock core dan mem menggunakan nvidia-smiatau nvidia-settings. Ada contoh overclocking dalam nvidia-smidokumen di sini: devblogs.nvidia.com/... Jika Anda telah nvidia-settingsmenginstal Anda dapat menerapkan offset jam tanpa harus menggunakan jam tertentu:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Hubert Perron
2

Saya telah menulis skrip Python yang dapat diinstal untuk melakukan sesuatu yang mirip dengan saran @ AlexsandrDubinsky .

Ketika Anda menjalankan fans.py, itu menyiapkan server X sementara untuk setiap GPU dengan layar palsu terpasang. Kemudian, loop di atas GPU setiap beberapa detik dan mengatur kecepatan kipas sesuai suhu mereka. Ketika skrip mati, ia mengembalikan kontrol kipas ke driver dan membersihkan server X.

Andy Jones
sumber
Terima kasih! Sesuatu yang saya coba cari tahu tetapi tidak bisa adalah bagaimana melakukan semua ini di dalam Docker dan menghindari menginstal X server. Sudahkah Anda mencoba ini?
Aleksandr Dubinsky
Saya belum mencobanya, saya takut, dan saya tidak bisa memikirkan cara untuk melakukannya tanpa X server dapat diakses. Harus mengatur kecepatan kipas dengan cara lain selainnvidia-settings
Andy Jones
Nah, driver nvidia dapat diakses di dalam kontainer dan dapat digunakan untuk menjalankan misalnya CUDA. Saya pikir mungkin untuk meluncurkan server X dan berbicara dengan driver nvidia, tapi sejauh ini saya belum beruntung.
Aleksandr Dubinsky