Training 總覽

您可以使用 AI Platform 在雲端執行 TensorFlow、scikit-learn 和 XGBoost 訓練應用程式。AI Platform 利用自己執行階段版本中的這些「受託管架構」,提供訓練機器學習模型所需的依附元件。此外,您可以使用自訂容器,以其他機器學習架構執行訓練工作。本頁面說明 AI Platform Training 的基本概念,如果您想直接進入訓練程序,請參閱啟動訓練工作

訓練的運作方式

AI Platform 會藉由雲端的運算資源執行訓練工作。您不需要編寫訓練應用程式,就能利用自己的資料集來訓練內建演算法 (Beta 版)。如果內建演算法不適合您的用途,您可以建立在 AI Platform 上執行的訓練應用程式。

以下概述使用訓練應用程式的程序:

  1. 您要建立 Python 應用程式來訓練您的模型,而且要把該應用程式建構成能在您的本機開發環境中執行。
  2. 將訓練和驗證資料放入 AI Platform 可以存取的來源中。通常您可以將這些資料放在與您用於 AI Platform 的相同 GCP 專案相關聯的 Cloud Storage、Cloud BigTable 或其他 Google Cloud Platform 儲存服務中。
  3. 當應用程式已準備好可以執行時,您必須封裝應用程式,並將其轉移到專案可存取的 Cloud Storage 值區。如果您使用 gcloud 指令列工具執行訓練工作,系統會自動為您完成上述工作。
  4. AI Platform 訓練服務會為您的工作設定資源。這項服務會根據您的工作設定分配一或多個虛擬機器 (稱為「訓練執行個體」)。您可藉由下列方式設定各個訓練執行個體:
    • 依照工作使用的 AI Platform 版本套用標準機器映像檔。
    • 載入應用程式套件並使用 pip 進行安裝。
    • 安裝您指定為依附元件的任何其他套件。
  5. 訓練服務會執行您的應用程式,傳遞您在建立訓練工作時指定的任何指令列引數。
  6. 您可以透過下列方式取得執行工作的相關資訊:
    • 前往 Stackdriver Logging。
    • 使用 gcloud 指令列工具,要求工作詳細資料或執行記錄串流。
    • 透過程式向訓練服務發出狀態要求。
  7. 訓練工作成功完成或發生無法復原的錯誤時,AI Platform 會停止所有工作程序並清除資源。

典型的機器學習應用程式

我們把 AI Platform 訓練服務設計成儘量不會影響您的應用程式,這代表您可以專注在自己的模型程式碼上。

大多數的機器學習應用程式都有以下特點:

  • 可取得訓練資料和評估資料。
  • 處理資料樣本。
  • 使用評估資料來測試模型的準確率 (模型預測出正確值的頻率)。
  • (針對 TensorFlow 訓練應用程式) 可在訓練過程中每隔一段時間就輸出查核點,以取得模型進度的快照。
  • 可在應用程式執行完畢時匯出已訓練的模型。

分散式訓練結構

如果您利用 AI Platform 執行分散式 TensorFlow 工作,就必須在單一「訓練叢集」中指定多個機器 (節點)。訓練服務會為您指定的機器類型分配資源。您在特定節點上執行的工作稱為「備用資源」。系統會依據分散式 TensorFlow 模型,在分散式訓練中將一個角色或工作分配給訓練叢集中的每個備用資源:

  • 主要執行個體:您只能把一個備用資源指派為「主要執行個體」工作站。此工作會管理其他工作,並回報整體工作的狀態。訓練服務會持續執行,直到工作成功完成或發生無法復原的錯誤。在分散式訓練中,主要備用資源的狀態即為整體工作狀態。

    如果您執行的是單一程序工作,其中唯一的備用資源就是工作的主要備用資源。

  • 工作站:您可以把一或多個備用資源指派為「工作站」。這些備用資源會按照您在工作設定中的設定執行自己分內的任務。

  • 參數伺服器:您可以把一或多個備用資源指派為「參數伺服器」。這些備用資源會協調工作站之間的共用模型狀態。

分散式訓練策略

使用多個節點訓練模型有三種基本策略:

  • 採用同步更新的資料平行訓練。
  • 採用非同步更新的資料平行訓練。
  • 模型平行訓練。

因為不論在哪一種模型結構中,您都可以使用資料平行策略,因此將分散式訓練方法套用於自訂模型是很好的起點。在資料平行訓練中,整個模型會與所有工作站節點一起共用。每個節點會各自依據部分訓練資料集單獨計算梯度向量,採用的方式與小批處理的方式相同。系統會將計算好的梯度向量收集到參數伺服器節點,並以梯度向量的總和來更新模型參數。如果您在 10 個工作站節點中分配 10,000 個批次,則每個節點大約處理 1,000 個批次。

資料平行訓練可以透過同步或非同步更新執行。使用非同步更新時,參數伺服器會在接收其中一個工作站節點的梯度向量後,立即個別套用每個梯度向量,如下圖所示:

採用非同步更新的資料平行訓練圖

如要瞭解如何執行資料平行分散式訓練,請參閱 TensorFlow 的MultiWorkerMirroredStrategyParameterServerStrategy。然後,請瞭解如何在 AI Platform Training 中設定分散式訓練

如要進一步瞭解模型平行訓練,請參閱 Mesh TensorFlow 的相關說明。

封裝應用程式

您必須先封裝應用程式及其依附元件,才能在 AI Platform Training 上執行訓練應用程式。然後,您必須將本套件上傳到 GCP 專案可存取的 Cloud Storage 值區。

gcloud 指令列工具會自動執行大部分的程序。具體來說,您可以使用 gcloud ai-platform jobs submit training 上傳應用程式套件及提交訓練工作。

如需詳細的操作說明,請參閱封裝訓練應用程式一文。

提交訓練工作

AI Platform 會以非同步 (批次) 服務的方式提供模型訓練。您可以透過指令列執行 gcloud ai-platform jobs submit training,或是透過 projects.jobs.create 傳送要求到 API,以提交訓練工作。

如需詳細操作說明,請參閱啟動訓練工作

工作 ID

您必須為訓練工作提供符合下列規則的名稱:

  • 在 Google Cloud Platform 專案中不得重複。
  • 僅能包含大小寫混用字母、數字和底線。
  • 開頭必須是英文字母。
  • 長度不得超過 128 個字元。

您可以採用任何偏好的工作命名慣例。如果您執行的工作並不多,那麼名稱可能不那麼重要。但您如果執行很多工作,您可能需要在大型清單中尋找工作 ID,因此我們建議您採用容易區分工作的工作 ID。

常見的做法是為所有與某個模型有關的工作定義一個基礎名稱,再附加日期/時間字串。這種命名慣例可依名稱排序工作清單,因為某個模型中的所有工作都會依遞增順序分成同一組。

資源調度層級

在 AI Platform 中執行訓練工作時,您必須指定所需的機器類型與數量。為使程序更為簡單,您可以從一組預先定義的叢集規格 (稱為「資源調度層級」) 中進行挑選。您也可以選擇「自訂」層級,自行指定機器類型。

如要指定資源調度層級,請將其新增至工作設定中的 TrainingInput 物件。如果您使用 gcloud 指令提交訓練工作,則可使用相同的 ID。

請參閱資源調度層級和機器類型的詳細定義。

超參數調整

如果您要使用超參數調整,則必須於建立訓練工作時加入設定詳細資料。請參閱超參數調整的概念指南,以及如何使用超參數調整

地區與區域

GCP 利用地區,再細分為區域,來定義實體運算資源的地理位置。在 AI Platform 上執行訓練工作時,您必須指定執行該工作的地區。

如果您將訓練資料集儲存在 Cloud Storage 中,則執行訓練工作的地區應該與儲存訓練資料的 Cloud Storage 值區所在地區相同。如果執行工作的地區與資料值區所在地區不同,可能會耗費更多時間才能完成工作。

如要查看 AI Platform 服務 (包括模型訓練以及線上/批次預測) 的可用地區,請參閱地區指南

使用 job-dir 做為通用輸出目錄

您可以在設定工作時設定工作目錄,以指定工作的輸出目錄。提交工作時,AI Platform 會執行下列作業:

  • 驗證目錄,讓您可以在工作執行前先解決任何問題。
  • 將路徑以名為 --job-dir 的指令列引數傳送至應用程式。

您必須在應用程式中使用 --job-dir 引數。因此您要在剖析其他參數時擷取引數值,並於儲存應用程式輸出時使用。請參閱啟動訓練工作指南。

執行階段版本

如要使用 AI Platform 的其中一個受託管機器學習架構進行訓練,請指定要用於訓練工作的受支援 AI Platform 執行階段版本。執行階段版本會決定您已分配訓練執行個體上所安裝的 TensorFlow、scikit-learn、XGBoost 或其他 Python 套件的版本。因此,請指定可提供您所需功能的版本。如果您同時會在本機及雲端執行訓練工作,請確保本機和雲端工作都使用了相同的執行階段版本。

輸入資料

用於訓練工作的資料必須符合下列規則,才能在 AI Platform 上執行:

  • 資料必須採用您可以讀取,也能動態饋給到訓練程式碼的格式。
  • 資料必須位於程式碼可存取的位置。這通常表示資料應儲存於某個 GCP 儲存空間或大數據服務中。

輸出資料

應用程式輸出資料十分常見,輸出的資料包括訓練期間的查核點,以及完成訓練時儲存的模型。您可視應用程式的需要輸出其他資料。最簡單的方式是將輸出檔案儲存至訓練工作的 GCP 專案 Cloud Storage 值區中。

建構不受 VM 重新啟動影響的訓練工作

GCP VM 偶爾會重新啟動。為確保您的訓練工作不會受到重新啟動的影響,請定期儲存模型查核點,並將工作設定為還原至最新查核點。

您通常會把模型查核點儲存在您於 gcloud ai-platform jobs submit training 指令的 --job-dir 引數中指定的 Cloud Storage 路徑。

TensorFlow Estimator API 可為您導入查核點的功能。如果您已經將模型納入 Estimator,就不需要擔心 VM 的重新啟動事件。

如果您無法將模型納入 TensorFlow Estimator 中,請將儲存及還原查核點功能寫入訓練程式碼中。TensorFlow 在 tf.train 模組中提供下列有用的資源:

使用 GPU 訓練

您可以透過圖形處理器 (GPU) 在 AI Platform 上執行訓練工作。GPU 可高速執行密集數學運算。在張量資料上執行特定操作時,與新增另一部具有一或多個 CPU 核心的機器相比,使用 GPU 更有效率。

AI Platform 訓練服務不會為與 GPU 搭配使用提供任何特殊的介面。您可以指定已啟用 GPU 的機器來執行工作,而服務會為您分配這些機器。舉例來說,在某個 TensorFlow 訓練作業中,您可以利用程式碼將 TensorFlow Ops 指派給 GPU。如果您為某個工作類型指定可存取 GPU 的機器類型,則指派給該工作類型的每個執行個體照例都會採用相同的設定:服務會在每台機器上,執行程式碼的單一備用資源。

如果您使用自訂容器搭配不同的機器學習架構來訓練,該架構可能會為與 GPU 搭配使用而提供不同的介面。

某些模型在 GPU 上的執行效果並不會比較好。我們建議您將 GPU 用在需要進行許多數學運算的大型複雜模型上。但即使這樣,您仍應透過訓練執行一小部分資料範例,測試 GPU 支援的優勢。

請參閱如何將 GPU 用於訓練工作

使用 TPU 訓練

您可以在搭配 Cloud TPU 的 AI Platform 上執行訓練工作。

請參閱如何使用 TPU 執行訓練工作

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Machine Learning 說明文件