헤드리스 노드에서 NVIDIA GPU 팬 속도를 조정하는 방법은 무엇입니까?

헤드리스 노드에서 NVIDIA GPU 팬 속도를 조정하는 방법은 무엇입니까?

Linux를 실행하는 헤드리스 노드에서 여러 소비자 NVIDIA GPU(예: Titan 및 1080 Ti)의 팬 속도를 어떻게 제어합니까?

답변1

다음은 SSH 실행을 통해 여러 NVIDIA GPU의 팬을 제어하기 위해 스크립팅, 가짜 모니터 연결 또는 조작이 필요 없는 간단한 방법입니다. Arch Linux에서 테스트되었습니다.

xorg.conf 생성

sudo nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=7

이렇게 하면 /etc/X11/xorg.conf수동 방법과 유사하게 각 GPU에 대한 항목이 생성됩니다.

노트:일부 배포판(Fedora, CentOS, Manjaro)에는 이 옵션을 재정의 하고 설정하는 추가 구성 파일(예: in /etc/X11/xorg.conf.d/또는 )이 있습니다. 추가 구성 파일을 수정하거나 삭제해야 합니다. X11 로그 파일은 로드된 구성 파일을 보여줍니다./usr/share/X11/xorg.conf.d/xorg.confAllowNVIDIAGPUScreens

대안: xorg.conf를 수동으로 생성

카드의 PCI ID를 확인하세요.

nvidia-xconfig --query-gpu-info

PCI BusID분야를 찾아보세요 . 이는 커널에 보고된 버스 ID와 다릅니다.

또는 를 실행하고 sudo startx연 다음 /var/log/Xorg.0.log(또는 startX가 출력의 "Logfile:" 행 아래에 나열되는 모든 곳) 행을 찾으십시오 NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>.

편집하다/etc/X11/xorg.conf

xorg.conf다음은 3개의 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

BusID이전 단계에서 식별한 버스 ID와 일치 해야 합니다 . 이 옵션을 사용하면 모니터가 연결되어 있지 않아도 AllowEmptyInitialConfigurationX를 시작할 수 있습니다 . 이 옵션을 Coolbits사용하면 팬을 제어할 수 있습니다. 오버클럭도 가능합니다.

노트:일부 배포판(Fedora, CentOS, Manjaro)에는 이 옵션을 재정의 하고 설정하는 추가 구성 파일(예: in /etc/X11/xorg.conf.d/또는 )이 있습니다. 추가 구성 파일을 수정하거나 삭제해야 합니다. X11 로그 파일은 로드된 구성 파일을 보여줍니다./usr/share/X11/xorg.conf.d/xorg.confAllowNVIDIAGPUScreens

편집하다/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

편의상 .xinitrc를 사용하여 nvidia 설정을 수행하고 있지만 다른 방법도 있을 수 있습니다. 첫 번째 줄은 시스템의 각 GPU 팬을 인쇄합니다. 여기에서는 팬을 75%로 설정했습니다.

LaunchX

sudo startx -- :0

SSH에서 이 명령을 실행할 수 있습니다. 출력은 다음과 같습니다:

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.

온도 및 클럭 속도 모니터링

nvidia-smi그리고 nvtop온도와 전력 소비를 관찰하는 데 사용할 수 있습니다. 온도가 낮을수록 카드의 클럭이 높아지고 전력 소비가 늘어납니다. 이를 사용 sudo nvidia-smi -pl 150하여 전력 소비를 제한하고 카드를 시원하게 유지하거나 sudo nvidia-smi -pl 300오버클러킹할 수 있습니다. 내 1080 Ti는 150W가 제공되면 1480MHz에서 실행되고 300W가 제공되면 1800MHz 이상으로 실행되지만 작업 부하에 따라 다릅니다. 클럭 속도를 모니터링할 수 있습니다 nvidia-smi -q. 더 구체적으로 말하면watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

자동 팬 관리로 돌아갑니다.

재시작. 팬을 자동으로 작동시키는 다른 방법을 찾지 못했습니다.

답변2

@AlexsandrDubinsky가 제안한 것과 유사한 작업을 수행하기 위해 pip를 설치하는 Python 스크립트를 작성했습니다..

Fans.py를 실행하면 GPU당 임시 X 서버가 설정되고 가짜 모니터가 연결됩니다. 그런 다음 몇 초마다 GPU를 순환하고 온도에 따라 팬 속도를 설정합니다. 스크립트가 종료되면 팬 제어권을 드라이버에 반환하고 X 서버를 정리합니다.

답변3

이것과 유사한 StackExchange 질문에 대한 답변을 바탕으로 팬 속도를 100(또는 원하는 대로) 설정하는 쉘 스크립트를 작성했습니다.모두당신의 팔로어 수모두머신의 GPU 수입니다.

이 스크립트는 귀하의 컴퓨터에 X11이 설치되어 있지만 이를 사용하여 사용자에게 GUI를 제공하지 않는다고 가정합니다.

/bin/set-gpu-fan-speed.sh:

#!/bin/bash
set -Eeuxo pipefail

# Kill any existing X servers.
killall Xorg || true
sleep 5

# Create a NVIDIA-friendly Xorg config.
nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus

# Start a new X server for nvidia-settings to use.
export XDG_SESSION_TYPE=x11
export DISPLAY=:0
startx -- $DISPLAY &
sleep 5

# Determine the number of GPUs and fans on this machine.
NUM_GPUS=$(nvidia-settings -q gpus | grep -c 'gpu:')
NUM_FANS=$(nvidia-settings -q fans | grep -c 'fan:')

# For each GPU, enable fan control.
for ((i=0; i < NUM_GPUS; i++))
do
    nvidia-settings --verbose=all -a "[gpu:$i]/GPUFanControlState=1"
done

# For each fan, set fan speed to 100%.
for ((i=0; i < NUM_FANS; i++))
do
    nvidia-settings --verbose=all -a "[fan:$i]/GPUTargetFanSpeed=100"
done

# Kill the X server that we started.
killall Xorg || true

이러한 팬 속도 변경 사항은 재부팅 후에도 지속되지 않으므로 부팅할 때마다 위 스크립트를 실행하기 위해 시스템 장치 파일을 작성했습니다.

/etc/systemd/system/set-gpu-fan-speed.service:

[Unit]
Description="Sets the GPU fan speed"

[Service]
Type=oneshot
User=root
ExecStart=/bin/set-gpu-fan-speed.sh

[Install]
WantedBy=multi-user.target

위 파일을 생성한 후 루트로 다음 명령을 실행하면 재부팅 시 스크립트가 실행됩니다.

systemctl enable set-gpu-fan-speed.service
systemctl start set-gpu-fan-speed.service

관련 정보