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

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

最終更新日:Jan 07, 2025

このトピックでは、Arenaを使用してTensorFlowモデルを推論サービスとしてデプロイする方法について説明します。

前提条件

手順

説明

このトピックでは、TensorFlow 1.15でトレーニングされたBERTモデルを使用して推論サービスをデプロイします。 モデルは保存済みモデルとしてエクスポートされます。

  1. 次のコマンドを実行して、クラスターで使用可能なGPUリソースを照会します。

    アリーナトップノード

    期待される出力:

    名前IPADDRESS ROLE STATUS GPU (合計) GPU (割り当て済み)
    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
    ---------------------------------------------------------------------------------------------------
    クラスタ内のリソースe nvidia.com/gpuを所有するノードの割り当て /合計GPU:
    0/3 (0.0%) 

    上記の出力は、クラスターにモデルをデプロイできる3つのGPUアクセラレーションノードがあることを示しています。

  2. のバケットにモデルをアップロードします。 Object Storage Service (OSS)

    重要

    この例では、LinuxシステムからモデルをOSSにアップロードする方法を示します。 他のオペレーティングシステムを使用している場合は、「ossutil」をご参照ください。

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

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

      • 次のコマンドを実行して、examplebucketという名前のバケットを作成します。

        ossutil64 mb oss:// examplebucket
      • 次の出力が表示された場合、examplebucketという名前のバケットが作成されます。

        0.668238経過
    3. モデルをexamplebucketバケットにアップロードします。

      ossutil64 cp model.savedmodel oss:// examplebucket
  3. 永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成します。

    1. 次のテンプレートに基づいて、Tensorflow.yamlという名前のファイルを作成します。

      apiVersion: v1
      kind: PersistentVolume
      メタデータ:
        名前: model-csi-pv
      spec:
        capacity:
          storage: 5Gi
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: ossplugin.csi.alibabacloud.com
          volumeHandle: model-csi-pv // 値はPVの名前と同じでなければなりません。 
          volumeAttributes:
            bucket: "あなたのバケツ"
            url: "あなたのoss url"
            akId: 「アクセスキーId」
            akSecret: 「あなたのアクセスキーの秘密」
            otherOpts: "-o max_stat_cache_size=0 -o allow_other"
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      メタデータ:
        名前: model-pvc
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            ストレージ: 5Gi 

      パラメーター

      説明

      バケット

      OSSバケットの名前。OSS内でグローバルに一意です。 詳細については、「バケットの命名規則」をご参照ください。

      url

      バケット内のオブジェクトにアクセスするために使用されるURL。 詳細については、「単一オブジェクトのURLまたは複数オブジェクトのURLの取得」をご参照ください。

      akId

      OSSバケットへのアクセスに使用されるAccessKey IDとAccessKeyシークレット。 Resource access Management (RAM) ユーザーとしてOSSバケットにアクセスすることを推奨します。 詳細については、「AccessKey の作成」をご参照ください。

      akSecret

      otherOpts

      OSSバケットをマウントするためのカスタムパラメーター。

      • -o max_stat_cache_size=0を設定して、メタデータキャッシュを無効にします。 この機能が無効になっている場合、システムはOSS内のオブジェクトにアクセスしようとするたびに、OSSから最新のメタデータを取得します。

      • -o allow_otherを設定して、マウントしたOSSバケットに他のユーザーがアクセスできるようにします。

      その他のパラメーターの詳細については、「ossfsでサポートされているカスタムパラメーター」をご参照ください。

    2. 次のコマンドを実行して、PVとPVCを作成します。

      kubectl apply -f Tensorflow.yaml
  4. 次のコマンドを実行して、bert-tfservingという名前のTensorFlow Servingインスタンスを起動します。

    アリーナは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 

    期待される出力:

    configmap/bert-tfserving-202106251556-tf-serving作成
    ラベル付きconfigmap/bert-tfserving-202106251556-tf-serving
    configmap/bert-tfserving-202106251556-tensorflow-serving-cm作成
    サービス /bert-tfserving-202106251556-tensorflow-serving作成
    deployment.apps/bert-tfserving-202106251556-tensorflow-serving作成
    情報 [0003] Job bert-tfservingが正常に提出されました
    INFO[0003] 'arena get bert-tfserving -- type tf-serving' を実行して、ジョブステータス
    を確認できます。
  5. 次のコマンドを実行して、実行中のすべてのサービスを照会します。

    アリーナサーブ一覧

    出力は、bert-tfservingサービスのみが実行されていることを示します。

    名前タイプバージョンが必要利用可能なアドレスポート
    bert-tfserving Tensorflow 202106251556 1 1 172.16.95.171 GRPC:8500、RESTFUL:8501 
  6. 次のコマンドを実行して、bert-tfservingサービスの詳細を照会します。

    アリーナサーブget bert-tfserving

    期待される出力:

    名: bert-tfserving
    名前空間: 推論
    タイプ: Tensorflow
    バージョン: 202106251556
    希望: 1
    利用可能: 1
    年齢: 4m
    アドレス: 172.16.95.171
    ポート: GRPC:8500、RESTFUL:8501
    
    
    インスタンス:
      NAME STATUS AGE READY RESTARTSノード
      ----                                                             ------   ---  -----  --------  ----
      bert-tfserving-202106251556-tensorflow-serving-8554d58d67-jd2z9実行4m 1/1 0 cn-beijing.192.168.0.88 

    上記の出力は、TensorFlow Servingを使用してモデルが正常にデプロイされたことを示しています。 ポート8500はgRPCに対して公開され、ポート8501はHTTPに対して公開されます。

  7. デフォルトでは、arena serve tensorflowを使用してデプロイされた推論サービスはクラスターIPを提供します。 クラスターIPを介して推論サービスにアクセスするには、インターネットに接続するIngressを作成する必要があります。

    1. [クラスター] ページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウで [ネットワーク] > [Ingress] を選択します。

    2. ページの上部で、手順6で表示された [推論] 名前空間を [名前空間] ドロップダウンリストから選択します。

    3. ページの右上にある [Ingressの作成] をクリックします。 Ingressパラメーターの詳細については、「NGINX Ingressの作成」をご参照ください。

      • 名前: この例では、Tensorflowを入力します。

      • ルール:

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

        • マッピング:

          • Path: この例では、ルートパス /が使用されています。

          • Rule: この例では、デフォルトのルール (ImplementationSpecific) が使用されています。

          • サービス名: kubectl get Serviceコマンドによって返されるサービス名を入力します。

          • ポート: この例では、ポート8501が使用されます。

  8. Ingressを作成したら、Ingressページに移動してIngressを見つけます。 [ルール] 列の値には、Ingressのアドレスが表示されます。12

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

    curl "http://<Ingress address>"

    期待される出力:

    {
     "model_version_status": [
      {
       "version": "1623831335" 、
       "state": "利用可能" 、
       "status": {
        "error_code": "OK" 、
        "error_message": "
       }
      }
     ]
    }