모델을 온라인 예측을 제공하는 데 사용하려면 먼저 모델을 엔드포인트에 배포해야 합니다. 모델을 배포하면 지연 시간이 짧은 온라인 예측을 제공하기 위해 물리적 리소스가 연결됩니다.
이 페이지에서는 온라인 예측을 사용하여 엔드포인트에 모델을 배포하기 위해 따라야 하는 단계를 설명합니다.
시작하기 전에
엔드포인트에 모델을 배포하기 전에 예측을 위해 모델 아티팩트를 내보내고 해당 페이지의 모든 필수 요건을 충족하는지 확인하세요.
리소스 풀 만들기
ResourcePool
맞춤 리소스를 사용하면 모델의 동작을 세밀하게 제어할 수 있습니다. 다음과 같은 설정을 정의할 수 있습니다.
- 자동 확장 구성입니다.
- CPU 및 메모리 요구사항을 정의하는 머신 유형입니다.
- GPU 리소스와 같은 가속기 옵션입니다.
머신 유형은 예측 클러스터를 생성하기 위해 전송하는 노드 풀 사양 요청에 필수적입니다.
배포된 모델의 리소스 풀에서 가속기 수와 유형에 따라 GPU 사용량이 결정됩니다. 머신 유형은 요청된 CPU 및 메모리 리소스만 지정합니다. 따라서 ResourcePool
사양에 GPU 가속기를 포함할 때 machineType
필드는 모델의 CPU 및 메모리 요구사항을 제어하고 acceleratorType
필드는 GPU를 제어합니다. 또한 acceleratorCount
필드는 GPU 슬라이스 수를 제어합니다.
다음 단계에 따라 ResourcePool
커스텀 리소스를 만듭니다.
ResourcePool
커스텀 리소스를 정의하는 YAML 파일을 만듭니다. 다음 예에는 GPU 가속기가 있는 리소스 풀 (GPU 기반 모델)과 GPU 가속기가 없는 리소스 풀 (CPU 기반 모델)의 YAML 파일이 포함되어 있습니다.GPU 기반 모델
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: a2-highgpu-1g-gdc acceleratorType: nvidia-a100-80gb # The accelerator count is a slice of the requested virtualized GPUs. # The value corresponds to one-seventh of 80 GB of GPUs for each count. acceleratorCount: 2 autoscaling: minReplica: 2 maxReplica: 10
CPU 기반 모델
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: n2-highcpu-8-gdc autoscaling: minReplica: 2 maxReplica: 10
다음을 바꿉니다.
RESOURCE_POOL_NAME
:ResourcePool
정의 파일에 지정할 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.
리소스 요구사항과 예측 클러스터에서 사용할 수 있는 항목에 따라
dedicatedResources
필드의 값을 수정합니다.예측 클러스터에
ResourcePool
정의 파일을 적용합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
다음을 바꿉니다.
PREDICTION_CLUSTER_KUBECONFIG
: 예측 클러스터의 kubeconfig 파일 경로입니다.RESOURCE_POOL_NAME
:ResourcePool
정의 파일의 이름입니다.
ResourcePool
커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는 엔드포인트에 모델을 배포할 때 리소스 풀에서 리소스를 프로비저닝하고 예약합니다.
엔드포인트에 모델 배포하기
리소스 풀이 있는 경우 엔드포인트 1개에 모델을 2개 이상 배포할 수 있고 2개 이상의 엔드포인트에 모델 1개를 배포할 수 있습니다. 지원되는 컨테이너를 타겟팅하는 예측 모델을 배포합니다. 엔드포인트가 이미 있는지 여부에 따라 다음 두 가지 방법 중 하나를 선택합니다.
새 엔드포인트에 모델 배포
예측 모델을 새 엔드포인트에 배포하려면 다음 단계를 따르세요.
DeployedModel
커스텀 리소스를 정의하는 YAML 파일을 만듭니다.TensorFlow
다음 YAML 파일은 TensorFlow 모델의 샘플 구성을 보여줍니다.
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/1 # The model version ID must match the name of the first folder in # the artifactLocation bucket, inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/1/, # then the value for the model version ID is "1". modelVersionID: "1" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-14:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
다음을 바꿉니다.
DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일에 지정할 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.PREDICTION_ENDPOINT
: 새 엔드포인트에 지정할 이름입니다(예:my-img-prediction-endpoint
).PATH_TO_MODEL
: 스토리지 버킷의 모델 경로입니다.RESOURCE_POOL_NAME
: 모델을 호스팅하기 위해 리소스 풀을 만들 때ResourcePool
정의 파일에 지정한 이름입니다.
예측 모델에 따라 나머지 필드의 값을 수정합니다.
PyTorch
다음 YAML 파일은 PyTorch 모델의 샘플 구성을 보여줍니다.
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: endpointPath: PREDICTION_ENDPOINT endpointInfo: id: PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/pytorch artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: "pytorch" modelDisplayName: my-pytorch-model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/pytorch/1 modelVersionID: "1" modelContainerSpec: # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-4:latest imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest ports: - 8080 grpcPorts: - 7070 sharesResourcePool: false resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
다음을 바꿉니다.
DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일에 지정할 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.PREDICTION_ENDPOINT
: 새 엔드포인트에 지정할 이름입니다(예:my-img-prediction-endpoint
).PATH_TO_MODEL
: 스토리지 버킷의 모델 경로입니다.RESOURCE_POOL_NAME
: 모델을 호스팅하기 위해 리소스 풀을 만들 때ResourcePool
정의 파일에 지정한 이름입니다.
예측 모델에 따라 나머지 필드의 값을 수정합니다.
예측 클러스터에
DeployedModel
정의 파일을 적용합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
다음을 바꿉니다.
PREDICTION_CLUSTER_KUBECONFIG
: 예측 클러스터의 kubeconfig 파일 경로입니다.DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일의 이름입니다.
DeployedModel
커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는DeployedModel
커스텀 리소스를 조정하고 예측 클러스터에서 제공합니다.Endpoint
커스텀 리소스를 정의하는 YAML 파일을 만듭니다.다음 YAML 파일은 샘플 구성을 보여줍니다.
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081
다음을 바꿉니다.
ENDPOINT_NAME
:Endpoint
정의 파일에 지정할 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.PREDICTION_ENDPOINT
: 새 엔드포인트의 이름입니다. 이 이름은DeployedModel
정의 파일에 정의되어 있습니다.DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일에 지정한 이름입니다.
serviceRef
대상은 하나 이상 있을 수 있습니다. 두 번째serviceRef
객체가 있는 경우destinations
필드의 YAML 파일에 추가하고DEPLOYED_MODEL_NAME_2
를 만든 두 번째DeployedModel
정의 파일에 지정한 이름으로 바꿉니다. 배포하는 모델의 수에 따라 필요에 따라serviceRef
객체를 추가하거나 삭제합니다.이 엔드포인트의 모델 간에 트래픽을 분할하는 방법에 따라
trafficPercentage
필드를 설정합니다. 엔드포인트 구성에 따라 나머지 필드의 값을 수정합니다.예측 클러스터에
Endpoint
정의 파일을 적용합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
ENDPOINT_NAME
을Endpoint
정의 파일의 이름으로 바꿉니다.
예측 모델의 엔드포인트 URL 경로를 가져오려면 다음 명령어를 실행합니다.
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
다음을 바꿉니다.
PREDICTION_CLUSTER_KUBECONFIG
: 예측 클러스터의 kubeconfig 파일 경로입니다.PREDICTION_ENDPOINT
: 새 엔드포인트의 이름입니다.PROJECT_NAMESPACE
: 예측 프로젝트 네임스페이스의 이름입니다.
기존 엔드포인트에 모델 배포
이전에 새 엔드포인트에 다른 모델을 배포한 경우에만 기존 엔드포인트에 모델을 배포할 수 있습니다. 엔드포인트를 만들려면 이 이전 단계가 필요합니다.
기존 엔드포인트에 예측 모델을 배포하려면 다음 단계를 따르세요.
DeployedModel
커스텀 리소스를 정의하는 YAML 파일을 만듭니다.다음 YAML 파일은 샘플 구성을 보여줍니다.
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model-v2 modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/2 # The model version ID must match the name of the first folder in # the artifactLocation bucket, # inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/2/, # then the value for the model version ID is "2". modelVersionID: "2" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-6:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
다음을 바꿉니다.
DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일에 지정할 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.PREDICTION_ENDPOINT
: 기존 엔드포인트의 이름입니다(예:my-img-prediction-endpoint
).PATH_TO_MODEL
: 스토리지 버킷의 모델 경로입니다.RESOURCE_POOL_NAME
: 모델을 호스팅하기 위해 리소스 풀을 만들 때ResourcePool
정의 파일에 지정한 이름입니다.
예측 모델에 따라 나머지 필드의 값을 수정합니다.
예측 클러스터에
DeployedModel
정의 파일을 적용합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
다음을 바꿉니다.
PREDICTION_CLUSTER_KUBECONFIG
: 예측 클러스터의 kubeconfig 파일 경로입니다.DEPLOYED_MODEL_NAME
:DeployedModel
정의 파일의 이름입니다.
DeployedModel
커스텀 리소스를 만들면 Kubernetes API와 웹훅 서비스가 YAML 파일을 검증하고 성공 또는 실패를 보고합니다. 예측 연산자는DeployedModel
커스텀 리소스를 조정하고 예측 클러스터에서 제공합니다.기존
Endpoint
커스텀 리소스의 세부정보를 표시합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
ENDPOINT_NAME
을Endpoint
정의 파일의 이름으로 바꿉니다.destinations
필드에 새serviceRef
객체를 추가하여Endpoint
커스텀 리소스 정의의 YAML 파일을 업데이트합니다. 새 객체에 새로 만든DeployedModel
커스텀 리소스를 기반으로 적절한 서비스 이름을 포함합니다.다음 YAML 파일은 샘플 구성을 보여줍니다.
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 40 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_3 namespace: PROJECT_NAMESPACE trafficPercentage: 10 grpcPort: 8501 httpPort: 8081
다음을 바꿉니다.
ENDPOINT_NAME
: 기존Endpoint
정의 파일의 이름입니다.PROJECT_NAMESPACE
: 예측 클러스터와 연결된 프로젝트 네임스페이스의 이름입니다.PREDICTION_ENDPOINT
: 기존 엔드포인트의 이름입니다.DeployedModel
정의 파일에서 이 이름을 참조했습니다.DEPLOYED_MODEL_NAME
: 이전에 생성된DeployedModel
정의 파일의 이름입니다.DEPLOYED_MODEL_NAME_2
: 새로 만든DeployedModel
정의 파일에 지정한 이름입니다.
serviceRef
대상은 하나 이상 있을 수 있습니다. 세 번째serviceRef
객체가 있는 경우destinations
필드의 YAML 파일에 추가하고DEPLOYED_MODEL_NAME_3
를 만든 세 번째DeployedModel
정의 파일에 지정한 이름으로 바꿉니다. 배포하는 모델의 수에 따라 필요에 따라serviceRef
객체를 추가하거나 삭제합니다.이 엔드포인트의 모델 간에 트래픽을 분할하는 방식에 따라
trafficPercentage
필드를 설정합니다. 엔드포인트 구성에 따라 나머지 필드의 값을 수정합니다.예측 클러스터에
Endpoint
정의 파일을 적용합니다.kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
ENDPOINT_NAME
을Endpoint
정의 파일의 이름으로 바꿉니다.
예측 모델의 엔드포인트 URL 경로를 가져오려면 다음 명령어를 실행합니다.
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
다음을 바꿉니다.
PREDICTION_CLUSTER_KUBECONFIG
: 예측 클러스터의 kubeconfig 파일 경로입니다.PREDICTION_ENDPOINT
: 엔드포인트의 이름PROJECT_NAMESPACE
: 예측 프로젝트 네임스페이스의 이름입니다.