このトピックでは、Arena を使用して TensorFlow モデルを推論サービスとしてデプロイする方法について説明します。
前提条件
操作手順
このトピックでは、TensorFlow 1.15 でトレーニングされた BERT モデルを使用して、推論サービスをデプロイします。モデルは保存済みモデルとしてエクスポートされます。
-
次のコマンドを実行して、クラスターで使用可能な 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%)出力は、モデルのデプロイに 3 つの GPU ノードが使用可能であることを示しています。
-
Object Storage Service (OSS) のバケットにモデルをアップロードします。
重要OSS にモデルをアップロードする次の手順は、Linux システム向けです。他のオペレーティングシステムでのアップロード手順については、「ossutil コマンドラインツールのクイックスタート」をご参照ください。
-
examplebucketという名前のバケットを作成します。-
次のコマンドを実行して
examplebucketを作成します。ossutil64 mb oss://examplebucket -
次の出力は、
examplebucketが作成されたことを示します:0.668238(s) elapsed
-
-
モデルを
examplebucketバケットにアップロードします。ossutil64 cp model.savedmodel oss://examplebucket
-
PersistentVolume (PV) と PersistentVolumeClaim (PVC) を作成します。
-
次のテンプレートに基づいて
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 # PV 名と同じにする必要があります。 volumeAttributes: bucket: "お使いのバケット" url: "お使いの OSS URL" akId: "お使いの AccessKey ID" akSecret: "お使いの AccessKey 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パラメーター
説明
bucket
OSS バケットの名前。この名前は OSS 内でグローバルに一意である必要があります。詳細については、「バケットの命名規則」をご参照ください。
url
OSS ファイルへのアクセスに使用される URL。詳細については、「単一または複数のファイルの URL の取得」をご参照ください。
akId
OSS へのアクセスに使用される AccessKey ID と AccessKey Secret。RAM ユーザーを使用してアクセスすることを推奨します。詳細については、「AccessKey ペアの作成」をご参照ください。
akSecret
otherOpts
OSS をマウントするためのカスタムパラメーター。
-
-o max_stat_cache_size=0オプションは属性キャッシュを無効にします。ファイルにアクセスするたびに、最新の属性情報が OSS から取得されます。 -
-o allow_otherオプションを使用すると、他のユーザーがマウントされたファイルシステムにアクセスできます。
パラメーター設定の詳細については、「ossfs でサポートされる設定オプション」をご参照ください。
-
-
次のコマンドを実行して PV と PVC を作成します。
kubectl apply -f Tensorflow.yaml
-
-
次のコマンドを実行して、
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想定される出力:
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 -
次のコマンドを実行して、現在実行中のサービスを一覧表示します。
arena serve listbert-tfservingサービスのみが実行中です。NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS bert-tfserving Tensorflow 202106251556 1 1 172.16.95.171 GRPC:8500,RESTFUL:8501 -
次のコマンドを実行して、
bert-tfserving推論サービスの詳細を表示します。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出力は、モデルが
tensorflow servingを使用して正常にデプロイされ、8500 (gRPC) と 8501 (HTTP) の 2 つの API ポートが公開されていることを示しています。 -
デフォルトでは、
arena serve tensorflowは ClusterIP を介して推論サービスを公開します。直接アクセスするには、パブリックネットワーク Ingress を設定する必要があります。-
クラスターリスト ページで、対象クラスターの名前をクリックします。左側メニューで、 を選択します。
-
ページ上部の 名前空間 ドロップダウンリストから、手順 4 で作成された推論サービスを含む
inference名前空間を選択します。 -
ページの右上隅にある ingress の作成 をクリックします。パラメーターの詳細については、「NGINX Ingress を作成して使用し、サービスを公開する」をご参照ください。
-
名前:この例では、名前を
Tensorflowに設定します。 -
ルール:
-
ドメイン名:カスタムドメイン名 (例:
test.example.com)。 -
マッピング:
-
パス:このフィールドは空のままにして、ルートパス
/を使用します。 -
一致ルール:デフォルト値 (ImplementationSpecific)。
-
サービス名:ドロップダウンリストから、
bert-tfservingで始まるサービス名を選択します。 -
ポート:この例では、ポートを 8501 に設定します。
-
-
-
-
-
Ingress が作成されたら、 ルール ページの Ingress 列から Ingress アドレスを取得します。
-
次のコマンドを実行して、推論サービス API を呼び出します。
tensorflow servingの詳細については、「Tensorflow Serving API」の API ドキュメントをご参照ください。curl "http://<Ingress address>"想定される出力:
{ "model_version_status": [ { "version": "1623831335", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }