저희 GB10 머신이 스스로 꺼지는 문제가 발생했습니다. 로그는 메모리 문제를 지적했지만, 실제 원인은 발열이었습니다
운영
저희 NVIDIA GB10 머신 3대 중 한 대가 9월에 4일 동안 세 번 꺼졌습니다. 9월 10일, 9월 12일(17시간 동안 꺼져 있었음), 그리고 다시 켠 지 12분 후인 9월 13일에 각각 한 번씩 꺼졌습니다. 매번 누군가 전원 버튼을 눌러야 했습니다.
발열로 인한 종료(shutdown)가 어떤 모습인지
시스템 저널은 활동 도중에 종료 기록 없이 그냥 멈췄습니다. 하드 파워오프(power-off)가 발생하면 journald가 버퍼를 쓸 시간이 없기 때문입니다. 7월에도 비슷한 종료 이후 시계가 이전 날짜로 돌아간 적이 있습니다. 그리고 멈춘(hang) 머신을 재부팅하는 하드웨어 워치독은 아무것도 하지 않았습니다. 머신이 멈춘 것이 아니라 전원이 끊겼기 때문입니다.
잘못된 단서
각 종료 직전의 마지막 커널 로그는 GPU 메모리 부족 오류(NV_ERR_NO_MEMORY)였기 때문에 메모리가 원인처럼 보였습니다. 하지만 그렇지 않았습니다. 해당 로그는 커널이 가장 자주 기록하는 항목일 뿐이었습니다. 종료 전 19일간 실행된 한 부팅 세션에서 440,580번 기록되었습니다. 이렇게 자주 나타나는 로그는 무엇이든 발생하기 직전의 마지막 로그가 될 수밖에 없습니다. 로그 라인을 탓하기 전에, 아무 문제도 없을 때 그 라인이 얼마나 자주 나타나는지 세어보십시오.
맞았던 단서
파워오프 시 저널은 마지막 몇 분간의 기록을 잃기 때문에, 저희는 온도, 부하 및 메모리 정보를 1분마다 파일에 기록하고 디스크에 플러시(flush)하는 작은 샘플러를 추가했습니다. 이 샘플러는 7월 이후 발생한 5번의 종료를 모두 포착했습니다. 모든 종료는 GPU가 96%로 완전히 부하된 상태에서 발생했으며, CPU 온도는 85~97 °C였습니다.
타이밍이 나머지 상황을 설명해 주었습니다. 9월 초쯤 우리는 이 머신으로 영상 렌더링을 옮겼습니다. 풀 로드 상태에서 GPU 전력은 약 24W에서 46W로, GPU 온도 중앙값은 68°C에서 86°C로, 그리고 CPU가 95°C 이상인 주당 분은 0분에서 4,283분으로 증가했습니다. 동일한 96% 부하로 언어 모델을 실행하는 나머지 두 대의 GB10 머신은 65~81°C를 유지했습니다. 이 머신만 유독 냉각 성능이 떨어졌습니다.
첫 번째 해결책: GPU 클럭 상한 설정
GB10에서는 nvidia-smi로 전력 제한을 설정할 수 없지만, GPU 클럭 상한을 설정할 수 있습니다: nvidia-smi -lgc 0,2000. 7월에는 이 설정으로 수초 만에 가장 뜨거운 영역의 온도를 91 °C에서 77~83 °C로 낮췄습니다. 두 가지 세부 사항이 중요합니다:
- 무거운 서비스가 시작되기 전에 적용하십시오. 저희 클럭 상한 서비스는 처음에 부팅 후 약 15초 뒤에 실행되었는데, 이때 모델 서버가 이미 전체 전력으로 로딩을 시작한 상태였고, 바로 그 시점에 머신이 크래시된 적이 있습니다. 이제 이 서비스는 Docker가 시작되기 전에 실행됩니다.
- 부하 상태에서 확인하세요. 상한 제한을 켠 상태에서 GPU가 유휴 상태일 때 보고된 GPU 클럭은 여전히 약 2,400 MHz로 표시됩니다. 부하 상태에서는 1,976 MHz로 유지됩니다.
두 번째 수정 사항: 단계별 열 가드
렌더링이 도입된 후 상한 제한만으로는 부족했으므로, 이제 가드가 1초마다 모든 센서를 읽고 단계별로 작동합니다. 89 °C에서 GPU 클럭을 낮추고, 92 °C에서 다시 낮춥니다. 94 °C부터는 렌더러를 일시 중지(SIGSTOP)하고 CPU 속도를 늦춥니다. 96 °C부터는 냉각에 필요한 시간 동안 모든 GPU 작업을 일시 중지합니다. 머신이 일정 기간 더 낮은 온도를 유지한 후에만 단계를 되돌립니다. 97 °C에서 20초간 지속되면, 최종 수단으로 비디오 서비스를 완전히 중단합니다.
렌더링 시작 후 첫 9분 동안 가장 뜨거운 영역의 온도는 중앙값 89°C로 최고 94°C까지 치솟았으며, 이전에는 97°C에서 정체되었습니다. 대가가 따랐습니다. 9월 중순 하루 동안 렌더러는 전체 시간의 17% 동안 일시 중지되었고, GPU는 하루 대부분 900MHz 이하로 실행되었습니다. 또한 완전한 해결책도 아니었습니다. 10월 11일 97~98°C에서 머신이 한 번 더 스스로 꺼졌습니다. 이 글을 쓰는 현재까지 20일 동안 중단 없이 실행되고 있습니다.
과정에서 저지른 네 가지 실수
- 작업 하나를 일시 중지해도 머신이 냉각되지 않았습니다. 렌더러가 이미 일시 중지된 상태에서 브레이크가 작동했는데, 이미지 모델이 여전히 렌더링 중이었고 같은 분에 12개의 타이머가 시작되었기 때문입니다. 이제 최상위 단계에서는 렌더러뿐만 아니라 모든 무거운 GPU 작업을 일시 중지합니다.
- 가드는 이름으로 작업을 일시 중지하는데, 이름이 변경되었습니다. 두 번의 경우 새로운 엔진이 일시 중지를 피할 뻔했습니다. 9월에는 새로운 프로세스 이름을 가진 이미지 모델이었고, 10월에는 렌더 서비스의 하위 프로세스가 아닌 컨테이너에서 실행되는 렌더러였습니다. 이제 엔진을 변경할 때마다 가드의 목록을 확인합니다.
- 브레이크의 유지 상태가 해제되지 않았습니다. 비디오 서비스를 중단하고 아무것도 재시작하지 않도록 유지 파일을 남겼습니다. 아무도 경고를 받지 못했고, 우리가 알아차리기까지 3일 동안 출력은 정지되었습니다. 이제 유지는 자동으로 해제됩니다. 마지막 브레이크 발생 후 5분이 지나고 새로운 브레이크가 없으며, 최소 30 GB의 메모리가 여유 있고 10분 평균 온도가 93 °C 이하일 때 해제됩니다. 머신이 냉각되기를 기다리는 것은 효과가 없었습니다. 렌더링 여부와 관계없이 평균 88 °C를 유지했습니다.
- 알람은 기계의 정상 온도에서 울렸습니다. 경고 임계값은 88 °C였는데, 이는 이 기계의 평균 온도였습니다. 하루 동안 90 °C 이상인 시간이 32%, 93 °C 이상인 시간이 8%, 95 °C 이상인 시간이 3%였으며, 97 °C에는 한 번도 도달하지 않았습니다. 우리는 알람을 기계가 실제로 멈췄던 평탄 구간인 97 °C로 조정했고, 알람 이메일은 더 이상 오지 않았습니다.
핵심 요약
소프트웨어가 이 기계를 살려두었지만, 원인은 물리적이었습니다: 냉각 성능이 형제 기기들보다 2~3배 더 나빴습니다. GB10 기계가 부하 상태에서 스스로 꺼진다면, 먼저 공기 흐름을 확인하십시오. 그다음 서비스가 시작되기 전에 GPU 클럭을 제한하고, 기계가 한계에 도달하기 전에 무거운 작업을 일시 중지하며, 실제로 작동하는 온도를 기준으로 알람을 설정하십시오.
Factory Floor에는 이러한 종류의 열 가드가 포함되어 있습니다: GPU 및 열 구역 센서 중 가장 높은 온도를 읽고, 지정된 온도(기본값 92 °C)에서 사용자가 지정한 무거운 작업을 일시 중지하며, 더 낮은 온도(84 °C) 미만일 때만 재개합니다. 메모리 및 디스크 가드도 함께 제공됩니다.