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
5 Reference
- NVIDIA TensorRT QuickStart
- NVIDIA 镜像仓库