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

Elastic Container Instance:ECI を使用した TensorFlow タスクの実行

最終更新日:Jun 22, 2026

AI トレーニングジョブに必要なソフトウェア環境をコンテナ化し、Elastic Container Instance (ECI) 上でジョブを実行できます。これにより、環境設定が簡素化され、ランタイムに対してのみ料金を支払うだけで済むため、コストを削減し、効率を向上させることができます。このトピックでは、GitHub の GPU ベースの TensorFlow トレーニングジョブを例に、サーバーレス Kubernetes (ACK Serverless) クラスターで ECI を使用してトレーニングジョブを実行する方法について説明します。

背景情報

現在、人工知能 (AI) と機械学習は広く利用されており、さまざまなトレーニングモデルが登場し、クラウドベースのトレーニングジョブが増加しています。しかし、クラウドに移行した後、トレーニングジョブを実行する際に次のような課題に直面することがあります。

  • GPU インスタンスを購入し、GPU ドライバーをインストールする必要があります。トレーニングジョブをコンテナ化した後でも、GPU ランタイムフックをインストールする必要があります。

  • コストを節約するために、通常、ジョブが完了した後にリソースを解放します。しかし、次回ジョブを開始する際には、インスタンスを再作成し、環境を再設定する必要があります。コンピューティングノードのリソースが不足している場合は、手動でスケールアウト、再作成、再設定を行う必要があります。

これらの課題に対処するために、ACK Serverless クラスターと ECI を使用してトレーニングジョブを実行することを推奨します。このソリューションには、次の利点があります。

  • 従量課金制で運用保守が不要。

  • 一度設定すれば、無期限に再利用可能。

  • イメージキャッシュ機能により、インスタンスの作成が高速化され、トレーニングジョブをより迅速に開始できます。

  • データはトレーニングモデルから分離され、永続的に保存できます。

前提条件

  1. トレーニングデータとコンテナイメージを準備します。

    • トレーニングデータ:このトピックでは、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

  2. ACK Serverless クラスターを作成します。

    Container Service for Kubernetes (ACK) コンソールACK Serverless クラスターを作成します。詳細については、「ACK Serverless クラスターの作成」をご参照ください。

    重要

    インターネットからイメージをプルする必要がある場合、またはトレーニングジョブがインターネットアクセスを必要とする場合は、NAT Gateway を設定してください。

    kubectl を使用して、次のように ACK Serverless クラスターを管理およびアクセスできます。

  3. NAS ファイルシステムを作成し、マウントポイントを追加します。

    File Storage NAS コンソールでファイルシステムを作成し、マウントポイントを追加します。ファイルシステムは、ACK Serverless クラスターと同じ VPC 内にある必要があります。詳細については、「ファイルシステムの管理」および「マウントポイントの管理」をご参照ください。

操作手順

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

イメージキャッシュ機能は、コンテナイメージのプルを高速化するために、Kubernetes CRD として ACK Serverless クラスターに統合されています。

  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

    次のような出力が返されると、イメージキャッシュが作成されます。

    :~$ kubectl get imagecache tensorflow
    NAME          AGE   CACHEID                    PHASE   PROGRESS
    tensorflow    13m   imc-2zei4b7k43lxxxbvoz     Ready   100%

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

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

      kubectl create -f nas.yaml
  2. ECI Pod を作成してトレーニングジョブを実行します。

    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"   # 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
    2. Pod を作成します。

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

    kubectl get pod

    Pod のステータスが '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 ファイルシステムを永続ストレージとして使用します。詳細については、次のトピックをご参照ください。