cb-spider icon indicating copy to clipboard operation
cb-spider copied to clipboard

[GCP:VM] VM Not Found Error Due to ZONE_RESOURCE_POOL_EXHAUSTED

Open powerkimhub opened this issue 9 months ago • 2 comments

cc: @seokho-son @yunkon-kim


  • 드물게, VM이 생성되지 않는 오류가 발생하고 있습니다. (표면상: VM not found 에러 반복)

[VM 생성시 현황]

  • VM 생성시 생성 요청은 성공적으로 반환을 받습니다.
    • 관련 코드 위치: https://github.com/cloud-barista/cb-spider/blob/75f73c0ff2a02f28858a6576145ba91cb4df858a/cloud-control-manager/cloud-driver/drivers/gcp/resources/VMHandler.go#L470
  • 그런데, 다음 위치의 WaitForRun() 내부에서 VM 상태를 얻는데 없는 VM이라고 나옵니다.
    • https://github.com/cloud-barista/cb-spider/blob/75f73c0ff2a02f28858a6576145ba91cb4df858a/cloud-control-manager/cloud-driver/drivers/gcp/resources/VMHandler.go#L492
    • 관련 에러 메시지
      [CB-SPIDER].[ERROR]: 2024-05-03 16:31:42 VMHandler.go:875, github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/drivers/gcp/resources.(*GCPVMHandler).GetVMStatus() - googleapi: Error 404: The resource 'projects/powerkimhub/zones/us-central1-a/instances/deeplearning-vm-test-coq941jp70ipgggvd61g' was not found, notFound
      

[분석]

  • VM 생성 요청 시점에 GCP Console로 VM 목록을 refresh 해보면,
  • 대상 VM이 잠시 나타났다가 사라집니다.
  • GCP Console 로그 탐색기로 오류 트레이싱을 해보면, 다음과 같이
    • ZONE_RESOURCE_POOL_EXHAUSTED 오류가 발생했었음을 알수 있습니다.
    • image

[제안]

  • 현재 Spider 사용자는 이유를 알수 없이 VM 생성이 안되는 현상에 빠지게 됩니다.
  • 혹시, 드라이버 차원에서 이와 같은 상황을 인지 할수 있고,
  • 사용자에게 상황(ZONE_RESOURCE_POOL_EXHAUSTED)에 맞는 정확한 에러 메시지를 제공할 수 있는 지 등 확인 부탁 드립니다.

powerkimhub avatar May 03 '24 09:05 powerkimhub

참고로, GPU (특히 비싼) 가 포함된 VM을 생성하는 경우, 특정 존에서 가용 GPU가 부족해서, 지속적으로 pending되거나 사용자가 중단시키도록 요청하는 상황이 발생했었습니다. (GCP 콘솔에서 수행)

seokho-son avatar May 03 '24 09:05 seokho-son

참고로, GPU (특히 비싼) 가 포함된 VM을 생성하는 경우, 특정 존에서 가용 GPU가 부족해서, 지속적으로 pending되거나 사용자가 중단시키도록 요청하는 상황이 발생했었습니다. (GCP 콘솔에서 수행)

  • 그렇군요. 재현시 참고하면 좋을 것 같습니다.
  • 다음 링크의 deeplearning VM 생성 스크립트 참고
    • https://github.com/cloud-barista/cb-spider/issues/1184#issuecomment-2092581719

powerkimhub avatar May 03 '24 10:05 powerkimhub

안녕하세요. @powerkimhub

동일한 에러 재현을 위해 테스트한 스펙입니다.

  • zone : us-central1-a
  • vm spec : a2-highgpu-1g
  • public image : https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11

  • GCP Cloud logging 을 통해서 comput.instance.insert operation 확인 결과
  • 요청 발생 로그 시간과 실제 에러가 발생하는 시간의 차이가 있다는 점을 확인하였습니다.

image

  • 이는 구글에서 해당 리소스로 프로비저닝을 진행하는 중 발생하는 에러일 것이며
  • 해당 메시지는 instance insert api 요청이 발생하는 시점의 응답 정보 만으로는 확인이 불가능합니다.
  // ...
  op, err := vmHandler.Client.Instances.Insert(projectID, zone, instance).Do()
  // ...
  fmt.Println(op.HTTPStatusCode)  // always 0
  fmt.Println(op.Error)  // always nil
  fmt.Println(op.Status)  // always "RUNNING"

  • 다만 최초 instance insert 요청시 반환되는 operation 내 정보를 이용해 operation api 를 추가적으로 호출 가능합니다.

  • 해당 api 를 적절한 방식으로 호출하고, 반환하는 값을 활용해서 operation이 완료된 후 상태와 QUOTA_EXCEEDED, ZONE_RESOURCE_POOL_EXHAUSTED 등 에러 메시지 확인이 가능해 보입니다.


  • Wait() 메서드가 기다리는 목적을 명확히 할 수 있지만 fetch 상태에 중 로그를 남기는 등의 액션을 위해선 별도의 고루틴이 있어야 하기 때문에
  • Get() 메서드의 반복 호출 및 적절한 로그 처리로 해당 operation 에 대한 응답을 기다리는 방법이 좋을 것 같습니다.
  • 구글 내부적으로 operation 의 DONE 상태 처리까지 얼마나 걸릴지 모르지만
  • 테스트 해본 결과 성공과 실패 여부와 상관없이 DONE 처리는 완료되며, RUNNING 에서 DONE 까지 짧게는 수초에서 길게는 1분 정도까지 대기하게 됩니다.

hippo-an avatar Jun 18 '24 08:06 hippo-an

#1125 의 3번 처리 부분이 본 이슈와 관련 있습니다.

(3) 쿼터 또는 자원 부족시 발생할 수 있는 Error Notification 타입 무인식 현재, GCP SDK API가 반환하는 에러로는 에러 발생 상황을 인지하지 못하여, VM 생성이 완료되기를 반복 호출하다가 timeout 에러 처리됨 => Operations 실행(VM 생성 호출) 상태를 polling 하도록 반영함

  • 테스트 진행

    • zone : us-central1-a
    • vm spec : a2-highgpu-1g
    • public image : https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11
  • 결과

    • 에러 로그와 함께 vm 생성 없이 응답 반환
    • not found 에러 로그 없음

hippo-an avatar Jun 18 '24 08:06 hippo-an

powerkimhub avatar Jul 09 '24 11:07 powerkimhub