DGX Spark GPU 클럭 제한하기: sparkLimiter 설치와 서비스 등록
sparkLimiter로 DGX Spark GPU 클럭을 제한하고 systemd 서비스로 등록하는 방법. 설치부터 재부팅 자동 적용 확인, 제한값 변경과 해제까지 정리합니다.
sparkLimiter로 DGX Spark GPU 클럭을 제한하고 systemd 서비스로 등록하는 방법. 설치부터 재부팅 자동 적용 확인, 제한값 변경과 해제까지 정리합니다.
목차
DGX Spark의 GPU 클럭 상한을 정하고, 재부팅한 뒤에도 같은 제한을 적용하려면 sparkLimiter를 사용할 수 있다. nvidia-smi -lgc로 클럭 범위를 설정하고, 부팅할 때 다시 적용하는 systemd 서비스를 등록하는 Bash 스크립트다.
아래는 DGX Spark 한 대에서 직접 실행하는 방법이다. 기본값인 0,2200을 사용하며, 필요하면 0,1800처럼 바꿀 수 있다.
이 글은 저장소 코드를 기준으로 정리했다. 실제 DGX Spark에서 설치하거나 성능·온도·소비전력 변화를 측정한 결과는 아니다. 2200MHz와 1800MHz는 설정 예시이며, 권장 성능값이나 절감 효과를 보장하지 않는다.
DGX Spark의 터미널에서 실행한다. NVIDIA 드라이버, systemd, Bash가 필요하고, 서비스를 등록할 계정에는 sudo 권한이 있어야 한다. 스크립트는 /usr/bin/nvidia-smi 경로를 사용한다.
nvidia-smi에서 GPU를 정상적으로 인식하는지 먼저 확인한다. 드라이버 오류가 있으면 클럭 제한보다 드라이버 문제를 먼저 해결한다.
Git이 없다면 Ubuntu/Debian 기준으로 설치한다. 이 패키지 설치 명령은 sparkLimiter가 아니라 운영체제의 준비 단계다.
sudo apt-get update
sudo apt-get install -y gitgit clone https://github.com/MiaAI-Lab/sparkLimiter.git
cd sparkLimiter관리자 권한으로 시스템 설정을 바꾸는 스크립트이므로 실행 전에 내용을 확인한다.
less spark-limiter.sh별도의 빌드나 Python 패키지 설치는 필요 없다. 저장소의 실행 파일을 그대로 사용한다.
현재 접속한 Spark에 최대 2200MHz 범위를 요청하려면 다음 명령을 실행한다.
./spark-limiter.sh --clocks 0,2200 localhost--clocks MIN,MAX: MHz 단위의 최소·최대 클럭 범위.0,2200: 최소 0, 최대 2200MHz를 요청한다. GPU를 항상 2200MHz로 고정한다는 의미는 아니다.localhost: 현재 장비에 적용한다. 로컬 적용에는 SSH가 필요 없다.--clocks를 생략해도 기본값은 0,2200이다. 글에서는 적용할 값을 분명히 보이도록 명시했다.
이 명령은 GPU 클럭 설정과 시스템 서비스 등록을 즉시 수행한다. 전체 스크립트 앞에
sudo를 붙이지 않아도 된다. 필요한 작업에서 스크립트가sudo를 호출한다. 명시적으로localhost나 호스트를 지정하면 장비 선택 확인 없이 바로 적용하므로 대상을 먼저 확인한다.
스크립트가 처리하는 작업은 다음과 같다.
sudo /usr/bin/nvidia-smi -lgc 0,2200으로 클럭 범위 적용./etc/systemd/system/spark-gpu-clock-limit.service 생성.따라서 별도로 서비스 파일을 작성하거나 systemctl enable을 실행할 필요는 없다. GPU 클럭을 제어하는 도구이며, CPU 클럭이나 GPU 전력 제한값을 설정하는 도구는 아니다. 실제로 허용되는 클럭 범위는 장비와 드라이버의 지원 여부에 따른다.
다음 명령도 대상 DGX Spark에서 실행한다.
systemctl is-enabled spark-gpu-clock-limit.service
systemctl status --no-pager spark-gpu-clock-limit.service
systemctl cat spark-gpu-clock-limit.service확인할 항목은 다음과 같다.
is-enabled 결과가 enabled인지 확인한다.Type=oneshot이므로 정상 적용 후 active (exited)로 표시될 수 있다.ExecStart가 /usr/bin/nvidia-smi -lgc 0,2200인지 확인한다.현재 부팅에서 실행한 기록과 GPU 클럭 정보도 확인한다.
sudo journalctl -b -u spark-gpu-clock-limit.service --no-pager
/usr/bin/nvidia-smi -q -d CLOCK작업 중 실제 그래픽 클럭을 1초 간격으로 관찰하려면 다음 명령을 사용한다. 종료는 Ctrl+C다.
/usr/bin/nvidia-smi \
--query-gpu=name,clocks.current.graphics \
--format=csv -l 1
Max Clocks는 설정한 제한값을 그대로 읽어 주는 항목이 아니다. NVIDIA 문서에서 이 값은 GPU의 설계상 최대 클럭을 뜻한다. 설치 스크립트 마지막 출력에도clocks.max.gr가 나오지만, 이 숫자가 2200으로 바뀌어야 성공하는 것은 아니다. 서비스 설정과 실행 기록을 함께 확인해야 한다. 유휴 상태에서 현재 클럭이 낮게 보이는 것만으로 제한 적용이 입증되는 것도 아니다.
부팅 후 자동 적용까지 확인하려면 작업을 저장하고, 실행 중인 GPU 작업을 정리한 뒤 재부팅한다. 재부팅은 현재 연결과 작업을 중단하므로 가능한 시점에만 실행한다.
sudo systemctl reboot다시 접속한 뒤 설치 명령을 재실행하지 말고 위의 서비스 상태·설정·현재 부팅 로그를 확인한다. 그래야 수동 적용이 아니라 부팅 시 적용 여부를 확인할 수 있다.
최대값을 1800MHz로 바꾸려면 같은 스크립트를 다시 실행한다.
./spark-limiter.sh --clocks 0,1800 localhost서비스 파일도 새 값으로 교체되고 즉시 재시작된다. 이후 재부팅에도 이 값이 사용된다. 다시 2200MHz로 변경하려면 다음과 같이 실행한다.
./spark-limiter.sh --clocks 0,2200 localhostnvidia-smi -lgc만 따로 실행하면 현재 클럭 설정은 바뀌어도 서비스에 저장한 값은 바뀌지 않는다. 재부팅 뒤에도 유지할 값은 스크립트로 변경한다.
sudo systemctl stop spark-gpu-clock-limit.service정상 활성 상태인 서비스를 중지하면 ExecStop의 nvidia-smi -rgc가 실행되어 GPU 클럭 설정을 기본값으로 되돌린다. 부팅 자동 실행은 유지되므로 다음 부팅에는 제한이 다시 적용된다.
다시 적용하려면 다음과 같이 실행한다.
sudo systemctl restart spark-gpu-clock-limit.servicesudo systemctl disable --now spark-gpu-clock-limit.service
sudo /usr/bin/nvidia-smi -rgc첫 명령은 자동 실행을 해제하고 현재 서비스도 중지한다. 두 번째 명령은 클럭 초기화를 명시적으로 수행한다. disable만 사용하고 --now를 빼면 현재 서비스는 중지되지 않는다.
서비스를 남겨 둔 상태에서 다시 활성화하려면 다음과 같이 실행한다.
sudo systemctl enable --now spark-gpu-clock-limit.service내려받은 sparkLimiter 디렉터리에서 실행한다.
./spark-limiter.sh --uninstall localhost서비스 중지·자동 실행 해제, GPU 클럭 초기화, 서비스 파일 삭제를 처리한다. 내려받은 저장소 디렉터리는 삭제하지 않는다.
nvidia-smi -rgc만 실행하면 서비스는 남는다. 서비스가 활성화되어 있으면 다음 부팅 때 제한이 다시 적용되므로, 영구 해제에는 자동 실행 해제 또는 제거가 필요하다.
한 대만 설정한다면 앞의 localhost 방식으로 충분하다. 여러 Spark를 관리한다면 SSH로 대상을 지정할 수 있다. 아래 ubuntu@spark1은 실제 계정과 호스트명으로 바꾼다.
./spark-limiter.sh --clocks 0,2200 ubuntu@spark1여러 대도 공백으로 나열한다.
./spark-limiter.sh --clocks 0,2200 ubuntu@spark1 ubuntu@spark2원격 대상에도 /usr/bin/nvidia-smi, systemd, sudo 권한이 필요하다. 최초 접속 시 SSH 호스트 키 지문이 올바른 장비의 것인지 확인한다. 상태 확인 명령은 각 대상 장비에서 실행한다.
자동 검색을 사용하려면 다음 명령으로 후보 목록을 확인할 수 있다. 검색에는 대상 장비로의 SSH 키 인증이 필요하다.
./spark-limiter.sh --list호스트를 직접 지정한 명령은 검색·장비 선택을 생략한다. 장비가 확실할 때는 명시적으로 대상을 지정하는 편이 적용 범위를 확인하기 쉽다.
저장소가 업데이트되면 기본값이나 동작이 달라질 수 있으므로 실행 전에 현재 코드를 확인한다.