cb-spider
cb-spider copied to clipboard
[GCP] How can a user lookup a vm image which is not in the image list
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)
GCP 콘솔에서는 해당 이미지를 활용한 VM 구동을 확인하였습니다.
@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
-
[제안]
- (1) 가급적
Image Project List
를 API로 획득 - (2) 부득이 Driver 내 List 유지시 목록 업데이트
@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을 사용해야 합니다. -
-
해당 이미지 정보 호출 예시
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 확인 감사합니다.
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
이미지 말고도 테스트해봐야 할 이미지가 더 있습니다.)
- 넵, 아마도 될거라 생각합니다.
안녕하세요. @powerkimhub
말씀하신 내용과 관련하여 image list 를 조회하기 위한 api 를 호출시 사용되는 image project id list 를 조회할 수 있는 api 를 찾아보았지만 찾지 못하였습니다. 지원하는 모든 image project id list 를 확인할 수 있는 문서도 찾지 못했습니다. 일단 Google Cloud Support 에 문의를 남겨두었습니다.
문의에 대한 답변이 오면 답변 남겨드리도록 하겠습니다.
드라이버 내 image project id list 를 업데이트를 하는 방식에 대해서 조사한 내용에 대해 공유드리겠습니다.
image project id
리스트업을 위한 레퍼런스는 다음과 같습니다.
- 기존 spider driver 내 존재하는 image project list
- 말씀주신 GCP Image Project List 현황 페이지 및 해당 프로젝트 소스코드
- gcp image os 세부정보 공식 문서
- gcp image 공식 문서
- gcp deeplearning 공식 문서
- gcp gcloud public os image call
gcloud compute images list
다음 단계를 따라서 image project id
리스트를 추출했습니다.
- 각 레퍼런스에서 추출 가능한 image project id 를 리스트업
- 중복 제거 및 모든 리스트를 순회하여 gcloud command 호출
- 지원하지 않거나 에러를 발생하는 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
- 분석 및 현황 공유 감사드립니다.
- 일단, Image List에
추가 가능한 항목
반영 부탁 드립니다. - 관련하여, 다음 3가지 API 점검 부탁 드립니다.
ListImage() ([]*ImageInfo, error) GetImage(imageIID IID) (ImageInfo, error) CheckWindowsImage(imageIID IID) (bool, error)
- 추가로, driver image list code 관련 부분에 현재 issue 링크 남겨 주시기 바랍니다.
@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 내부의 두 메서드
-
FindImageInfoByName
과FindImageInfo
에서도 Image project id list 를 사용하지만, - 실제로는 해당 함수를 사용하는 곳은 테스트 코드에서만 사용하거나, 참조가 없는 것으로 확인했습니다.
리스트 추가는 바로 반영 가능하나, 사용 측면에서 고려가 필요해 보입니다.