無伺服器訓練工作 (Agent Platform API 中的 CustomJob 資源) 是在 Gemini Enterprise Agent Platform 執行自訂機器學習 (ML) 訓練程式碼的基本方式。
提交工作前
在 Agent Platform 中建立 CustomJob 之前,您必須先建立 Python 訓練應用程式或自訂容器映像檔,定義要在 Agent Platform 執行的訓練程式碼和依附元件。
建議您使用 Google Cloud CLI 的自動封裝功能 (請參閱本指南後續章節),只要一個指令,就能根據本機電腦上的程式碼建立 Docker 容器映像檔、將容器映像檔推送至 Artifact Registry,以及建立 CustomJob。
否則,您必須手動建立 Python 訓練應用程式或自訂容器映像檔。
如果不確定要選擇哪一個選項,請參閱訓練程式碼規定,瞭解詳情。
自訂工作的內容
建立自訂工作時,您需要指定 Agent Platform 執行訓練程式碼所需的設定,包括:
- 一個工作站集區用於單一節點訓練 (
WorkerPoolSpec),或多個工作站集區用於分散式訓練 - 設定工作排程 (
Scheduling)、為訓練程式碼設定特定環境變數、使用自訂服務帳戶,以及使用虛擬私有雲網路對接的選用設定
您可以在 worker 集區中指定下列設定:
- 機型和加速器
- 設定 worker 集區執行的訓練程式碼類型:Python 訓練應用程式 (
PythonPackageSpec) 或自訂容器 (ContainerSpec)
您也可以設定自訂工作,在永久資源上執行,而不是在工作啟動期間建立新的運算資源。如要進一步瞭解永久資源,請參閱「永久資源總覽」。
設定分散式訓練
您可以指定多個 worker 集區,為分散式訓練設定 CustomJob。
本頁面中的大多數範例都顯示具有一個 worker 集區的單一副本訓練工作。如要修改這些項目以進行分散式訓練,請按照下列步驟操作:
- 使用第一個 worker 集區設定主要副本,並將副本數量設為 1。
- 如果機器學習架構支援這些額外的分散式訓練叢集工作,請新增更多 worker 集區,設定 worker 副本、參數伺服器副本或評估器副本。
進一步瞭解如何使用分散式訓練。
建立 CustomJob
如要建立 CustomJob,請根據您要使用的工具,按照下列其中一個分頁中的指示操作。如果使用 gcloud CLI,只要一個指令,就能將本機電腦上的訓練程式碼自動封裝成 Docker 容器映像檔、將容器映像檔推送至 Artifact Registry,並建立 CustomJob。其他選項則假設您已建立 Python 訓練應用程式或自訂容器映像檔。
gcloud
以下範例使用 gcloud ai custom-jobs create 指令。
如果訓練程式碼位於本機電腦,建議您按照「使用自動封裝」一節操作。或者,如果您已建立 Python 訓練應用程式或自訂容器映像檔,請跳至「不使用自動封裝」一節。
使用自動封裝
如果本機電腦上有訓練程式碼,您可以使用單一指令執行下列操作:
- 根據程式碼建構自訂 Docker 映像檔。
- 將映像檔推送至 Artifact Registry。
- 根據圖片開始
CustomJob。
結果與使用任何其他自訂容器建立 CustomJob 類似;如果這個版本的指令適合您的工作流程,可以使用這個版本。
事前準備
由於這個版本的指令會建構及推送 Docker 映像檔,因此您必須在本機電腦上執行下列設定:
如果您使用的是 Linux,請設定 Docker,以便在不使用
sudo的情況下執行。啟用 Artifact Registry API (如果尚未啟用)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。設定 Docker 驗證,以便將 Docker 映像檔推送至 Artifact Registry:
gcloud auth configure-docker
建構及推送 Docker 映像檔,並建立 CustomJob
下列指令會根據預先建構的訓練容器映像檔和本機 Python 程式碼,建構 Docker 映像檔,並將映像檔推送至 Artifact Registry,然後建立 CustomJob。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH
更改下列內容:
LOCATION:執行容器或 Python 套件的區域。
JOB_NAME:必填,
CustomJob的顯示名稱。MACHINE_TYPE:機器類型。請參閱可用於訓練的機器類型。
REPLICA_COUNT:要使用的 worker 副本數量。在多數情況下,請將第一個 worker 集區設為
1。EXECUTOR_IMAGE_URI:執行所提供程式碼的容器映像檔 URI。請參閱可用於訓練的預先建構容器。
這個映像檔會做為您使用這個指令建構的新 Docker 映像檔的基礎映像檔。
WORKING_DIRECTORY:本機檔案系統中的目錄,內含執行訓練程式碼的進入點指令碼 (請參閱下列清單項目)。
您可以使用指令碼的上層目錄或更上層的目錄。您可能需要使用較高層級的目錄,才能指定完整的 Python 模組名稱 (請參閱下列清單項目)。如果較高層級的目錄包含
requirements.txt或setup.py檔案,您也可以使用該目錄。詳情請參閱「安裝依附元件」。請注意,即使您指定較高層級的目錄,這個指令也只會將進入點指令碼的上層目錄複製到 Docker 映像檔。
SCRIPT_PATH:訓練程式碼進入點指令碼的路徑,相對於本機檔案系統上的 WORKING_DIRECTORY。這可以是 Python 指令碼 (結尾為
.py) 或 Bash 指令碼。舉例來說,如果您想執行
/hello-world/trainer/task.py,且 WORKING_DIRECTORY 為/hello-world,請使用trainer/task.py做為這個值。以
python-module取代script您可以選擇將
script=SCRIPT_PATH替換為python-module=PYTHON_MODULE,指定 WORKING_DIRECTORY 中要執行做為訓練進入點的 Python 模組名稱。例如,您可以指定python-module=trainer.task,而不是script=trainer/task.py。在這種情況下,產生的 Docker 容器會將程式碼載入為模組,而非指令碼。如果進入點指令碼會匯入 WORKING_DIRECTORY 中的其他 Python 模組,建議您使用這個選項。
安裝依附元件
使用自動封裝時,您可以在容器中安裝 Python 依附元件,方法與使用 gcloud CLI 的 local-run 指令時相同。如要瞭解安裝 Python 依附元件的各種方式,請參閱 local-run 指令指南的「安裝依附元件」一節。
使用自動封裝和 local-run 指令時,指定依附元件的語法會略有不同。您必須使用 --worker-pool-spec 旗標值中的選項,而非使用指令列旗標指定依附元件。此外,這些選項「內」的值必須以分號分隔,而非半形逗號。具體來說,語法如下:
請改用
--worker-pool-spec旗標值中的local-package-path選項,而非local-run指令的--local-package-path旗標。如果使用這個選項指定的目前使用的目錄包含requirements.txt或setup.py檔案,自動封裝功能會根據這個檔案安裝依附元件。上述範例示範了這個語法。
(選用) 您也可以不使用
--requirements旗標,改為在--worker-pool-spec旗標的值中使用requirements選項。請使用分號分隔 PyPI 依附元件,而非半形逗號。(選用) 您也可以不使用
--extra-packages旗標,改為在--worker-pool-spec旗標的值中使用extra-packages選項。請使用分號分隔本機依附元件,而非半形逗號。(選用) 您也可以不使用
--extra-dirs旗標,改為在--worker-pool-spec旗標的值中使用extra-dirs選項。請使用分號分隔目錄路徑,而非逗號。
以下範例說明如何使用所有選用技術安裝依附元件。(您可以指定其中任何子集)。為示範分號語法,範例為每個選項指定兩個值。為縮短範例長度,其他 --worker-pool-spec 選項會替換為 [...]。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2
如要瞭解這些預留位置的適當值,請參閱 local-run 指令指南中的「安裝依附元件」一節。
不使用自動封裝
如果不使用自動封裝功能,可以使用類似下列指令建立 CustomJob。視您建立的是 Python 訓練應用程式或自訂容器映像檔而定,選擇下列其中一個分頁標籤:
Python 訓練應用程式
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE
更改下列內容:
- LOCATION:執行容器或 Python 套件的區域。
-
JOB_NAME:必填,
CustomJob的顯示名稱。 - PYTHON_PACKAGE_URIS:以半形逗號分隔的 Cloud Storage URI 清單,指定訓練程式及其依附套件的 Python 套件檔案。套件 URI 數量上限為 100 個。
- MACHINE_TYPE:機器類型。請參閱可用的訓練機器類型。
-
REPLICA_COUNT:要使用的 worker 副本數量。在多數情況下,請將第一個 worker 集區設為
1。 - EXECUTOR_IMAGE_URI:執行所提供程式碼的容器映像檔 URI。請參閱可用於訓練的預先建構容器。
- PYTHON_MODULE:安裝套件後要執行的 Python 模組名稱。
自訂容器映像檔
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI
更改下列內容:
- LOCATION:執行容器或 Python 套件的區域。
-
JOB_NAME:必填,
CustomJob的顯示名稱。 - MACHINE_TYPE:機器類型。請參閱可用於訓練的機器類型。
-
REPLICA_COUNT:要使用的 worker 副本數量。在多數情況下,請將第一個 worker 集區設為
1。 - CUSTOM_CONTAINER_IMAGE_URI:Artifact Registry 或 Docker Hub 中容器映像檔的 URI,要在每個 worker 副本上執行。
分散式訓練
如要執行分散式訓練,請為工作設定多個副本。舉例來說,使用 Google Cloud CLI 時,您可以多次指定 --worker-pool-spec 旗標。
如果您使用自動封裝功能,則只能在第一個 worker 集區中指定 local-package-path、script 和其他與自動封裝相關的選項。在後續的 worker 集區中,省略與訓練程式碼相關的欄位,這些集區都會使用自動封裝功能建構的相同訓練容器。
舉例來說,下列指令會調整先前的自動封裝範例,改用第二個 worker 集區:
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT
如果您未使用自動封裝功能,請完整且獨立指定每個 worker 集區,不要省略任何欄位。
下列指令會調整先前的範例,改用第二個 worker 集區:
Python 訓練應用程式
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,executor-image-uri=SECOND_POOL_EXECUTOR_IMAGE_URI,python-module=SECOND_POOL_PYTHON_MODULE
自訂容器映像檔
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,container-image-uri=SECOND_POOL_CUSTOM_CONTAINER_IMAGE_URI
進階設定
如要指定上述範例未提供的設定選項,可以使用 --config 旗標,指定本機環境中 config.yaml 檔案的路徑,該檔案包含 CustomJobSpec 的欄位。例如:
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--config=config.yaml
查看 config.yaml 檔案範例。
控制台
在 Google Cloud 控制台中,您無法直接建立CustomJob資源。不過,您可以建立 TrainingPipeline 資源,以便建立 CustomJob。
以下操作說明將介紹如何建立 TrainingPipeline,以便建立 CustomJob,而不執行其他操作。如要使用其他 TrainingPipeline 功能,例如使用代管資料集進行訓練,或在訓練結束時建立 Model 資源,請參閱「建立訓練管道」。
前往 Google Cloud 控制台「Agent Platform」部分的「Training pipelines」(訓練管道) 頁面。
按一下 「Create」(建立),開啟「Train new model」(訓練新模型) 窗格。
在「Training method」(訓練方法) 步驟中,指定下列設定:
在「Dataset」(資料集) 下拉式選單中,選取「No managed dataset」(沒有代管資料集)。
選取「Custom training (advanced)」(自訂訓練 (進階))。
按一下「繼續」。
在「Model details」(模型詳細資料) 步驟中,選擇「Train new model」(訓練新模型) 或「Train new version」(訓練新版本)。如果選取訓練新模型,請為模型輸入自選名稱 MODEL_NAME。按一下「繼續」。
在「訓練容器」步驟中,指定下列設定:
選取要使用預先建構的容器還是自訂容器進行訓練。
根據您的選擇,執行下列其中一項操作:
如要使用預先建構的容器進行訓練,請向 Agent Platform 提供必要資訊,以便使用您上傳至 Cloud Storage 的訓練套件:
使用「Model framework」(模型架構) 和「Model framework version」(模型架構版本) 下拉式選單,指定要使用的預先建構容器。
在「Package location」(套件位置) 欄位中,指定您建立並上傳的 Python 訓練應用程式 Cloud Storage URI。這個檔案的結尾通常是
.tar.gz。在「Python module」(Python 模組) 欄位中,輸入訓練應用程式進入點的模組名稱。
如要使用自訂容器進行訓練,請在「Container image」(容器映像檔) 欄位中,指定容器映像檔的 Artifact Registry 或 Docker Hub URI。
在「Model output directory」(模型輸出目錄) 欄位中,您可以指定您有權存取的值區中目錄的 Cloud Storage URI。目錄不一定要存在。
這個值會傳遞至 Agent Platform 的
baseOutputDirectoryAPI 欄位,該欄位會設定訓練應用程式執行時可存取的數個環境變數。選用:在「Arguments」(引數) 欄位中,您可以指定 Agent Platform 開始執行訓練程式碼時要使用的引數。所有引數的長度總和上限為 100,000 個字元。這些引數的行為會因使用的容器類型而異:
如果您使用預先建構的容器,Agent Platform 會將引數做為指令列旗標傳遞至 Python 模組。
如果您使用自訂容器,Agent Platform 會以引數覆寫容器的
CMD指令。
按一下「繼續」。
在「Hyperparameter tuning」(超參數調整) 步驟中,確認未勾選「Enable hyperparameter tuning」(啟用超參數調整) 核取方塊。按一下「Continue」(繼續)。
在「Compute and pricing」(運算和定價) 步驟中,指定下列設定:
在「Region」(區域) 下拉式選單中,選取「支援自訂訓練的區域」。
在「Worker pool 0」(工作站集區 0) 區段中,指定要用於訓練的運算資源。
如果指定加速器,請確認所選區域提供您選擇的加速器類型。
如要執行分散式訓練,請按一下「Add more worker pools」(新增更多 worker 集區),並為每個額外的 worker 集區指定一組額外的運算資源。
按一下「繼續」。
在「Prediction container」(預測容器) 步驟中,選取「No prediction container」(無預測容器)。
點選「Start training」(開始訓練),啟動無伺服器訓練管道。
REST
使用任何要求資料之前,請先修改下列項目的值:
- LOCATION:執行容器或 Python 套件的區域。
- PROJECT_ID:您的專案 ID。。
-
JOB_NAME:必填,
CustomJob的顯示名稱。 - 定義自訂訓練工作:
- MACHINE_TYPE:機器類型。請參閱可用於訓練的機器類型。
- ACCELERATOR_TYPE:(選用) 要附加至工作的加速器類型。
- ACCELERATOR_COUNT:(選用) 要附加至工作的加速器數量。
- DISK_TYPE:(選用) 工作要使用的開機磁碟類型,可以是
pd-standard(預設) 或pd-ssd。進一步瞭解磁碟類型。 - DISK_SIZE:(選用) 工作使用的開機磁碟大小 (以 GB 為單位)。預設值為 100。
-
REPLICA_COUNT:要使用的 worker 副本數量。在多數情況下,請將第一個 worker 集區設為
1。 - 如果訓練應用程式是在自訂容器中執行,請指定下列項目:
- CUSTOM_CONTAINER_IMAGE_URI:Artifact Registry 或 Docker Hub 中容器映像檔的 URI,要在每個 worker 副本上執行。/li>
- 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 模組的指令列引數。
- 瞭解工作排程選項。
- TIMEOUT:(選用) 工作的執行時間上限。
- 針對要套用至這項自訂工作的任何標籤,指定 LABEL_NAME 和 LABEL_VALUE。
HTTP 方法和網址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
JSON 要求內文:
{
"displayName": "JOB_NAME",
"jobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": MACHINE_TYPE,
"acceleratorType": ACCELERATOR_TYPE,
"acceleratorCount": ACCELERATOR_COUNT
},
"replicaCount": REPLICA_COUNT,
"diskSpec": {
"bootDiskType": DISK_TYPE,
"bootDiskSizeGb": DISK_SIZE
},
// 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": {
"timeout": TIMEOUT
}
},
"labels": {
LABEL_NAME_1": LABEL_VALUE_1,
LABEL_NAME_2": LABEL_VALUE_2
}
}
如要傳送要求,請選擇以下其中一個選項:
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 的相關資訊。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 Agent Platform 快速入門導覽課程」中的 Java 設定說明操作。詳情請參閱 Agent Platform Java API 參考文件。
如要向 Agent Platform 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 Agent Platform 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱 Agent Platform Node.js API 參考文件。
如要向 Agent Platform 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝或更新 Vertex AI SDK for Python,請參閱「安裝 Vertex AI SDK for Python」。詳情請參閱 Python API 參考文件。
後續步驟
- 瞭解如何使用 Cloud Profiler 找出訓練效能瓶頸,以更快速、更經濟實惠的方式訓練模型。
- 請參閱「建立訓練管道」,瞭解如何建立訓練管道,在 Gemini Enterprise Agent Platform 執行無伺服器訓練應用程式。
- 瞭解如何根據資源可用性排定無伺服器訓練工作。