使用端對端 AutoML 訓練模型

本頁面說明如何使用端對端 AutoML 的表格工作流程,從表格資料集訓練分類或迴歸模型。

事前準備

您必須先完成下列事項,才能訓練模型:

如果您在執行 End-to-End AutoML 的表格工作流程時收到配額相關錯誤,可能需要申請提高配額。詳情請參閱「管理表格工作流程的配額」。

取得先前超參數調整結果的 URI

如果您先前已完成端對端 AutoML 工作流程執行作業,可以使用先前執行作業的超參數調整結果,節省訓練時間和資源。您可以使用 Google Cloud 控制台或透過 API 以程式輔助方式載入,找出先前的超參數調整結果。

Google Cloud 控制台

如要使用 Google Cloud 控制台找出超參數調整結果 URI,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Pipelines」頁面。

    前往「Pipelines」(管道) 頁面

  2. 選取「執行」分頁標籤。

  3. 選取要使用的管道執行。

  4. 選取「Expand Artifacts」(展開構件)

  5. 按一下元件 exit-handler-1

  6. 點選元件 stage_1_tuning_result_artifact_uri_empty

  7. 找出「automl-tabular-cv-trainer-2」automl-tabular-cv-trainer-2元件。

  8. 按一下相關聯的構件「tuning_result_output」tuning_result_output

  9. 選取「節點資訊」分頁標籤。

  10. 複製 URI,以便在「訓練模型」步驟中使用。

架構搜尋結果

API:Python

下列程式碼範例說明如何使用 API 載入超參數調整結果。變數 job 是指先前的模型訓練管道執行作業。


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

訓練模型

Google Cloud 控制台

如要使用 Google Cloud 控制台訓練模型,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Pipelines」頁面。

    前往「Pipelines」(管道) 頁面

  2. 選取「範本庫」分頁標籤。

  3. 在「表格分類 / 迴歸的 AutoML」資訊卡中,按一下「建立執行作業」

  4. 在「執行詳細資料」頁面中,進行下列設定:

    1. 輸入管道執行作業名稱。
    2. 選用:如要設定 Vertex AI Pipelines 服務帳戶Dataflow 工作站服務帳戶,請開啟「進階選項」。 進一步瞭解服務帳戶
    3. 按一下「繼續」

  5. 在「Runtime configuration」(執行階段設定) 頁面中,進行下列設定:

    1. 輸入 Cloud Storage 值區或值區內的資料夾,做為根輸出目錄。這個目錄將用於儲存中繼檔案,例如具體化的資料集和模型。訓練完成後,請記得清理目錄,並將模型和其他重要構件複製到另一個 Cloud Storage bucket。或者,為 Cloud Storage 值區設定存留時間 (TTL)

      專案的值區會列在控制台的 Cloud Storage 專區中。 Google Cloud

      前往「Buckets」(值區) 頁面

    2. 按一下「繼續」

  6. 在「訓練方法」頁面中,完成以下設定:

    1. 選取要用來訓練模型的資料集名稱。
    2. 選取目標資料欄。目標欄是模型要預測的值。 進一步瞭解目標資料欄規定
    3. 輸入新模型的顯示名稱。
    4. 選用:如要選擇如何將資料分割成訓練、測試和驗證集,請開啟「進階選項」。您可以選擇下列資料分割選項:
      • 隨機 (預設):Vertex AI 會隨機選取與每個資料集相關聯的資料列。根據預設,Vertex AI 會選取 80% 的資料列做為訓練集、10% 做為驗證集,以及 10% 做為測試集。設定要與每個資料集建立關聯的資料列百分比。
      • 手動:Vertex AI 會根據資料分割欄中的值,為每個資料集選取資料列。提供資料分割資料欄的名稱。
      • 按照時間排序:Vertex AI 會根據時間資料欄中的時間戳記分割資料。提供時間資料欄的名稱。您也可以設定要與訓練集、驗證集和測試集建立關聯的資料列百分比。
      • 分層:Vertex AI 會隨機選取與每個資料集相關聯的資料列,但會保留目標欄值的分布情形。提供目標資料欄的名稱。您也可以設定要與訓練集、驗證集和測試集建立關聯的資料列百分比。
      進一步瞭解資料分割
    5. 選用:您可以執行管道,不必進行架構搜尋。如果選擇「Skip architecture search」(略過架構搜尋),系統會提示您在「Training options」(訓練選項) 頁面中,提供先前管道執行作業的一組超參數。
    6. 按一下「繼續」

  7. 在「訓練選項」頁面中,按照下列方式設定:

    1. 選用:按一下「產生統計資料」。產生統計資料會填入「轉換」下拉式選單。
    2. 查看資料欄清單,並從訓練中排除不應使用的資料欄。
    3. 查看所含特徵選取的轉換,以及是否允許無效資料,並進行任何必要更新。進一步瞭解轉換無效資料
    4. 如果您選擇在「訓練方法」頁面中略過架構搜尋,請提供先前管道執行的超參數調整結果路徑。
    5. 選用:如要指定權重欄,請開啟「進階選項」並選取所需選項。進一步瞭解權重欄
    6. 選用:如要變更預設最佳化目標,請開啟「進階選項」並選取所需選項。進一步瞭解最佳化目標
    7. 選用:如果您選擇在「訓練方法」 頁面中執行架構搜尋,可以指定平行試驗的次數。開啟「進階選項」,然後輸入值。
    8. 選填:您可以為部分超參數提供固定值。 Vertex AI 會搜尋其餘未固定超參數的最佳值。 如果您偏好特定模型類型,就很適合使用這個選項。您可以為模型類型選擇類神經網路或提升樹狀結構。開啟「進階選項」,然後以 JSON 格式提供研究規格覆寫。

      舉例來說,如要將模型類型設為類神經網路 (NN),請輸入下列內容:

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. 按一下「繼續」

  8. 在「Compute and pricing」(運算和價格) 頁面中,按照下列方式設定:

    1. 輸入模型訓練時數上限。進一步瞭解定價
    2. 選用:在「運算設定」部分,您可以為工作流程的每個階段設定機器類型和機器數量。如果您有大型資料集,並想據此調整機器硬體,建議選擇這個選項。

  9. 按一下「提交」

API:Python

下列程式碼範例示範如何執行模型訓練管道:

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

您可以在 job.run() 中使用選用的 service_account 參數,將 Vertex AI Pipelines 服務帳戶設為您選擇的帳戶。

下列函式會定義管道和參數值。 訓練資料可以是 Cloud Storage 中的 CSV 檔案,也可以是 BigQuery 中的資料表。

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

以下是一部分的 get_automl_tabular_pipeline_and_parameters 參數:

參數名稱 類型 定義
data_source_csv_filenames 字串 儲存在 Cloud Storage 中的 CSV 檔案 URI。
data_source_bigquery_table_path 字串 BigQuery 資料表的 URI。
dataflow_service_account 字串 (選用) 用於執行 Dataflow 工作的自訂服務帳戶。您可以將 Dataflow 工作設為使用私有 IP 位址和特定虛擬私有雲子網路。這個參數會覆寫預設的 Dataflow 工作站服務帳戶。
prediction_type 字串 選擇 classification 訓練分類模型,或選擇 regression 訓練迴歸模型。
optimization_objective 字串 如果您訓練的是二元分類模型,預設目標為 ROC 曲線下面積。如果您訓練的是迴歸模型,預設目標為 RMSE。如要為模型設定不同的最佳化目標,請從「分類或迴歸模型的最佳化目標」中選擇。
enable_probabilistic_inference 布林值 如果您要訓練迴歸模型,並將這個值設為 true,Vertex AI 會模擬推論的機率分布。機率推論可處理有雜訊的資料並量化不確定性,進而提升模型品質。如果指定 quantiles,Vertex AI 也會傳回分布的四分位數。
quantiles List[float] 用於機率推論的分位數。分位數表示目標小於指定值的機率。請提供最多五個介於 01 之間的不重複數字 (不含 01)。

工作流程自訂選項

您可以定義在管線定義期間傳遞的引數值,自訂端對端 AutoML 工作流程。您可以透過下列方式自訂工作流程:

  • 覆寫搜尋空間
  • 設定硬體
  • 精煉模型
  • 略過架構搜尋

覆寫搜尋空間

您可以使用下列 get_automl_tabular_pipeline_and_parameters 參數,為部分超參數提供固定值。Vertex AI 會搜尋其餘未固定超參數的最佳值。如要為模型類型選擇類神經網路或提升樹狀結構,請使用這個參數。

參數名稱 類型 定義
study_spec_parameters_override List[Dict[String, Any]] (選用) 自訂超參數子集。這項參數會設定管道的 automl-tabular-stage-1-tuner 元件。

下列程式碼示範如何將模型類型設為神經網路 (NN):

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

設定硬體

您可以透過下列 get_automl_tabular_pipeline_and_parameters 參數,設定訓練用的機器類型和機器數量。如果您有大型資料集,並想據此調整機器硬體,建議選擇這個選項。

參數名稱 類型 定義
stage_1_tuner_worker_pool_specs_override Dict[String, Any] (選用) 訓練用的機器類型和機器數量自訂設定。這項參數會設定管道的 automl-tabular-stage-1-tuner 元件。
cv_trainer_worker_pool_specs_override Dict[String, Any] (選用) 訓練用的機器類型和機器數量自訂設定。這項參數會設定管道的 automl-tabular-stage-1-tuner 元件。

下列程式碼示範如何為 TensorFlow 主要節點設定 n1-standard-8 機器類型,以及為 TensorFlow 評估器節點設定 n1-standard-4 機器類型:

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

精煉模型

下列 get_automl_tabular_pipeline_and_parameters 參數可讓您建立較小的模型組合版本。較小的模型可減少推論的延遲時間和成本。

參數名稱 類型 定義
run_distillation 布林值 如果 TRUE,則會建立較小的模型組合版本。

略過架構搜尋

下列 get_automl_tabular_pipeline_and_parameters 參數可讓您執行管道,而不需進行架構搜尋,並提供先前管道執行作業的一組超參數

參數名稱 類型 定義
stage_1_tuning_result_artifact_uri 字串 (選用) 先前管道執行作業的超參數調整結果 URI。

分類或迴歸模型的最佳化目標

訓練模型時,Vertex AI 會根據模型類型和目標資料欄所用的資料類型,選取預設最佳化目標。

分類模型最適合用於:
最佳化目標 API 值 目標的適用情境
AUC ROC maximize-au-roc 盡量增加接收者操作特徵 (ROC) 曲線下的面積。區分類別。二元分類的預設值。
對數損失 minimize-log-loss 盡可能保持推論機率的準確度。多元分類唯一支援的目標。
AUC PR maximize-au-prc 盡量增加精確度和喚回度曲線下的面積。可最佳化少用類別的推論結果。
維持特定喚回度時的精確度 maximize-precision-at-recall 在特定召回值下,盡可能提高精確度。
維持特定精確度時的喚回度 maximize-recall-at-precision 以特定精確度值為目標,盡量提高喚回度。
迴歸模型最適合用於:
最佳化目標 API 值 目標的適用情境
均方根誤差 minimize-rmse 盡量減少均方根誤差 (RMSE)。準確擷取更多極端值。預設值。
平均絕對誤差 minimize-mae 盡量減少平均絕對誤差 (MAE)。將極端值視為對模型影響較小的離群值。
均方根對數誤差 minimize-rmsle 盡量減少均方根對數誤差 (RMSLE)。依據相對大小 (而非絕對值) 懲罰誤差,如果預測值和實際值可能相當大,這個做法就非常實用。

後續步驟