總覽
使用 Spot VM 可降低執行自訂訓練工作的成本。 Spot VM 是多餘的 Compute Engine 容量,Spot VM 的折扣幅度相當可觀,但 Compute Engine 可能隨時會搶占 Spot VM,以回收容量。
詳情請參閱「Spot VM」。
限制與需求
使用 Vertex AI 的 Spot VM 時,請注意下列限制和規定:
- 使用 Vertex AI 的 Spot VM 時,適用所有Spot VM 限制。
- 只有自訂訓練和推論作業支援搭配 Vertex AI 使用 Spot VM。
- 不支援搭配 TPU Pod 使用 Spot VM。
- 不支援透過 Google Cloud 控制台提交工作。
帳單
如果工作負載具備容錯能力,且能承受 VM 可能遭到先占的影響,Spot VM 就能大幅降低運算費用。如果部分 VM 在處理過程中停止,工作執行速度會變慢,但不會完全停止。Spot VM 不會對現有 VM 造成額外負載,就能完成批次處理工作,且不用全額購買更多標準 VM。請參閱「先占處理」。
使用 Spot VM 時,系統會根據工作持續時間和機器類型計費。 工作處於佇列或遭到搶占時,您不需支付費用。
先占處理
Compute Engine 隨時可以回收 Spot VM。
因此,自訂訓練工作必須具備容錯能力,才能充分發揮 Spot VM 的效益。如果 Spot VM 遭到搶占,自訂訓練工作會失敗並顯示 STOCKOUT
錯誤,Compute Engine 最多會嘗試重新啟動工作六次。如要瞭解如何充分運用 Spot VM,請參閱 Spot VM 最佳做法。
以下是幾種可讓自訂訓練作業容錯的方法:
- 建立檢查點即可儲存進度。定期儲存模型進度,可確保終止的自訂訓練工作能從上次儲存的檢查點繼續,而不是從頭開始。
- 使用 Elastic Horovod。彈性訓練功能可讓 Horovod 擴充運算資源,不必重新啟動或從檢查點繼續執行。詳情請參閱「Elastic Horovod」。
- 使用關機指令碼。當 Compute Engine 搶占 Spot VM 時,您可以使用關閉指令碼,在 VM 遭到搶占前嘗試執行清除動作。詳情請參閱「使用關閉指令碼處理先占」。
事前準備
準備自訂訓練應用程式:
- 如要使用預建容器,請參閱「為預建容器建立 Python 訓練應用程式」。
- 如要使用自訂容器,請參閱「為訓練作業建立自訂容器映像檔」。
將訓練工作設定為使用 Spot VM
如要設定自訂訓練工作使用 Spot VM,請在排程設定中指定 SPOT
策略。
REST
使用任何要求資料之前,請先替換以下項目:
- LOCATION:容器或 Python 套件的執行區域。
- PROJECT_ID:您的專案 ID。
-
JOB_NAME:必填。
CustomJob
的顯示名稱。 - 定義自訂訓練工作:
- MACHINE_TYPE:機器的類型。請參閱可用的訓練機器類型。
- REPLICA_COUNT:要使用的工作站備用資源數量。在大多數情況下,請將此值設為
1
,以用於第一個工作站集區。 - 如果訓練應用程式在自訂容器中執行,請指定下列項目:
- CUSTOM_CONTAINER_IMAGE_URI:Docker 容器映像檔的 URI,內含訓練程式碼。瞭解如何建立自訂容器映像檔。
- CUSTOM_CONTAINER_COMMAND:選用。容器啟動時要叫用的指令。這項指令會覆寫容器的預設進入點。
- CUSTOM_CONTAINER_ARGS:選用。啟動容器時要傳遞的引數。
- 如果訓練應用程式是可在預先建立的容器中執行的 Python 套件,請指定下列項目:
- EXECUTOR_IMAGE_URI:執行所提供程式碼的容器映像檔 URI。請參閱可用的預先建構訓練容器。
- PYTHON_PACKAGE_URIS:以半形逗號分隔的 Cloud Storage URI 清單,指定訓練程式及其依附元件套件的 Python 套件檔案。套件 URI 數量上限為 100 個。
- PYTHON_MODULE:安裝套件後要執行的 Python 模組名稱。
- PYTHON_PACKAGE_ARGS:選用。要傳遞至 Python 模組的命令列引數。
HTTP 方法和網址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
JSON 要求主體:
{ "displayName": "JOB_NAME", "jobSpec": { "workerPoolSpecs": [ { "machineSpec": { "machineType": "MACHINE_TYPE" } }, "replicaCount": REPLICA_COUNT, // Union field task can be only one of the following: "containerSpec": { "imageUri": CUSTOM_CONTAINER_IMAGE_URI, "command": [ CUSTOM_CONTAINER_COMMAND ], "args": [ CUSTOM_CONTAINER_ARGS ] }, "pythonPackageSpec": { "executorImageUri": EXECUTOR_IMAGE_URI, "packageUris": [ PYTHON_PACKAGE_URIS ], "pythonModule": PYTHON_MODULE, "args": [ PYTHON_PACKAGE_ARGS ] } // End of list of possible types for union field task. } // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs // for distributed training. ], "scheduling": { "strategy": "SPOT" } } }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"
PowerShell
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
回覆內容會包含規格資訊和 JOB_ID。
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。詳情請參閱 Python 適用的 Vertex AI SDK API 參考說明文件。
customJob = aiplatform.CustomJob(
display_name=TEST_CASE_NAME,
worker_pool_specs=worker_pool_spec,
staging_bucket=OUTPUT_DIRECTORY
)
customJob.run(
scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT
)
後續步驟
- 進一步瞭解 Spot VM。
- 如要進一步瞭解 Compute Engine VM 的一般資訊,請參閱虛擬機器執行個體說明文件。
- 如要瞭解如何建立 Spot VM,請參閱「建立及使用 Spot VM」。
- 搭配 Vertex AI Inference 使用 Spot VM。