AI トレーニングジョブに必要なソフトウェア環境をコンテナ化し、Elastic Container Instance (ECI) 上でジョブを実行できます。これにより、環境設定が簡素化され、ランタイムに対してのみ料金を支払うだけで済むため、コストを削減し、効率を向上させることができます。このトピックでは、GitHub の GPU ベースの TensorFlow トレーニングジョブを例に、サーバーレス Kubernetes (ACK Serverless) クラスターで ECI を使用してトレーニングジョブを実行する方法について説明します。
背景情報
現在、人工知能 (AI) と機械学習は広く利用されており、さまざまなトレーニングモデルが登場し、クラウドベースのトレーニングジョブが増加しています。しかし、クラウドに移行した後、トレーニングジョブを実行する際に次のような課題に直面することがあります。
-
GPU インスタンスを購入し、GPU ドライバーをインストールする必要があります。トレーニングジョブをコンテナ化した後でも、GPU ランタイムフックをインストールする必要があります。
-
コストを節約するために、通常、ジョブが完了した後にリソースを解放します。しかし、次回ジョブを開始する際には、インスタンスを再作成し、環境を再設定する必要があります。コンピューティングノードのリソースが不足している場合は、手動でスケールアウト、再作成、再設定を行う必要があります。
これらの課題に対処するために、ACK Serverless クラスターと ECI を使用してトレーニングジョブを実行することを推奨します。このソリューションには、次の利点があります。
-
従量課金制で運用保守が不要。
-
一度設定すれば、無期限に再利用可能。
-
イメージキャッシュ機能により、インスタンスの作成が高速化され、トレーニングジョブをより迅速に開始できます。
-
データはトレーニングモデルから分離され、永続的に保存できます。
前提条件
-
トレーニングデータとコンテナイメージを準備します。
-
トレーニングデータ:このトピックでは、GitHub の TensorFlow トレーニングジョブを例として使用します。詳細については、「TensorFlow トレーニングジョブ」をご参照ください。
-
コンテナイメージ:ECI は、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 Serverless クラスターを作成します。
Container Service for Kubernetes (ACK) コンソールで ACK Serverless クラスターを作成します。詳細については、「ACK Serverless クラスターの作成」をご参照ください。
重要インターネットからイメージをプルする必要がある場合、またはトレーニングジョブがインターネットアクセスを必要とする場合は、NAT Gateway を設定してください。
kubectl を使用して、次のように ACK Serverless クラスターを管理およびアクセスできます。
-
ローカルコンピューターからクラスターを管理するには、kubectl クライアントをインストールして設定します。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
-
Cloud Shell で kubectl を使用してクラスターを管理することもできます。詳細については、「Cloud Shell で kubectl を使用して Kubernetes クラスターを管理する」をご参照ください。
-
-
NAS ファイルシステムを作成し、マウントポイントを追加します。
File Storage NAS コンソールでファイルシステムを作成し、マウントポイントを追加します。ファイルシステムは、ACK Serverless クラスターと同じ VPC 内にある必要があります。詳細については、「ファイルシステムの管理」および「マウントポイントの管理」をご参照ください。
操作手順
イメージキャッシュの作成
イメージキャッシュ機能は、コンテナイメージのプルを高速化するために、Kubernetes CRD として ACK Serverless クラスターに統合されています。
-
イメージキャッシュ用の 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次のような出力が返されると、イメージキャッシュが作成されます。
:~$ kubectl get imagecache tensorflow NAME AGE CACHEID PHASE PROGRESS tensorflow 13m imc-2zei4b7k43lxxxbvoz Ready 100%
トレーニングジョブの作成
-
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 # NAS ファイルシステムのマウントポイント。 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
-
-
ECI Pod を作成してトレーニングジョブを実行します。
-
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" # GPU インスタンスタイプを指定します。 k8s.aliyun.com/eci-auto-imc: "true" # 自動イメージキャッシュマッチングを有効にします。 spec: restartPolicy: OnFailure containers: - name: tensorflow image: registry.cn-hangzhou.aliyuncs.com/eci_open/tensorflow:1.0 # イメージキャッシュに対応するイメージアドレスを使用します。 command: - python args: - /home/classify_image/classify_image.py # コンテナ起動後に実行するトレーニングスクリプト。 resources: limits: nvidia.com/gpu: "1" # コンテナが必要とする GPU の数。 volumeMounts: # NAS ファイルシステムをマウントしてトレーニング結果を永続化します。 - name: pvc-nas mountPath: /tmp/classify_image_model volumes: - name: pvc-nas persistentVolumeClaim: claimName: pvc-nas -
Pod を作成します。
kubectl create -f tensorflow.yaml
-
-
トレーニングジョブのステータスを確認します。
kubectl get podPod のステータスが 'Completed' に変わると、トレーニングジョブは完了です。
kubectl get pod NAME READY STATUS RESTARTS AGE tensorflow 0/1 Completed 0 118s説明kubectl describe pod <pod name>を実行して Pod の詳細を表示したり、kubectl logs <pod name>を実行してログを表示したりすることもできます。
結果の表示
トレーニングジョブの結果を表示できます。
-
File Storage NAS コンソールでは、トレーニング結果が NAS ファイルシステムに保存されていることを確認できます。ファイルシステムを再マウントすると、対応するパスで結果データを表示できます。
ファイルシステムリストの [使用容量] 列には、使用されているストレージ容量 (例:45.71 MiB) が表示され、ファイルシステムのステータスは [実行中] です。
-
Elastic Container Instance コンソールでは、Pod に対応する ECI インスタンスを確認できます。
'Succeeded' ステータスは、インスタンス内のコンテナの実行が停止したことを示します。その後、システムは基盤となるコンピューティングリソースを回収し、Pod に対する課金を停止します。
関連トピック
このトピックでは、イメージキャッシュ機能を使用してイメージのプルを高速化し、NAS ファイルシステムを永続ストレージとして使用します。詳細については、次のトピックをご参照ください。