nvoc: 멀티 GPU 지원, 스크립팅 및 AI 활용을 위한 개선을 포함한 Linux 오버클러킹
요약
Linux 환경에서 NVIDIA GPU 오버클러킹을 지원하는 CLI 도구인 nvoc v0.3.0이 출시되었습니다. 이번 업데이트는 멀티 GPU 지원, UUID 기반 카드 선택, JSON 출력 지원을 통해 로컬 LLM 실행을 위한 하드웨어 최적화를 강화했습니다.
핵심 포인트
- 멀티 GPU 시스템에서 인덱스, UUID, 정규표현식으로 특정 카드 지정 가능
- JSON 출력 지원으로 스크립트 및 자동화 워크플로우 구현 용이
- Blackwell 아키텍처 기반의 RTX PRO 카드 등 워크스테이션 지원 확대
- 부팅 시 설정을 적용하는 안정적인 방법 제공
최신 버전은 로컬 LLM (AI) 실행을 위한 오버클러킹 (overclocking)에 초점을 맞추었습니다. 주로 더 나은 메모리 OC (overclocking) 지원과 단일 시스템 내에서 혼합된 GPU 모델을 타겟팅하는 개선된 지원을 제공합니다. 계속 읽어보세요.
지난 9월, 저는 Linux에서 RTX 50-series 카드의 오버클러킹 (overclocking) 및 언더볼팅 (undervolting)을 위한 인체공학적 CLI 도구인 NVOC - NVIDIA GPU Overclocking for Linux에 대해 게시한 바 있습니다.
이 도구는 현재 v0.3.0 버전입니다. 멀티 GPU 지원, 기계 판독 가능 출력 (machine-readable output), 몇 가지 추가 카드 지원, 그리고 부팅 시 설정을 적용하는 깔끔한 방법을 채택했습니다.
하나 이상의 GPU
첫 번째 릴리스는 사용자가 하나의 카드를 보유하고 있으며 디바이스 0 (device 0)에서 작동한다고 가정했습니다. 멀티 카드 시스템에서 특정 GPU를 지정할 방법이 없었습니다.
이제 -d/--device 플래그가 있습니다. 가장 간단한 형태는 인덱스(index)를 받거나, 쉼표로 구분된 인덱스 목록을 받습니다:
# 카드 하나
sudo nvoc -d 1 -o 856
...
인덱스는 재부팅하여 순서가 뒤섞이기 전까지는 편리합니다. NVML은 인덱스가 고정되어 있음을 보장하지 않으므로, 재시작 후에도 유지되기를 원하는 항목에 대해서는 안정적인 요소를 선택하십시오.
개수를 세지 않고 카드 선택하기
UUID, 이름의 부분 문자열(substring), 또는 이름에 대한 정규 표현식(regex)을 사용하여 카드를 타겟팅할 수 있습니다:
# 재부팅 시에도 안정적임
sudo nvoc -d GPU-1234... -o 856
...
5090 하나와 몇 개의 5060 Ti가 있는 본체에서는, 이번 부팅에서 드라이버가 각 카드에 어떤 인덱스를 할당했는지 계산하는 것보다 name:5090을 사용하는 것이 더 쉽습니다.
nvoc list
카드를 선택하려면 먼저 기계에 무엇이 있는지 알아야 합니다. nvoc list는 읽을 수 있는 모든 GPU의 인덱스, 이름 및 UUID를 출력합니다:
$ nvoc list
0 - NVIDIA GeForce RTX 5090 - GPU-1234...
이 명령은 읽을 수 없는 장치를 만나면 오류를 내는 대신 건너뛰므로, 하나의 불안정한 카드가 전체 목록을 중단시키지 않습니다.
파이프(pipe)로 연결 가능한 출력
이제 info와 list 모두 --json 플래그를 지원하며, 이는 수동이 아닌 스크립트에서 nvoc를 구동하는 데 필요한 기능입니다:
nvoc info --json
nvoc list --json
또한 nvoc list --uuid 명령어가 있는데, 이는 한 줄에 하나씩 UUID만 출력합니다. 이 두 가지를 결합하면 아무것도 하드코딩하지 않고도 UUID를 통해 모든 카드에 동일한 설정을 적용할 수 있습니다:
for uuid in $(nvoc list --uuid); do
sudo nvoc -d "$uuid" -o 856 -m 2000 -p 105
done
(-d all은 한 번에 동일한 작업을 수행합니다. 루프는 카드마다 다른 값을 적용하고 싶을 때 유용합니다.)
RTX 50-series 전용이 아님
기존 버전은 이름을 매칭하여 카드가 RTX 50-series 부품인지 확인하는 방식으로 제한되었습니다. 이는 나태한 방식이었으며, 이름만 다를 뿐 동일한 아키텍처를 사용하는 RTX PRO Blackwell 카드들을 배제했습니다.
이제 nvoc는 NVML에 아키텍처를 직접 요청하며, Blackwell 기반이라면 무엇이든 수용하므로 워크스테이션 카드에서도 작동합니다. 다만, 여전히 Blackwell 전용입니다.
도움 요청
Ada Lovelace (RTX 4060, 4070, 4080, 4090) 및 Ampere (RTX 3050, 3060, 3070, 3080, 3090)에 대한 실험적 지원이 이미 존재하지만, 제가 가지고 있지 않은 하드웨어에서의 테스트가 필요합니다. 해당 카드 중 하나를 소유하고 계신다면, 관련 브랜치를 시도해 보고 결과를 보고해 주시면 감사하겠습니다.
초안 PR (Draft PRs): Ada Lovelace (40-series) 및 Ampere (30-series).
부팅 시 설정 적용하기
오버클러킹 (Overclock) 설정은 유지되지 않습니다. 재부팅하면 기본값(stock)으로 돌아갑니다. systemd oneshot 서비스를 사용하면 이를 자동으로 다시 적용할 수 있습니다:
# /etc/systemd/system/gpu-oc.service
[Unit]
Description=GPU overclock settings
...
sudo systemctl daemon-reload
sudo systemctl enable --now gpu-oc.service
멀티 GPU 시스템에서는 위에서 언급한 이유로 인덱스(index) 대신 UUID 또는 모델별로 지정하십시오. README에 전체 가이드가 포함되어 있습니다.
설치하기
Arch Linux를 사용 중이라면 현재 AUR에 등록되어 있습니다:
paru -S nvoc-cli
소스에서 빌드하는 방식은 여전히 cargo build --release를 통해 동일하게 작동합니다.
기타 작은 변경 사항들
reset명령은 첫 번째 버전이 의존했던 약간 편법적인(hacky) idle-clock 트릭 대신, NVML을 통해 직접 클럭을 복구하며, 첫 번째 오류에서 중단하는 대신 모든 리셋을 시도한 후 무엇이 실패했는지 보고합니다.--dry-run은 더 이상 루트(root) 권한이 필요하지 않습니다. 변경 사항을 미리 보는 것은 아무것도 수행하지 않으므로 권한이 필요하지 않아야 하기 때문입니다.- v2 NVML 이름 버퍼(name buffer)로 전환한 이후, 장치 이름이 잘리는 현상이 중단되었습니다.
info명령에서 이제 그래픽 클럭 옆에 메모리 클럭 오프셋(memory clock offset)이 표시됩니다.- 알 수 없는 장치 오류 발생 시, 사용자가 추측하게 두는 대신
nvoc list를 안내합니다.
$ nvoc info
driver: 595.71.05
gpu 0: NVIDIA GeForce RTX 5090
...
Repo 및 이슈: https://github.com/martinstark/nvoc/
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기