執行訓練工作

AI Platform 會以非同步 (批次) 服務的方式提供模型訓練。本頁面說明如何透過下列兩種方式設定及提交訓練工作:從指令列執行 gcloud ai-platform jobs submit training,或透過 projects.jobs.create 傳送要求到 API。

事前準備

在提交訓練工作之前,您必須先封裝應用程式,並將應用程式和任何特殊的依附元件上傳到 Cloud Storage 值區。附註:如果您使用 gcloud 指令列工具提交工作,就可以在同一個步驟中封裝應用程式及提交工作。

設定工作

您可以透過設定 Job 資源成員 (包含 TrainingInput 資源中的項目),將參數傳送到訓練服務。

如果您使用 gcloud 指令列工具提交訓練工作,則可以:

  • 將最常用的訓練參數指定為 gcloud ai-platform jobs submit training 指令的標記。
  • 傳送 YAML 設定檔中的剩餘參數,依慣例將檔案命名為 config.yaml。設定檔的結構與 Job 資源的 JSON 表示法完全相同。您可以在 gcloud ai-platform jobs submit training 指令的 --config 標記中傳送設定檔路徑。因此,如果設定檔路徑為 config.yaml,您必須設定 --config=config.yaml

收集工作設定資料

您可以使用下列屬性定義工作。

工作名稱 (jobId)
用於工作的名稱,只能包含混合大小寫的字母、數字和底線,須以英文字母開頭。
叢集設定 (scaleTier)
資源調度層級會指定執行工作時使用的處理叢集類型。如果您指定 CUSTOM 資源調度層級,還必須明確指定要使用的機器數量和機器類型。
訓練應用程式套件 (packageUris)
暫存在 Cloud Storage 位置的封裝訓練應用程式。如果您使用 gcloud 指令列工具,系統會自動執行大部分的應用程式封裝步驟。詳情請參閱封裝應用程式指南。
模組名稱 (pythonModule)
套件中主模組的名稱。主模組是您呼叫的 Python 檔案,用來啟動應用程式。如果您使用 gcloud 指令提交工作,請在 --module-name 標記中指定主模組名稱。請參閱封裝應用程式指南。
地區 (region)
您要執行工作的 Compute Engine 地區。執行訓練工作的地區應該與存有訓練資料的 Cloud Storage 值區所在地區相同。請參閱 AI Platform 服務的可用地區
工作目錄 (jobDir)
用於工作輸出的 Cloud Storage 位置路徑。大多數訓練應用程式會在訓練期間儲存查核點,並在工作即將結束時,將經過訓練的模型儲存到檔案中。您需要一個 Cloud Storage 位置來儲存這些資料。您的 Google Cloud Platform 專案必須具備這個值區的寫入權限。訓練服務會將您設定的工作目錄路徑,以 job_dir 指令列引數的方式,自動傳送到訓練應用程式。您可以將這個引數和應用程式的其他引數一起剖析,並在程式碼中使用這個引數。使用工作目錄的優點是訓練服務會先驗證目錄,接著才啟動應用程式。
執行階段版本 (runtimeVersion)

用於工作的 AI Platform 版本。如果您未指定執行階段版本,訓練服務會使用預設的 AI Platform 執行階段 1.0 版。

Python 版本 (pythonVersion)

用於工作的 Python 版本。Python 3.5 適用於 AI Platform 執行階段 1.4 以上版本。如果您未指定 Python 版本,訓練服務會使用 Python 2.7 版。

格式化設定參數

指定設定詳細資料的方式,會依您開始訓練工作的方式而有所不同:

gcloud

將工作設定詳細資料提供給 gcloud ai-platform jobs submit training 指令。操作方式有以下兩種:

  • 使用指令列標記。
  • 提供採用 Job 資源表示法的 YAML 檔案。您可以隨意命名這個檔案。按照慣例,檔案名稱是 config.yaml

即使是使用 YAML 檔案,也「必須」將某些詳細資料做為指令列標記提供。例如,您必須提供 --module-name 標記以及 --package-path--packages 的其中至少一個。如果使用 --package-path,您也必須包含 --job-dir--staging-bucket。此外,您必須提供 --region 標記或gcloud 用戶端設定預設地區。這些選項,以及您做為指令列標記提供的其他任何選項,都將覆寫這些選項在設定檔中的值。

範例 1:在這個範例中,您選擇使用預先設定的機器叢集,並在提交工作時提供所有必要詳細資料做為指令列標記。不需要使用設定檔。請參閱下一節的提交工作指南。

範例 2:下列範例顯示使用自訂處理叢集的工作設定檔內容。設定檔包含部分 (非所有) 設定詳細資料,並假設您會在提交工作時提供其他必要詳細資料做為指令列標記。

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '1.13'
  pythonVersion: '3.5'

以上範例採用 Python 3.5 版,只適用於 AI Platform 執行階段 1.4 以上版本。

Python

使用 Python 適用的 Google API 用戶端程式庫提交訓練工作時,請以與 Job 資源相同的結構設定字典。這裡的字典格式包含兩個索引鍵:jobIdtrainingInput。這兩個索引鍵的資料分別是工作名稱和包含 TrainingInput 資源中物件索引鍵的次要字典。

下列範例顯示如何為使用自訂處理叢集的工作建構工作表示法。

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task',
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.13',
    'pythonVersion': '3.5'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

請注意,training_inputsjob_spec 是任意 ID:您可以隨意命名這些字典,但字典索引鍵的名稱必須與顯示名稱完全相同,以符合 JobTrainingInput 資源中的名稱。

以上範例採用 Python 3.5 版,只適用於 AI Platform 執行階段 1.4 以上版本。

提交工作

提交訓練工作時,您必須指定兩組標記:

  • 工作設定參數。AI Platform 需要這些值才能在雲端中設定資源,並在處理叢集中的每個節點上部署您的應用程式。
  • 使用者引數或應用程式參數。AI Platform 會將這些標記的值傳送到您的應用程式。

建立工作:

gcloud

使用 gcloud ai-platform jobs submit training 指令提交訓練工作。

首先,定義一些包含設定詳細資料的環境變數,這樣做會很有幫助。如要建立工作名稱,下列程式碼會將日期和時間附加到模型名稱:

TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MAIN_TRAINER_MODULE="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
PACKAGE_STAGING_PATH="gs://your/chosen/staging/path"
REGION="us-east1"
RUNTIME_VERSION="1.13"

下列工作提交內容與上方的範例 1 設定相對應,您選擇預先設定的資源調度層級 (basic),並決定透過指令列標記提供所有設定詳細資料。這裡不需要使用 config.yaml 檔案:

gcloud ai-platform jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

下列工作提交內容與上方的範例 2 設定檔相對應,檔案中只有部分設定,且您會透過指令列標記提供其他詳細資料:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

附註:

  • 如果您在設定檔 (config.yaml) 中指定選項,同時也以指令列標記指定選項,則指令列上的值會覆寫設定檔中的值。
  • 空白的 -- 標記是用來標示 gcloud 特定標記的結尾,以及您要傳送到應用程式的 USER_ARGS 開頭。
  • AI Platform 的特定標記,例如 --module-name--runtime-version--job-dir,必須放在空白的 -- 標記之前。AI Platform 服務會解讀這些標記。
  • 由於 AI Platform 會使用 --job-dir 來驗證路徑,因此如有指定 --job-dir 標記,則必須放在空白的 -- 標記之前。
  • 您的應用程式也必須處理 --job-dir 標記 (如有指定)。即使標記位於空白的 -- 之前,--job-dir 也會做為指令列標記傳送到應用程式。
  • 您可以定義所需的 USER_ARGS 數量。AI Platform 會將 --user_first_arg--user_second_arg 等標記傳送到您的應用程式。

Python

您可以使用 Python 適用的 Google API 用戶端程式庫呼叫 AI Platform Training and Prediction API,不需要手動建構 HTTP 要求。您必須先設定驗證,才能執行下列程式碼範例。

  1. 以 API 所需格式儲存您的專案 ID (「projects/project_name」):

    project_name = 'my_project_name'
    project_id = 'projects/{}'.format(project_name)
    
  2. 取得 AI Platform 服務的 Python 表示法:

    cloudml = discovery.build('ml', 'v1')
    
  3. 編寫並傳送要求:

    request = cloudml.projects().jobs().create(body=job_spec,
                  parent=project_id)
    response = request.execute()
    
  4. 找出任何 HTTP 錯誤。最簡單的方法是將前一個指令放入 try 區塊中:

    try:
        response = request.execute()
        # You can put your code for handling success (if any) here.
    
    except errors.HttpError, err:
        # Do whatever error response is appropriate for your application.
        # For this example, just send some text to the logs.
        # You need to import logging for this to work.
        logging.error('There was an error creating the training job.'
                      ' Check the details:')
        logging.error(err._get_reason())
    

後續步驟

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

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

這個網頁
TensorFlow 適用的 AI Platform