Incident Library
  • 원인
  • 구성 요소
  • 증상
  • 기여 요인
  • 사례

사례5건

5건 중 1~5번째

  1. 증상

    2026년 3월 4일 21:00 UTC 무렵부터 NVIDIA RTX 4000 Ada GPU 를 쓰는 Linode 인스턴스가 잠기기 시작했다. 처음에는 Linode Kubernetes Engine 의 워커 노드만 겪는 문제로 보였지만, 나중에 이 하드웨어를 쓰는 모든 Linode 가 영향을 받은 것으로 확인됐다. 일반 컴퓨트 인스턴스와 RTX 4000 이 아닌 GPU 인스턴스는 영향이 없었다.

    촉발

    내부 관측 대시보드에서 빠진 지표를 되살리려고 고장 난 레거시 GPU 모니터링 스크립트를 고쳐 배포했다.

    원인
    구성 요소
    기여 요인
    감지

    고객은 21:00 UTC 무렵부터 잠김을 겪었고, 상태 페이지 첫 공지는 약 5시간 뒤인 3월 5일 02:07 UTC 에 올라왔다. 처음에는 LKE 워커 노드에서만 생기는 문제로 보였다.

    조치
    • 모든 GPU 에서 문제의 모니터링 스크립트를 껐다.
    • 영향을 받은 노드를 재부팅했다.
    후속 조치
    • 재발을 막을 개선 조치와 예방 조치를 마련한다.
    교훈

    모니터링 스크립트가 자기가 지켜보는 하드웨어를 멈출 수 있다. 빠진 지표 하나를 되살리려던 수정이 이전 세대 GPU 용으로 쓴 펌웨어 조회까지 되살렸다. RTX 4000 Ada 아키텍처에서는 동작 중인 GPU 에 이 조회를 보내면 GPU 가 잠긴다. 스크립트가 모든 GPU 에서 돌았기 때문에 여러 리전에서 이 GPU 를 쓰는 모든 Linode 가 영향을 받았다. 엔지니어들은 처음에 호스트 하이퍼바이저나 GPU 펌웨어의 회귀를 의심했다.

  2. 증상

    강의 영상 업스케일링용 GPU 파드를 띄우자 GPU 노드가 정상적으로 만들어져 Ready 가 됐다가, 약 10~11분 뒤 갑자기 비정상으로 판정되어 Karpenter 가 노드를 교체했다. 새로 만든 노드에서도 같은 일이 되풀이됐고, GPU 파드가 계속 재시작되어 작업이 진행되지 않았다.

    촉발

    kubelet OOM 으로 생기던 좀비 노드를 정리하려고 Karpenter 설정에서 nodeRepair 기능 게이트를 켰다.

    원인
    구성 요소
    기여 요인
    감지

    GPU 노드가 Ready 뒤 10~11분 만에 계속 교체되는 것을 보고 노드 이벤트를 분석해 DCGMError 메시지를 찾았다.

    조치
    • Karpenter 설정에서 nodeRepair 기능 게이트를 false 로 바꿔 Node Auto-Repair 를 껐다.
    교훈

    Karpenter Node Auto-Repair 는 AcceleratedHardwareReady=False 도 노드를 교체할 사유로 본다. 그래서 GPU 연산에는 문제가 없어도 GPU 모니터링 라이브러리 하나가 빠지면 노드가 끝없이 교체될 수 있다. Node Auto-Repair 를 켠 뒤 GPU 노드가 자주 교체되면 이 기능을 꺼 볼 만하다. 좀비 노드 문제는 이제 메모리가 4GB 이상인 인스턴스 타입을 써서 완화했다.

  3. 증상

    2025년 3월 3일 14:15:34부터 홈랩 쿠버네티스에 올린 서비스에 접속되지 않았다. 운영자가 서비스에 들어가려다 직접 알아챘고, 알아채기까지 3시간이 걸렸다.

    촉발

    정전 때문에 마스터 노드가 재부팅됐다.

    원인
    구성 요소
    기여 요인
    감지

    운영자가 서비스에 접속하려다 직접 알아챘다. 자동 알림이 없어서 알아채기까지 3시간이 걸렸다.

    조치
    • 원격 접속이 되지 않아 모니터를 연결해 부팅 로그를 보고 커널 패닉을 확인했다.
    • 이전 커널 버전으로 부팅해 시스템을 되살렸다.
    • sudo apt-get remove --purge '^nvidia-.*' 로 망가진 패키지를 지우고 sudo dpkg --configure -a 로 패키지 설정 문제를 고쳤다.
    • dpkg -l | grep -v ^ii 로 남은 망가진 패키지를 찾아 sudo apt-get remove --purge <package_name> 으로 하나씩 지웠다.
    • sudo apt-get install -f 로 빠진 의존성을 채우고 sudo apt-get install --reinstall linux-headers-$(uname -r) 로 커널 헤더를 다시 설치했다.
    • 머신을 재부팅해 커널 패닉이 사라진 것을 확인했다.
    후속 조치
    • GPU 드라이버 설치가 완전히 성공했는지 확인하고, 오류가 나면 바로 변경을 되돌린다.
    • 단일 장애 지점을 없애도록 클러스터를 고가용성 구성으로 옮긴다.
    • 고가용성 구성에서 Kube-API 를 로드 밸런서 뒤에 둔다.
    • 장애를 기록하고 해결 과정을 추적할 티켓 시스템을 만든다.
    • 미리 정해 둔 문제 해결 절차를 만들어 홈랩 장애 대응 시간을 줄인다.
    • Prometheus 와 Grafana 같은 인프라 모니터링을 넣어 문제를 미리 잡는다.
    • 주요 서비스에 HTTP, TCP 검사를 거는 블랙박스 모니터링을 넣어 쿠버네티스 클러스터 밖에서도 장애를 잡는다.
    교훈

    드라이버 빌드 실패를 그대로 두면 몇 주 뒤 재부팅 때 터질 수 있다. 자동 알림이 없어서 발견과 복구가 늦었다. 마스터 노드가 하나뿐이라 노드 하나의 고장이 클러스터 전체 장애가 됐다. 원인을 찾은 뒤에는 비교적 간단히 고쳤고, 데이터 손실은 없었다.

  4. 증상

    Imbue 는 H100 GPU 4,088개를 서버 511대에 나눠 담은 클러스터를 베어 메탈부터 구축하고 그 위에서 70B 모델을 학습했다. 처음 마주친 것은 장비 자체였다. 서버의 약 10% 가 주로 물리적 문제로 부팅되지 않았고, InfiniBand 네트워크를 관리하는 Unified Fabric Manager, 줄여서 UFM 은 처음에 스위치 320대를 하나도 찾지 못했다.

    촉발

    새로 들인 H100 4,088개 클러스터를 베어 메탈 상태에서 처음 구축하면서, 잘못 설계된 InfiniBand 배선과 불량 하드웨어, 펌웨어, 드라이버 문제가 차례로 드러났다.

    원인
    구성 요소
    기여 요인
    감지

    UFM 경고, 호스트 헬스 체크, DCGM 과 Prometheus 지표, 학습 중 MFU 와 NCCL 워치독 오류로 문제를 알아챘다. InfiniBand 포트 문제는 포트를 실제로 쓸 때만 드러나서, 모든 포트에 부하를 거는 번인 작업을 만들어 더 효율적으로 찾았다. 멈춤을 일으킨 호스트는 특정 로그를 남기지 않은 호스트를 찾는 방식으로 가려냈다. 팀은 배치마다 순간 MFU 를 살펴보고, MFU 가 떨어지는 곡선 모양으로 문제 종류를 구분했다.

    조치
    • 고장 난 기계를 찾는 점검을 자동화하고, 일부 기계는 Dell 에 돌려보내 다시 시험받게 했으며 데이터센터 직원에게 티켓을 올렸다.
    • GPU 와 내부 PCIe 케이블을 다시 장착했고 펌웨어 업그레이드를 적용했다.
    • 온도 값을 틀리게 만든 NVIDIA 드라이버를 이전 버전으로 내렸다.
    • InfiniBand 패브릭의 최상위 계층을 하나의 네트워크로 다시 배선하고, 배선이 설계와 맞는지 확인하는 점검을 추가했다.
    • 경고를 내는 포트를 청소하고 다시 꽂았고, 그래도 경고가 남은 트랜시버는 껐다.
    • 모든 InfiniBand 포트에 번인 작업을 돌려, 버티지 못한 포트를 껐다.
    • 커널 모듈을 추가하고 PCIe ACS 를 꺼서 GPUDirect RDMA 를 켰다.
    • 자동 가비지 컬렉션을 끄고 모든 호스트에서 정해진 간격으로 가비지 컬렉션을 돌렸다.
    후속 조치
    • 호스트가 학습에 쓸 만한지 예 또는 아니오로 답하는 헬스 체크를 만들었다. GPU, 디스크 공간, Docker, dmesg, iDRAC, 디스크, InfiniBand, NVLink, GDR, VBIOS, Flint, PSB 점검이 들어 있고, iDRAC 과 PSB 점검을 뺀 나머지를 공개했다.
    • 오류와 멈춤 주변의 로깅을 늘린 NCCL 패치를 공개했다.
    • GPU 스트레스 테스트와 NVLink, InfiniBand 네트워크 테스트를 공개했다.
    • UFM 이벤트 로그를 파싱해 어떤 네트워크 포트를 꺼야 할지 정하는 스크립트를 공개했다.
    • 모든 InfiniBand 링크를 쓰게 하는 번인 작업을 만드는 스크립트를 공개했다.
    • 학습이 죽으면 헬스 체크를 통과한 기계로 마지막 체크포인트부터 자동으로 다시 시작하게 했다.
    • 경고가 나서 꺼 둔 트랜시버를 교체품이 오면 바꾼다.
    교훈

    대형 GPU 클러스터에서는 연결 하나만 조금 불안해도 전체 학습이 느려질 수 있다. Imbue 는 학습에 필요한 것보다 10-20% 많은 기계를 두면 고장 난 기계를 쉽게 바꿔 다시 시작할 수 있다고 정리했다. 학습 중 겪는 문제는 모두 다시 일어나므로, 겪은 하드웨어와 소프트웨어 장애마다 테스트와 자동 처리를 만들 가치가 있다. 알아보기 어려운 오류 메시지마다 그 오류를 읽기 쉽게 만드는 도구를 만드는 것도 마찬가지다. Imbue 는 재현성을 지키려고 아주 단순한 일도 한 번에 하나씩만 바꿨다. 외부 도구를 들이거나 새 사람이 합류하면 그쪽이 내놓은 주장을 다시 확인했고, 다음 단계가 그 결과에 기댈 때는 특히 그렇게 했다. 고장은 고르게 나지 않고 소수의 문제 기계에 몰리므로, 그때그때 고장 나는 기계를 하나씩 고치기보다 믿을 수 있는 기계 묶음을 키우는 편이 낫다.

  5. 증상

    2024-03-12 US/Pacific 08:00 부터 GKE 에서 Container-Optimized OS 를 쓰는 GPU 노드가 일부 NVIDIA GPU 드라이버를 받지 못했다. 새로 만들거나 다시 만든 노드는 GPU 드라이버가 작동하지 않았고, 그 드라이버를 쓰는 워크로드가 돌지 못했다.

    원인
    구성 요소
    기여 요인
    감지

    보고서는 Google 이 장애를 어떻게 알아챘는지 적지 않았다. GKE 사용자는 GPU 노드에서 드라이버를 설치할 때 "Failed to download GPU driver installer, status: 403 Forbidden" 오류를 보고 이 장애를 알아볼 수 있었다.

    조치
    • GPU 드라이버 다운로드를 시도하는 자동 노드 재생성을 멈췄다.
    • 드라이버를 공급하는 파트너와 함께 스토리지 버킷 접근 문제를 해결했다.
    교훈

    상태 페이지 보고서는 교훈이나 후속 조치를 적지 않았다.

내 클러스터에도 있는지 확인하기

이 5건에서 가장 많이 나오는 구성 요소: GPU 드라이버, 노드 운영체제 이미지. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.

원인별3

배포 결함1건

조직
  1. IL-0160 고쳐서 다시 돌린 레거시 GPU 모니터링 스크립트의 펌웨어 조회가 GSP 레이스 컨디션을 일으켜 Linode 의 RTX 4000 Ada GPU 가 잠기고 LKE 워커 노드의 GPU 작업이 멈췄다
    Linode2026

소프트웨어 결함2건

  1. IL-0171 Bottlerocket AMI 에 libdcgm.so 가 없어 GPU 노드의 AcceleratedHardwareReady 가 False 가 됐고, Karpenter 노드 자동 복구가 Ready 뒤 10~11분마다 GPU 노드를 교체하는 일을 끝없이 되풀이했다.
    Inflab2025
  2. IL-0138 nvidia-dkms-390 드라이버 빌드 실패로 망가진 커널 헤더가 몇 주 동안 방치됐다가, 정전 뒤 재부팅하자 하나뿐인 마스터 노드가 커널 패닉에 빠져 홈랩 쿠버네티스 클러스터가 6일 동안 멈췄다.

의존성 장애2건

  1. IL-0025 H100 4,088개 클러스터를 구축하는 동안 InfiniBand 배선 오류, 링크 플래핑, GPU 와 PCIe 하드웨어 결함이 학습을 멈추거나 늦췄다
    Imbue2024
  2. IL-0021 GKE 의 COS 노드가 NVIDIA GPU 드라이버를 403 Forbidden 으로 받지 못해 새로 만든 GPU 노드를 쓸 수 없었다