このトピックでは、Arenaを使用してTensorFlowモデルを推論サービスとしてデプロイする方法について説明します。
前提条件
手順
このトピックでは、TensorFlow 1.15でトレーニングされたBERTモデルを使用して推論サービスをデプロイします。 モデルは保存済みモデルとしてエクスポートされます。
次のコマンドを実行して、クラスターで使用可能な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アクセラレーションノードがあることを示しています。
のバケットにモデルをアップロードします。 Object Storage Service (OSS)
重要この例では、LinuxシステムからモデルをOSSにアップロードする方法を示します。 他のオペレーティングシステムを使用している場合は、「ossutil」をご参照ください。
examplebucketという名前のバケットを作成します。次のコマンドを実行して、
examplebucketという名前のバケットを作成します。ossutil64 mb oss:// examplebucket次の出力が表示された場合、
examplebucketという名前のバケットが作成されます。0.668238経過
モデルを
examplebucketバケットにアップロードします。ossutil64 cp model.savedmodel oss:// examplebucket
永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成します。
次のテンプレートに基づいて、
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でサポートされているカスタムパラメーター」をご参照ください。
次のコマンドを実行して、PVとPVCを作成します。
kubectl apply -f Tensorflow.yaml
次のコマンドを実行して、
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' を実行して、ジョブステータス次のコマンドを実行して、実行中のすべてのサービスを照会します。
アリーナサーブ一覧出力は、
bert-tfservingサービスのみが実行されていることを示します。名前タイプバージョンが必要利用可能なアドレスポート bert-tfserving Tensorflow 202106251556 1 1 172.16.95.171 GRPC:8500、RESTFUL:8501次のコマンドを実行して、
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に対して公開されます。デフォルトでは、
arena serve tensorflowを使用してデプロイされた推論サービスはクラスターIPを提供します。 クラスターIPを介して推論サービスにアクセスするには、インターネットに接続するIngressを作成する必要があります。[クラスター] ページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウで を選択します。
ページの上部で、手順6で表示された
[推論]名前空間を [名前空間] ドロップダウンリストから選択します。ページの右上にある [Ingressの作成] をクリックします。 Ingressパラメーターの詳細については、「NGINX Ingressの作成」をご参照ください。
名前: この例では、
Tensorflowを入力します。ルール:
ドメイン名:
test.example.comなどのカスタムドメイン名を入力します。マッピング:
Path: この例では、ルートパス
/が使用されています。Rule: この例では、デフォルトのルール (ImplementationSpecific) が使用されています。
サービス名:
kubectl get Serviceコマンドによって返されるサービス名を入力します。ポート: この例では、ポート8501が使用されます。
Ingressを作成したら、Ingressページに移動してIngressを見つけます。 [ルール] 列の値には、Ingressのアドレスが表示されます。
次のコマンドを実行して、推論サービスのAPIを呼び出します。
TensorFlow Servingの詳細については、「TensorFlow Serving API」をご参照ください。curl "http://<Ingress address>"期待される出力:
{ "model_version_status": [ { "version": "1623831335" 、 "state": "利用可能" 、 "status": { "error_code": "OK" 、 "error_message": " } } ] }