トレーニング ジョブの実行

AI Platform は、モデル トレーニングを非同期(バッチ)サービスとして実行します。このページでは、コマンドラインから gcloud ai-platform jobs submit training を実行するか、projects.jobs.create で API にリクエストを送信して、トレーニング ジョブを構成して送信する方法について説明します。

始める前に

トレーニング ジョブを送信する前に、アプリケーションをパッケージ化し、Cloud Storage バケットにアップロードする必要があります。特殊な依存関係がある場合はそれもアップロードします。注: gcloud コマンドライン ツールを使用してジョブを送信する場合は、アプリケーションのパッケージ化とジョブの送信を同じ 1 つの手順内で行うことができます。

ジョブを構成する

トレーニング サービスにパラメータを渡すには、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 のランタイム バージョン。ランタイム バージョンを指定しない場合、トレーニング サービスはランタイム バージョン 1.0 を使用します。scikit-learn または XGBoost でトレーニングするには、ランタイム バージョン 1.4 以上を使用する必要があります。
Python バージョン(pythonVersion
ジョブに使用する Python バージョン。Python 3.5 は、AI Platform のランタイム バージョン 1.4 以上で使用できます。Python バージョンを指定しない場合、Python 2.7 が使用されます。

構成パラメータの形式

構成の詳細を指定する方法は、トレーニング ジョブをどのように起動するかによって異なります。

gcloud

ジョブ構成の詳細情報を gcloud ai-platform jobs submit training コマンドに渡します。作成する方法は次の 2 つです。

  • コマンドライン フラグを使用する。
  • 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.14'
  pythonVersion: '3.5'

上記の例では Python バージョン 3.5 を指定しています。Python バージョン 3.5 は、AI Platform ランタイム バージョン 1.4 以上を使用している場合に限り使用できます。また、ワーカーとパラメータ サーバーの仮想マシンも構成します。TensorFlow またはカスタム コンテナを使用して分散トレーニングを実行する場合にのみ、これらのマシンを構成します。詳細については、マシンタイプをご覧ください。

Python

Python 用 Google API クライアント ライブラリを使用してトレーニング ジョブを送信する場合は、Job リソースと同じ構造を持つ辞書に構成情報を設定します。この辞書には、jobIdtrainingInput の 2 つのキーがあります。最初のキーに対応するデータはジョブの名前です。2 つ目のキーに対応するデータは、TrainingInput リソース内のオブジェクトに対応するキーを持つ第 2 の辞書です。

次の例は、カスタム処理クラスタを持つジョブの Job 表現を作成する方法です。

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.14',
    'pythonVersion': '3.5'}

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

training_inputsjob_spec は任意の識別子です。これらの辞書には任意の名前を付けることができます。ただし、辞書のキーの名前はここに示しているとおりにする必要があります(Job リソースや TrainingInput リソース内の名前と対応させるため)。

上記の例では Python バージョン 3.5 を指定しています。Python バージョン 3.5 は、AI Platform ランタイム バージョン 1.4 以上を使用している場合に限り使用できます。また、ワーカーとパラメータ サーバーの仮想マシンも構成します。TensorFlow またはカスタム コンテナを使用して分散トレーニングを実行する場合にのみ、これらのマシンを構成します。詳細については、マシンタイプをご覧ください。

ジョブを送信する

トレーニング ジョブを送信するときは、2 つのフラグセットを指定します。

  • ジョブ構成パラメータ。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.14"

次のジョブ送信は、上記の例 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 の先頭を示します。
  • --module-name--runtime-version--job-dir などの AI Platform 固有のフラグは、空の -- フラグの前に指定する必要があります。AI Platform サービスがこれらのフラグを解釈します。
  • AI Platform はパスの検証に --job-dir を使用するため、 フラグを指定する場合は、空の -- フラグの前に指定する必要があります。
  • --job-dir フラグが指定されている場合、アプリケーションはこれも処理する必要があります。--job-dir フラグは、空の -- の前に指定されている場合でも、コマンドライン フラグとしてアプリケーションに渡されます。
  • USER_ARGS は必要な数だけ定義できます。AI Platform は、--user_first_arg--user_second_arg などをアプリケーションに渡します。

Python

Python 用 Google API クライアント ライブラリを使用すると、HTTP リクエストを手動で作成しなくても、AI Platform のトレーニング API と Prediction API を呼び出すことができます。次のサンプルコードを実行する前に、認証を設定する必要があります。

  1. API で必要とされる形式('projects/_projectname')でプロジェクト ID を保存します。

    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())
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Google Cloud 機械学習ドキュメント