-
[Linux]리눅스에서 NVIDIA GPU 팬 속도 설정하기HomeLAB/Linux 2024. 12. 2. 16:26
홈랩으로 GPU 서버를 구축해 사용하면서 NVIDIA 그래픽카드 만을 사용하는데, GPU가 서버용이 아니라 컨슈머용이 몇 개 섞여있어 제로팬 기능이 들어간 GPU가 몇 개 있습니다.(데이터 센터용이면 팬도 없지만..) 어차피 서버가 별도의 공간에 있어서 제로팬 기능으로 소음을 줄여야 할 필요가 없을뿐더러 성능에 문제가 생길 요지가 있기 때문에 모든 GPU의 팬 속도를 90%로 맞춰놓고 사용하고 있습니다. 이러면 소음은 늘어나겠지만 꾸준한 성능에는 도움이 됩니다.
물론 저처럼 소음을 신경 쓰지 않는다면 90%로 맞춰놓겠지만 원래는 GPU가 알아서 팬 속도를 조절하는 게 기본 값입니다. 하지만 팬 속도를 알아서 조절하는 경우가 소음이 더 심한 경우가 있기 때문에 팬 속도를 고정한다면 해결될 가능성도 있습니다. 이 글에서는 리눅스에서 팬 속도를 설정하는 거니 리눅스를 써야겠지만.. 메인 컴퓨터를 리눅스로 쓰는 사람이 몇이나 될지는 모르겠습니다. 아마 거진 채굴 관련 일을 시작하거나 나처럼 자체 구축 서버를 막 구축하기 시작한 사람이 아닐까?라는 생각...
여기서 주의해야 할 점은 이 글에서는 리눅스 운영체제에서 NVIDIA GPU에 대해서만 다루며, AMD와 Intel GPU에 대해서는 잘 모르니 물어봐도 대답해 줄 수 없습니다.
0. 시스템 사양
OS: Ubuntu 22.04 LTS
NVIDIA Driver: 550.127.08
1. NVIDIA GPU 드라이버 설치
당연히 GPU 팬 속도를 제어하기 전에 NVIDIA GPU를 제대로 사용하려면 드라이버를 설치해야 합니다. 설치까지 이 글에서 다룰 수는 없기에 아래의 공식 문서 링크를 보거나 알아서 구글링 해서 잘 설치하길 바랍니다.
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html#ubuntu
-NVIDIA 공식 문서(추천)
https://ubuntu.com/server/docs/nvidia-drivers-installation
- Ubuntu 서버 공식 문서
2. GPU 팬 속도 제어하기
2-1. Cool-Bit란?
먼저, NVIDIA 드라이버에 쿨비트 값을 설정하여 쿨링팬을 제어할 수 있게 설정해야 합니다. 플래그 형식이라 값에 따라서 설정되는 부분이 다르니 꼭 확인해야 합니다. Cool-Bit에 대하여 크게 관심이 없고 바로 설정하고 싶다면 이 부분을 생략해도 좋습니다.
CoolBit에 대한 ChatGPT 대답:
Cool-Bit는 NVIDIA 그래픽 드라이버에서 제공하는 설정으로, GPU의 쿨링팬 속도를 수동으로 조절하거나, 오버클럭과 같은 고급 설정을 활성화할 수 있도록 해줍니다. NVIDIA의 기본 설정에서는 GPU 팬 속도 및 일부 하드웨어 설정이 자동으로 조정되며 사용자 변경이 제한됩니다. Cool-Bit 설정을 활성화하면 사용자가 직접 팬 속도를 조절하거나 GPU 클럭 및 메모리 클럭을 조정할 수 있는 권한을 부여받습니다.# nvidia-xconfig --advanced-help를 사용했을 때의 cool-bits 관련 옵션 설명
--cool-bits=COOL-BITS, --no-cool-bits Enable or disable the "Coolbits" X configuration option. Setting this option will enable support in the NV-CONTROL X extension for manipulating GPU clock and GPU fan control settings. Default value is 0. For fan control set it to 4. WARNING: this may cause system damage and void warranties.
# 기본 초기값은 0이지만, 팬 컨트롤을 사용하려면 cool-bits를 4로 설정하면 됩니다.팬 컨트롤을 위한 값은 4(Bit 2)인데 나중에 전력 제한 등을 위하여 값을 28(Bit 2, 3, 4)로 설정합니다. 각 플래그에 대한 설명은 제가 정리한 아래를 참고해 주세요.
1 (Bit 0) 엔비디아 페르미 아키텍처 이전 구형 그래픽의 오버클럭을 활성화 2 (Bit 1) 각기 다른 메모리가 있는 GPU를 사용할 때 SLI를 초기화하려고 시도 4 (Bit 2) nvidia-settings 를 사용하여 GPU 팬 속도를 수동으로 구성할 수 있도록 설정 8 (Bit 3) nvidia-settings 를 사용하여 클럭을 조절 가능하도록 설정(드라이버 337.12 버전부터 페르미 아키텍처 이상에서 사용 가능) 16 (Bit 4) nvidia-settings 를 사용하여 전력을 수정 가능하도록 설정 2 (Bit 2)는 무슨 말인지 여러 사이트에서 번역을 돌려봐도 모르겠다.참고한 링크
더보기각 쿨비트의 플래그가 어떤 역할을 하는지는 아래의 사이트를 참고했습니다. 위키를 완전 신용하는 건 아니지만 해외 + 아치 리눅스의 유구한 전통을 생각한다면 공식 문서에 준하는 느낌이라 가져왔습니다.
https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks#Overclocking_and_cooling
공식 문서이다. 최신 드라이버에서는 왠지는 모르겠지만 8, 16만 알려주는데, 구버전 문서에서는 전부 알려주는 것 같습니다.
https://download.nvidia.com/XFree86/Linux-x86_64/396.51/README/xconfigoptions.html
2-2. Cool-Bit 설정하기
위의 2-1을 보자면, 팬 컨트롤의 값이 4(Bit 2)이고 설명에서도 4를 추천하지만, 28로 설정하여 GPU의 열 관리를 위한 다양한 기능 플래그를 켜놓는 것이라고 생각하면 됩니다. 어차피 설정 후에는 재부팅해야 하니까 사용하지 않더라도 켜놓는 것이 바람직할 수 있습니다. 대부분의 해외 포럼에서도 4는 문제가 약간 있으니 28을 추천하는 추세로 보입니다. 왠지는 모르겠는데 이게 더 잘 작동한다고..
# NVIDIA 드라이버의 설정을 쿨비트를 28로 변경하여 쿨링팬을 제어할 수 있게 한다. sudo nvidia-xconfig --enable-all-gpus --cool-bits=28 --allow-empty-initial-configuration # 재부팅 sudo reboot
각 부분에 대한 설명:
--enable-all-gpus: 모든 GPU에 대하여 설정.
--cool-bits=28: 쿨비트 값을 28(Bit 2, 3, 4)로 설정.
--allow-empty-initial-configuration: 디스플레이가 없더라도 X서버를 시작한다.
마지막의 --allow-empty-initial-configuration은 GPU 서버 혹은 채굴용으로 사용한다면 디스플레이를 기본적으로 사용하지 않는 게 쓸데없는 낭비를 줄이기 위해서 설정해 놓는데, 디스플레이를 항상 연결해 둔다면 저 설정이 없어도 되지 않나 싶습니다.
2-3. GPU 팬 속도 90%로 세팅하기
굳이 90%로 설정하지 않고 100%로 설정해도 되지 않나 싶지만, 나는 여유를 살짝 두는 편이 좋다고 생각해서 90%로 설정해 놨습니다. 딱히 큰 이유는 없으니 자신만의 값으로 세팅하면 될 것 같습니다.
# 모든 GPU에 대하여 팬 속도를 90%로 설정한다. sudo nvidia-settings --display :0 -a GPUFanControlState=1 -a GPUTargetFanSpeed=90
만약 다른 값으로 변경하고 싶다면 GPUTargetFanSpeed 값을 90에서 다른 값으로 변경하면 됩니다. 원래는 --display : 0 값이 없는 채로 설정했다가 아무리 해도 안되길래 레퍼런스 링크에서 저 값을 넣으면 해결된다고 해서 넣었더니 됐습니다. 매뉴얼에 보면 --display 옵션 자체가 없는 것으로 보입니다. -d는 있는데 같은 옵션인지는 잘 모르겠습니다. 아무튼 어떤 디스플레이에 연결되어 있는 GPU에 설정값을 넣느냐 뭐 그런 의미인 것 같은데 없으니 0으로 한 거 아닐까 싶기도 하고.. 조금 무책임한 말이지만, 잘 되니까 좋았쓰! 같은 느낌으로 쓰면 될 겁니다.
그리고 각 GPU 마다 다른 값을 넣어줄 수도 있겠지만 거기까지는 알아내진 못했습니다. -a '[gpu:값]/GPUTaregetFanSpeed=90'으로 설정하면 되지 않나 싶기도 한데 나는 어차피 모든 GPU에 대해서 설정할 거라 그 부분에 대해서는 따로 알아보고 직접 해보면 될 것 같습니다.
3. 결과
20241203 수정) 결괏값을 첨부안 해서 추가
nvidia-smi를 사용하면 첫 번째 줄인 GPU Fan 항목이 90%로 고정되어 있는 것을 확인할 수 있습니다.
TMI) Tesla P100은 데이터센터용으로 원래 팬이 없습니다.
4. 여담
man nvidia-settings으로 확인해 보니 여러 가지 사용 방법에 대해서 알 수 있었습니다. 홈 디렉터리에 .nvidia-settings-rc를 만들고 관련 옵션을 넣어주면 자동으로 설정되는 것 같긴 한데 시도해보진 않았습니다. 나는 서버를 껐다 켜도 적용되도록 서비스에 등록시켜서 사용하고 있어서 별로 관심 있게 본 내용은 아닙니다. 나중에라도 해야 한다면 좀 알아보긴 해야 할 것 같은데 지금은 굳이 할 필요가 있나 싶은 느낌이라..
레퍼런스
https://forums.developer.nvidia.com/t/how-to-set-fanspeed-in-linux-from-terminal/72705
'HomeLAB > Linux' 카테고리의 다른 글
[Linux] 도커로 Cloudflare Tunnel + Nginx Proxy Manager + Authelia 구성으로 포트 공개하지 않고 안전하게 외부로 서비스 공개하기 (1) 2025.02.16 [Linux]Nginx Proxy Manager(NPM)에서 DB 오류 날때 해결 방법 (0) 2025.01.24 [Linux]리눅스에서 NVIDIA GPU 전력 제한하기 (0) 2024.12.03