すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:elasticコンテナインスタンスでTensorFlowタスクを実行する

最終更新日:Dec 16, 2024

AIトレーニングジョブに必要なソフトウェア環境をコンテナ化し、エラスティックコンテナインスタンスでトレーニングジョブを実行できます。 この配置方法は、複雑な環境配置の問題を解決します。 さらに、使用するものに対してのみ支払う必要があります。 これにより、コストが削減され、効率が向上します。 このトピックでは、container Service for Kubernetes (ACK) サーバーレスクラスターのエラスティックコンテナインスタンスでGPUベースのTensorFlowトレーニングジョブを実行する方法について説明します。 このGPUベースのTensorFlowトレーニングジョブは、GitHubで利用できます。

背景情報

近年、AIや機械学習が多くの分野で広く利用されており、さまざまなトレーニングモデルが開発されています。 クラウド上で実行されるトレーニングジョブの数が増えています。 しかし、クラウド環境でトレーニングジョブを継続的に実行することは容易ではありません。 あなたは以下の困難に遭遇するかもしれません:

  • 環境のデプロイの難しさ: GPU高速化インスタンスを購入し、インスタンスにGPUドライバーをインストールする必要があります。 トレーニングジョブ用のコンテナ化環境を準備した後、GPUランタイムフックをインストールする必要があります。

  • スケーラビリティの欠如: 環境をデプロイしてトレーニングジョブを実行した後、コストを節約するためにアイドルリソースをリリースする必要があります。 次にトレーニングジョブを実行する場合は、環境をデプロイしてインスタンスを再度作成する必要があります。 コンピュートノードが不十分な場合は、コンピュートノードをスケールアウトする必要があります。 この場合、インスタンスを作成し、環境を再度デプロイする必要があります。

上記の問題を解決するために、ACKサーバーレスクラスターとエラスティックコンテナインスタンスを使用してトレーニングジョブを実行することを推奨します。 このソリューションには以下のメリットがあります。

  • 従量課金制で課金され、リソースを管理する必要はありません。

  • 設定は1回だけ準備する必要があります。 その後、制限なしで構成を再利用できます。

  • イメージキャッシュ機能を使用すると、インスタンスを作成し、ジョブのトレーニングをより効率的に開始できます。

  • トレーニングデータは、トレーニングモデルから切り離される。 トレーニングデータは永続化できます。

準備

  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

  2. ACKサーバーレスクラスターを作成します。

    ACKコンソールACKサーバーレスクラスターを作成します。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。

    重要

    インターネット経由でイメージを取得する必要がある場合、またはトレーニングジョブがインターネットにアクセスする必要がある場合は、インターネットNATゲートウェイを設定する必要があります。

    kubectlと次のいずれかの方法を使用して、ACKサーバーレスクラスターを管理およびアクセスできます。

  3. Apsara File Storage NAS (NAS) ファイルシステムを作成し、マウントターゲットを追加します。

    NASファイルシステムを作成し、Apsara file Storage NASコンソールでマウントターゲットを追加します。 NASファイルシステムとACKサーバーレスクラスターは、同じ仮想プライベートクラウド (VPC) にある必要があります。 詳細については、「ファイルシステムの作成」および「マウント対象の管理」をご参照ください。

手順

イメージキャッシュの作成

イメージキャッシュ機能は、Kubernetes CustomResourceDefinitions (CRD) を使用してACKサーバーレスクラスターに統合され、イメージのプルが高速化されました。

  1. イメージキャッシュの作成に使用する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
  2. イメージキャッシュを作成します。

    kubectl create -f imagecache.yaml

    イメージキャッシュを作成するときにイメージをプルする必要があります。 画像をプルするのに必要な時間は、画像サイズおよびネットワーク条件に関連する。 次のコマンドを実行して、イメージキャッシュの作成の進行状況を表示できます。

    kubectl get imagecache tensorflow

    次のようなコマンド出力は、イメージキャッシュが作成されたことを示します。

    ECI-tensor.png

トレーニングジョブの作成

  1. NASファイルシステムの永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成します。

    1. 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
    2. PVとPVCを作成します。

      kubectl create -f nas.yaml
  2. トレーニングジョブを実行するポッドを作成します。

    1. 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
    2. ポッドを作成します。

      kubectl create -f tensorflow.yaml
  3. トレーニングジョブの実行ステータスを表示します。

    kubectl get pod

    ポッドが [完了] 状態の場合、トレーニングジョブは完了です。

    ECI-tensor1.png

    説明

    kubectl describe pod <pod name> コマンドを実行してポッドの詳細を表示したり、kubectl logs <pod name> コマンドを実行してログを表示したりすることもできます。

結果の表示

コンソールでトレーニングジョブの結果を表示できます。

  • Apsara File Storage NASコンソールで、トレーニング結果がNASファイルシステムに保存されていること、およびトレーニング結果が占有しているストレージ容量を確認できます。 NASファイルシステムが再マウントされた後、対応するパスで結果を取得できます。

    ECI-tensor2.png

  • elastic container instanceコンソールで、ポッドに対応するElastic Containerインスタンスを表示できます。

    弾性コンテナインスタンスが正常に実行されると、インスタンス内のコンテナは停止されます。 次に、システムは基になるコンピューティングリソースを再要求し、ポッドの課金は停止されます。

    ECI-tensor3.png

関連ドキュメント

このチュートリアルでは、イメージキャッシュ機能を使用してイメージプルを高速化し、永続ストレージにNASファイルシステムを使用します。 詳細については、以下を参照してください。