ランタイム バージョンの管理

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

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

  • Cloud Machine Learning Engine API で使用されるデフォルトの Cloud ML Engine ランタイム バージョンは、バージョン 1.0 です。ランタイム バージョンを指定しない場合、Cloud ML Engine はバージョン 1.0 を使用します。
  • 新しいランタイム バージョンに切り替える場合は、メジャー更新かマイナー更新かにかかわらず、必ずトレーニング ジョブとモデルを入念にテストする必要があります。

バージョン番号について

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

major_version.minor_version

メジャー バージョンとマイナー バージョン

新しいメジャー バージョンとマイナー バージョンが定期的に作成され、以下の 1 つ以上が組み込まれます。

  • 以下のリリース:
    • オペレーティング システム
    • TensorFlow、scikit-learn、XGBoost
  • Cloud ML Engine 機能に対する変更や更新。

新しいメジャー バージョンには、以前のバージョンに対して書かれたコードの更新を必要とする非互換の変更が含まれる場合があります。新しいマイナー バージョンには非互換の変更は含まれず、同じメジャー バージョンのすべてのバリエーションとの下位互換性があります。

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

必ず、使用している機械学習フレームワークや他のパッケージの最新バージョンをサポートしているランタイム バージョンを選択してください。以下のタスクに対してランタイム バージョンを指定しない場合、Cloud ML Engine はデフォルトのバージョン 1.0 を使用してリクエストを実行します。

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

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

トレーニング ジョブのリクエストを送信するときは、ランタイムのバージョンを必ず設定してください。そうしないと、Cloud ML Engine ではトレーニング ジョブにデフォルトのバージョン 1.0 が使用されます。

gcloud

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.10

Python

トレーニング ジョブのリクエストを定義するときに 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.10',
    'pythonVersion': '3.5'}

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

TrainingInput API でトレーニング ジョブを送信する方法の詳細をご覧ください。

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

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

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

gcloud

--python-version フラグを使用して Python のバージョン 3.5 を指定し、ランタイムのバージョンを 1.4 以上に設定します。

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 \
    --python-version 3.5
    --region us-central1 \
    --runtime-version 1.10

Python

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

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

TrainingInput API でトレーニング ジョブを送信する方法の詳細をご覧ください。

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

トレーニングされたモデルからデプロイ モデルのバージョンを作成するときは、必ずランタイムのバージョンを指定してください。これにより、オンラインおよびバッチ予測のリクエストにおけるデフォルトのランタイムのバージョンが設定されます。ランタイム バージョンを指定しない場合、Cloud ML Engine はバージョン 1.0 を使用します。

gcloud

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

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

Python

バージョン リソースを定義するときに runtimeVersion を設定します。

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

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

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

gcloud

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 JSON \
    --runtime-version 1.10

Python

PredictionInputruntimeVersion を設定します。

body = {
    'jobId': 'my_batch_job_333',
    'predictionInput': {
        'dataFormat': 'JSON',
        '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.10'}}

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

モデル バージョンを作成するときは、必ず、オンライン予測リクエストに使用するランタイム バージョンを指定してください。モデル バージョンのデフォルトのランタイム バージョンが正しくない場合は、正しいランタイム バージョンを使用して新しいモデル バージョンを作成してください。

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

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

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

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

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

gcloud

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

gcloud ml-engine 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.10'}

    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 はパッケージの再インストールを強制するため、ランタイム バージョンのイメージの一部であるパッケージを新しいバージョンまたは古いバージョンで上書きできます。

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

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

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

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

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

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

次のステップ

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

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

TensorFlow 用 Cloud ML Engine