运行 Triton 示例

安装 Triton Docker 镜像

在拉取镜像前,需要安装 Docker 和 NVIDIA Container Toolkit。

用以下命令拉取镜像

$ docker pull nvcr.io/nvidia/tritonserver:<xx.yy>-py3

其中 为镜像的版本,可在 NVIDIA NGC 上获得
运行 Triton 示例_第1张图片

准备示例模型库

模型库是一个目录,里面以一定的结构储存着数个模型。官方的示例模型库在 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

使用以下命令启动 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

验证 Triton 是否正常运行

在服务器新开一个终端,使用 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 的共享内存传递数据。

用 Python Pip 下载库

用最新版 pip 安装

$ pip install pip --upgrade
$ pip install tritonclient[all]

将会安装以下组件:

  • http
  • grpc [ service_pb2, service_pb2_grpc, model_config_pb2]
  • utils [ Linux 发行版将包括 shared_memorycuda_shared_memory]

Linux 版还将包括 perf_analyzer 可执行文件。perf_analyzer 基于 Ubuntu 20.04 构建,在其他平台可能无法运行,需要安装以下依赖

$ sudo apt update
$ sudo apt install libb64-dev

从 Github 下载库

客户端库和 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

示例应用程序

以下介绍几个示例应用

Byte/String 数据类型

有些模型支持 tensors ,其中 tensors 的每个元素都是可变长度的二进制数据(binary data),在客户端中,此数据类型为 Bytes。(有关支持的数据类型详见: Datatypes)

Python 使用 numpy 库来表示 tensors 。对于 BYTES tensors ,numpy array 的 dtype 为 np.object_ 。

有关的示例文件以 simple_http_string_infer_clientsimple_grpc_string_infer_client 命名。

系统共享内存

在一些情况,使用系统共享内存传输数据可显著提高性能。

有关的示例文件以 simple_http_shm_clientsimple_grpc_shm_client 命名。

由于 Python 没有分配和使用共享内存的标准方法,因此提供了一个简单的系统共享内存模块。

CUDA 共享内存

在一些情况,使用 CUDA 共享内存传输数据可显著提高性能。

有关的示例文件以 simple_http_cudashm_clientsimple_grpc_cudashm_clien 命名。

由于 Python 没有分配和使用共享内存的标准方法,因此提供了一个简单的 CUDA 共享内存模块。

Stateful Models

在使用 Stateful Models 进行推理时,客户端需要标记哪些推理请求属于同一列队,以及列队的开始和结束。

每个列队都有一个唯一 ID ,由客户端创建,并在推理时提供给 triton。每个列队的第一个请求要被标记为列队的开始,最后一个则标记为结束。

有关的示例文件以 simple_http_sequence_stream_infer_clientsimple_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

你可能感兴趣的:(nvidia,triton)