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

[GCP] How can a user lookup a vm image which is not in the image list

Open seokho-son opened this issue 9 months ago • 8 comments

GCP에서 하기 딥러닝 관련 이미지를 활용하고 싶은데, 현재는 CB-SP를 통한 이미지 정보 조회에서 오류가 발생합니다.

  • 이미지ID: c1-deeplearning-tf-2-15-cu121-v20240417-debian-11
  • Description: Google, Deep Learning VM for TensorFlow 2.15 with CUDA 12.1, M120, Debian 11, Python 3.10, with TensorFlow 2.15 for CUDA 12.1 with Intel MKL-DNN preinstalled.
  • Location: asia (Asia Pacific), eu (European Union), us (United States)
  • Labels: capability... : truepublic-image : true
  • Tags : Insufficient permission to list tags.
  • Creation time: Apr 23, 2024, 1:21:06 PM UTC+09:00
  • Family: tf-2-15-gpu-debian-11
  • Encryption type: Google-managed

이미지 조회시 오류: cp-asia-northeast2[Error from: http://localhost:1024/spider/vmimage/c1-deeplearning-tf-2-15-cu121-v20240417-debian-11] Status code: 500 Internal Server Error, Message: {"message":"ProjectId information not found in URL."} ProjectId information not found in URL.

해당 이미지는 CB-SP에서 리턴하는 GCP 이미지 리스트(8921개 중)에도 포함되어 있지 않습니다. 이 리스트에는 특정 패턴의 이미지만 포함되어 있는 것 같긴하네요. (이미지 아이디 패턴: https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/images/sql-server-2014-standard-windows-server-2012-r2-dc-v20160520)

아마도, GCP 드라이버의 경우, 특정 패턴의 이미지 명칭만 수용하는 것으로 보이는데, 처리 방안을 문의 드립니다.

(참고: https://cloud.google.com/deep-learning-vm/docs/images?hl=ko)

seokho-son avatar May 02 '24 16:05 seokho-son

GCP 콘솔에서는 해당 이미지를 활용한 VM 구동을 확인하였습니다.

seokho-son avatar May 02 '24 16:05 seokho-son

@MZC-CSC @CliffSynn @hippo-an (cc: @seokho-son )


[Image 목록 관련]

  • 현재 Driver에서 fetch 해오는 Image Project List는 다음과 같습니다.
    • https://github.com/cloud-barista/cb-spider/blob/53be17adca2d6a3362f34cedb32c67b52bc48a99/cloud-control-manager/cloud-driver/drivers/gcp/resources/ImageHandler.go#L85

  • GCP Image Project List 현황은 다음과 같습니다.
    • ref) https://gcloud-compute.com/images.html
    • image

[제안]

  • (1) 가급적 Image Project List를 API로 획득
  • (2) 부득이 Driver 내 List 유지시 목록 업데이트

powerkimhub avatar May 03 '24 08:05 powerkimhub

@seokho-son


  • 해당 이미지는 Spider 현재 Image List로는 제공되고 있지 않지만(patch 예정),
  • 다음 조건에서 VM 생성은 가능합니다.
    • Server: https://github.com/cloud-barista/cb-spider/commit/75f73c0ff2a02f28858a6576145ba91cb4df858a 적용된 버전
    • Driver: #1185 이슈 해결 전까지는 VM의 Security Group 정보에 deeplearning-vm이 잘못 포함되어 제공
    • 세부 내용 아래 참고

[Image Name 형식]

  • GetImage 호출 시 Spider가 Image List로 제공하는 url 형식의 name을 사용해야 합니다.
    • image

  • 해당 이미지 정보 호출 예시

    curl -sX GET http://localhost:1024/spider/vmimage/https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11 -H 'Content-Type: application/json' -d '{"ConnectionName": "gcp-iowa-config"}' |json_pp
    
    {
       "GuestOS" : "tf-2-15-cu121-debian-11",
       "IId" : {
          "NameId" : "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11",
          "SystemId" : "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11"
       },
       "KeyValueList" : [
          {
             "Key" : "Name",
             "Value" : "tf-2-15-cu121-v20240417-debian-11"
          },
          {
             "Key" : "SourceImage",
             "Value" : ""
          },
          {
             "Key" : "SourceType",
             "Value" : "RAW"
          },
          {
             "Key" : "SelfLink",
             "Value" : "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11"
          },
          {
             "Key" : "Family",
             "Value" : "tf-2-15-cu121-debian-11"
          },
          {
             "Key" : "DiskSizeGb",
             "Value" : "50"
          }
       ],
       "Status" : "READY"
    }
    

  • 해당 이미지로 VM 생성 예시

  curl -sX POST http://localhost:1024/spider/vm -H 'Content-Type: application/json' -d '{
    "ConnectionName": "gcp-iowa-config",
    "ReqInfo": {
      "Name": "deeplearning-vm-test",
      "ImageType": "PublicImage",
      "ImageName": "https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11",
      "VMSpecName": "a2-highgpu-1g",
      "VPCName": "vpc-01",
      "SubnetName": "subnet-01",
      "SecurityGroupNames": ["sg-01"],
      "RootDiskType": "default",
      "DataDiskNames": [],
      "KeyPairName": "keypair-01",
      "VMUserId": "Administrator",
      "VMUserPasswd": "cloudbarista123^"
    }
  }'

powerkimhub avatar May 03 '24 08:05 powerkimhub

@powerkimhub 확인 감사합니다.

https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-15-cu121-v20240417-debian-11

https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/ 는 임의로 찾아서 붙여넣기 하면 되는 상황일까요? (tf-2-15-cu121-v20240417-debian-11 이미지 말고도 테스트해봐야 할 이미지가 더 있습니다.)

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

  • 넵, 아마도 될거라 생각합니다.

powerkimhub avatar May 03 '24 10:05 powerkimhub

안녕하세요. @powerkimhub

말씀하신 내용과 관련하여 image list 를 조회하기 위한 api 를 호출시 사용되는 image project id list 를 조회할 수 있는 api 를 찾아보았지만 찾지 못하였습니다. 지원하는 모든 image project id list 를 확인할 수 있는 문서도 찾지 못했습니다. 일단 Google Cloud Support 에 문의를 남겨두었습니다.

문의에 대한 답변이 오면 답변 남겨드리도록 하겠습니다.


드라이버 내 image project id list 를 업데이트를 하는 방식에 대해서 조사한 내용에 대해 공유드리겠습니다.

image project id 리스트업을 위한 레퍼런스는 다음과 같습니다.

  gcloud compute images list

다음 단계를 따라서 image project id 리스트를 추출했습니다.

  1. 각 레퍼런스에서 추출 가능한 image project id 를 리스트업
  2. 중복 제거 및 모든 리스트를 순회하여 gcloud command 호출
  3. 지원하지 않거나 에러를 발생하는 image project id 를 제거

참고로 호출한 gcloud command 는 다음과 같습니다.

    gcloud compute images list --project "${item}" --no-standard-images

추출된 image project id list 는 다음과 같습니다.

## 기존 spider list 에 존재하는 목록
gce-uefi-images

centos-cloud
cos-cloud
coreos-cloud
debian-cloud
rhel-cloud
rhel-sap-cloud
suse-cloud
suse-sap-cloud
ubuntu-os-cloud
windows-cloud
windows-sql-cloud

## 추가 가능한 항목
almalinux-cloud
cloud-hpc-image-public
deeplearning-platform-release
fedora-cloud
fedora-coreos-cloud
freebsd-org-cloud-dev
ml-images
opensuse-cloud
rocky-linux-cloud
ubuntu-os-pro-cloud
suse-byos-cloud

  • sdk를 이용한 호출이 아닌 gcloud command 를 이용해 호출하였기 때문에 코드 작업시 추가적인 테스트는 필요해보입니다.

hippo-an avatar May 08 '24 04:05 hippo-an

@hippo-an

  • 분석 및 현황 공유 감사드립니다.
  • 일단, Image List에 추가 가능한 항목 반영 부탁 드립니다.
  • 관련하여, 다음 3가지 API 점검 부탁 드립니다.
      ListImage() ([]*ImageInfo, error)
      GetImage(imageIID IID) (ImageInfo, error)
      CheckWindowsImage(imageIID IID) (bool, error)
    
  • 추가로, driver image list code 관련 부분에 현재 issue 링크 남겨 주시기 바랍니다.

powerkimhub avatar May 21 '24 07:05 powerkimhub

@powerkimhub 안녕하세요. 로컬에서 해당 리스트 반영 및 api 점검 결과 입니다.

참고 - image 조회에서 사용되는 project id 란 Public Image 가 속한 Image Family 의 개념입니다.

ListImage() ([]*ImageInfo, error)

  • GCP ImageHandler 에 project id 에 추가 가능한 항목을 반영한 후
  • ImageList 조회 호출 시 문제 없이 호출이 가능합니다.
  • 다만 deeplearning-platform-release 만 조회한 응답 결과는 zone: us-central1-a 기준 2만건이 넘으며
  • 해당 project id (deeplearning-platform-release) 를 제외하고 조회한 결과는 약 16000 건으로
  • 다른 모든 이미지 응답 결과의 수보다 더 많은 이미지를 조회합니다.
  • 따라서 ImageList 조회 성능이 상당히 느려지며 (로컬 환경에서 api 요청부터 응답까지 160~180초 내외로 소요되며 렌더링까지 약 300초)
  • adminweb 에서 렌더링 이후 사용이 거의 불가능합니다.

GetImage(imageIID IID) (ImageInfo, error), CheckWindowsImage(imageIID IID) (bool, error)

  • GCP ImageHandler 에서 ImageList 를 조회 시
  • ImageInfo 라는 struct 의 ImageIID 에 속한 NameId 와 SystemId 를 응답값의 image selflink 로 설정하게 됩니다.
"ImageIId": {
    "NameId": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-1804-bionic-v20191024",
    "SystemId": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-1804-bionic-v20191024"
  },
  • selflink 에 포함된 project id (url 경로의 /projects 다음 인덱스로 위 예시의 경우 ubuntu-os-cloud입니다.) 와 image name (예시의 경우 ubuntu-minimal-1804-bionic-v20191024) 은
  • GCP 의 이미지 단건 조회 시 반드시 필요한 값입니다.
  • 적절한 format 으로 image IID 를 채우는 경우
  • 오류 없이 이미지 정보 조회가 가능합니다.

  • 추가적으로 GCP ImageHandler 내부의 두 메서드
  • FindImageInfoByNameFindImageInfo 에서도 Image project id list 를 사용하지만,
  • 실제로는 해당 함수를 사용하는 곳은 테스트 코드에서만 사용하거나, 참조가 없는 것으로 확인했습니다.

리스트 추가는 바로 반영 가능하나, 사용 측면에서 고려가 필요해 보입니다.

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