在拉取镜像前,需要安装 Docker 和 NVIDIA Container Toolkit。
用以下命令拉取镜像
$ docker pull nvcr.io/nvidia/tritonserver:<xx.yy>-py3
模型库是一个目录,里面以一定的结构储存着数个模型。官方的示例模型库在 docs/examples/model_repository,启动 triton 前还需运行 fetch_models.sh
以获得完整的示例模型。
$ git clone https://github.com/triton-inference-server/server.git
$ cd server/docs/examples
$ ./fetch_models.sh
使用以下命令启动 triton。其中 --gpus
表示给这个容器分配几个 GPU ,/full/path/to/docs/examples/model_repository
替换为模型库的完整路径,
替换为镜像版本。
$ docker run --gpus=1 --rm --net=host -v /full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:<xx.yy>-py3 tritonserver --model-repository=/models
启动 triton 后,当终端上有以下输出时,表示 triton 已准备好接受推理请求。
+----------------------+---------+--------+
| Model | Version | Status |
+----------------------+---------+--------+
| densenet_onnx | 1 | READY |
| inception_graphdef | 1 | READY |
| simple | 1 | READY |
| simple_dyna_sequence | 1 | READY |
| simple_identity | 1 | READY |
| simple_int8 | 1 | READY |
| simple_sequence | 1 | READY |
| simple_string | 1 | READY |
+----------------------+---------+--------+
...
...
...
I1002 21:58:57.891440 62 grpc_server.cc:3914] Started GRPCInferenceService at 0.0.0.0:8001
I1002 21:58:57.893177 62 http_server.cc:2717] Started HTTPService at 0.0.0.0:8000
I1002 21:58:57.935518 62 http_server.cc:2736] Started Metrics Service at 0.0.0.0:8002
在服务器新开一个终端,使用 curl 从 HTTP 接口请求 triton 的状态
$ curl -v localhost:8000/v2/health/ready
...
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/plain
如果 HTTP 返回 200 说明服务器运行正常
从 Github 拉取客户端储存库
$ git clone https://github.com/triton-inference-server/client.git
Triton 提供了 C++/Python/Java 等语言的客户端 API,示例储存在 client/src/
提供的客户端库支持通过 HTTP/REST 或 GRPC 访问 triton 服务器,C++ 和 Python API 还支持通过系统和 CUDA 的共享内存传递数据。
用最新版 pip 安装
$ pip install pip --upgrade
$ pip install tritonclient[all]
将会安装以下组件:
http
grpc
[ service_pb2
, service_pb2_grpc
, model_config_pb2
]utils
[ Linux 发行版将包括 shared_memory
和 cuda_shared_memory
]Linux 版还将包括 perf_analyzer
可执行文件。perf_analyzer
基于 Ubuntu 20.04 构建,在其他平台可能无法运行,需要安装以下依赖
$ sudo apt update
$ sudo apt install libb64-dev
客户端库和 perf_analyzer
可执行文件可以从 Realease 下载 。libraries 位于 lib/
,头文件位于include/
,Python wheel 位于python/
,jar 位于 java/
。 bin/
和 python/
含有示例文件。
perf_analyzer
基于 Ubuntu 20.04 构建,在其他平台可能无法运行,要使用 C++ 库或 perf_analyzer
需要安装以下依赖
$ sudo apt update
$ sudo apt install libb64-dev
以下介绍几个示例应用
有些模型支持 tensors ,其中 tensors 的每个元素都是可变长度的二进制数据(binary data),在客户端中,此数据类型为 Bytes。(有关支持的数据类型详见: Datatypes)
Python 使用 numpy 库来表示 tensors 。对于 BYTES tensors ,numpy array 的 dtype 为 np.object_ 。
有关的示例文件以 simple_http_string_infer_client
和 simple_grpc_string_infer_client
命名。
在一些情况,使用系统共享内存传输数据可显著提高性能。
有关的示例文件以 simple_http_shm_client
和 simple_grpc_shm_client
命名。
由于 Python 没有分配和使用共享内存的标准方法,因此提供了一个简单的系统共享内存模块。
在一些情况,使用 CUDA 共享内存传输数据可显著提高性能。
有关的示例文件以 simple_http_cudashm_client
和 simple_grpc_cudashm_clien
命名。
由于 Python 没有分配和使用共享内存的标准方法,因此提供了一个简单的 CUDA 共享内存模块。
在使用 Stateful Models 进行推理时,客户端需要标记哪些推理请求属于同一列队,以及列队的开始和结束。
每个列队都有一个唯一 ID ,由客户端创建,并在推理时提供给 triton。每个列队的第一个请求要被标记为列队的开始,最后一个则标记为结束。
有关的示例文件以 simple_http_sequence_stream_infer_client
和 simple_grpc_sequence_stream_infer_client
命名。
图像分类的示例以 image_client
命名。在 triton 运行后,就可以使用 image_client 向 triton 发送单个或多个图片的推理请求。
$ python image_client.py -m inception_graphdef -s INCEPTION qa/images/mug.jpg
Request 0, batch size 1
Image 'qa/images/mug.jpg':
0.826384 (505) = COFFEE MUG
默认情况下,image_client 会输出最有可能的分类,可以通过添加 -c 参数来查看分类的详情。
$ image_client -m inception_graphdef -s INCEPTION -c 3 qa/images/mug.jpg
Request 0, batch size 1
Image 'qa/images/mug.jpg':
0.754130 (505) = COFFEE MUG
0.157077 (969) = CUP
0.002880 (968) = ESPRESSO
可以使用 -b 参数指定 batch_size,即一次推理多少张图片。如果 batch_size 大于图片数量,会使用重复的图片补充。
$ image_client -m inception_graphdef -s INCEPTION -c 3 -b 2 qa/images/mug.jpg
Request 0, batch size 2
Image 'qa/images/mug.jpg':
0.754130 (505) = COFFEE MUG
0.157077 (969) = CUP
0.002880 (968) = ESPRESSO
Image 'qa/images/mug.jpg':
0.754130 (505) = COFFEE MUG
0.157077 (969) = CUP
0.002880 (968) = ESPRESSO
$ image_client -m inception_graphdef -s INCEPTION -c 3 -b 2 qa/images
Request 0, batch size 2
Image '/opt/tritonserver/qa/images/car.jpg':
0.819196 (818) = SPORTS CAR
0.033457 (437) = BEACH WAGON
0.031232 (480) = CAR WHEEL
Image '/opt/tritonserver/qa/images/mug.jpg':
0.754130 (505) = COFFEE MUG
0.157077 (969) = CUP
0.002880 (968) = ESPRESSO
Request 1, batch size 2
Image '/opt/tritonserver/qa/images/vulture.jpeg':
0.977632 (24) = VULTURE
0.000613 (9) = HEN
0.000560 (137) = EUROPEAN GALLINULE
Image '/opt/tritonserver/qa/images/car.jpg':
0.819196 (818) = SPORTS CAR
0.033457 (437) = BEACH WAGON
0.031232 (480) = CAR WHEEL