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

Container Service for Kubernetes:Knative を使用して ACK Auto モードクラスターに Qwen3.5-4B 大規模言語モデルの推論サービスをデプロイする

最終更新日:Apr 11, 2026

Container Service for Kubernetes (ACK) Auto モードクラスターは、Auto モードのノードプールと Knative Serving のオンデマンドな弾力性を利用して、Qwen3.5-4B 大規模言語モデルをサーバーレス推論サービスとしてデプロイします。この方法により、手動での GPU リソース管理が不要になり、コストを重視し、メンテナンスの手間を省きたい推論シナリオに最適です。

全体のプロセスは以下の通りです:

  • ACK Auto モードクラスター:GPU ノードの作成と解放を管理します。ノードのライフサイクルは Auto モードのノードプールによって管理されます。

  • Knative Serving:リクエストの同時実行数 (concurrency) または秒間リクエスト数 (rps) に基づいて Pod のスケーリングをサポートします。

ステップ1:クラスターと GPU ノードプールの作成

1. クラスターの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、Kubernetes クラスターの作成 をクリックします。ACK マネージドクラスター ページで、Auto モードを有効にします。

    image

  3. 設定を確認し、Kubernetes クラスターの作成 をクリックします。

    詳細な手順については、「ACK Auto モードクラスターの作成」をご参照ください。

2. GPU ノードプールの作成

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

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

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

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

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

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

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

3. Knative コンポーネントのデプロイ

Knative コンポーネントのデプロイ」をご参照のうえ、デプロイを完了してください。

ステップ2:モデルファイルの準備とアップロード

このステップでは、一時的な Elastic Compute Service (ECS) インスタンスを使用して ModelScope から Qwen3.5-4B モデルファイルをダウンロードし、ossutil を使用して OSS バケットにアップロードします。バケットから推論コンテナにファイルをボリュームとしてマウントすることで、コンテナが起動するたびにモデルを再ダウンロードする必要がなくなります。

始める前に、以下のタスクを完了してください:

1. Qwen3.5-4B モデルファイルのダウンロード

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

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

    # `yum install git` または `apt install git` を実行できます。
    sudo yum install git
  2. Git LFS (Large File Storage) プラグインをインストールします。

    # `yum install git-lfs` または `apt install git-lfs` を実行できます。
    sudo yum install git-lfs
  3. ModelScope から Qwen3.5-4B リポジトリをクローンします。この時点では Git LFS が管理する大きなファイルはスキップします。

    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen3.5-4B.git
  4. リポジトリのディレクトリに移動し、Git LFS が管理する大きなファイルをプルします。

    cd Qwen3.5-4B
    git lfs pull

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

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

    <Your-Bucket-Name> を実際の名前で置き換えてください。

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

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

3. OSS ボリュームの設定

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

    この例では AccessKey 認証を使用します。詳細については、「静的 ossfs 2.0 ボリュームの使用」をご参照ください。
  2. 取得した AccessKey をシークレットとして保存し、永続ボリュームで使用できるようにします。

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

    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
        nodePublishSecretRef:
          # AccessKey 情報を保存するシークレットの名前。
          name: oss-secret
          # シークレットが配置されている名前空間。
          namespace: default
        volumeAttributes:
          fuseType: ossfs2
          # 実際のバケット名に置き換えてください。
          bucket: <Your-Bucket-Name>
          # マウントするサブディレクトリ。ルートディレクトリをマウントする場合は空のままにします。
          path: /models/Qwen3.5-4B
          # OSS バケットが配置されているリージョンのエンドポイント。
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"
          otherOpts: "-o close_to_open=false"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # PVC 名
      name: llm-model
      namespace: default
    spec:
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 30Gi
      storageClassName: ""
      # バインドする PV の名前。
      volumeName: llm-model

ステップ3:サービスのデプロイと検証

1. Knative サービスの作成

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Applications > Knative をクリックします。

  2. [サービス] タブで、[テンプレートから作成] をクリックします。[サンプルテンプレート][カスタム] に設定し、以下のコードを使用して Knative サービスをデプロイします。

    サンプルコード

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      labels:
        release: qwen
      name: qwen
      namespace: default
    spec:
      template:
        metadata:
          annotations:
            # レプリカの最小数。コールドスタートを避けるために、少なくとも1つのレプリカを実行し続けます。
            autoscaling.knative.dev/minScale: "1"
            # レプリカの最大数。GPU リソース消費の上限を制限します。
            autoscaling.knative.dev/maxScale: "2"
          labels:
            release: qwen
        spec:
          containers:
          - command:
            - vllm
            - serve
            - /models/Qwen3.5-4B
            - --served-model-name
            - Qwen3.5-4B
            - --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
                nvidia.com/gpu: "1"
              requests:
                cpu: "16"
                memory: 32Gi
                nvidia.com/gpu: "1"
            volumeMounts:
            - mountPath: /models/Qwen3.5-4B
              name: llm-model
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model

    パラメーター

    説明

    autoscaling.knative.dev/metric

    オートスケーリングのメトリック。有効な値:

    • concurrency (デフォルト):同時操作数。

    • rps:秒間リクエスト数。

    autoscaling.knative.dev/target

    選択したメトリックのターゲット値。オートスケーラーは、Pod ごとのこの平均値を維持するようにサービスをスケーリングします。

    autoscaling.knative.dev/minScale

    レプリカの最小数。ゼロへのスケーリングを有効にするには 0 に設定します。

    autoscaling.knative.dev/maxScale

    レプリカの最大数。スケールアウトの上限を制限します。

2. サービスの検証

  1. [サービス] タブで、サービスが準備完了状態であることを確認し、デフォルトドメイン名とアクセスゲートウェイアドレスを取得します。

    image

  2. 推論サービスにテストリクエストを送信します。

    xx.40.85.xx を実際のアクセスゲートウェイアドレスに、qwen.default.example.com を実際のデフォルトドメイン名に置き換えてください。

    curl http://xx.40.85.xx:80/v1/chat/completions \
      -H "Host: qwen.default.example.com" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "Qwen3.5-4B",
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "Tell me about Hangzhou"
              }
            ]
          }
        ],
        "max_tokens": 200
      }'

    期待される出力は以下の通りです:

    {
      "id": "chatcmpl-20dfb4c8-d1ab-48bc-9f1a-78b84c6c8adf",
      "object": "chat.completion",
      "created": 1772602897,
      "model": "Qwen3.5-4B",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": "杭州は「杭」と略され、中国浙江省の副省級市です..."
          },
          "finish_reason": "length"
        }
      ],
      "usage": {
        "prompt_tokens": 14,
        "completion_tokens": 200,
        "total_tokens": 214
      }
    }