無伺服器訓練工作 (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)、為訓練程式碼設定特定環境變數、使用自訂服務帳戶,以及使用 VPC 網路對等互連的選用設定
在工作站集區中,您可以指定下列設定:
- 機器類型和加速器
- 工作站集區執行的訓練程式碼類型設定:Python 訓練應用程式 (
PythonPackageSpec) 或自訂容器 (ContainerSpec)
您也可以設定自訂工作,在永久資源上執行,而不必在工作啟動期間建立新的運算資源。如要進一步瞭解永久資源,請參閱「永久資源總覽」。
設定分散式訓練
您可以指定多個工作站集區,為分散式訓練設定 CustomJob。
本頁的大部分範例都顯示單一副本訓練作業,其中包含一個工作站集區。如要修改這些設定以進行分散式訓練,請按照下列步驟操作:
- 使用第一個工作站集區設定主要副本,並將副本計數設為 1。
- 新增更多工作站集區,設定工作站副本、參數伺服器副本或評估工具副本 (如果機器學習架構支援這些額外的叢集工作,用於分散式訓練)。
進一步瞭解如何使用分散式訓練。
建立 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的情況下執行 Docker。如果尚未啟用,請啟用 Artifact Registry API。
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (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 副本數量。在大多數情況下,請將此值設為
1,適用於第一個 worker 集區。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檔案,自動封裝會根據這個檔案安裝依附元件。上述範例即說明瞭這項語法。
(選用) 使用
--worker-pool-spec旗標值中的requirements選項,取代--requirements旗標。請使用半形分號分隔 PyPI 依附元件,而非半形逗號。(選用) 您可以在
--worker-pool-spec旗標的值中,使用extra-packages選項,取代--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 副本數量。在大多數情況下,請將此值設為
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
更改下列內容:
分散式訓練
如要執行分散式訓練,請為工作設定多個副本。舉例來說,使用 Google Cloud CLI 時,您可以多次指定 --worker-pool-spec 旗標。
如果您使用自動封裝,則只能在第一個工作站集區中指定 local-package-path、script 和其他與自動封裝相關的選項。在後續的 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
如果未使用自動封裝功能,請完整且獨立地指定每個工作站集區,不要省略任何欄位。
下列指令會調整先前的範例,以使用第二個工作站集區:
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
控制台
您無法在 Cloud de Confiance 控制台中直接建立 CustomJob 資源。
不過,您可以建立 TrainingPipeline 資源,藉此建立 CustomJob。
下列操作說明介紹如何建立 TrainingPipeline,以便建立 CustomJob,且不執行任何其他動作。如要使用其他 TrainingPipeline 功能,例如使用代管資料集訓練模型,或在訓練結束時建立 Model 資源,請參閱「建立訓練管道」。
前往 Cloud de Confiance 控制台的「Agent Platform」部分,然後前往「Training pipelines」頁面。
按一下「建立」,開啟「訓練新模型」窗格。
在「訓練方法」步驟中,指定下列設定:
在「Dataset」(資料集) 下拉式清單中,選取「No managed dataset」(沒有代管資料集)。
選取「自訂訓練 (進階)」。
按一下「繼續」。
在「模型詳細資料」步驟中,選擇「訓練新模型」或「訓練新版本」。 如果選取「訓練新模型」,請為模型輸入所選名稱, MODEL_NAME按一下「繼續」。
在「訓練容器」步驟中,指定下列設定:
選取要使用預先建構的容器或自訂容器進行訓練。
視您的選擇而定,執行下列其中一項操作:
如要使用預先建構的訓練專用容器,請向 Agent Platform 提供相關資訊,以便使用您上傳至 Cloud Storage 的訓練套件:
使用「模型架構」和「模型架構版本」下拉式清單,指定要使用的預先建構容器。
在「套件位置」欄位中,指定您建立及上傳的 Python 訓練應用程式的 Cloud Storage URI。這個檔案通常以
.tar.gz結尾。在「Python module」(Python 模組) 欄位中,輸入訓練應用程式進入點的模組名稱。
如要使用自訂容器進行訓練,請在「Container image」(容器映像檔) 欄位中,指定容器映像檔的 Artifact Registry 或 Docker Hub URI。
在「模型輸出目錄」欄位中,您可以指定您有權存取之 bucket 中目錄的 Cloud Storage URI。目錄不必存在。
這個值會傳遞至 Agent Platform 的
baseOutputDirectoryAPI 欄位,該欄位會設定多個環境變數,供訓練應用程式在執行時存取。選用:在「Arguments」(引數) 欄位中,您可以指定 Agent Platform 在開始執行訓練程式碼時要使用的引數。所有引數合併的長度上限為 100,000 個字元。 這些引數的行為會因您使用的容器類型而異:
如果您使用預先建構的容器,Agent Platform 會將引數做為指令列標記傳遞至 Python 模組。
如果您使用自訂容器,Agent Platform 會以引數覆寫容器的
CMD指令。
按一下「繼續」。
在「超參數調整」步驟中,確認未選取「啟用超參數調整」核取方塊。按一下「繼續」。
在「運算和價格」步驟中,指定下列設定:
在「Region」(區域) 下拉式清單中,選取「支援自訂訓練的區域」
在「工作站集區 0」部分,指定用於訓練的運算資源。
如果您指定加速器,請確認所選區域提供您選擇的加速器類型。
如要執行分散式訓練,請按一下「新增更多工作站集區」,並為每個要新增的工作站集區指定一組額外的運算資源。
按一下「繼續」。
在「預測容器」步驟中,選取「無預測容器」。
按一下「開始訓練」,啟動無伺服器訓練管道。
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 副本數量。在大多數情況下,請將此值設為
1,以用於第一個工作站集區。 - 如果訓練應用程式是在自訂容器中執行,請指定下列項目:
- CUSTOM_CONTAINER_IMAGE_URI:Artifact Registry 或 Docker Hub 中容器映像檔的 URI,將在每個工作站副本上執行。/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 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 Agent Platform 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱「Agent Platform Node.js API 參考文件」。
如要向 Agent Platform 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
如要瞭解如何安裝或更新 Vertex AI SDK for Python,請參閱「安裝 Vertex AI SDK for Python」。 詳情請參閱 Python API 參考文件。
後續步驟
- 瞭解如何找出訓練效能瓶頸,並使用 Cloud Profiler 更快速且經濟實惠地訓練模型。
- 請參閱「建立訓練管線」,瞭解如何建立訓練管線,在 Gemini Enterprise Agent Platform 上執行無伺服器訓練應用程式。
- 瞭解如何根據資源可用性排定無伺服器訓練工作。