TL;DR
GPU 언더볼팅은 부팅이나 게임, 일반적인 추론이 정상이어도 모델 학습에서 부동소수점 오류를 일으킬 수 있습니다. 작성자는 ROCm을 지원하도록 수정한 nanochat의 small 학습을 안정성 테스트로 사용했고, Radeon r9700에서 -65mV 설정은 수백 단계 뒤 loss가 nan으로 붕괴했지만 -50mV에서 안정화됐으며 최종적으로 -45mV를 선택했습니다. 단일 AMD/Linux 환경에서 small 학습은 20~30분이 걸렸고, 출력이 끝까지 숫자로 유지되는지를 기준으로 삼았습니다. 메모리 속도는 발열 때문에 기본값을 유지했으며, 다른 GPU와 다중 카드에서는 별도 검증이 필요합니다.
실용적 조언
- 언더볼팅 안정성을 부팅이나 게임만으로 판단하지 말고 nanochat의 small 학습을 끝까지 실행해 loss에 nan이 나타나는지 확인하는 편이 낫습니다. nan이 발생하면 전압 감소 폭이 과도할 가능성이 있으므로 설정을 완화해야 합니다. 작성자의 Radeon r9700에서는 -65mV가 실패했고 -50mV에서 안정화됐으며 최종 설정은 -45mV였습니다.
- GPU 모델과 실리콘 편차에 따라 안정 전압이 달라지므로 작성자의 수치를 그대로 적용하면 안 됩니다. 메모리 오버클록은 2600 Mhz에서도 즉시 문제가 보이지 않았지만 메모리 칩 온도가 빠르게 올라 기본 속도로 되돌렸습니다. 검증 범위가 AMD/Linux와 단일 Radeon r9700에 한정된 만큼 다른 하드웨어에서는 별도 확인이 필요합니다.
섹션별 상세
용어 해설
- GPU 언더볼팅(Undervolting)
- — GPU의 전압을 낮춰 전력 소비와 발열을 줄이는 조정 방식입니다. 전압을 과도하게 낮추면 부동소수점 연산에 오류가 생길 수 있으며, 게임이나 부팅처럼 연산 패턴이 제한된 작업에서는 드러나지 않던 불안정성이 모델 학습과 추론에서 나타날 수 있습니다.
- 양자화(Quantization)
- — 모델 가중치나 K/V 값을 더 낮은 정밀도의 숫자 형식으로 저장해 메모리 사용량과 연산 비용을 줄이는 기법입니다. 원문에서는 이미 손실이 있는 quant weights와 quant K/V 위에 GPU 연산 오류가 더해지면 출력이 빠르게 무너질 수 있다는 맥락으로 등장합니다.
- ROCm
- — AMD GPU에서 PyTorch와 같은 소프트웨어가 연산을 수행하도록 지원하는 컴퓨팅 플랫폼입니다. 작성자는 nanochat에 ROCm 지원을 추가해 CUDA용 GPU Burn과 유사한 GPU 안정성 검사를 모델 학습으로 수행하도록 구성했습니다.
- bfloat16(bf16)
- — 신경망 학습에서 사용하는 부동소수점 숫자 형식으로, 원문에서는 GPU 세대에 따라 nanochat 학습에 사용할 숫자 형식을 자동 선택하는 값으로 쓰입니다. Radeon r9700에서는 bf16이 선택되며 NANOCHAT_DTYPE 환경 변수로 float32 같은 형식으로 바꿀 수 있습니다.
코드 예제
bash runs/speedrun_amd.sh small # For AMD
bash runs/speedrun.sh small # For NvidiaAMD 또는 NVIDIA GPU에서 nanochat의 small 모델 학습을 실행하는 명령입니다.
step 00280/06500 (4.31%) | loss: 5.394929 | lrm: 1.00 | dt: 85.02ms | tok/sec: 192,705 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.38m | eta: 8.7m
step 00281/06500 (4.32%) | loss: 5.393692 | lrm: 1.00 | dt: 83.51ms | tok/sec: 196,193 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.38m | eta: 8.7m
step 00282/06500 (4.34%) | loss: 5.390520 | lrm: 1.00 | dt: 84.76ms | tok/sec: 193,305 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.38m | eta: 8.7m
step 00283/06500 (4.35%) | loss: 5.376654 | lrm: 1.00 | dt: 84.68ms | tok/sec: 193,490 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.38m | eta: 8.7m
step 00284/06500 (4.37%) | loss: nan | lrm: 1.00 | dt: 84.20ms | tok/sec: 194,580 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.38m | eta: 8.7m
step 00285/06500 (4.38%) | loss: nan | lrm: 1.00 | dt: 81.88ms | tok/sec: 200,086 | bf16_mfu: 0.00 | epoch: 1 pq: 0 rg: 13 | total time: 0.39m | eta: 8.7m학습 중 loss가 정상적인 수치에서 nan으로 바뀌며 부동소수점 연산이 붕괴한 사례를 나타내는 출력입니다.
언급된 도구
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.