PyTorch を使用した ML モデルのトレーニング
このチュートリアルでは、PyTorch 機械学習フレームワークを使用するトレーニング ジョブを実行する方法を説明します。このチュートリアルでは、PyTorch を使用するようにジョブを構成する方法と、AI Platform Training でサポートされている他の ML フレームワークとの違いについて説明します。その後、サンプル PyTorch コードを使用してトレーニング ジョブを実行する方法を説明します。このジョブでは、Chicago Taxi Trips データセットのデータに基づいてモデルをトレーニングします。
このチュートリアルでは、GPU とハイパーパラメータ調整によって PyTorch を使用する方法についても説明します。
PyTorch コンテナ
AI Platform Training のランタイム バージョンには、PyTorch が依存関係として含まれていません。PyTorch を使用するトレーニング ジョブを実行するには、AI Platform Training で使用するビルド済みの PyTorch コンテナを指定します。
トレーニング用にビルド済みコンテナを構成するには、カスタム コンテナと同じ構文を使用します。ただし、独自の Docker コンテナを作成する必要はありません。代わりに、AI Platform で提供されるコンテナ イメージの URI を指定して、作成する Python トレーニング パッケージを指定します。
AI Platform には、次のビルド済み PyTorch コンテナがあります。
コンテナ イメージの URI | PyTorch バージョン | サポートされるプロセッサ |
---|---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
1.11 | CPU、TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 |
1.11 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
1.10 | CPU、TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 |
1.10 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
1.9 | CPU、TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 |
1.9 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
1.7 | CPU、TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 |
1.7 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
1.6 | CPU、TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 |
1.6 | GPU |
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 |
1.4 | CPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 |
1.4 | GPU |
これらのコンテナ イメージは Deep Learning Containers から派生したもので、Deep Learning Containers による依存関係が含まれます。
ビルド済みのコンテナでは使用できない PyTorch のバージョンを使用する場合は、カスタム コンテナの使用に関するガイドをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
サンプルコードのダウンロード
次のコマンドを実行して、サンプルの PyTorch トレーニング アプリケーションをダウンロードし、トレーニング アプリケーションがあるディレクトリに移動します。
git clone --depth=1 \
https://github.com/GoogleCloudPlatform/ai-platform-samples.git
cd ai-platform-samples/training/pytorch/structured/python_package
必要であれば、トレーニング コードの構造を確認します。
ls -pR
PyTorch トレーニング アプリケーションは trainer/
ディレクトリにあります。setup.py
には、トレーニング アプリケーションをパッケージ化するための構成情報が含まれています。
Cloud Storage バケットを作成する
パッケージ化されたトレーニング コードと、トレーニング ジョブで作成するモデル アーティファクトを格納する Cloud Storage バケットを作成します。次のコマンドを実行します。
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
BUCKET_NAME は、バケットに付ける一意の名前に置き換えます。詳しくは、バケット名の要件をご覧ください。
Google Cloud プロジェクト内の既存の Cloud Storage バケットを使用することもできます。このチュートリアルでは、必ず us-central1
リージョンのバケットを使用してください。
PyTorch モデルのトレーニング
このチュートリアルでは、AI Platform Training で PyTorch モデルをトレーニングする方法をいくつか説明します。次の場合について説明します。
- CPU プロセッサを搭載した仮想マシン(VM)インスタンスの場合
- GPU プロセッサを搭載した VM の場合
- CPU プロセッサを搭載した VM でハイパーパラメータ調整を使用する場合
上のいずれかを選択してください。このチュートリアルの残りの部分では、ここで選択した方法に対応するタブにある手順に沿って操作してください。別の構成でトレーニングを行う場合は、このセクションで説明する手順を繰り返してください。
トレーニング ジョブを作成するための準備
トレーニング ジョブを作成する前に、トレーニング コードがあることを確認します。さらに、ローカル環境で構成オプションを指定します。
CPU
トレーニング ジョブを作成するときに使用する複数の bash 変数を設定します。
BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME は、前のセクションで作成した Cloud Storage バケットの名前に置き換えます。
GPU
PyTorch のトレーニング コードで、トレーニング ジョブで使用する VM 上の GPU が認識されていることを確認し、PyTorch でテンソルとモジュールを GPU を適切に移動できるようにします。
提供されたサンプルコードを使用する場合は、コードを実行するマシンに GPU があるかどうかを検出するロジックがサンプルコードに含まれているため、何もする必要はありません。
トレーニング コードを変更する場合は、CUDA セマンティクスの PyTorch ガイドを参照して、GPU が使用されるように構成してください。
トレーニング ジョブを作成するときに使用する複数の bash 変数を設定します。
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_gpu JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME は、前のセクションで作成した Cloud Storage バケットの名前に置き換えます。
ハイパーパラメータ調整
このチュートリアルのサンプルコードでは、テストの失敗を最小限に抑えるために、学習率とバッチサイズのパラメータを調整します。
トレーニング コードが AI Platform Training でのハイパーパラメータ調整に対応していることを確認します。
コードで、AI Platform Training から渡されたハイパーパラメータ フラグを解析する必要があります。
サンプルコードでは、この処理を
task.py
で行います。コードを変更しない限り、何もする必要はありません。コードで
cloudml-hypertune
ライブラリを使用して、AI Platform Training にハイパーパラメータ調整指標を報告する必要があります。サンプルコードでは、この処理を
experiment.py
で行います。コードを変更しない限り、何もする必要はありません。
次のコマンドを実行して
config.yaml
ファイルを作成し、ハイパーパラメータ調整オプションを指定します。cat > config.yaml <<END trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: test_loss maxTrials: 2 maxParallelTrials: 2 enableTrialEarlyStopping: True params: - parameterName: learning-rate type: DOUBLE minValue: 0.0001 maxValue: 1 scaleType: UNIT_LOG_SCALE - parameterName: batch-size type: INTEGER minValue: 1 maxValue: 256 scaleType: UNIT_LINEAR_SCALE END
これらのオプションでは、モデルの損失を最小限にするため、
--learning-rate
と--batch-size
のハイパーパラメータを調整します。トレーニング ジョブを作成するときに使用する複数の bash 変数を設定します。
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_hptuning JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME は、前のセクションで作成した Cloud Storage バケットの名前に置き換えます。
これらの Bash 変数は次の目的で使用されます。
JOB_NAME
は AI Platform Training ジョブの識別子です。この識別子は、Google Cloud プロジェクト内の AI Platform Training ジョブの中で一意にする必要があります。JOB_DIR
は、AI Platform Training でトレーニング アプリケーションのアップロード先を指定するために使用されます。トレーニング アプリケーションは、トレーニング終了時にJOB_DIR
を使用してモデル アーティファクトのエクスポート先を決定します。
トレーニング ジョブの作成
次のコマンドを実行して、トレーニング ジョブを作成します。
CPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
GPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
--scale-tier=CUSTOM \
--master-machine-type=n1-standard-8 \
--master-accelerator=type=nvidia-tesla-p100,count=1 \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
ハイパーパラメータ調整
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
--config=config.yaml \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10
トレーニング ジョブのガイドで、構成フラグとその使用によるトレーニングのカスタマイズ方法を学習します。
このコマンドは次のようなメッセージを返します。
Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ai-platform jobs describe JOB_NAME
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED
次のコマンドを使用して、ジョブのステータスをモニタリングできます。
gcloud ai-platform jobs describe ${JOB_NAME}
次のコマンドを使用して、ジョブのトレーニング ログをストリーミングできます。
gcloud ai-platform jobs stream-logs ${JOB_NAME}
トレーニング ジョブが終了すると、トレーニング済みの ML モデルが、model.pth
というファイルに保存されます。このファイルは、指定した JOB_DIR
Cloud Storage ディレクトリ内のタイムスタンプ付きのディレクトリにあります。
次のステップ
- マルチノード クラスタ上で分散 PyTorch トレーニングを実行する方法を学習する。
- AI Platform Training 上で PyTorch を使用して TPU をトレーニングに使用する方法を学習する。
- トレーニング ジョブの構成をカスタマイズする方法を学習する。
- 事前にビルドされたコンテナで使用できない PyTorch を使用する場合は、カスタム コンテナの使用方法を学習する。
- PyTorch のドキュメントで PyTorch の使用方法を学習する。