Google Kubernetes Engine を使用してコンテナ内でトレーニングする

このページでは、Deep Learning Containers インスタンスでトレーニング ジョブを実行し、そのコンテナ イメージを Google Kubernetes Engine クラスタで実行する方法について説明します。

始める前に

始める前に、次の手順が完了していることを確認してください。

  1. ローカル ディープ ラーニング コンテナ スタートガイドの「始める前に」の設定手順を完了します。

  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。

    課金を有効にする方法をご覧ください。

  3. Google Kubernetes Engine、Compute Engine、Container Registry API を有効にします。

    API を有効にする

コマンドライン ツールを開く

このガイドでは、Cloud Shell またはローカルでコマンドライン ツールを使用します。Cloud Shell には、このチュートリアルで使用する gclouddockerkubectl のコマンドライン ツールがプリインストールされています。Cloud Shell を使用する場合は、これらのコマンドライン ツールをワークステーションにインストールする必要はありません。

Cloud Shell

Cloud Shell を使用するには、次の手順を行います。

  1. Google Cloud コンソールに移動します。

  2. コンソール ウィンドウの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。

    Google Cloud Platform コンソール

    コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。

    Cloud Shell セッション

ローカル コマンドライン

ローカル コマンドラインを使用するには、次の手順を行います。

  1. 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="gcr.io/deeplearning-platform-release"

必要であれば、コンテナの選択を参照してコンテナを選択してください。

次の例は、trainer.py という名前の Python スクリプトを特定の PyTorch ディープ ラーニング コンテナ タイプに配置する方法を示しています。

dockerfile を作成するには、次のコマンドを Dockerfile という名前のファイルに書き込みます。このステップでは、model-training-code という名前のディレクトリに機械学習モデルをトレーニングするコードがあり、そのディレクトリ内にあるメインの Python モジュールの名前が trainer.py であることを前提としています。このシナリオでは、ジョブが完了するとコンテナが削除されるため、Cloud Storage に出力する(Cloud Storage に出力するスクリプトの例を参照)か、永続ストレージに出力するようにトレーニング スクリプトを構成する必要があります。

FROM gcr.io/deeplearning-platform-release/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

コンテナ イメージを構築してアップロードする

コンテナ イメージを構築して Container 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=gcr.io/$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