TDP 340W짜리가 실제로는 222W — 파워 계산기를 실측으로 고쳤다
파워서플라이 용량 계산기를 만들 때 GPU의 TDP를 그대로 더했습니다. 실제로 얼마나 쓰는지 재본 적이 없었습니다. 재봤더니 정격의 65%였습니다.
측정 결과
RTX 3060 12GB 두 장, 전력 상한 각 170W(합계 340W)입니다.
| 항목 | 값 |
|---|---|
| 정격 합계 | 340W |
| 추론 중 피크 (average) | 220W |
| 추론 중 피크 (instant) | 222W |
| 정격 대비 | 65% |
| 유휴 | 44W |
| 생성 속도 | 93.0 tok/s |
이 작업에서는 TDP를 그대로 더하면 118W를 과하게 잡습니다. 다만 이것은 이 추론 실행에서의 이야기이고, 게임 부하를 비교 측정한 것은 아닙니다.
왜 TDP만큼 안 쓰는가
TDP는 게임이나 벤치마크처럼 연산 유닛을 계속 채우는 부하를 기준으로 정해집니다.
LLM 추론이 그만큼 못 쓰는 이유로 흔히 드는 설명은 메모리 대역폭 제약입니다. 토큰을 하나 만들 때마다 모델 가중치를 메모리에서 읽어와야 해서, 연산 유닛이 데이터를 기다리는 구간이 생긴다는 것입니다.
다만 이번 측정으로 이 설명을 확인한 것은 아닙니다. 잰 것은 전력뿐이고, 메모리 대역폭 사용률이나 연산 유닛 점유율, 클럭은 재지 않았습니다. 비교용 게임 부하 측정도 없습니다. 원인 규명이 아니라 “정격보다 적게 쓴다”는 사실만 확인한 것으로 읽어주십시오.
계산기를 고쳤습니다
파워 계산기에 작업 유형 항목을 추가했습니다.
| 작업 유형 | 계수 | 근거 |
|---|---|---|
| 게임·벤치마크 | 1.0 | TDP 기준, 최악 부하 |
| LLM 추론 | 0.7 | 이번 측정(65%)에 여유를 둔 값 |
| 학습·파인튜닝 | 0.95 | 추론보다 연산 밀도가 높음 |
추론 계수를 실측값 0.65가 아니라 0.7로 잡은 이유가 있습니다. 측정은 한 모델, 한 GPU 조합에서만 했습니다. 다른 모델이나 배치 처리에서는 더 올라갈 수 있으므로 여유를 뒀습니다. 파워 용량은 모자라는 쪽이 위험합니다.
학습 계수 0.95는 측정하지 않은 추정값입니다. 학습은 추론보다 연산 밀도가 높아 TDP에 가깝다는 일반적인 이해에 근거했고, 직접 재지 않았습니다.
트랜지언트는 검증하지 못했습니다
계산기에는 트랜지언트 피크 항목도 있습니다. GPU가 순간적으로 정격의 1.4~2배를 끌어당기는 현상으로, 파워의 보호회로가 이걸 이상으로 판단하면 시스템이 꺼집니다. RTX 3060이 속한 30 시리즈가 특히 심한 것으로 알려져 있습니다.
이번 측정으로는 확인하지 못했습니다.
nvidia-smi에는 평균값(power.draw.average)과 순간값(power.draw.instant)이 따로 있습니다. 순간값이라면 스파이크를 잡을 것 같지만, 100ms 간격으로 동시에 수집해 비교한 결과는 이렇습니다.
| 피크 | |
|---|---|
| average | 220W |
| instant | 222W |
| 차이 | 1.6W |
차이가 1.6W에 그칩니다.
이 결과로 말할 수 있는 것은 **“이 방법으로는 트랜지언트를 관측하지 못했다”**까지입니다. 다음 가능성이 모두 남아 있습니다.
instant값도 드라이버 단에서 평활화돼 있을 가능성- 이 부하가 안정적이어서 애초에 큰 스파이크가 없었을 가능성
- 100ms 폴링 사이에 일어난 스파이크를 놓쳤을 가능성
- 두 지표의 센서 갱신 주기가 비슷할 가능성
100ms는 제가 요청한 폴링 간격일 뿐, 센서가 실제로 얼마나 자주 갱신되는지, 측정 창이 얼마인지는 확인하지 못했습니다.
제대로 재려면 오실로스코프와 전류 프로브로 12V 레일에 직접 걸어야 합니다. 지금 장비로는 불가능합니다.
그래서 계산기의 트랜지언트 항목은 제조사 자료와 공개된 측정에 근거한 추정값으로 남겨두고, 그렇다고 표시했습니다. 검증하지 못한 것을 검증한 것처럼 두지 않겠습니다.
실용적인 결론
추론 전용이라면 게임 기준으로 잡은 파워는 과할 수 있습니다. 다만 같은 PC로 게임도 한다면 게임 기준을 쓰십시오. 파워는 부족한 쪽이 위험합니다.
유휴 44W를 계산에 넣으십시오. 모델을 올려둔 채 24시간 대기시키면 월 32kWh입니다. 실제 생성에 쓰는 전력보다 큽니다.
정격 대비 65%라는 숫자를 여유로 오해하면 안 됩니다. 이건 이 모델, 이 GPU, 이 설정에서의 값입니다. 배치 크기를 키우거나 다른 모델을 쓰면 올라갑니다.
측정 방법
- RTX 3060 12GB × 2, 전력 상한 각 170W
- AMD Ryzen 7 5800X, RAM 125GB
- Ollama 0.20.0, 드라이버 590.48.01
- 모델 Qwen3-Coder 30B-A3B Q4_K_M,
num_predict=400,seed=42 nvidia-smi100ms 간격으로power.draw.average와power.draw.instant동시 수집- 같은 시점의 두 장 값을 합산한 뒤 그 합계의 최대값을 취했습니다. 각 GPU의 최대값을 따로 더하면 서로 다른 시점의 값을 합치게 되어 실제보다 커질 수 있습니다. (이번 데이터에서는 두 방식이 우연히 222.1W로 같았습니다.)
- 73개 샘플, 단일 실행
측정 화면은 터미널 녹화로 저장소에 남겨두었습니다.
한계
- GPU 전력만 측정했습니다. CPU와 전원부 손실이 빠져 있어 벽면 소비는 더 큽니다. CPU 전력은 이 환경에서 센서 접근이 막혀 재지 못했습니다.
- 트랜지언트를 측정하지 못했습니다. 소프트웨어 폴링의 시간 해상도 한계입니다.
- 모델 하나, GPU 한 구성입니다. 다른 조합에서 비율이 달라질 수 있습니다.
- 학습 계수 0.95는 추정입니다. 직접 측정하지 않았습니다.
- 전력 상한이 170W로 설정된 상태입니다. 상한을 올리면 결과가 달라집니다.
- 단일 실행입니다. 반복 측정을 하지 않아 피크의 재현성과 변동폭을 알 수 없습니다.
nvidia-smi전력값 자체의 정확도와 분해능, 센서 갱신 주기를 확인하지 않았습니다.- 게임 부하를 비교 측정하지 않았습니다. 정격 340W가 게임에서 실제로 나오는 값인지 확인한 것이 아닙니다.
- 프롬프트 길이, 컨텍스트, 배치 크기, 두 GPU 사이의 레이어 분할 같은 실행 조건이 전력에 영향을 줄 수 있는데 이번에는 한 조건만 측정했습니다.
- 측정 원본과 녹화는 저장소에 공개해 두었습니다. 다른 환경의 결과를 알려주시면 출처를 밝히고 반영하겠습니다.