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

Container Service for Kubernetes:PyTorch モデル推論サービスのデプロイ

最終更新日:Mar 27, 2026

NVIDIA Triton Inference Server または TorchServe を使用して、学習済みの PyTorch モデルを ACK 上の GPU 加速推論サービスとしてデプロイします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

デプロイ方法の選択

方法 推奨用途
Triton(推奨) マルチフレームワーク対応、KFServing 互換 API、RESTful および gRPC エンドポイントを備えた本番運用向けサービング
TorchServe PyTorch 専用モデル、マルチフレームワーク要件のない簡易セットアップ

ほとんどの本番運用シナリオでは、Triton の採用を推奨します。これは、複数のモデルフレームワークをサポートし、KFServing 互換の RESTful および gRPC エンドポイントを提供するためです。ワークフローが PyTorch ネイティブであり、軽量なセットアップを希望する場合は、TorchServe をご使用ください。

Triton によるデプロイ(推奨)

この例では、PyTorch 1.16 で学習された BERT(Bidirectional Encoder Representations from Transformers)モデルをデプロイします。まず、モデルを TorchScript に変換し、Object Storage Service (OSS) にアップロードします。その後、永続ボリューム要求 (PVC) を介してクラスターにマウントし、NVIDIA Triton Inference Server を使用してデプロイします。

ステップ 1:モデルの準備

1.1 モデルの学習と変換

スタンドアロンの PyTorch トレーニングジョブを実行し、PyTorch モデルを TorchScript に変換します。詳細については、「Arena を使用したスタンドアロン PyTorch トレーニングジョブの送信」をご参照ください。

1.2 利用可能な GPU リソースの確認

arena top node

期待される出力:

NAME                      IPADDRESS      ROLE    STATUS  GPU(Total)  GPU(Allocated)
cn-beijing.192.168.0.100  192.168.0.100  <none>  Ready   1           0
cn-beijing.192.168.0.101  192.168.0.101  <none>  Ready   1           0
cn-beijing.192.168.0.99   192.168.0.99   <none>  Ready   1           0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs of nodes which own resource nvidia.com/gpu In Cluster:
0/3 (0.0%)

クラスターには、現在割り当てられていない GPU ノードが 3 台あります。

ステップ 2:モデルリポジトリの構造化

Triton では、特定のディレクトリ構造が必要です。

<model-repository>/
  <model-name>/
    config.pbtxt
    <version>/
      <model-definition-file>

この例における構造は以下のとおりです。

triton/
└── chnsenticorp/          # モデル名
    ├── 1623831335/        # モデルバージョン
    │   └── model.savedmodel/
    │       ├── saved_model.pb
    │       └── variables/
    │           ├── variables.data-00000-of-00001
    │           └── variables.index
    └── config.pbtxt       # Triton 構成ファイル

ステップ 3:モデルの OSS へのアップロード

以下のコマンドは Linux に適用されます。その他のオペレーティングシステムについては、「ossutil」をご参照ください。
  1. ossutil のインストール.

  2. examplebucket という名前のバケットを作成します。

    ossutil64 mb oss://examplebucket

    以下の出力が表示された場合、バケットの作成に成功しています。

    0.668238(s) elapsed
  3. モデルをアップロードします。

    ossutil64 cp model.savedmodel oss://examplebucket

ステップ 4:PV および PVC の作成

  1. 以下のテンプレートを使用して、pytorch-pv-pvc.yaml という名前のファイルを作成します。

    パラメーター 説明
    bucket OSS バケット名。OSS 内でグローバルに一意である必要があります。「バケット命名規則」をご参照ください。
    url OSS バケットへのアクセスに使用する URL。「単一ファイルまたは複数ファイルの URL の取得」をご参照ください。
    akId OSS アクセス用の AccessKey ID。権限を制限するため、RAM ユーザーの認証情報を使用してください。「AccessKey ペアの作成」をご参照ください。
    akSecret AccessKey ID に対応する AccessKey Secret。
    otherOpts OSS バケットのマウントオプション。-o max_stat_cache_size=0 により属性キャッシュが無効化され、各ファイルアクセス時に最新の属性が OSS から取得されます。-o allow_otherossfs の対応パラメーターオプション により、他のユーザーがマウントされたファイルシステムにアクセスできるようになります。「」をご参照ください。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: model-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: model-csi-pv   # PV 名と同一である必要があります。
        volumeAttributes:
          bucket: "Your Bucket"
          url: "Your oss url"
          akId: "Your Access Key Id"
          akSecret: "Your Access Key Secret"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: model-pvc
      namespace: inference
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi

    以下のパラメーターを置き換えます。

  2. PV および PVC を作成します。

    kubectl apply -f pytorch-pv-pvc.yaml

ステップ 5:モデルのデプロイ

arena serve triton \
  --name=bert-triton \
  --namespace=inference \
  --gpus=1 \
  --replicas=1 \
  --image=nvcr.io/nvidia/tritonserver:20.12-py3 \
  --data=model-pvc:/models \
  --model-repository=/models/triton

期待される出力:

configmap/bert-triton-202106251740-triton-serving created
configmap/bert-triton-202106251740-triton-serving labeled
service/bert-triton-202106251740-tritoninferenceserver created
deployment.apps/bert-triton-202106251740-tritoninferenceserver created
INFO[0001] The Job bert-triton has been submitted successfully
INFO[0001] You can run `arena get bert-triton --type triton-serving` to check the job status

TorchServe によるデプロイ

この方法では、モデルを .mar(Model Archive)形式にパッケージ化し、TorchServe でサービングします。

ステップ 1:モデルのパッケージ化

torch-model-archiver を使用して、PyTorch モデルを .mar 形式にパッケージ化します。詳細については、「torch-model-archiver」をご参照ください。

ステップ 2:モデルの OSS へのアップロード

以下のコマンドは Linux 用です。その他のオペレーティングシステムの場合、「ossutil」をご参照ください。
  1. ossutil のインストール.

  2. examplebucket という名前のバケットを作成します。

    ossutil64 mb oss://examplebucket

    以下の出力が表示された場合、バケットの作成に成功しています。

    0.668238(s) elapsed
  3. モデルをアップロードします。

    ossutil64 cp model.savedmodel oss://examplebucket

ステップ 3:PV および PVC の作成

  1. Triton 方法と同じテンプレートを使用して、pytorch-pv-pvc.yaml という名前のファイルを作成します。「ステップ 4」でテンプレートおよびパラメーターの説明をご確認ください。

  2. PV および PVC を作成します。

    kubectl apply -f pytorch-pv-pvc.yaml

ステップ 4:モデルのデプロイ

arena serve custom \
  --name=torchserve-demo \
  --gpus=1 \
  --replicas=1 \
  --image=pytorch/torchserve:0.4.2-gpu \
  --port=8000 \
  --restful-port=8001 \
  --metrics-port=8002 \
  --data=model-pvc:/data \
  'torchserve --start --model-store /data/models --ts-config /data/config/ts.properties'
--model-store パスは、マウントされた PVC 内のモデルの実際のパスと一致している必要があります。イメージは、公式の pytorch/torchserve イメージまたはカスタム TorchServe イメージのいずれかを使用できます。

期待される出力:

service/torchserve-demo-202109101624 created
deployment.apps/torchserve-demo-202109101624-custom-serving created
INFO[0001] The Job torchserve-demo has been submitted successfully
INFO[0001] You can run `arena get torchserve-demo --type custom-serving` to check the job status

推論サービスの検証

以下の手順では、Triton デプロイ(bert-triton)を例として説明します。

  1. デプロイメントのステータスを確認します。

    arena serve list -n inference

    期待される出力:

    NAME            TYPE        VERSION       DESIRED  AVAILABLE  ADDRESS        PORTS
    bert-triton     Triton      202106251740  1        1          172.16.70.14   RESTFUL:8000,GRPC:8001
  2. デプロイメントの詳細を取得します。

    arena serve get bert-triton -n inference

    期待される出力:

    Name:       bert-triton
    Namespace:  inference
    Type:       Triton
    Version:    202106251740
    Desired:    1
    Available:  1
    Age:        5m
    Address:    172.16.70.14
    Port:       RESTFUL:8000,GRPC:8001
    
    
    Instances:
      NAME                                                             STATUS   AGE  READY  RESTARTS  NODE
      ----                                                             ------   ---  -----  --------  ----
      bert-triton-202106251740-tritoninferenceserver-667cf4c74c-s6nst  Running  5m   1/1    0         cn-beijing.192.168.0.89

    このサービスは、RESTful 用ポート 8000 および gRPC 用ポート 8001 の 2 つの API エンドポイントを公開します。

  3. サービスを外部から利用可能にします。NVIDIA Triton Inference Server はデフォルトで ClusterIP を使用するため、クラスター外から推論 API を呼び出すには、パブリック Ingress を構成する必要があります。

    1. クラスター ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウから、ネットワークIngresses を選択します。

    2. 名前空間 リストから、inference 名前空間を選択します。

    3. 右上隅の Ingress の作成 をクリックします。

      • サービス名bert-triton に設定します。

      • RESTful ポート8501 に設定します。

      • 他のパラメーターを必要に応じて設定します。詳細については、「Nginx Ingress を作成してサービスを公開する」をご参照ください。

  4. Ingress が作成された後、ルール 列の Ingresses ページで Ingress アドレスを確認します。23

  5. Ingress アドレスを使用して推論 API を呼び出します。NVIDIA Triton Inference Server は KFServing API 仕様に準拠しています。完全な API リファレンスについては、「NVIDIA Triton Server API」をご参照ください。

    curl "http://<Ingress address>"

    期待される出力:

    {
        "name":"chnsenticorp",
        "versions":[
            "1623831335"
        ],
        "platform":"tensorflow_savedmodel",
        "inputs":[
            {
                "name":"input_ids",
                "datatype":"INT64",
                "shape":[
                    -1,
                    128
                ]
            }
        ],
        "outputs":[
            {
                "name":"probabilities",
                "datatype":"FP32",
                "shape":[
                    -1,
                    2
                ]
            }
        ]
    }

次のステップ