文档

部署Tensorflow模型推理服务

更新时间:

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

  • 本页导读 (1)
文档反馈