本頁面說明如何使用端對端 AutoML 的表格工作流程,從表格資料集訓練分類或迴歸模型。
事前準備
您必須先完成下列事項,才能訓練模型:
- 準備訓練資料
- 建立 Vertex AI 資料集。
啟用下列 API:Vertex AI、Dataflow、Compute Engine、Cloud Storage。
請確認專案的服務帳戶已獲派必要角色。如要查看服務帳戶及其相關聯的角色,請前往「IAM」IAM頁面,然後勾選「包含 Google 提供的角色授權」核取方塊。
如果您在執行 End-to-End AutoML 的表格工作流程時收到配額相關錯誤,可能需要申請提高配額。詳情請參閱「管理表格工作流程的配額」。
取得先前超參數調整結果的 URI
如果您先前已完成端對端 AutoML 工作流程執行作業,可以使用先前執行作業的超參數調整結果,節省訓練時間和資源。您可以使用 Google Cloud 控制台或透過 API 以程式輔助方式載入,找出先前的超參數調整結果。
Google Cloud 控制台
如要使用 Google Cloud 控制台找出超參數調整結果 URI,請按照下列步驟操作:
在 Google Cloud 控制台的 Vertex AI 專區中,前往「Pipelines」頁面。
選取「執行」分頁標籤。
選取要使用的管道執行。
選取「Expand Artifacts」(展開構件)。
按一下元件 exit-handler-1。
點選元件 stage_1_tuning_result_artifact_uri_empty。
找出「automl-tabular-cv-trainer-2」automl-tabular-cv-trainer-2元件。
按一下相關聯的構件「tuning_result_output」tuning_result_output。
選取「節點資訊」分頁標籤。
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 控制台訓練模型,請按照下列步驟操作:
在 Google Cloud 控制台的 Vertex AI 專區中,前往「Pipelines」頁面。
選取「範本庫」分頁標籤。
在「表格分類 / 迴歸的 AutoML」資訊卡中,按一下「建立執行作業」。
在「執行詳細資料」頁面中,進行下列設定:
- 輸入管道執行作業名稱。
- 選用:如要設定 Vertex AI Pipelines 服務帳戶或 Dataflow 工作站服務帳戶,請開啟「進階選項」。 進一步瞭解服務帳戶。
- 按一下「繼續」。
在「Runtime configuration」(執行階段設定) 頁面中,進行下列設定:
-
輸入 Cloud Storage 值區或值區內的資料夾,做為根輸出目錄。這個目錄將用於儲存中繼檔案,例如具體化的資料集和模型。訓練完成後,請記得清理目錄,並將模型和其他重要構件複製到另一個 Cloud Storage bucket。或者,為 Cloud Storage 值區設定存留時間 (TTL)。
專案的值區會列在控制台的 Cloud Storage 專區中。 Google Cloud
- 按一下「繼續」。
-
在「訓練方法」頁面中,完成以下設定:
- 選取要用來訓練模型的資料集名稱。
- 選取目標資料欄。目標欄是模型要預測的值。 進一步瞭解目標資料欄規定。
- 輸入新模型的顯示名稱。
- 選用:如要選擇如何將資料分割成訓練、測試和驗證集,請開啟「進階選項」。您可以選擇下列資料分割選項:
- 隨機 (預設):Vertex AI 會隨機選取與每個資料集相關聯的資料列。根據預設,Vertex AI 會選取 80% 的資料列做為訓練集、10% 做為驗證集,以及 10% 做為測試集。設定要與每個資料集建立關聯的資料列百分比。
- 手動:Vertex AI 會根據資料分割欄中的值,為每個資料集選取資料列。提供資料分割資料欄的名稱。
- 按照時間排序:Vertex AI 會根據時間資料欄中的時間戳記分割資料。提供時間資料欄的名稱。您也可以設定要與訓練集、驗證集和測試集建立關聯的資料列百分比。
- 分層:Vertex AI 會隨機選取與每個資料集相關聯的資料列,但會保留目標欄值的分布情形。提供目標資料欄的名稱。您也可以設定要與訓練集、驗證集和測試集建立關聯的資料列百分比。
- 選用:您可以執行管道,不必進行架構搜尋。如果選擇「Skip architecture search」(略過架構搜尋),系統會提示您在「Training options」(訓練選項) 頁面中,提供先前管道執行作業的一組超參數。
- 按一下「繼續」。
在「訓練選項」頁面中,按照下列方式設定:
- 選用:按一下「產生統計資料」。產生統計資料會填入「轉換」下拉式選單。
- 查看資料欄清單,並從訓練中排除不應使用的資料欄。
- 查看所含特徵選取的轉換,以及是否允許無效資料,並進行任何必要更新。進一步瞭解轉換和無效資料。
- 如果您選擇在「訓練方法」頁面中略過架構搜尋,請提供先前管道執行的超參數調整結果路徑。
- 選用:如要指定權重欄,請開啟「進階選項」並選取所需選項。進一步瞭解權重欄。
- 選用:如要變更預設最佳化目標,請開啟「進階選項」並選取所需選項。進一步瞭解最佳化目標。
- 選用:如果您選擇在「訓練方法」 頁面中執行架構搜尋,可以指定平行試驗的次數。開啟「進階選項」,然後輸入值。
- 選填:您可以為部分超參數提供固定值。
Vertex AI 會搜尋其餘未固定超參數的最佳值。
如果您偏好特定模型類型,就很適合使用這個選項。您可以為模型類型選擇類神經網路或提升樹狀結構。開啟「進階選項」,然後以 JSON 格式提供研究規格覆寫。
舉例來說,如要將模型類型設為類神經網路 (NN),請輸入下列內容:
[ { "parameter_id": "model_type", "categorical_value_spec": { "values": ["nn"] } } ]
- 按一下「繼續」。
在「Compute and pricing」(運算和價格) 頁面中,按照下列方式設定:
- 輸入模型訓練時數上限。進一步瞭解定價。
- 選用:在「運算設定」部分,您可以為工作流程的每個階段設定機器類型和機器數量。如果您有大型資料集,並想據此調整機器硬體,建議選擇這個選項。
按一下「提交」。
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
參數:
工作流程自訂選項
您可以定義在管線定義期間傳遞的引數值,自訂端對端 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)。依據相對大小 (而非絕對值) 懲罰誤差,如果預測值和實際值可能相當大,這個做法就非常實用。 |