全部產品
Search
文件中心

Container Service for Kubernetes:部署Tensorflow模型推理服務

更新時間:Jul 04, 2024

本文介紹如何通過Arena將TensorFlow模型部署成推理服務。

前提條件

操作步驟

說明

本文採用TensorFlow 1.15訓練的Bert模型部署推理服務,並匯出為saved model。

  1. 執行以下命令,檢查叢集中可用的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節點可以用來部署模型。

  2. 將模型上傳到阿里雲OSS對應的Bucket中。

    重要

    上傳到OSS的步驟以Linux系統為例,其他系統的上傳操作,請參見命令列工具ossutil命令參考

    1. 安裝ossutil

    2. 建立名稱為examplebucket的儲存空間。

      • 輸入以下命令建立examplebucket

        ossutil64 mb oss://examplebucket
      • 以下輸出結果表明已成功建立examplebucket

        0.668238(s) elapsed
    3. 將模型上傳到建立的examplebucket中。

      ossutil64 cp model.savedmodel oss://examplebucket
  3. 建立PV和PVC。

    1. 使用以下模板建立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支援的設定參數選項

    2. 執行以下命令,建立PV和PVC。

      kubectl apply -f Tensorflow.yaml
  4. 執行以下命令,啟動名稱為bert-tfservingtensorflow 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
  5. 執行以下命令,查看當前啟動並執行服務列表。

    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
  6. 執行以下命令,查看推理服務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連接埠。

  7. 通過arena serve tensorflow部署的推理服務預設提供ClusterIP,需要配置公網Ingress才能直接存取。

    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 路由

    2. 在頁面頂端的命名空間列表,選擇第6步中推理服務所在的命名空間inference

    3. 單擊頁面右上方的建立Ingress。關於參數的更多資訊,請參見建立Nginx Ingress

      • 名稱:本文配置為Tensorflow

      • 規則

        • 網域名稱:自訂網域名,例如test.example.com

        • 路徑映射

          • 路徑:不做配置,保留根路徑/

          • 匹配規則:預設(ImplementationSpecific)。

          • 服務名稱:通過執行kubectl get service命令擷取。

          • 連接埠:本文配置為8501

  8. 路由建立成功後,在路由頁面的規則列擷取Ingress地址。12

  9. 執行以下命令,調用推理服務介面。更多關於tensorflow serving的資訊,請參見API文檔Tensorflow Serving API

    curl "http://<Ingress地址>"

    預期輸出:

    {
     "model_version_status": [
      {
       "version": "1623831335",
       "state": "AVAILABLE",
       "status": {
        "error_code": "OK",
        "error_message": ""
       }
      }
     ]
    }