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

Container Service for Kubernetes:ACK Auto Mode での Qwen3.5-2B 大規模モデル推論サービスのデプロイ

最終更新日:Apr 21, 2026

Container Service for Kubernetes (ACK) Auto Mode クラスターは、GPU の弾力性に最適化されており、GPU ノードのスケーリングと基本操作を自動的に処理します。本トピックでは、Qwen3.5-2B モデルを例に、ACK Auto Mode クラスター上で GPU コンピューティングを利用した大規模モデル推論サービスを迅速にデプロイする方法を説明します。

前提条件

  • ACK Auto Mode クラスターを作成済みであること

  • インテリジェントマネージドモードで、要件を満たす GPU ノードプールを作成済みであること。

    詳細

    1. ACK Clusters ページで、クラスター名をクリックします。左側のナビゲーションウィンドウで、ノード > ノードプール をクリックします。

    2. ノードプール ページで ノードプールの作成 をクリックし、表示された ノードプールの作成 ダイアログボックスでノードプールを設定します。

      以下の主要な設定を行います。詳細については、「ノードプールの作成」をご参照ください。

      • マネージド設定:インテリジェントマネージドモードを選択します。

      • インスタンス関連の設定インスタンス設定方法インスタンスタイプの指定 に設定し、V100、A10、T4 などの GPU ECS インスタンスタイプを選択します。

      • ノードラベル (Labels):ラベル ack.aliyun.com/nvidia-driver-version:550.144.03 を追加して、NVIDIA ドライバーのバージョンが 550.144.03 であることを指定します。

      • コンテナのイメージアクセラレーション:この機能を有効にすると、モデルイメージのプルが高速化されます。

ステップ 1:モデルファイルの準備と OSS のマウント

このステップでは、一時的な ECS インスタンスを使用して ModelScope から Qwen3.5-2B モデルファイルをダウンロードし、OSS バケットにアップロードします。その後、クラスター用に PersistentVolume (PV) と PersistentVolumeClaim (PVC) を設定します。モデルをボリュームとして推論コンテナにマウントすることで、コンテナ起動時のモデルの再ダウンロードを回避できます。

以下の前提条件を満たしていることを確認してください:

1. Qwen3.5-2B モデルのダウンロード

一時的な ECS インスタンスで以下の手順を実行し、ModelScope からモデルファイルをダウンロードします。

  1. Git をインストールします。

    # yum install git または apt install git を実行してインストールできます。
    sudo yum install git
  2. Git Large File Storage (LFS) 拡張機能をインストールします。

    # yum install git-lfs または apt install git-lfs を実行してインストールできます。
    sudo yum install git-lfs
  3. Git LFS を初期化し、ModelScope から Qwen3.5-2B リポジトリをクローンします。このコマンドは、重複ダウンロードを防ぐために LFS の大容量ファイルをスキップします。

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen3.5-2B.git
  4. リポジトリディレクトリに移動し、LFS で管理されている大規模モデルファイルをプルします。

    cd Qwen3.5-2B/
    git lfs pull

2. モデルファイルの OSS へのアップロード

  1. OSS バケットにモデルを格納するためのディレクトリを作成します。

    <Your-Bucket-Name> を実際のバケット名に置き換えてください。

    ossutil mkdir oss://<Your-Bucket-Name>/models/Qwen3.5-2B
  2. ローカルのモデルファイルを OSS にアップロードします。

    ossutil cp -r ./Qwen3.5-2B oss://<Your-Bucket-Name>/models/Qwen3.5-2B

3. OSS ボリュームの設定

PV と PVC を作成し、Pod が OSS のモデルディレクトリを読み取り専用ボリュームとしてマウントできるようにします。詳細については、「ossfs 2.0 で静的ボリュームを使用する」をご参照ください。

  1. クラスターが OSS バケットリソースに安全にアクセスできるように、認証方式 (RRSA または AccessKey) を選択し、アクセス認証情報を準備します

    この例では AccessKey 認証を使用します。2つの方法には若干の違いがあります。詳細については、「ossfs 2.0 で静的ボリュームを使用する」をご参照ください。
  2. AccessKey を PV 用の Secret として保存します。

    <yourAccessKeyID><yourAccessKeySecret> を実際の認証情報に置き換えてください。Secret の名前空間は、アプリケーションの名前空間と一致させる必要があります。

    kubectl create -n default secret generic oss-secret --from-literal='akId=<yourAccessKeyID>' --from-literal='akSecret=<yourAccessKeySecret>'
  3. PV と PVC を作成し、OSS のモデルディレクトリを読み取り専用ボリュームとしてマウントします。次の例では、ossfs 2.0 で静的ボリュームを使用します

    サンプルコード

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV 名。
      name: llm-model  
    spec:
      capacity:
        # ボリューム容量。この値は PVC とのマッチングにのみ使用されます。
        storage: 30Gi  
      # アクセスモード。
      accessModes:  
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # PV 名 (metadata.name) と一致させる必要があります。
        volumeHandle: llm-model   
        # 先ほど作成した Secret を使用します。
        nodePublishSecretRef:
          # AccessKey を格納する Secret の名前。
          name: oss-secret  
          # Secret の名前空間。
          namespace: default  
        volumeAttributes:
          fuseType: ossfs2
          # ご利用のバケット名。
          bucket: knative-llm  
          # マウントするサブディレクトリ。ルートディレクトリの場合は空のままにします。
          path: /models/Qwen3.5-2B
          # OSS バケットが配置されているリージョンのエンドポイント。
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"  
          otherOpts: "-o close_to_open=false"
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      # PVC 名。
      name: llm-model 
      namespace: default
    spec:
      # PV と一致させる必要があります。
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 30Gi
      storageClassName: ""
      # バインドする PV。
      volumeName: llm-model

ステップ 2:推論サービスのデプロイと検証

1. Deployment と Service の作成

vLLM フレームワークを使用して Qwen3.5-2B モデルを Deployment としてデプロイし、LoadBalancer タイプの Service として公開します。

  1. [ACK クラスター] ページで、クラスター名をクリックします。左側のナビゲーションウィンドウで、Workloads > Deployments をクリックします。

  2. YAML のリソースの作成 をクリックし、次の YAML コンテンツを送信します。

    YAML を送信した後、クラスターの GPU リソースが不足している場合、Pod は Pending 状態になります。ACK Auto Mode は自動的に GPU ノードのスケーリングをトリガーし、新しいノードを作成して、初期化が完了すると Pod を新しいノードにスケジュールします。手動での操作は不要です。Pod が Running 状態になると、モデルサービスがデプロイされます。

    サンプルコード

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qwen-2b
      labels:
        app: qwen
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: qwen
      template:
        metadata:
          labels:
            app: qwen
        spec:
          containers:
          - command:
            - vllm
            - serve
            - /models/Qwen3.5-2B       
            - --served-model-name
            - Qwen3.5-2B
            - --port
            - "8000"                 
            - --enforce-eager
            image: ac2-mirror-registry.cn-hangzhou.cr.aliyuncs.com/evaluate/vllm-openai:nightly-d00df624f313a6a5a7a6245b71448b068b080cd7
            imagePullPolicy: IfNotPresent
            name: vllm-container
            ports:
            - containerPort: 8000
              name: http1
              protocol: TCP
            readinessProbe:
              tcpSocket:
                port: 8000
              initialDelaySeconds: 5
              periodSeconds: 5
            resources:
              limits:
                cpu: "32"
                memory: 64Gi
                # GPU の最大数。
                nvidia.com/gpu: "1"
              requests:
                cpu: "8"
                memory: 32Gi
                # 各 Pod は 1 つの GPU をリクエストします。limits と一致させます。
                nvidia.com/gpu: "1"
            volumeMounts:
            # command 内のモデルパスと一致させる必要があります。
            - mountPath: /models/Qwen3.5-2B
              name: llm-model
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: qwen-2b
    spec:
      type: LoadBalancer
      ports:
        # 公開ポート。containerPort と一致させる必要があります。
        - port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: qwen

    デプロイメントが完了したら、展開 ページでアプリケーションのステータスを確認できます。

2. 推論サービスの検証

  1. Service によって公開されたパブリック IP アドレスを取得します。

    export EXTERNAL_IP=$(kubectl get svc qwen-2b -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo ${EXTERNAL_IP}
  2. 推論リクエストを送信して、サービスが利用可能であることを確認します。

    8.XX.XX.89 をご利用のパブリック IP アドレスに置き換えてください。

    curl http://8.XX.XX.89:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "Qwen3.5-2B",
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "Kubernetes"
              }
            ]
          }
        ],
        "max_tokens": 200
      }'

    期待される出力:

    {"id":"chatcmpl-98f158cdbbb38087","object":"chat.completion","created":1775043962,"model":"Qwen3.5-2B","choices":[{"index":0,"message":{"role":"assistant","content":"**Kubernetes** is an open-source container orchestration platform that automates deployment, scaling, management, and repair of containerized applications..."},"finish_reason":"length"}],"usage":{"prompt_tokens":14,"total_tokens":214,"completion_tokens":200}}

関連トピック