Cloud ML Engine のバージョニング

Cloud Machine Learning は、イメージを使用して、クラウド内でのトレーニングと予測リクエストを処理する VM を設定します。これらのイメージには、基本オペレーティング システム、コア テクノロジー パッケージ、pip パッケージ(Python ライブラリ)、オペレーティング システム パッケージが含まれます。イメージは、新しい改善点と機能を含めるために定期的にアップグレードされます。Cloud ML Engine ではバージョニングが採用されているため、モデルに対して最適な設定を選択できます。

トレーニング用の TensorFlow のカスタム バージョンの指定

サポートされる最新のランタイム バージョンよりも新しいバージョンの TensorFlow を Cloud ML Engine で使用することは、トレーニング用としては可能ですが、予測には使用できません。

完全な Cloud ML Engine ランタイム バージョンとしてまだサポートされていないバージョンの TensorFlow を使用するには、次のいずれかの方法を使用して、トレーナーのカスタム依存関係として追加します。

  1. setup.py ファイルに TensorFlow バージョンを PyPI の依存関係として指定します。 次のように必要なパッケージのリストに含めます

     REQUIRED_PACKAGES = ['tensorflow>=1.3']
    
  2. ソースから TensorFlow バイナリを作成し、CPU サポート付きの TensorFlow の指示のみに従ってください。このプロセスでは、パッケージのリストに追加することでトレーニング ジョブ リクエストに含めることができる pip パッケージ(.whl ファイル)が生成されます。

カスタム パッケージとして含める TensorFlow バイナリを作成する方がより複雑なアプローチになりますが、モデルをトレーニングするときに最新の TensorFlow アップデートを使用できるという利点があります。

バージョニングに関する重要な注意事項

  • 新しいランタイム バージョンに切り替える場合は、メジャー更新かマイナー更新かにかかわらず、必ずトレーニング ジョブとモデルを入念にテストする必要があります。

バージョン番号について

Cloud ML Engine が使用するイメージは、Cloud ML Engine のランタイム バージョンに対応します。ランタイム バージョンは、次の形式を使用します。

major_version.minor_version

メジャー バージョン

新しいメジャー バージョンは、次の 1 つ以上を組み込むために定期的に作成されます。

  • 次のもののメジャー リリース:
    • OS
    • TensorFlow
  • Cloud ML Engine 機能に対するメジャー変更や更新。

新しいメジャー バージョンには、以前のバージョンに対して書かれたコードの更新を必要とする非互換の変更が含まれる場合があります。

マイナー バージョン

新しいマイナー バージョンは、次の 1 つ以上を組み込むために定期的に作成されます。

  • 次のもののマイナー リリースと更新:
    • OS
    • TensorFlow
  • Cloud ML Engine 機能に対するマイナー変更や更新。

新しいマイナー バージョンには非互換の変更は含まれず、同じメジャー バージョンのすべてのバリエーションとの下位互換性があります。

サポート対象のバージョン

各バージョンの詳細は、Cloud ML Engine のバージョン リストをご覧ください。

ランタイム バージョンの選択

選択するバージョンは、トレーニング アプリケーションの開発に使用する主要パッケージのバージョンに従います。実際には、TensorFlow バージョンが通常最も重要な要因です。トレーナーの開発には、サポートされている最新バージョンのパッケージを使用することをおすすめします。

ランタイム バージョンの指定はオプションです。指定しない場合、Cloud ML ではそのデフォルト バージョンが使用されます。

トレーニング ジョブのランタイム バージョンを指定するには

トレーニング ジョブ リクエストを送信するときに、ランタイム バージョンを設定できます。

コマンドライン

gcloud ml-engine jobs submit training コマンドを実行するときに --runtime-version フラグを使用します。

gcloud ml-engine jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --region us-central1
    --runtime-version 1.4

Python

TrainingInput オブジェクトの runtimeVersion メンバーを目的のランタイム バージョンに設定します。

training_inputs = {'scaleTier': 'BASIC',
    '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.4',
    'pythonVersion': '3.5'}

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

トレーニング ジョブの Python バージョンを指定するには

Python 3.5 は、Cloud ML Engine ランタイム バージョン 1.4 以上で利用できます。Python 3.5 でトレーニングを行うには、ジョブの送信時に pythonVersion を 3.5 に設定します。

Python のバージョンが指定されていない場合は、デフォルトの 2.7 が使用されます。

コマンドライン

gcloud でトレーニング ジョブに Python 3.5 を指定するには、設定ファイルを作成して gcloud に渡します。たとえば、次の情報を含む config.yaml ファイルを作成します。

  trainingInput:
    pythonVersion: "3.5"

TrainingInput オブジェクトの runtimeVersion メンバーを 1.4 以上に設定し、config.yaml ファイルを渡します。

gcloud ml-engine jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --region us-central1 \
    --config config.yaml \
    --runtime-version 1.4

Python

TrainingInput オブジェクトの runtimeVersion メンバーを '1.4' 以上に設定し、pythonVersion'3.5' に設定します。

training_inputs = {'scaleTier': 'BASIC',
    '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.4',
    'pythonVersion': '3.5'}

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

モデル バージョンのランタイム バージョンを指定するには

トレーニング モデルからデプロイされるモデル バージョンの作成時に、ランタイム バージョンを指定できます。その場合、オンラインまたはバッチ予測をリクエストするときに、そのバージョンがデフォルトで使用されます。作成時にバージョンを指定しなかった場合、モデル バージョンのデフォルトのランタイム バージョンは、Cloud ML Engine の現在のデフォルト ランタイム バージョンに設定されます。

コマンドライン

gcloud ml-engine versions create コマンドを実行するときに --runtime-version フラグを使用します。

gcloud ml-engine models versions create version_name \
    --model model_name
    --origin gs://my/trained/model/path
    --runtime-version 1.4

Python

バージョン リソースのオプションのメンバーである runtimeVersion を目的のランタイム バージョンに設定します。

versionDef = {'name' = 'v1',
    'description' = 'The first iteration of the completely_made_up model',
    'deploymentUri' = 'gs://my/model/output/directory',
    'runtimeVersion' = '1.4'}
 

バッチ予測に使用するランタイム バージョンを指定するには

使用するランタイム バージョンを、バッチ予測ジョブの作成時に指定できます。指定しない場合、Cloud ML Engine ではモデル バージョンに設定されているデフォルトのランタイム バージョンが使用されます。

コマンドライン

gcloud ml-engine jobs submit prediction コマンドを実行するときに --runtime-version フラグを使用します。

gcloud ml-engine jobs submit prediction my_batch_job_333 \
    --model my_model \
    --input-paths gs://my/cloud/storage/data/path/* \
    --output-path gs://my/cloud/storage/data/output/path
    --region us-central1 \
    --data-format TEXT \
    --runtime-version 1.4

Python

PredictionInput オブジェクトのオプションのメンバーである runtimeVersion を目的のランタイム バージョンに設定します。

body = {
    'jobId': 'my_batch_job_333',
    'predictionInput': {
        'dataFormat': TEXT,
        'inputPaths': ['gs://my/cloud/storage/data/path/*'],
        'outputPath': 'gs://my/cloud/storage/data/output/path',
        'region': 'us-central1',
        'modelName': 'projects/my_project/models/my_model',
        'runtimeVersion': '1.4'}}

オンライン予測のランタイム バージョン

オンライン予測をリクエストするときには、ランタイム バージョンを指定できません。常にモデル バージョンのデフォルトのランタイム バージョンが使用されます。

バリエーション パッケージの指定(トレーニングのみ)

トレーニング インスタンスでパッケージを変更する方法には、パッケージ ファイル(tarballs)を手動でアップロードしてそれらのパスをトレーニングの入力として含める方法と、PyPI パッケージをトレーナー パッケージの依存関係として指定する方法の 2 つがあります。

パッケージ ファイルを提供するには

トレーニング ジョブ リクエストの一部として、追加のパッケージ ファイルを含めることができます。これらは、各トレーニング インスタンスにインストールされます。Cloud ML Engine は、すべてのパッケージを pip でインストールします。他のパッケージ マネージャー用に設計されたパッケージはサポートされません。

コマンドライン

gcloud ml-engine jobs submit training コマンドを実行するときに --packages フラグを使用します。値は、すべての追加パッケージへのパスのカンマ区切りリストに設定します。リストでは、エントリ間に空白を含めることはできません。

gcloud ml jobs submit training my_job \
    --staging-bucket gs://my-bucket \
    --package-path /path/to/my/project/trainer \
    --module-name trainer.task \
    --packages dep1.tar.gz,dep2.whl

Python

TrainingInput オブジェクトの packageUris の値として使用するリストに、すべての追加パッケージを追加します。

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz',
                    'gs://my/dependencies/path/dep1.tar.gz',
                    'gs://my/dependencies/path/dep2.whl'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.4'}

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

PyPI パッケージの依存関係を含めるには

通常のセットアップ ツールのプロセスを使用して、PyPI パッケージとそのバージョンをトレーナーの依存関係として指定できます。

  1. トレーナー アプリケーションの最上位ディレクトリに setup.py ファイルを含めます。
  2. setuptools.setup を setup.py で呼び出すときに、依存関係のリストと、オプションでそれらのバージョンを install_requires パラメータとして渡します。次の setup.py ファイルのサンプルにこの手順を示します。

    from setuptools import find_packages
    from setuptools import setup

    REQUIRED_PACKAGES = ['some_PyPI_package>=1.5', 'another_package==2.6']

    setup( name='trainer', version='0.1', install_requires=REQUIRED_PACKAGES, packages=find_packages(), include_package_data=True, description='Generic example trainer package with dependencies.')

Cloud ML Engine はパッケージの再インストールを強制するため、ランタイム バージョンのイメージの一部であるパッケージを新しいバージョンまたは古いバージョンで上書きすることができます。

次のステップ

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

Cloud Machine Learning Engine(Cloud ML Engine)