NVIDIA TensorRT Inference Server on Kubernetes

1 Overview

NVIDIA TensorRT Inference Server 是 NVIDIA 推出的,經過優化的,可以在 NVIDIA GPUs 使用的推理引擎,TensorRT 有下面幾個特點。

  1. 支持多種框架模型,包括 TensorFlow GraphDef,TensorFlow SavedModel,ONNX,PyTorch 和 Cadde2 NetDef 等模型格式
  2. 支持多個模型的併發請求
  3. 支持 Batching 批量請求
  4. 模型倉庫支持本地文件系統,或者 Google Cloud Storage 以及 S3

更多內容可以參考 TensorRT 官方文檔。本文通過 Kubernetes 來部署一個 Example 的 TensorRT 服務。

2 Prerequisite

下面是通過 nvidia-docker 運行起來的 TensorRT 容器,這裏關注幾個關鍵參數。進程通過 trtserver 命令啓動,--model-repository 指定模型倉庫的地址。

$ nvidia-docker run --rm --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -p8000:8000 -p8001:8001 -p8002:8002 -v/path/to/model/repository:/models <tensorrtserver image name> trtserver --model-repository=/models

3 部署

下面只給出了 Pod 的 Spec 部分,需要特別留意的主要是 commandenvvolumemount 幾個字段。

```yaml
spec:
  containers:
  - args:
    - --model-repository
    - /ojbk/model_repository/
    command:
    - /opt/tensorrtserver/bin/trtserver
    env:
    - name: PATH
      value: /opt/tensorrtserver/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: LD_LIBRARY_PATH
      value: /opt/tensorrtserver/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
    - name: LIBRARY_PATH
      value: '/usr/local/cuda/lib64/stubs:'
    image: hub.oa.com/dbyin/tensorrtserver:19.10-py3
    imagePullPolicy: Always
    name: new-container-1
    resources:
      limits:
        alpha.kubernetes.io/nvidia-gpu: "1"
        cpu: "1"
        memory: 4Gi
      requests:
        alpha.kubernetes.io/nvidia-gpu: "1"
        cpu: "1"
        memory: 4Gi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /ojbk
      name: ojbk
    - mountPath: /usr/local/nvidia
      name: nvidia-driver
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-4dkll
      readOnly: true
  dnsPolicy: ClusterFirst
  nodeName: 100.119.242.53
  nodeSelector:
    alpha.kubernetes.io/nvidia-gpu-driver: 418.87.01
    alpha.kubernetes.io/nvidia-gpu-name: P40
    tencent.cr/resource-provider: tenc
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  volumes:
  - emptyDir: {}
    name: ojbk
  - hostPath:
      path: /var/lib/nvidia-docker/volumes/nvidia_driver/latest
      type: ""
    name: nvidia-driver
  - name: default-token-4dkll
    secret:
      defaultMode: 420
      secretName: default-token-4dkll

4 驗證

進入容器後,請求運行 curl localhost:8000/api/status。可以看到返回一些模型的狀態和推理服務版本的一些信息。

image_1e22ski2b8m181k9i19ts1d2k1j.png-103.3kB

爲了驗證,從 NVIDIA 的鏡像倉庫找一個安裝好客戶端的鏡像 tensorrtserver:19.10-py3-clientsdk,並且在客戶端容器中請求 TensorRT 的推理服務。

驗證的過程,可以通過部署一個 Jobflow 通用計算任務,然後進入容器,對目標推理服務進行預測請求。

進入容器,通過下面的命令來進行推理。

  1. image_client 客戶端
  2. -u 默認是 localhost:8000
  3. -m 指定模型
image_client -u 6.19.120.17:8000 -m resnet50_netdef -s INCEPTION images/mug.jpg

image_1e22rva7dt9c12m417n1dq91ooj16.png-26.1kB

5 Reference

  1. NVIDIA TensorRT QuickStart
  2. NVIDIA 鏡像倉庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章