온라인 추론을 위해 모델을 DeployedModel
로 배포할 때 추론 노드가 자동으로 확장되도록 구성할 수 있습니다. dedicatedResources.maxReplicaCount
를 dedicatedResources.minReplicaCount
보다 큰 값으로 설정하면 됩니다.
DeployedModel
을 구성할 때 dedicatedResources.minReplicaCount
를 1 이상으로 설정해야 합니다. 즉, 사용하지 않을 때 DeployedModel
이 추론 노드 0개로 축소되도록 구성할 수 없습니다.
또는 0으로 확장 기능(미리보기)을 사용하는 데 동의하는 경우 dedicatedResources.minReplicaCount
필드를 0으로 설정할 수 있으며 엔드포인트에 트래픽이 없으면 워크로드가 0개의 복제본으로 확장됩니다. 자세한 내용은 0으로 확장을 참고하세요.
기본적으로 배포 작업은 배포 요청 제한 시간 값 전에 추론 노드 수가 dedicatedResources.minReplicaCount
에 도달하는 경우에만 성공한 것으로 간주됩니다. 그렇지 않으면 배포가 실패로 표시되고 기본 리소스가 해제됩니다.
부분적으로 성공한 배포 및 변형
dedicatedResources.requiredReplicaCount
를 dedicatedResources.minReplicaCount
보다 작은 값으로 설정하여 기본 배포 동작을 수정할 수 있습니다. 이 경우 추론 노드 수가 dedicatedResources.requiredReplicaCount
에 도달하면 배포 작업이 아직 완료되지 않았더라도 성공한 것으로 표시됩니다. dedicatedResources.minReplicaCount
에 도달할 때까지 배포가 계속됩니다. 배포 요청 시간 전에 dedicatedResources.minReplicaCount
에 도달하지 못해도 작업은 성공하지만 DeployedModel.status.message
에 실패한 복제본의 오류 메시지가 반환됩니다.
커스텀 모델 서빙 할당량은 배포된 모델의 실시간 컴퓨팅 리소스 사용량을 기준으로 계산됩니다. 프로젝트의 모든 배포에 대한 maxReplicaCount
합계가 프로젝트의 할당량을 초과하면 할당량 소진으로 인해 일부 배포가 자동 확장되지 않을 수 있습니다.
엔드포인트는 머신별로 수직 확장 및 축소되지만 할당량은 CPU 또는 GPU별로 계산됩니다. 예를 들어 모델을 a2-highgpu-2g
머신 유형에 배포한 경우 각 활성 복제본은 프로젝트 할당량에 대해 CPU 24개와 GPU 2개로 계산됩니다. 자세한 내용은 할당량 및 한도를 참조하세요.
일괄 추론용 추론 노드는 자동으로 확장되지 않습니다.
Vertex AI에서 BatchDedicatedResources.startingReplicaCount
를 사용하고 BatchDedicatedResources.maxReplicaCount
를 무시합니다.
목표 사용률 및 구성
기본적으로 전용 GPU 리소스가 없는 모델을 배포하면 Vertex AI가 자동으로 복제본 수를 확장하거나 CPU 사용량이 기본값인 60% 목표 값과 일치하도록 값을 낮춰줍니다.
기본적으로 전용 GPU 리소스가 있는 모델을 배포하면(machineSpec.accelerator_count
가 0보다 큰 경우) Vertex AI가 자동으로 복제본 수를 확장하거나 CPU 또는 GPU 사용량이 기본값인 60% 목표 값과 일치하도록 값을 낮춰줍니다. 따라서 추론 처리량에 따라 높은 GPU 사용량이 발생하지만 CPU 사용량이 높지 않으면 Vertex AI가 수직 확장되며 CPU 사용률은 매우 낮아서 모니터링에 표시됩니다. 반대로, 커스텀 컨테이너의 GPU 사용률이 낮지만 관련 없는 프로세스에서 CPU 사용률이 60%를 초과하는 경우 QPS와 지연 시간 목표를 달성하는 데 필요하지 않더라도 Vertex AI가 수직 확장됩니다.
autoscalingMetricSpecs
를 지정하여 기본 기준점 측정항목과 대상을 재정의할 수 있습니다.
CPU 사용량만을 기준으로 확장하도록 배포가 구성된 경우 GPU 사용량이 많아도 수직 확장되지 않습니다.
다음 자동 확장 측정항목이 지원됩니다.
- CPU 사용률 (
aiplatform.googleapis.com/prediction/online/cpu/utilization
): CPU 사용량을 기준으로 확장됩니다. 단위는 복제본당 CPU 사용률입니다. 타겟 값은 백분율 (0~100)입니다. 기본 타겟 값은 60%입니다. - GPU 사용률 (
aiplatform.googleapis.com/prediction/online/accelerator/duty_cycle
): GPU 사용량에 따라 조정됩니다. 단위는 복제본당 GPU 사용률입니다. 타겟 값은 백분율 (0~100)입니다. 기본 타겟 값은 60%입니다. - 요청 수 (
aiplatform.googleapis.com/prediction/online/request_count
): 요청 수에 따라 확장됩니다. 단위는 복제본당 분당 요청 수입니다. 타겟 값은 정수입니다. 이 측정항목은 기본적으로 사용 중지되어 있습니다. - Pub/Sub 대기열 크기 (미리보기, Google Cloud CLI 지원 없음) (
pubsub.googleapis.com/subscription/num_undelivered_messages
): Pub/Sub 구독의 전송되지 않은 메시지 수를 기반으로 확장됩니다. 단위는 복제본당 전송되지 않은 메시지입니다. 타겟 값은 정수입니다. 이 측정항목은 기본적으로 사용 중지되어 있습니다.
자동 확장을 구성할 때는 측정항목 식별자에 METRIC_NAME을 사용하고 목표 값에 TARGET_THRESHOLD를 사용합니다.
배포 중에 자동 확장 구성
모델을 배포할 때 자동 확장을 구성하려면 다음 인터페이스 중 하나를 사용하세요.
gcloud
gcloud CLI를 사용하여 모델을 배포할 때 자동 확장을 구성하려면 gcloud ai endpoints deploy-model
명령어를 사용합니다.
Google Cloud CLI의 경우 측정항목 키워드가 약간 다릅니다. 다음을 사용하세요.
- cpu-usage
- gpu-duty-cycle
- request-counts-per-minute
명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
- METRIC_NAME_GCLOUD: 자동 확장 측정항목의 식별자입니다.
- TARGET_THRESHOLD: 지정된 측정항목의 타겟 값입니다.
gcloud ai endpoints deploy-model ENDPOINT_ID \
--project=PROJECT_ID \
--region=LOCATION \
--model=MODEL_ID \
--display-name=DEPLOYED_MODEL_DISPLAY_NAME \
--machine-type=MACHINE_TYPE \
--accelerator-type=ACCELERATOR_TYPE \
--accelerator-count=ACCELERATOR_COUNT \
--min-replica-count=MIN_REPLICA_COUNT \
--max-replica-count=MAX_REPLICA_COUNT \
--autoscaling-metric-specs=METRIC_NAME_GCLOUD=TARGET_THRESHOLD
REST
REST API를 사용하여 모델을 배포할 때 자동 확장을 구성하려면 projects.locations.endpoints.deployModel
메서드를 사용하세요.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- DEPLOYED_MODEL_DISPLAY_NAME: 배포된 모델의 표시 이름입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
- METRIC_NAME: 자동 확장 측정항목의 식별자입니다.
- TARGET_THRESHOLD: 지정된 측정항목의 타겟 값입니다.
HTTP 메서드 및 URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel
JSON 요청 본문:
{
"deployedModel": {
"model": "projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID",
"displayName": "DEPLOYED_MODEL_DISPLAY_NAME",
"dedicatedResources": {
"machineSpec": {
"machineType": "MACHINE_TYPE",
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT
},
"minReplicaCount": MIN_REPLICA_COUNT,
"maxReplicaCount": MAX_REPLICA_COUNT,
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD
}
]
}
}
}
Pub/Sub 큐 크기 측정항목 기반 자동 확장 (미리보기)의 경우 추가 Pub/Sub 구독 정보가 필요합니다.
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Pub/Sub 구독의 프로젝트 ID입니다.
- PUBSUB_SUBSCRIPTION_ID: Pub/Sub 구독의 ID입니다.
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD,
"monitoredResourceLabels": {
"project_id": "PUBSUB_SUBSCRIPTION_PROJECT_ID",
"subscription_id": "PUBSUB_SUBSCRIPTION_ID"
},
}
]
Python
Python SDK 자동 확장/축소는 deploy()
함수 호출의 매개변수 이름을 통해 구성됩니다. 샘플 명령어는 동시성 기반 자동 확장 처리를 예로 사용합니다. 구성 가능한 자동 확장 매개변수는 다음과 같습니다.
- autoscaling_target_cpu_utilization
- autoscaling_target_accelerator_duty_cycle
- autoscaling_target_request_count_per_minute
Vertex AI SDK for Python을 사용하여 모델을 배포할 때 자동 확장/축소를 구성하려면 다음 단계를 따르세요.
코드를 실행하기 전에 다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- DEPLOYED_MODEL_DISPLAY_NAME: 배포된 모델의 표시 이름입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
- METRIC_NAME: 자동 확장 측정항목의 식별자입니다.
- TARGET_THRESHOLD: 지정된 측정항목의 타겟 값입니다.
from google.cloud import aiplatform
# Initialize Vertex AI
aiplatform.init(project="PROJECT_ID", location="LOCATION")
# Get the model from Model Registry
model = aiplatform.Model("MODEL_ID")
# Get the endpoint
endpoint = aiplatform.Endpoint("ENDPOINT_ID")
# Deploy the model to the endpoint
model.deploy(
endpoint=endpoint,
machine_type="MACHINE_TYPE",
accelerator_type="ACCELERATOR_TYPE",
accelerator_count=ACCELERATOR_COUNT,
min_replica_count=MIN_REPLICA_COUNT,
max_replica_count=MAX_REPLICA_COUNT,
autoscaling_target_request_count_per_minute=TARGET_THRESHOLD,
)
Pub/Sub 큐 크기 측정항목 기반 자동 확장 (미리보기, aiplatform_v1beta1만 지원됨)의 경우 추가 Pub/Sub 구독 정보가 필요합니다.
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Pub/Sub 구독의 프로젝트 ID입니다.
- PUBSUB_SUBSCRIPTION_ID: Pub/Sub 구독의 ID입니다.
from google.cloud import aiplatform_v1beta1 as aiplatform
# Initialize Vertex AI
aiplatform.init(project="PROJECT_ID", location="LOCATION")
# Get the model from Model Registry
model = aiplatform.Model("MODEL_ID")
# Get the endpoint
endpoint = aiplatform.Endpoint("ENDPOINT_ID")
# Deploy the model to the endpoint
model.deploy(
endpoint=endpoint,
machine_type="MACHINE_TYPE",
accelerator_type="ACCELERATOR_TYPE",
accelerator_count=ACCELERATOR_COUNT,
min_replica_count=MIN_REPLICA_COUNT,
max_replica_count=MAX_REPLICA_COUNT,
autoscaling_target_pubsub_num_undelivered_messages=TARGET_THRESHOLD,
autoscaling_pubsub_subscription_labels={
"project_id": "PUBSUB_SUBSCRIPTION_PROJECT_ID",
"subscription_id": "PUBSUB_SUBSCRIPTION_ID"
},
)
자동 확장 구성 업데이트
기존 자동 확장 구성을 업데이트하려면 다음 인터페이스 중 하나를 사용하세요.
REST
REST API를 사용하여 배포된 모델의 자동 확장 구성을 업데이트하려면 projects.locations.endpoints.mutateDeployedModel
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- DEPLOYED_MODEL_ID: 업데이트할 배포된 모델의 ID입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 새로운 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장의 새로운 최대 복제본 수입니다.
- METRIC_NAME: 자동 확장 측정항목의 식별자입니다.
- TARGET_THRESHOLD: 지정된 측정항목의 타겟 값입니다.
HTTP 메서드 및 URL:
PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:mutateDeployedModel
JSON 요청 본문:
{
"deployedModel": {
"id": "DEPLOYED_MODEL_ID",
"dedicatedResources": {
"minReplicaCount": MIN_REPLICA_COUNT,
"maxReplicaCount": MAX_REPLICA_COUNT,
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD
}
]
}
},
"updateMask": {
"paths": [
"dedicated_resources.min_replica_count",
"dedicated_resources.max_replica_count",
"dedicated_resources.autoscaling_metric_specs"
]
}
}
Pub/Sub 큐 크기 측정항목 기반 자동 확장 (미리보기)의 경우 추가 Pub/Sub 구독 정보가 필요합니다.
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Pub/Sub 구독의 프로젝트 ID입니다.
- PUBSUB_SUBSCRIPTION_ID: Pub/Sub 구독의 ID입니다.
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD,
"monitoredResourceLabels": {
"project_id": "PUBSUB_SUBSCRIPTION_PROJECT_ID",
"subscription_id": "PUBSUB_SUBSCRIPTION_ID"
},
}
]
Scale To Zero (미리보기)
0으로 확장 기능은 트래픽이 없을 때 모델 서버 배포를 0개의 복제본으로 자동 확장하여 이 기간 동안 청구되지 않도록 합니다.
트래픽이 축소된 대상 엔드포인트에 도달하면 429 - Model is not yet
ready for inference. Wait and then try your request again
응답이 수신되고 요청이 삭제되며 확장 신호가 대상 모델 서버로 전송됩니다.
이렇게 하면 모델 서버가 0에서 DedicatedResources.initial_replica_count
필드에 지정된 값으로 확장됩니다. 기본값은 1입니다.
이 기능은 다음 사용 사례를 위해 설계되었습니다.
- 정기적으로 트래픽이 없는 기간이 긴 배포
- 영업시간에 트래픽을 수신하고 다른 시간에는 유휴 상태인 엔드포인트
사용 설정 및 사용
공유 공개 엔드포인트에서는 Scale To Zero 기능을 사용 설정할 수 없습니다. 다른 모든 엔드포인트 유형은 호환됩니다.
Scale To Zero를 사용 설정하려면 Vertex 예측 API의 v1beta1 버전을 타겟팅하는 deploy-model 요청의 DedicatedResources
섹션에서 min_replica_count=0
를 지정합니다.
선택적 매개변수
DedicatedResources
에서 1과 max_replica_count
사이의 initial_replica_count
값 (양 끝값 포함)을 지정할 수 있습니다.
또한 DedicatedResources
에 새로운 ScaleToZeroSpec
섹션이 추가되어 Scale to Zero와 관련된 두 매개변수를 구성할 수 있습니다.
min_scaleup_period
: 모델 서버가 0으로 확장 평가에 등록되기 전의 기간 (초)입니다. 트래픽이 없더라도 이 기간이 지나기 전에는 배포가 복제본을 0개로 축소하려고 시도하지 않습니다. 이렇게 하면 트래픽이 타겟 엔드포인트에 대해 확인되기 전 초기 배포 및 후속 스케일업 이벤트 중에 버퍼 값을 사용할 수 있습니다. 이로 인해 배포가 축소될 수 있습니다.- 기본값: 1시간 (3,600초)
- 최솟값: 5분 (300초)
- 최댓값: 8시간 (28800초)
idle_scaledown_period
: 타겟 모델 서버를 복제본 0개로 축소하기 전 트래픽이 없는 기간 (초)입니다.- 기본값: 1시간 (3,600초)
- 최솟값: 5분 (300초)
- 최댓값: 8시간 (28800초)
예상 동작
축소된 모델에 전송된 요청은 Model is
not yet ready for inference. Please wait and then try your request again
와 함께 429 응답을 반환합니다.
잠시 기다린 후 다시 요청해 보세요. 이 단계에서 전송된 요청은 삭제됩니다.
제한사항
- Scale To Zero는 단일 모델 배포 및 엔드포인트당 하나의 모델과만 호환됩니다.
- 공유 공개 엔드포인트에서는 Scale To Zero를 사용 설정할 수 없습니다. 다른 모든 엔드포인트 유형은 호환됩니다.
- 예약이 없으면 축소된 상태에서 다시 확장할 때 품절이 발생할 수 있습니다 (머신 유형에 따라 다름).
트래픽을 수신하지 않아 30일 이상 0으로 확장된 DeployedModel은 자동 배포 취소 대상입니다.
gcloud
gcloud CLI를 사용하여 모델을 배포할 때 0으로 확장되도록 구성하려면 gcloud beta ai endpoints deploy-model
명령어를 사용합니다.
명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
gcloud beta ai endpoints deploy-model ENDPOINT_ID \
--project=PROJECT_ID \
--region=LOCATION \
--model=MODEL_ID \
--display-name=DEPLOYED_MODEL_DISPLAY_NAME \
--machine-type=MACHINE_TYPE \
--accelerator-type=ACCELERATOR_TYPE \
--accelerator-count=ACCELERATOR_COUNT \
--min-replica-count=MIN_REPLICA_COUNT \
--max-replica-count=MAX_REPLICA_COUNT \
--min-scaleup-period=300s \
--idle-scaledown-period=300s
REST
REST API를 사용하여 모델을 배포할 때 0으로 확장되도록 구성하려면 projects.locations.endpoints.deployModel
메서드를 사용하세요.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- DEPLOYED_MODEL_DISPLAY_NAME: 배포된 모델의 표시 이름입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
HTTP 메서드 및 URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel
JSON 요청 본문:
{
"deployedModel": {
"model": "projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID",
"displayName": "DEPLOYED_MODEL_DISPLAY_NAME",
"dedicatedResources": {
"machineSpec": {
"machineType": "MACHINE_TYPE",
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT
},
"minReplicaCount": MIN_REPLICA_COUNT,
"maxReplicaCount": MAX_REPLICA_COUNT,
"scale_to_zero_spec": {
"min_scaleup_period": "300s",
"idle_scaledown_period": "300s",
},
}
}
}
Python
Python SDK 스케일 투 제로는 v1beta1 API 클라이언트를 통해 구성됩니다.
코드를 실행하기 전에 다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: 엔드포인트의 리전입니다.
- ENDPOINT_ID: 엔드포인트의 ID입니다.
- MODEL_ID: 배포할 모델의 ID입니다.
- DEPLOYED_MODEL_DISPLAY_NAME: 배포된 모델의 표시 이름입니다.
- MACHINE_TYPE: 배포된 모델의 머신 유형입니다 (예:
n1-standard-4
). - ACCELERATOR_TYPE: 선택사항입니다. 연결할 GPU 가속기 유형입니다 (예:
NVIDIA_L4
). - ACCELERATOR_COUNT: 선택사항입니다. 각 머신에 연결할 가속기 수입니다.
- MIN_REPLICA_COUNT: 자동 확장을 위한 최소 복제본 수입니다.
- MAX_REPLICA_COUNT: 자동 확장 시 최대 복제본 수입니다.
- METRIC_NAME: 자동 확장 측정항목의 식별자입니다.
- TARGET_THRESHOLD: 지정된 측정항목의 타겟 값입니다.
from google.cloud import aiplatform
# Initialize Vertex AI
aiplatform.init(project="PROJECT_ID", location="LOCATION")
# Get the model from Model Registry
model = aiplatform.Model("MODEL_ID")
# Get the endpoint
endpoint = aiplatform.Endpoint("ENDPOINT_ID")
# Deploy the model to the endpoint
model.deploy(
endpoint=endpoint,
machine_type="MACHINE_TYPE",
accelerator_type="ACCELERATOR_TYPE",
accelerator_count=ACCELERATOR_COUNT
min_replica_count=MIN_REPLICA_COUNT,
max_replica_count=MAX_REPLICA_COUNT,
autoscaling_target_request_count_per_minute=TARGET_THRESHOLD,
)
import google.auth.transport.requests
import urllib3
# pip install google-cloud-aiplatform for this dependency
from google.cloud import aiplatform
from google.cloud.aiplatform_v1beta1.services import endpoint_service # For EndpointServiceClient
from google.cloud.aiplatform_v1beta1 import types as aiplatform_v1beta1_types # For message types
PROJECT_NUMBER = "PROJECT_ID"
LOCATION = "LOCATION"
ENDPOINT_DISPLAY_NAME = "stz-sdk-test"
MODEL_ID="MODEL_ID"
# Full resource name of your existing model in Vertex AI Model Registry
# e.g., "projects/your-gcp-project-id/locations/us-central1/models/your-model-id"
MODEL_RESOURCE_NAME = f"projects/{PROJECT_NUMBER}/locations/{LOCATION}/models/{MODEL_ID}"
# Deployment settings
MACHINE_TYPE = "MACHINE_TYPE"
ACCELERATOR_TYPE ="ACCELERATOR_TYPE",
ACCELERATOR_COUNT =ACCELERATOR_COUNT
# Disable InsecureRequestWarning for the requests part as in your snippet
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# The AI Platform services require regional API endpoints.
client_options = {"api_endpoint": f"{LOCATION}-aiplatform.googleapis.com"}
endpoint_service_client = endpoint_service.EndpointServiceClient(client_options=client_options)
def main():
aiplatform.init(project=PROJECT_NUMBER, location=LOCATION)
model_to_deploy = aiplatform.Model(model_name=MODEL_RESOURCE_NAME) # Initialize model object
try:
# # --- 1. Create an Endpoint ---
print(f"\nCreating endpoint '{ENDPOINT_DISPLAY_NAME}'...")
endpoint = aiplatform.Endpoint.create(
display_name=ENDPOINT_DISPLAY_NAME,
project=PROJECT_NUMBER,
location=LOCATION,
sync=True, # Wait for creation to complete
dedicated_endpoint_enabled=True,
)
print(f"Endpoint created: {endpoint.resource_name}")
endpoint_numeric_id = endpoint.name # This is the numeric ID
print(f"Numeric Endpoint ID for URL: {endpoint_numeric_id}")
print(f"\nFetching model details for: {MODEL_RESOURCE_NAME}")
model_to_deploy = aiplatform.Model(model_name=MODEL_RESOURCE_NAME)
# --- 2. Deploy the Model ---
print(f"\nDeploying model '{model_to_deploy.resource_name}' to endpoint '{endpoint.display_name}'...")
deployed_model_config = aiplatform_v1beta1_types.DeployedModel(
model=model_to_deploy.resource_name,
dedicated_resources=aiplatform_v1beta1_types.DedicatedResources(
machine_spec=aiplatform_v1beta1_types.MachineSpec(
machine_type=MACHINE_TYPE,
accelerator_type=ACCELERATOR_TYPE,
accelerator_count=ACCELERATOR_COUNT,
),
initial_replica_count=1,
min_replica_count=0,
max_replica_count=1,
scale_to_zero_spec=aiplatform_v1beta1_types.DedicatedResources.ScaleToZeroSpec(
min_scaleup_period=300,
idle_scaledown_period=300,
)
),
)
deploy_model_request = aiplatform_v1beta1_types.DeployModelRequest(
endpoint=endpoint.resource_name,
deployed_model=deployed_model_config,
)
# Alternatively, if you've got an existing endpoint, use:
# endpoint_path = endpoint_service_client.endpoint_path(
# project=PROJECT_NUMBER, location=LOCATION, endpoint={ENDPOINT_ID}
# )
# deploy_model_request = aiplatform_v1beta1_types.DeployModelRequest(
# endpoint=endpoint_path,
# deployed_model=deployed_model_config,
# )
print("\nSending v1beta1 DeployModelRequest...")
operation = endpoint_service_client.deploy_model(request=deploy_model_request)
print("Waiting for v1beta1 update deploy model operation to complete (this can take several minutes)...")
operation.result()
print("Model deployed successfully.")
except Exception as e:
print(f"\nAn error occurred: {e}")
if __name__ == "__main__":
main()
리소스 사용량 관리
엔드포인트를 모니터링하여 CPU 및 가속기 사용량, 요청 수, 지연 시간, 현재 및 목표 복제본 수와 같은 측정항목을 추적할 수 있습니다. 이 정보를 통해 엔드포인트의 리소스 사용량과 확장 동작을 파악할 수 있습니다.
각 복제본은 컨테이너 하나만 실행한다는 점에 유의하세요. 즉, 멀티 코어 머신의 단일 스레드 코드 또는 추론 과정에서 다른 서비스를 호출하는 커스텀 모델과 같이 추론 컨테이너에서 선택한 컴퓨팅 리소스를 완전히 활용하지 못하는 경우, 노드가 수직 확장되지 않을 수 있습니다.
예를 들어 FastAPI 또는 작업자 수와 스레드를 구성할 수 있는 모델 서버를 사용하는 경우 작업자가 2명 이상 있어 리소스 사용률이 증가하는 경우가 많은데, 이렇게 되면 서비스가 복제본 수를 자동으로 확장하는 기능이 향상됩니다.
일반적으로 코어당 하나의 작업자나 스레드로 시작하는 것이 좋습니다. 특히 부하가 높은 상황에서 CPU 사용률이 낮거나 CPU 사용률이 낮아 모델이 수직 확장되지 않으면 작업자 수를 늘리세요. 반면 사용률이 너무 높고 부하가 걸렸을 때 지연 시간이 예상보다 크게 증가하면 작업자를 줄여보세요. 이미 단일 작업자만 사용 중인 경우 더 작은 머신 유형을 사용해 보세요.
확장 동작 및 지연
Vertex AI는 이전 5분 동안의 데이터를 사용하여 15초마다 복제본 수를 조정합니다. 15초 주기마다 시스템은 서버 사용률을 측정하고 다음 공식에 따라 대상 복제본 수를 생성합니다.
target # of replicas = Ceil(current # of replicas * (current utilization / target utilization))
예를 들어 사용률이 100%인 복제본이 2개 있는 경우 대상은 4입니다.
4 = Ceil(3.33) = Ceil(2 * (100% / 60%))
또 다른 예시로, 복제본이 10개 있고 사용률이 1%로 떨어지면 대상은 1입니다.
1 = Ceil(.167) = Ceil(10 * (1% / 60%))
각 15초 주기가 끝나면 시스템은 이전 5분 동안의 가장 높은 목표 값과 일치하도록 복제본 수를 조정합니다. 가장 높은 목표 값을 선택하면 전체 사용률이 매우 낮더라도 이 5분 기간 동안 사용률이 급증하는 경우 엔드포인트가 축소되지 않습니다. 반면 시스템을 수직 확장해야 하는 경우 평균 대신 가장 높은 목표 값이 선택되기 때문에 15초 이내에 수직 확장이 수행됩니다.
Vertex AI에서 복제본 수를 조정해도 복제본을 시작하거나 사용 중지하는 데 시간이 걸립니다. 따라서 엔드포인트가 트래픽에 맞게 조정되기까지 추가 지연이 발생합니다. 이 기간에 영향을 미치는 주요 요인은 다음과 같습니다.
- Compute Engine VM을 프로비저닝하고 시작하는 시간
- 레지스트리에서 컨테이너를 다운로드하는 시간
- 스토리지에서 모델을 로드하는 시간
모델의 실제 확장 동작을 이해하는 가장 좋은 방법은 부하 테스트를 실행하고 모델 및 사용 사례에 중요한 특성을 최적화하는 것입니다. 자동 확장 처리가 애플리케이션에 충분히 빠르게 확장되지 않으면 예상 기준 트래픽을 처리하기에 충분한 min_replicas
를 프로비저닝하세요.
확장 구성 업데이트
모델을 배포할 때 DedicatedResources
또는 AutomaticResources
를 지정한 경우 mutateDeployedModel
을 호출하여 모델을 다시 배포하지 않고 확장 구성을 업데이트할 수 있습니다.
예를 들어 다음 요청은 max_replica
, autoscaling_metric_specs
를 업데이트하고 컨테이너 로깅을 사용 중지합니다.
{
"deployedModel": {
"id": "2464520679043629056",
"dedicatedResources": {
"maxReplicaCount": 9,
"autoscalingMetricSpecs": [
{
"metricName": "aiplatform.googleapis.com/prediction/online/cpu/utilization",
"target": 50
}
]
},
"disableContainerLogging": true
},
"update_mask": {
"paths": [
"dedicated_resources.max_replica_count",
"dedicated_resources.autoscaling_metric_specs",
"disable_container_logging"
]
}
}
사용 참고사항:
- 머신 유형을 변경하거나
DedicatedResources
에서AutomaticResources
로 또는 그 반대로 전환할 수 없습니다. 변경할 수 있는 유일한 확장 구성 필드는min_replica
,max_replica
,required_replica
,AutoscalingMetricSpec
(DedicatedResources
만 해당)입니다. updateMask
에 업데이트하려는 모든 필드를 나열해야 합니다. 나열되지 않은 필드는 무시됩니다.- DeployedModel은
DEPLOYED
상태여야 합니다. 배포된 모델당 활성 변형 작업은 최대 하나만 가능합니다. - 또한
mutateDeployedModel
을 사용하면 컨테이너 로깅을 사용 설정 또는 사용 중지할 수 있습니다. 자세한 내용은 온라인 추론 로깅을 참조하세요.