Kubernetes 1.36: 무한 대기 없이 GPU 장치 장애 처리하기
NVIDIA
Meta
Kubernetes에서는 GPU 장치 장애가 발생해도 포드가 자동으로 재스케줄링되지 않습니다. 대신 kubelet이 동일한 장애 장치에서 컨테이너를 재시작하여 크래시 루프를 유발합니다. 이 글은 테스트베드에서 이 시나리오를 시연하고, 장치 상태 및 테인트(taints)와 같은 Kubernetes 1.36의 새로운 메커니즘이 이 순환을 끊는 방법을 보여줍니다.
이 기사는 Kubernetes가 기본적으로 장치 실패를 컨테이너 재시작으로 처리하는데, 이는 GPU 가속 워크로드에는 충분하지 않다는 점을 강조합니다. Meta의 Llama 3 405B 학습 연구를 인용하며, 수천 개의 GPU가 있는 클러스터에서 GPU 및 메모리 실패로 인해 빈번한 중단이 발생한다고 언급합니다. 저자는 할당 가능한 수만 줄이는 기존 장치 플러그인 접근 방식의 한계를 설명하고, 객체 기반 장치 관리를 제공하는 새로운 DRA(Dynamic Resource Allocation) 모델과 대조합니다. 테스트 클러스터에서 저자는 PCIe 버스에서 장치를 핫 제거하여 GPU 실패를 시뮬레이션하고, 그 결과 Xid 79가 발생합니다. 이후 포드는 크래시 루프에 빠져 죽은 장치에서 재시작되며, 스케줄러는 여전히 노드에 바인딩되어 있기 때문에 재스케줄링하지 않습니다. Kubernetes 1.36에서는 이를 해결하기 위해 여러 베타 기능을 도입합니다: 포드 상태의 장치 상태, 장치 테인트 및 톨러레이션, 분할 가능한 장치입니다. 이러한 기능을 사용하면 클러스터가 실패를 인식하고 포드를 정상 GPU에 스케줄링하여 끝없는 재시작을 피할 수 있습니다.
출처: Habr — хаб ML —
원문
