本文介紹如何通過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": "" } } ] }