Saat men-deploy model untuk inferensi online sebagai DeployedModel
, Anda dapat mengonfigurasi
node inferensi agar diskalakan secara otomatis. Untuk melakukannya, tetapkan
dedicatedResources.maxReplicaCount
ke
nilai yang lebih besar dari dedicatedResources.minReplicaCount
.
Saat mengonfigurasi DeployedModel
, Anda harus menetapkan
dedicatedResources.minReplicaCount
setidaknya ke 1. Dengan kata lain, Anda tidak dapat
mengonfigurasi DeployedModel
untuk diskalakan ke 0 node inferensi jika
tidak digunakan.
Atau, jika Anda setuju untuk menggunakan fitur Skalakan ke Nol
(Pratinjau), kolom
dedicatedResources.minReplicaCount
dapat disetel ke 0 dan beban kerja
diskala ke nol replika jika tidak ada traffic di endpoint. Untuk mengetahui detail selengkapnya, lihat Menskalakan ke Nol.
Secara default, operasi deployment hanya dianggap berhasil jika jumlah node inferensi mencapai dedicatedResources.minReplicaCount
sebelum nilai waktu tunggu permintaan deployment. Jika tidak, deployment akan ditandai sebagai gagal, dan
resource pokok akan dilepaskan.
Deployment dan mutasi berhasil sebagian
Anda dapat mengubah perilaku deployment default dengan menetapkan
dedicatedResources.requiredReplicaCount
ke nilai yang lebih kecil dari
dedicatedResources.minReplicaCount
. Dalam hal ini, saat jumlah node inferensi mencapai dedicatedResources.requiredReplicaCount
, operasi deployment ditandai sebagai berhasil, meskipun belum selesai. Penerapan berlanjut hingga dedicatedResources.minReplicaCount
tercapai. Jika dedicatedResources.minReplicaCount
tidak tercapai
sebelum waktu permintaan deployment, operasi tetap berhasil, tetapi pesan
error untuk replika yang gagal akan ditampilkan di
DeployedModel.status.message
.
Kuota untuk Inferensi model kustom dihitung berdasarkan
penggunaan real-time resource komputasi model yang di-deploy. Jika jumlah maxReplicaCount
untuk semua
deployment dalam project Anda lebih besar daripada kuota project, beberapa
deployment mungkin gagal melakukan penskalaan otomatis karena kuota habis.
Endpoint di-scale naik dan turun per mesin, tetapi kuota dihitung per CPU atau GPU. Misalnya, jika model Anda di-deploy ke jenis mesin a2-highgpu-2g
, setiap replika aktif dihitung sebagai 24 CPU dan 2 GPU terhadap kuota project Anda. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
Node inferensi untuk inferensi batch tidak diskalakan secara otomatis.
Vertex AI menggunakan BatchDedicatedResources.startingReplicaCount
dan
mengabaikan BatchDedicatedResources.maxReplicaCount
.
Target pemanfaatan dan konfigurasi
Secara default, jika Anda men-deploy model tanpa resource GPU khusus, Vertex AI akan otomatis meningkatkan atau memperkecil skala jumlah replika sehingga penggunaan CPU cocok dengan nilai target default 60%.
Secara default, jika Anda men-deploy model dengan resource GPU khusus (jika
machineSpec.accelerator_count
lebih besar dari 0), Vertex AI akan otomatis meningkatkan atau memperkecil skala jumlah
replika sehingga penggunaan CPU atau GPU, mana yang lebih tinggi, cocok dengan nilai target
default 60%. Oleh karena itu, jika throughput inferensi Anda menyebabkan penggunaan GPU
yang tinggi, tetapi tidak menggunakan CPU yang tinggi, Vertex AI akan meningkatkan skala dan penggunaan
CPU akan menjadi sangat rendah sehingga terlihat dalam pemantauan. Sebaliknya,
jika container kustom Anda kurang memanfaatkan GPU, tetapi memiliki proses tidak terkait
yang meningkatkan penggunaan CPU di atas 60%, Vertex AI akan meningkatkan skala, meskipun
hal ini mungkin tidak diperlukan untuk mencapai target QPS dan latensi.
Anda dapat mengganti metrik dan target nilai minimum default dengan menentukan
autoscalingMetricSpecs
.
Perlu diperhatikan bahwa jika deployment Anda dikonfigurasi untuk diskalakan hanya berdasarkan penggunaan CPU, deployment
tidak akan ditingkatkan skalanya meskipun penggunaan GPU tinggi.
Metrik penskalaan otomatis berikut didukung:
- Penggunaan CPU (
aiplatform.googleapis.com/prediction/online/cpu/utilization
): Menskalakan berdasarkan penggunaan CPU. Satuannya adalah pemakaian CPU per replika. Nilai target adalah persentase (0-100). Nilai target default adalah 60%. - Pemanfaatan GPU (
aiplatform.googleapis.com/prediction/online/accelerator/duty_cycle
): Menskalakan berdasarkan penggunaan GPU. Satuannya adalah pemakaian GPU per replika. Nilai target adalah persentase (0-100). Nilai target default adalah 60%. - Jumlah permintaan (
aiplatform.googleapis.com/prediction/online/request_count
): Melakukan penskalaan berdasarkan jumlah permintaan. Satuannya adalah permintaan per menit per replika. Nilai target adalah bilangan bulat. Metrik ini dinonaktifkan secara default. - Ukuran Antrean Pub/Sub (Pratinjau, tidak ada dukungan Google Cloud CLI) (
pubsub.googleapis.com/subscription/num_undelivered_messages
): Menskalakan berdasarkan jumlah pesan yang belum terkirim dari langganan Pub/Sub. Unitnya adalah pesan yang tidak terkirim per replika. Nilai target adalah bilangan bulat. Metrik ini dinonaktifkan secara default.
Saat mengonfigurasi penskalaan otomatis, gunakan METRIC_NAME untuk ID metrik dan TARGET_THRESHOLD untuk nilai target.
Mengonfigurasi penskalaan otomatis selama deployment
Untuk mengonfigurasi penskalaan otomatis saat men-deploy model, gunakan salah satu antarmuka berikut:
gcloud
Untuk mengonfigurasi penskalaan otomatis saat men-deploy model menggunakan gcloud CLI, gunakan perintah gcloud ai endpoints deploy-model
.
Perhatikan bahwa untuk Google Cloud CLI, kata kunci metrik sedikit berbeda. Gunakan berikut ini:
- penggunaan-cpu
- gpu-duty-cycle
- request-counts-per-minute
Sebelum menggunakan salah satu data perintah, lakukan penggantian berikut:
- ENDPOINT_ID: ID endpoint Anda.
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
- METRIC_NAME_GCLOUD: ID metrik penskalaan otomatis.
- TARGET_THRESHOLD: Nilai target untuk metrik yang ditentukan.
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
Untuk mengonfigurasi penskalaan otomatis saat men-deploy model menggunakan REST API,
gunakan metode projects.locations.endpoints.deployModel
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- ENDPOINT_ID: ID endpoint Anda.
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- DEPLOYED_MODEL_DISPLAY_NAME: Nama tampilan untuk model yang di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
- METRIC_NAME: ID metrik penskalaan otomatis.
- TARGET_THRESHOLD: Nilai target untuk metrik yang ditentukan.
Metode HTTP dan URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel
Meminta isi 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
}
]
}
}
}
Untuk penskalaan otomatis berbasis metrik Ukuran Antrean Pub/Sub (Pratinjau), informasi langganan Pub/Sub tambahan diperlukan:
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Project ID langganan Pub/Sub.
- PUBSUB_SUBSCRIPTION_ID: ID langganan Pub/Sub.
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD,
"monitoredResourceLabels": {
"project_id": "PUBSUB_SUBSCRIPTION_PROJECT_ID",
"subscription_id": "PUBSUB_SUBSCRIPTION_ID"
},
}
]
Python
Penskalaan otomatis Python SDK dikonfigurasi melalui nama parameter dalam panggilan fungsi deploy()
. Contoh perintah menggunakan penskalaan otomatis berbasis serentak sebagai contoh. Parameter penskalaan otomatis yang dapat dikonfigurasi adalah:
- autoscaling_target_cpu_utilization
- autoscaling_target_accelerator_duty_cycle
- autoscaling_target_request_count_per_minute
Untuk mengonfigurasi penskalaan otomatis saat men-deploy model menggunakan Vertex AI SDK untuk Python:
Sebelum menjalankan kode, lakukan penggantian berikut:
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- ENDPOINT_ID: ID endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- DEPLOYED_MODEL_DISPLAY_NAME: Nama tampilan untuk model yang di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
- METRIC_NAME: ID metrik penskalaan otomatis.
- TARGET_THRESHOLD: Nilai target untuk metrik yang ditentukan.
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,
)
Untuk penskalaan otomatis berbasis metrik Ukuran Antrean Pub/Sub (Pratinjau, hanya aiplatform_v1beta1 yang didukung), informasi langganan Pub/Sub tambahan diperlukan:
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Project ID langganan Pub/Sub.
- PUBSUB_SUBSCRIPTION_ID: ID langganan Pub/Sub.
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"
},
)
Memperbarui konfigurasi penskalaan otomatis
Untuk mengupdate konfigurasi penskalaan otomatis yang ada, gunakan salah satu antarmuka berikut:
REST
Untuk mengupdate konfigurasi penskalaan otomatis model yang di-deploy menggunakan REST API,
gunakan metode projects.locations.endpoints.mutateDeployedModel
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- ENDPOINT_ID: ID endpoint Anda.
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- DEPLOYED_MODEL_ID: ID model yang di-deploy untuk diupdate.
- MIN_REPLICA_COUNT: Jumlah minimum replika baru untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah replika maksimum baru untuk penskalaan otomatis.
- METRIC_NAME: ID metrik penskalaan otomatis.
- TARGET_THRESHOLD: Nilai target untuk metrik yang ditentukan.
Metode HTTP dan URL:
PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:mutateDeployedModel
Meminta isi 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"
]
}
}
Untuk penskalaan otomatis berbasis metrik Ukuran Antrean Pub/Sub (Pratinjau), informasi langganan Pub/Sub tambahan diperlukan:
- PUBSUB_SUBSCRIPTION_PROJECT_ID: Project ID langganan Pub/Sub.
- PUBSUB_SUBSCRIPTION_ID: ID langganan Pub/Sub.
"autoscalingMetricSpecs": [
{
"metricName": "METRIC_NAME",
"target": TARGET_THRESHOLD,
"monitoredResourceLabels": {
"project_id": "PUBSUB_SUBSCRIPTION_PROJECT_ID",
"subscription_id": "PUBSUB_SUBSCRIPTION_ID"
},
}
]
Skalakan ke Nol (Pratinjau)
Fitur Scale To Zero memungkinkan Anda menskalakan deployment server model secara otomatis ke nol replika saat tidak ada traffic, sehingga tidak ada penagihan selama waktu ini.
Saat traffic mencapai endpoint yang diturunkan skala target, respons 429 - Model is not yet
ready for inference. Wait and then try your request again
diterima, permintaan dibatalkan, dan sinyal penskalaan naik dikirim ke server model target.
Hal ini akan menyebabkan server model melakukan penskalaan dari nol hingga nilai apa pun yang
ditentukan di kolom DedicatedResources.initial_replica_count
. Nilai
defaultnya adalah 1.
Fitur ini dirancang untuk kasus penggunaan berikut:
- Penerapan dengan periode panjang tanpa traffic secara rutin.
- Endpoint yang biasanya menerima traffic selama jam kerja dan tidak aktif pada waktu lain.
Pengaktifan dan penggunaan
Fitur Skala ke Nol tidak dapat diaktifkan di endpoint publik bersama. Semua jenis endpoint lainnya kompatibel.
Untuk mengaktifkan Skala ke Nol, tentukan min_replica_count=0
di bagian
DedicatedResources
permintaan deploy-model Anda (menargetkan
versi v1beta1 Vertex Prediction API).
Parameter opsional
Di DedicatedResources
, Anda dapat menentukan nilai initial_replica_count
antara 1 dan max_replica_count
(inklusif).
Ada juga bagian ScaleToZeroSpec
baru yang ditambahkan ke DedicatedResources
yang memungkinkan konfigurasi atas dua parameter terkait Skala ke Nol:
min_scaleup_period
: durasi (dalam detik) sebelum server model didaftarkan dalam evaluasi Skala ke Nol. Deployment tidak akan mencoba menskalakan kembali ke nol replika hingga durasi ini berlalu, meskipun tidak ada traffic. Hal ini memungkinkan nilai buffer selama deployment awal dan peristiwa penskalaan berikutnya sebelum traffic diperiksa terhadap endpoint target (yang dapat mengakibatkan penskalaan deployment).- Nilai default: 1 jam (3600 detik)
- Nilai minimum: 5 menit (300 detik)
- Nilai maksimum: 8 jam (28800 detik).
idle_scaledown_period
: durasi (dalam detik) tanpa traffic sebelum menskalakan server model target menjadi nol replika.- Nilai default: 1 jam (3600 detik)
- Nilai minimum: 5 menit (300 detik)
- Nilai maksimum: 8 jam (28800 detik).
Perilaku yang diharapkan
Permintaan yang dikirim ke model yang diperkecil akan menampilkan respons 429 dengan Model is
not yet ready for inference. Please wait and then try your request again
.
Tunggu, lalu coba kirimkan permintaan Anda lagi. Perhatikan bahwa permintaan apa pun yang dikirim dalam fase ini akan dibatalkan.
Batasan
- Skala ke Nol hanya kompatibel dengan deployment model tunggal dan satu model per endpoint.
- Scale To Zero tidak dapat diaktifkan di endpoint publik bersama, semua jenis endpoint lainnya kompatibel.
- Tanpa reservasi, Anda dapat mengalami kehabisan stok saat meningkatkan skala kembali dari status yang diperkecil (bergantung pada jenis mesin).
DeployedModel yang diskalakan ke nol selama lebih dari 30 hari (karena tidak menerima traffic) akan otomatis di-un-deploy.
gcloud
Untuk mengonfigurasi penskalaan ke nol saat men-deploy model menggunakan gcloud CLI,
gunakan perintah gcloud beta ai endpoints deploy-model
.
Sebelum menggunakan salah satu data perintah, lakukan penggantian berikut:
- ENDPOINT_ID: ID endpoint Anda.
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
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
Untuk mengonfigurasi penskalaan ke nol saat men-deploy model menggunakan REST API,
gunakan metode projects.locations.endpoints.deployModel
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- ENDPOINT_ID: ID endpoint Anda.
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- DEPLOYED_MODEL_DISPLAY_NAME: Nama tampilan untuk model yang di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
Metode HTTP dan URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel
Meminta isi 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
Scale-to-zero Python SDK dikonfigurasi melalui klien API v1beta1.
Sebelum menjalankan kode, lakukan penggantian berikut:
- PROJECT_ID: Project ID Anda.
- LOCATION: Region endpoint Anda.
- ENDPOINT_ID: ID endpoint Anda.
- MODEL_ID: ID model yang akan di-deploy.
- DEPLOYED_MODEL_DISPLAY_NAME: Nama tampilan untuk model yang di-deploy.
- MACHINE_TYPE: Jenis mesin untuk model yang di-deploy (misalnya,
n1-standard-4
). - ACCELERATOR_TYPE: Opsional. Jenis akselerator GPU yang akan dipasang (misalnya,
NVIDIA_L4
). - ACCELERATOR_COUNT: Opsional. Jumlah akselerator yang akan dipasang ke setiap mesin.
- MIN_REPLICA_COUNT: Jumlah minimum replika untuk penskalaan otomatis.
- MAX_REPLICA_COUNT: Jumlah maksimum replika untuk penskalaan otomatis.
- METRIC_NAME: ID metrik penskalaan otomatis.
- TARGET_THRESHOLD: Nilai target untuk metrik yang ditentukan.
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()
Mengelola penggunaan resource
Anda dapat memantau endpoint untuk melacak metrik seperti penggunaan CPU dan akselerator, jumlah permintaan, latensi, serta jumlah replika saat ini dan target. Informasi ini dapat membantu Anda memahami penggunaan resource dan perilaku penskalaan endpoint.
Perlu diingat bahwa setiap replika hanya menjalankan satu container. Artinya, jika container inferensi tidak dapat sepenuhnya menggunakan resource komputasi yang dipilih, seperti kode thread tunggal untuk mesin multi-core, atau model kustom yang memanggil layanan lain sebagai bagian dari pembuatan inferensi, node Anda mungkin tidak akan meningkat skalanya.
Misalnya, jika Anda menggunakan FastAPI, atau server model apa pun yang memiliki jumlah worker atau thread yang dapat dikonfigurasi, ada banyak kasus ketika memiliki lebih dari satu worker dapat meningkatkan pemanfaatan resource sehingga dapat meningkatkan kemampuan layanan untuk menskalakan jumlah replika secara otomatis.
Kami biasanya merekomendasikan untuk memulai dengan satu worker atau thread per core. Jika Anda melihat bahwa pemakaian CPU rendah, terutama saat beban tinggi, atau skala model Anda tidak ditingkatkan karena penggunaan CPU rendah, tingkatkan jumlah worker. Di sisi lain, jika Anda melihat bahwa pemakaian terlalu tinggi dan latensi meningkat lebih dari yang diharapkan berdasarkan beban, coba gunakan lebih sedikit worker. Jika Anda hanya menggunakan satu worker, coba gunakan jenis mesin yang lebih kecil.
Perilaku penskalaan dan jeda
Vertex AI menyesuaikan jumlah replika setiap 15 detik menggunakan data dari periode 5 menit sebelumnya. Untuk setiap siklus 15 detik, sistem akan mengukur penggunaan server dan menghasilkan jumlah target replika berdasarkan formula berikut:
target # of replicas = Ceil(current # of replicas * (current utilization / target utilization))
Misalnya, jika saat ini Anda memiliki dua replika yang digunakan hingga 100%, targetnya adalah 4:
4 = Ceil(3.33) = Ceil(2 * (100% / 60%))
Contoh lain, jika Anda memiliki 10 replika dan pemakaian menurun menjadi 1%, targetnya adalah 1:
1 = Ceil(.167) = Ceil(10 * (1% / 60%))
Di akhir setiap siklus 15 detik, sistem akan menyesuaikan jumlah replika agar cocok dengan nilai target tertinggi dari periode 5 menit sebelumnya. Perhatikan bahwa karena nilai target tertinggi dipilih, endpoint Anda tidak akan diperkecil skalanya jika ada peningkatan penggunaan yang tiba-tiba selama periode 5 menit tersebut, meskipun penggunaan secara keseluruhan sangat rendah. Di sisi lain, jika sistem perlu ditingkatkan skalanya, sistem akan melakukannya dalam waktu 15 detik, karena yang dipilih adalah nilai target tertinggi, bukan rata-rata.
Perlu diingat bahwa meskipun Vertex AI menyesuaikan jumlah replika, perlu waktu untuk memulai atau menonaktifkan replika. Dengan demikian, ada jeda tambahan sebelum endpoint dapat menyesuaikan dengan traffic. Faktor utama yang memengaruhi situasi ini mencakup:
- Waktu untuk menyediakan dan memulai VM Compute Engine
- Waktu untuk mendownload container dari registry
- Waktu untuk memuat model dari penyimpanan
Cara terbaik untuk memahami perilaku penskalaan yang sebenarnya dari model Anda adalah dengan
menjalankan uji beban dan mengoptimalkan karakteristik yang penting bagi model dan
kasus penggunaan Anda. Jika autoscaler tidak meningkatkan skala aplikasi Anda
dengan cukup cepat, sediakan min_replicas
yang cukup untuk menangani traffic dasar pengukuran yang Anda
harapkan.
Memperbarui konfigurasi penskalaan
Jika Anda menentukanDedicatedResources
atau AutomaticResources
saat men-deploy model, Anda dapat memperbarui konfigurasi penskalaan tanpa harus men-deploy ulang
model dengan memanggil
mutateDeployedModel
.
Misalnya, permintaan berikut memperbarui max_replica
,
autoscaling_metric_specs
, dan menonaktifkan logging container.
{
"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"
]
}
}
Catatan penggunaan:
- Anda tidak dapat mengubah jenis mesin atau beralih dari
DedicatedResources
keAutomaticResources
atau sebaliknya. Satu-satunya kolom konfigurasi penskalaan yang dapat Anda ubah adalah:min_replica
,max_replica
,required_replica
, danAutoscalingMetricSpec
(khususDedicatedResources
). - Anda harus mencantumkan setiap kolom yang perlu diperbarui di
updateMask
. Kolom yang tidak tercantum akan diabaikan. - DeployedModel
harus dalam status
DEPLOYED
. Hanya boleh ada maksimal satu operasi mutasi aktif per model yang di-deploy. mutateDeployedModel
juga memungkinkan Anda mengaktifkan atau menonaktifkan logging container. Untuk mengetahui informasi selengkapnya, lihat Logging inferensi online.