1 Overview
NVIDIA TensorRT Inference Server 是 NVIDIA 推出的,經過優化的,可以在 NVIDIA GPUs 使用的推理引擎,TensorRT 有下面幾個特點。
- 支持多種框架模型,包括 TensorFlow GraphDef,TensorFlow SavedModel,ONNX,PyTorch 和 Cadde2 NetDef 等模型格式
- 支持多個模型的併發請求
- 支持 Batching 批量請求
- 模型倉庫支持本地文件系統,或者 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 部分,需要特別留意的主要是 command
, env
,volumemount
幾個字段。
```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
。可以看到返回一些模型的狀態和推理服務版本的一些信息。
爲了驗證,從 NVIDIA 的鏡像倉庫找一個安裝好客戶端的鏡像 tensorrtserver:19.10-py3-clientsdk
,並且在客戶端容器中請求 TensorRT 的推理服務。
驗證的過程,可以通過部署一個 Jobflow 通用計算任務,然後進入容器,對目標推理服務進行預測請求。
進入容器,通過下面的命令來進行推理。
image_client
客戶端-u
默認是localhost:8000
-m
指定模型
image_client -u 6.19.120.17:8000 -m resnet50_netdef -s INCEPTION images/mug.jpg