使用自訂訓練功能訓練模型時,您可以設定訓練工作,自動將 Vertex AI TensorBoard 記錄上傳至 Vertex AI TensorBoard。
您可以透過這項整合功能,在 Vertex AI TensorBoard 將 Vertex AI TensorBoard 記錄檔寫入 Cloud Storage 時,近乎即時地監控訓練作業。
如需初始設定,請參閱「設定 Vertex AI TensorBoard」。
訓練指令碼變更
訓練指令碼必須設定為將 TensorBoard 記錄寫入 Cloud Storage 值區,而 Vertex AI Training 服務會透過預先定義的環境變數 AIP_TENSORBOARD_LOG_DIR,自動提供該值區的位置。
通常只要將 os.environ['AIP_TENSORBOARD_LOG_DIR'] 提供給開放原始碼 TensorBoard 記錄寫入 API 做為記錄目錄即可。AIP_TENSORBOARD_LOG_DIR 的位置通常會使用 staging_bucket 變數設定。
如要在 TensorFlow 2.x 中設定訓練指令碼,請建立 TensorBoard 回呼,並將 log_dir 變數設為 os.environ['AIP_TENSORBOARD_LOG_DIR']。接著,TensorBoard 回呼會納入 TensorFlow model.fit 回呼清單。
tensorboard_callback = tf.keras.callbacks.TensorBoard( log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'], histogram_freq=1 ) model.fit( x=x_train, y=y_train, epochs=epochs, validation_data=(x_test, y_test), callbacks=[tensorboard_callback], )
進一步瞭解 Vertex AI 如何在自訂訓練環境中設定環境變數。
建立自訂訓練工作
下列範例說明如何建立自己的自訂訓練工作。
如需如何建立自訂訓練工作的詳細範例,請參閱「Hello custom training」。如需建構自訂訓練容器的操作步驟,請參閱「建立用於訓練的自訂容器映像檔」。
如要建立自訂訓練工作,請使用 Python 適用的 Vertex AI SDK 或 REST。
Python
Python
project:。您可以在 Google Cloud 控制台 歡迎頁面中找到這些 ID。
location:執行 CustomJob 的位置。這個位置應與提供的 TensorBoard 執行個體相同。staging_bucket:在 API 呼叫期間暫存構件的 Cloud Storage 值區,包括 TensorBoard 記錄。display_name:自訂訓練工作的顯示名稱。script_path:相對於本機檔案系統工作目錄的路徑,指向訓練程式碼的進入點指令碼。container_uri:訓練容器映像檔的 URI,可以是 Vertex AI。 預先建構的訓練容器 或自訂容器。model_serving_container_image_uri:模型服務容器的 URI,適用於提供訓練指令碼產生的模型。dataset_id:用於訓練的資料集 ID 號碼。model_display_name:訓練模型的顯示名稱。args:要傳遞至 Python 指令碼的指令列引數。replica_count:要使用的工作站備用資源數量。 在大多數情況下,請將此值設為 1,用於第一個工作站集區。machine_type:要使用的 VM 類型。如需支援的 VM 清單,請參閱「機器類型」。accelerator_type:要附加至資源集區中每個 VM 的 GPU 類型。如需支援的 GPU 清單,請參閱「GPU」。accelerator_count要附加至資源集區中每個 VM 的 GPU 數量。預設值為1。training_fraction_split:用於訓練模型的部分資料集。validation_fraction_split:用於驗證模型的部分資料集。test_fraction_split:用於評估模型的部分資料集。sync:是否要同步執行這個方法。tensorboard_resource_name:CustomJob 將 TensorBoard 記錄檔上傳至的 Vertex TensorBoard 執行個體資源名稱。service_account:使用 TensorBoard 執行時為必要項目。請參閱「建立具備必要權限的服務帳戶」。
REST
使用任何要求資料之前,請先替換以下項目:
- LOCATION_ID:執行
CustomJob的位置,例如 us-central1。這個位置應與提供的 TensorBoard 執行個體相同。 - PROJECT_ID:您的專案 ID。
- TENSORBOARD_INSTANCE_NAME:(必要) 儲存 Vertex AI TensorBoard 記錄的現有 Vertex AI TensorBoard 執行個體完整名稱:
projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
注意:如果 TensorBoard 執行個體不是現有執行個體,建立 customJobs 時會擲回 404 錯誤。 - GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
- USER_SA_EMAIL:(必要) 先前步驟中建立的服務帳戶,或您自己的服務帳戶。"USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com"
- TRAINING_CONTAINER: TRAINING_CONTAINER。
- INVOCATION_TIMESTAMP:「$(date +'%Y%m%d-%H%M%S')」
- JOB_NAME:「tensorboard-example-job-${INVOCATION_TIMESTAMP}」
- BASE_OUTPUT_DIR:(必要) 訓練的所有輸出內容寫入的 Google Cloud 路徑。"gs://$GCS_BUCKET_NAME/$JOB_NAME"
HTTP 方法和網址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/customJobsJSON 要求主體:
{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
{
"replicaCount": "1",
"machineSpec": {
"machineType": "n1-standard-8",
},
"containerSpec": {
"imageUri": TRAINING_CONTAINER,
}
}
],
"base_output_directory": {
"output_uri_prefix": BASE_OUTPUT_DIR,
},
"serviceAccount": USER_SA_EMAIL,
"tensorboard": TENSORBOARD_INSTANCE_NAME,
}
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
"displayName": "DISPLAY_NAME",
"jobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": "n1-standard-8"
},
"replicaCount": "1",
"diskSpec": {
"bootDiskType": "pd-ssd",
"bootDiskSizeGb": 100
},
"containerSpec": {
"imageUri": "IMAGE_URI"
}
}
],
"serviceAccount": "SERVICE_ACCOUNT",
"baseOutputDirectory": {
"outputUriPrefix": "OUTPUT_URI_PREFIX"
},
"tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
},
"state": "JOB_STATE_PENDING",
"createTime": "CREATE-TIME",
"updateTime": "UPDATE-TIME"
}
後續步驟
- 請參閱「查看 Vertex AI TensorBoard」。
- 瞭解如何使用 Cloud Profiler 提升自訂訓練工作的效能。