IL-0115 OpenAI · 2022-06-23kubernetesazureai-infra
OpenAI 는 Terraform 과 Azure Kubernetes Service, 줄여서 AKS 로 운영 클러스터 세 개를 관리했다. 장애의 주원인은 그중 하나가 완전히 오프라인이 된 일이었다. 사람의 실수, 안전장치에 있던 예상하지 못한 구멍, 파괴적인 작업이 무엇에 영향을 주는지 알려 주는 정보가 미묘하게 빠져 있던 것이 겹쳐 클러스터가 내려갔다. 클러스터가 내려가자 모델을 남은 두 클러스터에 다시 배치해야 했다.
파인튜닝 모델은 복구가 특히 오래 걸렸다. 평소에는 인프라 여유분을 넉넉히 두지만, 클러스터 하나를 통째로 잃자 그 여유가 바닥났다. OpenAI 에게 가장 부족한 자원은 GPU 였고, 공급망 사정 때문에 몇 시간 안에 GPU 를 더 확보할 수 없었다. 남은 장비를 최대한 썼지만 내려간 클러스터가 돌아오기 전에는 서비스를 완전히 되살릴 수 없었다. 파인튜닝 모델은 하나하나가 매우 크고 고객마다 있어 수가 많다. 평소에는 Azure Blob Storage 에서 몇 개씩만 불러오지만, 처음부터 전부 다시 올리자 Blob Storage 대역폭이 심한 병목이 됐다. 클러스터 사이의 데이터 전송이 병목을 더 심하게 만들었고, 평소 이 문제를 덜어 주던 여러 층의 캐시는 이번 이동으로 모두 무효가 됐다.
내려간 클러스터는 05시 30분 PDT 무렵, 10시간 반 만에 복구됐다. 평소에는 클러스터를 만드는 데 오래 걸리지 않지만 예상하지 못한 문제가 이어졌다. 구성 도중 AKS 연결이 끊겨 Azure 지원팀과 함께 VPN 링크를 다시 만들었다. 그 뒤 Azure Private Link 연결이 또 끊겨 Azure 지원팀과 우회 방법을 만들었다. 이 연결 문제의 근본 원인은 보고서를 쓸 때까지 밝혀지지 않았다.
쿠버네티스 업그레이드가 네트워크 문제 일부를 덜어 줄 것으로 보고 업그레이드했는데, 업그레이드 뒤 인그레스가 새 쿠버네티스 버전과 호환되지 않았다. 주어진 시간 안에 인그레스를 고칠 수 없었고, AKS 는 쿠버네티스 다운그레이드를 허용하지 않았다. 결국 클러스터를 지우고 처음부터 다시 만들었고, 05시 30분부터 06시 30분 PDT 사이에 트래픽을 다시 이 클러스터로 옮겼다.
2022년 6월 23일 18시 56분 PDT, UTC 로는 6월 24일 01시 56분에 여러 모델이 한꺼번에 오프라인이 됐다. 일부 파인튜닝 모델인 curie 와 davinci, 일부 Codex 베타 모델인 code-davinci-001 과 code-cushman-001, 일부 구형 GPT 모델인 curie, babbage, ada, 그리고 모든 Embeddings 모델이 응답하지 않았다.
Codex, Embeddings, 구형 GPT 모델은 약 1시간 동안 완전히 쓸 수 없었다. 파인튜닝 Curie 는 00시 10분 PDT 까지 5시간 동안 대부분의 요청이 타임아웃 났다. 파인튜닝 Davinci 는 06시 40분 PDT 까지 12시간 동안 대부분의 요청이 타임아웃 났다.
대부분의 모델은 남은 두 클러스터로 옮겨져 내려간 클러스터가 복구되기 전에 살아났다. 파인튜닝 Davinci 만은 클러스터가 복구된 뒤에야 완전히 돌아왔다.
원인 ? 운영 실수
–
클러스터 하나를 통째로 잃으면 평소의 여유 용량이 한 번에 바닥난다. GPU 처럼 몇 시간 안에 늘릴 수 없는 자원을 쓰는 서비스는 남은 클러스터만으로 완전히 되살릴 수 없다. 운영 클러스터를 지울 수 있는 작업에는 그 영향을 분명히 보여 주는 정보와 잠금이 있어야 한다.
쿠버네티스 버전이 뒤처져 있으면 급하게 하는 업그레이드가 인그레스 호환성 같은 새 문제를 만든다. AKS 는 다운그레이드가 되지 않아 되돌릴 수도 없었다. 대용량 모델을 처음부터 다시 올리는 상황에서는 스토리지 대역폭과 캐시 무효화가 복구 시간을 좌우했다.
같은 원인 · 공통 인그레스 컨트롤러
같은 원인 · 공통 인그레스 컨트롤러
같은 원인 · 공통 인그레스 컨트롤러