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

Container Service for Kubernetes:TensorFlow モデルを推論サービスとしてデプロイ

最終更新日:Mar 26, 2026

TensorFlow モデルのトレーニング後、アプリケーションから呼び出せるように、ネットワークアクセス可能な API として公開する必要があります。このガイドでは、Arena を使用して TensorFlow SavedModel を Container Service for Kubernetes (ACK) クラスター上の TensorFlow Serving 推論サービスとしてデプロイする方法を説明します。これには、Object Storage Service (OSS) へのモデルのアップロード、永続ストレージの設定、サービングインスタンスの起動、Ingress を介した外部アクセスなどが含まれます。

前提条件

開始する前に、以下が準備できていることを確認してください。

このガイドでは、TensorFlow 1.15 でトレーニングされ、SavedModel としてエクスポートされた BERT モデルを使用します。

モデルストレージの準備

ステップ 1: 利用可能な GPU リソースの確認

次のコマンドを実行して、クラスター内の GPU の可用性を確認します。

arena top node

出力には、すべての GPU ノードとその割り当て状況が一覧表示されます。

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%)

このクラスターには 3 つの GPU ノードがあり、それぞれに未割り当ての GPU が 1 つあります。

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

重要

以下の手順では、Linux 上で ossutil を使用します。他のオペレーティングシステムについては、「ossutil」をご参照ください。

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

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

    ossutil64 mb oss://examplebucket

    次の出力は、バケットが作成されたことを確認します。

    0.668238(s) elapsed
  3. SavedModel をバケットにアップロードします。

    ossutil64 cp model.savedmodel oss://examplebucket

ステップ 3: 永続ボリューム (PV) と永続ボリューム要求 (PVC) の作成

OSS バケットをサービングコンテナ内のボリュームとしてマウントするには、永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成します。

  1. Tensorflow.yaml という名前のファイルに次の内容を記述して作成します。

    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   # Must match the PV name above
        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
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi

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

    パラメーター説明
    bucketOSS バケットの名前。命名規則については、「バケットの命名規則」をご参照ください。
    urlバケットのエンドポイント URL。URL の取得方法については、「単一または複数のオブジェクトの URL の取得」をご参照ください。
    akIdOSS バケットへのアクセスに使用される AccessKey ID。Resource Access Management (RAM) ユーザーの AccessKey を使用してください。詳細については、「AccessKey ペアの作成」をご参照ください。
    akSecret上記の AccessKey ID とペアになる AccessKey Secret。
    otherOptsOSS バケットのカスタムマウントオプション。-o max_stat_cache_size=0 はメタデータキャッシングを無効にし、システムが常に最新のオブジェクトのメタデータを OSS から読み取るようにします。-o allow_other は、ノード上の他のユーザーがマウントされたバケットにアクセスできるようにします。追加のオプションについては、「ossfs でサポートされるカスタムパラメーター」をご参照ください。
  2. マニフェストを適用して PV と PVC を作成します。

    kubectl apply -f Tensorflow.yaml

推論サービスのデプロイ

ステップ 4: TensorFlow Serving の起動

次のコマンドを実行して、bert-tfserving という名前の TensorFlow Serving インスタンスをデプロイします。

arena serve tensorflow \
  --name=bert-tfserving \
  --model-name=chnsenticorp \
  --gpus=1 \
  --image=tensorflow/serving:1.15.0-gpu \
  --data=model-pvc:/models \
  --model-path=/models/tensorflow \
  --version-policy=specific:1623831335
パラメーター説明
--nameサービングジョブの名前。
--model-nameTensorFlow Serving が API リクエストでモデルを識別するために使用するモデル名。
--gpusサービングインスタンスに割り当てる GPU の数。
--imageTensorFlow Serving のコンテナイメージ。トレーニング中に使用した TensorFlow のバージョンと一致する必要があります。
--dataPVC をコンテナにマウントします。フォーマット: <pvc-name>:<mount-path>
--model-pathモデルが格納されているコンテナ内のパス。
--version-policyロードするモデルのバージョン。specific:<version> は、サービングを単一のバージョンに固定します。

次の出力は、ジョブが送信されたことを確認します。

configmap/bert-tfserving-202106251556-tf-serving created
configmap/bert-tfserving-202106251556-tf-serving labeled
configmap/bert-tfserving-202106251556-tensorflow-serving-cm created
service/bert-tfserving-202106251556-tensorflow-serving created
deployment.apps/bert-tfserving-202106251556-tensorflow-serving created
INFO[0003] The Job bert-tfserving has been submitted successfully
INFO[0003] You can run `arena get bert-tfserving --type tf-serving` to check the job status

ステップ 5: サービスの実行状況の確認

実行中のすべての推論サービスを一覧表示します。

arena serve list

出力には、bert-tfserving サービスとそのアドレスおよびポートが表示されます。

NAME            TYPE        VERSION       DESIRED  AVAILABLE  ADDRESS        PORTS
bert-tfserving  Tensorflow  202106251556  1        1          172.16.95.171  GRPC:8500,RESTFUL:8501

サービスの詳細を取得します。

arena serve get bert-tfserving
Name:       bert-tfserving
Namespace:  inference
Type:       Tensorflow
Version:    202106251556
Desired:    1
Available:  1
Age:        4m
Address:    172.16.95.171
Port:       GRPC:8500,RESTFUL:8501


Instances:
  NAME                                                             STATUS   AGE  READY  RESTARTS  NODE
  ----                                                             ------   ---  -----  --------  ----
  bert-tfserving-202106251556-tensorflow-serving-8554d58d67-jd2z9  Running  4m   1/1    0         cn-beijing.192.168.0.88

サービスは inference 名前空間にデプロイされます。ポート 8500 は gRPC リクエストを、ポート 8501 は HTTP/RESTful リクエストを処理します。

外部からのサービスへのアクセス

arena serve tensorflow は、デフォルトでクラスター IP を割り当てますが、これはクラスター内からのみ到達可能です。外部アクセス用にサービスを公開するには、Ingress を作成します。

ステップ 6: Ingress の作成

  1. ACK コンソールで、[クラスター] ページに移動し、対象のクラスターをクリックして、左側のナビゲーションウィンドウで [ネットワーク] > [Ingress] に移動します。

  2. ページ上部の [名前空間] ドロップダウンリストから、inference 名前空間 (上記のサービス詳細に表示されているものと同じ名前空間) を選択します。

  3. 右上隅にある [Ingress の作成] をクリックします。Ingress パラメーターの完全な説明については、「NGINX Ingress の作成」をご参照ください。次の設定を使用します。

    • 名前Tensorflow

    • ルール

      • ドメイン名: カスタムドメインを入力します。例: test.example.com

      • パス/

      • ルール: ImplementationSpecific (デフォルト)

      • サービス名kubectl get service によって返されるサービス名

      • ポート8501

  4. Ingress が作成されたら、[Ingress] ページに戻ります。[ルール] 列に Ingress アドレスが表示されます。

    12

ステップ 7: 推論 API の呼び出し

次のコマンドを実行して、推論サービスの API を呼び出します。TensorFlow Serving の詳細については、「TensorFlow Serving API」をご参照ください。

curl "http://<Ingress address>"

成功した応答は次のようになります。

{
 "model_version_status": [
  {
   "version": "1623831335",
   "state": "AVAILABLE",
   "status": {
    "error_code": "OK",
    "error_message": ""
   }
  }
 ]
}

state: AVAILABLE フィールドは、モデルがロードされ、推論リクエストを処理する準備ができていることを確認します。