IL-0127 Meta · 2024-07-23 (게시일)ai-infra
Llama 3 405B 사전 학습은 16K GPU 규모라서, Meta 가 운영해 온 훨씬 큰 CPU 클러스터보다 고장 양상이 복잡했다. 학습은 동기식이어서 GPU 하나가 고장 나도 작업 전체를 다시 시작해야 할 수 있었다. 펌웨어와 리눅스 커널 업그레이드 같은 자동 클러스터 유지보수 때문에 하루에 적어도 한 번은 학습이 중단되었다.
54일 기록에서 학습 작업은 466번 중단되었고 419번이 예기치 않은 중단이었다. 약 78% 가 확인되었거나 의심되는 하드웨어 문제였고, GPU 문제가 58.7% 로 가장 컸다. 고장이 많았지만 사람이 크게 손을 대야 했던 경우는 세 번뿐이었고 나머지는 자동화가 처리했다. Meta 는 이런 조건에서도 유효 학습 시간을 90% 넘게 유지했다. 유효 학습 시간은 전체 경과 시간 가운데 실제 학습에 쓴 시간의 비율이다.
Meta 는 작업 시작 시간과 체크포인트 시간을 줄이고, 문제를 빨리 진단하고 해결하는 도구를 만들었다. PyTorch 의 NCCL flight recorder 로 집합 통신의 메타데이터와 스택 트레이스를 모았다. NCCLX 는 Meta 가 Nvidia 의 NCCL 라이브러리를 고쳐 만든 집합 통신 라이브러리다. Meta 는 NCCLX 를 PyTorch 와 함께 설계해, 통신이 멈춘 것을 감지하면 자동으로 타임아웃되게 했다. 느린 GPU 를 찾는 도구도 만들었다.
환경 요인도 있었다. 한낮의 높은 기온이 GPU 의 동적 전압·주파수 조절에 영향을 주어 하루 중 시간에 따라 처리량이 1-2% 오르내렸다. 수만 개의 GPU 가 체크포인트나 집합 통신이 끝나기를 함께 기다리거나 작업 전체가 시작하고 멈출 때, 데이터센터 전력 소비가 수십 메가와트 규모로 순간적으로 흔들렸다. 이 흔들림은 전력망에 큰 부담을 주었다.
Meta 는 최대 16K 개의 H100 GPU 로 Llama 3 405B 를 사전 학습했다. 54일 동안의 기록에서 학습 작업은 모두 466번 중단되었고, 그중 419번이 예기치 않은 중단이었다. 나머지 47번은 펌웨어 업그레이드 같은 자동 유지보수나, 설정과 데이터셋 갱신 같은 운영자 작업에 따른 계획된 중단이었다.
예기치 않은 중단 가운데 약 78% 는 확인되었거나 의심되는 하드웨어 문제였다. 가장 큰 범주는 GPU 문제로 전체의 58.7% 였다. 원인별로 보면 고장 난 GPU 가 148번으로 30.1%, GPU HBM3 메모리가 72번으로 17.2%, 소프트웨어 버그가 54번으로 12.9%, 네트워크 스위치와 케이블이 35번으로 8.4%, 계획에 없던 호스트 유지보수가 32번으로 7.6%, GPU SRAM 메모리가 19번으로 4.5%, GPU 시스템 프로세서가 17번으로 4.1% 였다. NIC 와 NCCL 워치독 타임아웃이 각각 7번으로 1.7%, 사일런트 데이터 커럽션, GPU 열 인터페이스와 센서가 각각 6번으로 1.4%, SSD 와 전원 공급 장치가 각각 3번으로 0.7%, 서버 섀시, IO 확장 보드, 의존성, CPU, 시스템 메모리가 각각 2번으로 0.5% 였다.
NVLink 로 데이터를 주고받다가 원격 GPU 나 NVLink 연결이 고장 나면, 분명한 오류 코드 없이 CUDA 커널 안의 load/store 연산이 멈춘 모습으로 나타나는 경우가 많았다. 네트워크에 NVLink 와 RoCE 가 섞여 있어 디버깅이 더 어려웠다.
하드웨어 문제가 GPU 를 멈추지 않고 느리게만 만들기도 했다. 다른 GPU 보다 느리게 돌면서 전체를 늦추는 GPU 를 straggler 라고 부른다. straggler 하나가 다른 GPU 수천 개를 느리게 만들 수 있었고, 겉으로는 통신이 돌기는 하지만 느린 것처럼 보였다.
원인 ? 하드웨어 고장
PyTorch 의 NCCL flight recorder 가 모든 통신 이벤트와 집합 연산마다 걸린 시간을 링 버퍼에 기록했고, NCCLX 워치독이나 하트비트 타임아웃이 나면 추적 데이터를 자동으로 덤프했다. NCCLX 는 통신 라이브러리 상태를 감시하다가 멈춤을 감지하면 자동으로 타임아웃시켰고, 실패한 집합 연산의 내부 상태 스냅샷을 남겼다. 느린 GPU 는 의심스러운 통신에 우선순위를 매겨 보여 주는 도구로 찾았다. 대개 상위 몇 개만 조사해도 찾아낼 수 있었다.
동기식 학습은 GPU 하나의 고장에도 작업 전체가 멈출 수 있어 고장에 약하다. 하드웨어 고장은 멈춤으로만 나타나지 않고 느린 straggler 로도 나타나며, straggler 하나가 GPU 수천 개를 느리게 만들 수 있다. 이 규모에서는 기온과 전력망 같은 환경 요인도 학습 성능과 운영에 영향을 준다.