AIトレーニングジョブに必要なソフトウェア環境をコンテナ化し、エラスティックコンテナインスタンスでトレーニングジョブを実行できます。 この配置方法は、複雑な環境配置の問題を解決します。 さらに、使用するものに対してのみ支払う必要があります。 これにより、コストが削減され、効率が向上します。 このトピックでは、container Service for Kubernetes (ACK) サーバーレスクラスターのエラスティックコンテナインスタンスでGPUベースのTensorFlowトレーニングジョブを実行する方法について説明します。 このGPUベースのTensorFlowトレーニングジョブは、GitHubで利用できます。
背景情報
近年、AIや機械学習が多くの分野で広く利用されており、さまざまなトレーニングモデルが開発されています。 クラウド上で実行されるトレーニングジョブの数が増えています。 しかし、クラウド環境でトレーニングジョブを継続的に実行することは容易ではありません。 あなたは以下の困難に遭遇するかもしれません:
環境のデプロイの難しさ: GPU高速化インスタンスを購入し、インスタンスにGPUドライバーをインストールする必要があります。 トレーニングジョブ用のコンテナ化環境を準備した後、GPUランタイムフックをインストールする必要があります。
スケーラビリティの欠如: 環境をデプロイしてトレーニングジョブを実行した後、コストを節約するためにアイドルリソースをリリースする必要があります。 次にトレーニングジョブを実行する場合は、環境をデプロイしてインスタンスを再度作成する必要があります。 コンピュートノードが不十分な場合は、コンピュートノードをスケールアウトする必要があります。 この場合、インスタンスを作成し、環境を再度デプロイする必要があります。
上記の問題を解決するために、ACKサーバーレスクラスターとエラスティックコンテナインスタンスを使用してトレーニングジョブを実行することを推奨します。 このソリューションには以下のメリットがあります。
従量課金制で課金され、リソースを管理する必要はありません。
設定は1回だけ準備する必要があります。 その後、制限なしで構成を再利用できます。
イメージキャッシュ機能を使用すると、インスタンスを作成し、ジョブのトレーニングをより効率的に開始できます。
トレーニングデータは、トレーニングモデルから切り離される。 トレーニングデータは永続化できます。
準備
トレーニングデータと画像を準備します。
この例では、GitHubで利用可能なTensorFlowトレーニングジョブを使用します。 詳細については、「TensorFlow Model Garden」をご参照ください。
イメージが準備され、Alibaba Cloud Container Registry (ACR) にアップロードされました。 直接使用するか、二次開発を実行できます。
画像の内部アドレス: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0
画像のパブリックアドレス: registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0
ACKサーバーレスクラスターを作成します。
ACKコンソールでACKサーバーレスクラスターを作成します。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。
重要インターネット経由でイメージを取得する必要がある場合、またはトレーニングジョブがインターネットにアクセスする必要がある場合は、インターネットNATゲートウェイを設定する必要があります。
kubectlと次のいずれかの方法を使用して、ACKサーバーレスクラスターを管理およびアクセスできます。
オンプレミスマシンからクラスターを管理する場合は、kubectlクライアントをインストールして設定します。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。
kubectlを使用して、Cloud Shell上のACKサーバーレスクラスターを管理します。 詳細については、「kubectlを使用したCloud ShellでのACKクラスターの管理」をご参照ください。
Apsara File Storage NAS (NAS) ファイルシステムを作成し、マウントターゲットを追加します。
NASファイルシステムを作成し、Apsara file Storage NASコンソールでマウントターゲットを追加します。 NASファイルシステムとACKサーバーレスクラスターは、同じ仮想プライベートクラウド (VPC) にある必要があります。 詳細については、「ファイルシステムの作成」および「マウント対象の管理」をご参照ください。
手順
イメージキャッシュの作成
イメージキャッシュ機能は、Kubernetes CustomResourceDefinitions (CRD) を使用してACKサーバーレスクラスターに統合され、イメージのプルが高速化されました。
イメージキャッシュの作成に使用するYAMLファイルを作成します。
次のコードは、imagecache.yamlファイルの例を示しています。
説明クラスターが中国 (杭州) リージョンにデプロイされている場合は、イメージの内部アドレスを使用してイメージをプルすることを推奨します。 クラスターが別のリージョンにデプロイされている場合は、イメージのパブリックアドレスを使用してイメージをプルできます。
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: tensorflow spec: images: - registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0
イメージキャッシュを作成します。
kubectl create -f imagecache.yaml
イメージキャッシュを作成するときにイメージをプルする必要があります。 画像をプルするのに必要な時間は、画像サイズおよびネットワーク条件に関連する。 次のコマンドを実行して、イメージキャッシュの作成の進行状況を表示できます。
kubectl get imagecache tensorflow
次のようなコマンド出力は、イメージキャッシュが作成されたことを示します。
トレーニングジョブの作成
NASファイルシステムの永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成します。
YAMLファイルを準備します。
次のコードは、nas.yamlファイルの例を示しています。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 100Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas volumeAttributes: server: 15e1d4****-gt***.cn-beijing.nas.aliyuncs.com # Mount target of the NAS file system. path: / mountOptions: - nolock,tcp,noresvport - vers=3 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi selector: matchLabels: alicloud-pvname: pv-nas
PVとPVCを作成します。
kubectl create -f nas.yaml
トレーニングジョブを実行するポッドを作成します。
YAMLファイルを準備します。
次のコードは、tensorflow.yamlファイルの例を示しています。
apiVersion: v1 kind: Pod metadata: name: tensorflow labels: app: tensorflow alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: "ecs.gn6i-c4g1.xlarge" # Specify GPU specifications. k8s.aliyun.com/eci-auto-imc: "true" # Enable automatic matching of image caches. spec: restartPolicy: OnFailure containers: - name: tensorflow image: registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0 # Use the image address that corresponds to the image cache. command: - python args: - /home/classify_image/classify_image.py # Execute the training script after the container is started. resources: limits: nvidia.com/gpu: "1" # The number of GPUs requested by the container. volumeMounts: # Mount the NAS file system to provide persistent storage for training results. - name: pvc-nas mountPath: /tmp/classify_image_model volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas
ポッドを作成します。
kubectl create -f tensorflow.yaml
トレーニングジョブの実行ステータスを表示します。
kubectl get pod
ポッドが [完了] 状態の場合、トレーニングジョブは完了です。
説明kubectl describe pod <pod name>
コマンドを実行してポッドの詳細を表示したり、kubectl logs <pod name>
コマンドを実行してログを表示したりすることもできます。
結果の表示
コンソールでトレーニングジョブの結果を表示できます。
Apsara File Storage NASコンソールで、トレーニング結果がNASファイルシステムに保存されていること、およびトレーニング結果が占有しているストレージ容量を確認できます。 NASファイルシステムが再マウントされた後、対応するパスで結果を取得できます。
elastic container instanceコンソールで、ポッドに対応するElastic Containerインスタンスを表示できます。
弾性コンテナインスタンスが正常に実行されると、インスタンス内のコンテナは停止されます。 次に、システムは基になるコンピューティングリソースを再要求し、ポッドの課金は停止されます。
関連ドキュメント
このチュートリアルでは、イメージキャッシュ機能を使用してイメージプルを高速化し、永続ストレージにNASファイルシステムを使用します。 詳細については、以下を参照してください。