• 运行 Triton 示例


    安装 Triton Docker 镜像

    在拉取镜像前,需要安装 DockerNVIDIA Container Toolkit

    用以下命令拉取镜像

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

    其中 为镜像的版本,可在 NVIDIA NGC 上获得
    在这里插入图片描述

    准备示例模型库

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

    运行 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
    
    • 1

    启动 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    验证 Triton 是否正常运行

    在服务器新开一个终端,使用 curl 从 HTTP 接口请求 triton 的状态

    $ curl -v localhost:8000/v2/health/ready
    ...
    < HTTP/1.1 200 OK
    < Content-Length: 0
    < Content-Type: text/plain
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果 HTTP 返回 200 说明服务器运行正常

    获取客户端库和示例

    从 Github 拉取客户端储存库

    $ git clone https://github.com/triton-inference-server/client.git
    
    • 1

    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]
    
    • 1
    • 2

    将会安装以下组件:

    • 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
    
    • 1
    • 2

    从 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
    
    • 1
    • 2

    示例应用程序

    以下介绍几个示例应用

    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
    
    • 1
    • 2
    • 3
    • 4

    默认情况下,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可以使用 -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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序
    刷题记录:牛客NC18264斐波那契
    前端+后端项目 - 论坛信息管理系统(Web+servlet+MySQL+JDBC)
    语雀突发 P0 级事故!宕机 8 小时被网友怒喷,运维又背锅?
    MATLAB | solve函数求解析解时不支持分段函数的解决方案
    DNS域名解析服务
    NOIP2023模拟1联测22 黑暗料理
    Failed to restart **: Unit **.service not found错误,
    电线延长寿命小妙招
    node 解决多版本配置 error:03000086:digital 引起的问题 已解决
  • 原文地址:https://blog.csdn.net/chenjambo/article/details/126282719