本文介紹如何通過Arena將TensorFlow模型部署成推理服務。
前提條件
操作步驟
本文採用TensorFlow 1.15訓練的Bert模型部署推理服務,並匯出為saved model。
執行以下命令,檢查叢集中可用的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節點可以用來部署模型。
將模型上傳到阿里雲OSS對應的Bucket中。
重要上傳到OSS的步驟以Linux系統為例,其他系統的上傳操作,請參見命令列工具ossutil命令參考。
建立名稱為
examplebucket的儲存空間。輸入以下命令建立
examplebucket。ossutil64 mb oss://examplebucket以下輸出結果表明已成功建立
examplebucket。0.668238(s) elapsed
將模型上傳到建立的
examplebucket中。ossutil64 cp model.savedmodel oss://examplebucket
建立PV和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: "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參數
說明
bucket
OSS的Bucket名稱,在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 list當前只有
bert-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)兩個API連接埠。通過
arena serve tensorflow部署的推理服務預設提供ClusterIP,需要配置公網Ingress才能直接存取。在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在頁面頂端的命名空間列表,選擇第6步中推理服務所在的命名空間
inference。單擊頁面右上方的建立Ingress。關於參數的更多資訊,請參見建立Nginx Ingress。
名稱:本文配置為
Tensorflow。規則:
網域名稱:自訂網域名,例如
test.example.com。路徑映射:
路徑:不做配置,保留根路徑
/。匹配規則:預設(ImplementationSpecific)。
服務名稱:通過執行
kubectl get service命令擷取。連接埠:本文配置為8501。
路由建立成功後,在路由頁面的規則列擷取Ingress地址。

執行以下命令,調用推理服務介面。更多關於
tensorflow serving的資訊,請參見API文檔Tensorflow Serving API。curl "http://<Ingress地址>"預期輸出:
{ "model_version_status": [ { "version": "1623831335", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }