Deep Learning(DL)コンテナをデプロイして使用する

ディープ ラーニング(DL)コンテナは、データ サイエンス フレームワーク、ライブラリ、ツールがプリインストールされた Docker コンテナです。データ サイエンティストなどのユーザーが、単一の DL コンテナを選択してデプロイします。デプロイされたコンテナには、パフォーマンスが最適化された一貫性のある環境があり、ワークフローのプロトタイプ作成と実装を迅速に行うことができます。

DL コンテナをデプロイする

DL コンテナを使用する前に、Machine Learning(ML)タスクを実行するコンテナ イメージを選択してデプロイする必要があります。プリインストールされたフレームワーク、ライブラリ、ツールによって DL コンテナがプロビジョニングされます。

kubeconfig ファイルを使用して DL コンテナをデプロイする

Google Distributed Cloud(GDC)エアギャップ アプライアンスには、DL コンテナをデプロイする次の kubeconfig ファイルが用意されています。

  • CLUSTER_KUBECONFIG: ベアメタル Kubernetes クラスタの kubeconfig ファイル。GDC は、すべてのワークロードに 1 つのクラスタを提供します。

UI と kubectl ツールへのログインの詳細については、ログインをご覧ください。CLUSTER_KUBECONFIG ファイルを取得するには、kubeconfig ファイルを取得するをご覧ください。

サンプル ML スクリプトとデータセットをダウンロードする

ML クイックスタート チュートリアルを実行するには、サンプル ML スクリプト beginner.ipynb とデータセット mnist.npz をダウンロードします。このチュートリアルでは、DL コンテナをデプロイして ML 実験を実行する方法について説明します。

mkdir -p /tmp/datasets
cd /tmp/datasets

wget --no-check-certificate
https://GDC_APPLIANCE_URL/.well-known/static/dl-container-tutorial/beginner.ipynb

wget --no-check-certificate
https://GDC_APPLIANCE_URL/.well-known/static/dl-container-tutorial/mnist.npz

GDC_APPLIANCE_URL は、GDC へのアクセスに使用するドメイン名に置き換えます。URL を初めて開くと、GDC は ID プロバイダのログインページにリダイレクトします。

Harbor レジストリの IP アドレスを調べる

サンプル スクリプトとデータセットを使用する前に、Harbor レジストリで DL コンテナ イメージの場所を見つける必要があります。Harbor レジストリは、非公開コンテナ イメージを保存するサービスです。

サンプルコードの 1 行目は、Harbor レジストリ アドレスを取得する KUBECONFIG 環境変数のパスを設定します。Harbor レジストリ アドレスは、使用可能なコンテナ イメージのリストへのアクセスを提供します。

サンプルコードの 2 行目では、kubectl ツールが KUBECONFIG 環境変数を使用しています。

サンプルコードの 3 行目の REGISTRY_URL#https:// コマンドは、URL から接頭辞 https:// を削除し、Harbor レジストリ ドメインを REGISTRY_IP 環境変数に格納します。

サンプルコードの最後の行で、kubectl ツールは admin ユーザーのパスワードを取得します。

export KUBECONFIG=CLUSTER_KUBECONFIG

REGISTRY_URL=$(kubectl get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
REGISTRY_IP=${REGISTRY_URL#https://}
ADMIN_PASS=$(kubectl -n harbor-system get secret harbor-admin -o jsonpath="{.data.secret}" | base64 -d)

コンテナ イメージを選択する

ML タスクを実行する前に、デプロイするコンテナ イメージを選択する必要があります。Harbor レジストリの Harbor レジストリ ドメインと次の表のパスを使用して、使用可能なコンテナ イメージのリストを表示します。

フレームワーク プロセッサ コンテナ イメージ名
ベース GPU base-cu113
ベース CPU base-cpu
TensorFlow Enterprise 2.x GPU tf2-gpu
PyTorch GPU pytorch-gpu

この表は、フレームワークとプロセッサごとに整理されています。ML テストを処理できる DL コンテナ イメージを選択する手順は次のとおりです。

  1. ML ツールを含むフレームワークを特定します。
  2. プロセッサを選択します。プロセッサは、実行する ML タスクの種類と、そのタスクのコンピューティング強度に基づいて選択します。たとえば、コンピューティング負荷の高い ML タスクがある場合は、GPU プロセッサのいずれかを選択し、GPU リソースを DL コンテナに割り当てます。

DL コンテナを作成して Kubernetes クラスタにデプロイする

GDC インスタンスを作成するには、ベアメタル Kubernetes クラスタの kubeconfig ファイルのパスを指定します。KUBECONFIG 環境変数は、kubectl ツールが DL コンテナをデプロイするクラスタを指定します。kubectl apply コマンドは、DL コンテナ インスタンスをデプロイします。

CONTAINER_IMAGE_NAME は、[コンテナ イメージを選択] のイメージのリストから選択したイメージに置き換えます。必ずタグを指定してください。

export KUBECONFIG=CLUSTER_KUBECONFIG

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: dl-container-pod
  namespace: NAMESPACE
spec:
  containers:
  - image: gcr.io/private-cloud-staging/notebooks/deeplearning-platform-release/CONTAINER_IMAGE_NAME:CONTAINER_IMAGE_TAG
    command: ["tail", "-f", "/dev/null"]
    name: training
EOF

デプロイされた DL コンテナを使用する

次のトピックでは、DL コンテナ イメージを使用してモデルをトレーニングし、モデルを使用して予測を生成する方法の例を示します。

チュートリアル ファイルを DL コンテナ Pod にコピーする

クイックスタート チュートリアルのファイルを DL コンテナ Pod にコピーします。beginner.ipynb には、モデルをトレーニングして予測を行う手順が含まれています。ML トレーニング チュートリアルでは、mnist.npz データセット ファイルを使用してモデルをトレーニングします。

cd /tmp/datasets

kubectl cp beginner.ipynb dl-container-pod:/tmp
kubectl cp mnist.npz dl-container-pod:/tmp

ML クイックスタート チュートリアルを実行する

次のコマンドを使用してチュートリアルを実行します。最初の行を使用して、コンテナ Pod に入力します。コンテナ Pod に移動したら、ディレクトリを tmp に変更し、DL コンテナにパッケージ化されている papermill ツールを実行します。papermill ツールは、予測を生成するノートブックを作成するチュートリアルを実行します。

  1. DL Pod にインタラクティブ ターミナルを入力します。

    kubectl exec -it dl-container-pod -- /bin/bash
    
  2. DL Pod コンテキストで、次のコマンドを実行します。

    cd tmp
    papermill beginner.ipynb result.ipynb
    

    デプロイにより、/tmp ディレクトリに result.ipynb ファイルが生成されます。

  3. 生成された ML モデルのコンテンツと予測出力を表示します。

    cat result.ipynb
    

省略可: DL コンテナ Pod を削除する

DL コンテナ Pod でテストの実行が完了したら、ベスト プラクティスとして Pod を削除します。

kubectl delete pod dl-container-pod