このページでは、Deep Learning Containers インスタンスでトレーニング ジョブを実行し、そのコンテナ イメージを Google Kubernetes Engine クラスタで実行する方法について説明します。
始める前に
始める前に、次の手順が完了していることを確認してください。
ローカル ディープ ラーニング コンテナ スタートガイドの「始める前に」の設定手順を完了します。
Google Cloud プロジェクトの課金が有効になっていることを確認します。
課金を有効にする方法をご覧ください。
Google Kubernetes Engine、Compute Engine、Artifact Registry API を有効にします。
コマンドライン ツールを開く
このガイドでは、Cloud Shell またはローカルでコマンドライン ツールを使用します。Cloud Shell には、このチュートリアルで使用する gcloud
、docker
、kubectl
のコマンドライン ツールがプリインストールされています。Cloud Shell を使用する場合は、これらのコマンドライン ツールをワークステーションにインストールする必要はありません。
Cloud Shell
Cloud Shell を使用するには、次の手順を行います。
Google Cloud コンソールに移動します。
コンソール ウィンドウの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。
コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。
ローカル コマンドライン
ローカル コマンドラインを使用するには、次の手順を行います。
gcloud CLI を使用して Kubernetes コマンドライン ツールをインストールします。
kubectl
は、Deep Learning Containers クラスタのクラスタ オーケストレーション システムである Kubernetes との通信に使用されます。gcloud components install kubectl
スタートガイドの手順を完了すると、Google Cloud CLI と Docker がインストールされます。
GKE クラスタを作成する
次のコマンドを実行して、GKE に pytorch-training-cluster
という名前の 2 ノードクラスタを作成します。
gcloud container clusters create pytorch-training-cluster \
--num-nodes=2 \
--zone=us-west1-b \
--accelerator="type=nvidia-tesla-p100,count=1" \
--machine-type="n1-highmem-2" \
--scopes="gke-default,storage-rw"
これらの設定の詳細については、コンテナを実行するためのクラスタの作成に関するドキュメントをご覧ください。
クラスタの作成には数分かかることがあります。
あるいは、クラスタを作成するのではなく、Google Cloud プロジェクト内の既存のクラスタを使用することもできます。そうするには、次のコマンドを実行して、kubectl
コマンドライン ツールに、クラスタにアクセスするための適切な認証情報があることを確認する必要があります。
gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER
次に、NVIDIA GPU デバイス ドライバをインストールします。
Dockerfile を作成する
コンテナ イメージを構築するにはさまざまな方法があります。ここでは、イメージを構築して trainer.py
という名前の Python スクリプトを実行する方法について説明します。
使用可能なコンテナ イメージのリストを表示するには、次のコマンドを実行します。
gcloud container images list \
--repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"
必要であれば、コンテナの選択を参照してコンテナを選択してください。
次の例は、trainer.py
という名前の Python スクリプトを特定の PyTorch ディープ ラーニング コンテナ タイプに配置する方法を示しています。
dockerfile を作成するには、次のコマンドを Dockerfile
という名前のファイルに書き込みます。このステップでは、model-training-code
という名前のディレクトリに機械学習モデルをトレーニングするコードがあり、そのディレクトリ内にあるメインの Python モジュールの名前が trainer.py
であることを前提としています。このシナリオでは、ジョブが完了するとコンテナが削除されるため、Cloud Storage に出力する(Cloud Storage に出力するスクリプトの例を参照)か、永続ストレージに出力するようにトレーニング スクリプトを構成する必要があります。
FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]
コンテナ イメージを構築してアップロードする
コンテナ イメージを構築して Artifact Registry にアップロードするには、次のコマンドを使用します。
export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG
docker build -f Dockerfile -t $IMAGE_URI ./
docker push $IMAGE_URI
アプリケーションをデプロイする
次の内容を含む pod.yaml という名前のファイルを作成します。IMAGE_URI は、イメージの URI で置き換えます。
apiVersion: v1
kind: Pod
metadata:
name: gke-training-pod
spec:
containers:
- name: my-custom-container
image: IMAGE_URI
resources:
limits:
nvidia.com/gpu: 1
kubectl
コマンドライン ツールを使用して次のコマンドを実行し、アプリケーションをデプロイします。
kubectl apply -f ./pod.yaml
Pod のステータスを調べるには、次のコマンドを実行します。
kubectl describe pod gke-training-pod