NVIDIA Triton系列07-image_client 用户端参数

简介: 本文详细介绍了NVIDIA Triton推理服务器的Python版image_client.py用户端参数,通过具体实例演示了如何使用这些参数与Triton服务器交互,包括指定服务器地址、选择模型、设置图像缩放方式、批量处理图片等关键操作,为初学者提供了实用的指导。实验环境搭建在Jetson AGX Orin和树莓派上,确保了内容的实践性和可操作性。

NVIDIA Triton系列07-image_client 用户端参数

B站:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com)

博客:肆十二-CSDN博客

问答:(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com)

作为服务器的最重要任务,就是要接受来自不同终端所提出的各种请求,然后根据要求执行对应的计算,再将计算结果返回给终端。

当 Triton 推理服务器运行起来之后,就进入等待请求的状态,因此我们所要提出的请求内容,就必须在用户端软件里透过参数去调整请求的内容,这部分在 Triton 相关使用文件中并没有提供充分的说明,因此本文的重点就在于用 Python 版的 image_client.py 来说明相关参数的内容,其他用户端的参数基本上与这个端类似,可以类比使用。

本文的实验内容,是将 Triton 服务器安装在 IP 为 192.168.0.10 的 Jetson AGX Orin 上,将 Triton 用户端装在 IP 为 192.168.0.20 的树莓派上,读者可以根据已有的设备资源自行调配。

在开始进行实验之前,请先确认以下两个部分的环境:

在服务器设备上启动 Triton 服务器,并处于等待请求的状态:

如果还没启动的话,请直接执行以下指令:

# 根据实际的模型仓根目录位置设定TRITON_MODEL_REPO路径$ export TRITON_MODEL_REPO=${HOME}/triton/server/docs/examples/model_repository执行Triton服务器$ docker run --rm --net=host -v ${TRITON_MODEL_REPO}:/models nvcr.io/nvidia/tritonserver:22.09-py3 tritonserver --model-repository=/models

在用户端设备下载 Python 的用户端范例,并提供若干张要检测的图片:

先执行以下指令,确认Triton服务器已经正常启动,并且从用户端设备可以访问:

$ curl -v 192.168.0.10:8000/v2/health/ready

只要后面出现的信息中有“HTTP/1.1 200 OK”部分,就表示一切正常。

如果还没安装 Triton 的 Python 用户端环境,并且还未下载用户端范例的话,请执行以下指令:

$ cd ${HOME}/triton$ git clone https://github.com/triton-inference-server/client$ cd client/src/python/examples# 安装 Triton 的 Python用户端环境$ pip3 install tritonclient[all] attrdict -i https://pypi.tuna.tsinghua.edu.cn/simple

最后记得在用户端设备上提供几张图片,并且放置在指定文件夹(例如~/images)内,准备好整个实验环境,就可以开始下面的说明。

现在执行以下指令,看一下 image_client 这个终端的参数列表:

$ python3 image_client.py

会出现以下的信息:

img

接下来就来说明这些参数的用途与用法。

用“-u”参数对远程服务器提出请求:

如果用户端与服务器端并不在同一台机器上的时候,就可以用这个参数对远程 Triton 服务器提出推理请求,请执行以下指令:

$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images/mug.jpg

由于 Triton 的跨节点请求主要透过 HTTP/REST 协议处理,需要透过 8000 端口进行传输,因此在“-u”后面需要接上“IP:8000”就能正常使用。

请自行检查回馈的计算结果是否正确!

2. 用“-m”参数去指推理模型:

从“python3 image_client.py”所产生信息的最后部分,可以看出用“-m”参数去指定推理模型是必须的选项,但是可以指定哪些推理模型呢?就得从 Triton 服务器的启动信息中去寻找答案。

下图是本范例是目前启动的 Triton 推理服务器所支持的模型列表:

img

这里显示有的 8 个推理模型,就是启动服务器时使用“--model-repository=”参数指定的模型仓内容,因此客户端使用“-m”参数指定的模型,必须是在这个表所列的内容之列,例如“-m densenet_onnx”、“-m inception_graphdef”等等。

现在执行以下两道指令,分别看看使用不同模型所得到的结果有什么差异:

$ python3 image_client.py -m densenet_onnx -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images/mug.jpg$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images/mug.jpg

使用 densenet_onnx 模型与 inception_graphdef 模型所返回的结果,分别如下:

img

虽然两个模型所得到的检测结果一致,但是二者所得到的置信度表达方式并不相同,而且标签编号并不一样(504 与 505)。

这个参数后面还可以使用“-x”去指定“版本号”,不过目前所使用的所有模型都只有一个版本,因此不需要使用这个参数。

3. 使用“-s”参数指定图像缩放方式:

有些神经网络算法在执行推理之前,需要对图像进行特定形式的缩放(scaling)处理,因此需要先用这个参数指定缩放的方式,如果没有指定正确的模式,会导致推理结果的错误。目前这个参数支持{NONE, INSPECTION, VGG}三个选项,预设值为“NONE”。

在本实验 Triton 推理服务器所支持的 densenet_onnx 与 inception_graphdef 模型,都需要选择 INSPECTION 缩放方式,因此执行指令中需要用“-s INSPECTION”去指定,否则会得到错误的结果。

请尝试以下指令,省略前面指定中的“-s INSPECTION”,或者指定为 VGG 模式,看看结果如何?

$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s VGG ${HOME}/images/mug.jpg

4. 对文件夹所有图片进行推理

如果有多个要进行推理计算的标的物(图片),Triton 用户端可用文件夹为单位来提交要推理的内容,例如以下指令就能一次对 ${HOME}/images 目录下所有图片进行推理:

$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images

例如我们在文件夹中准备了 car.jpg、mug.jpg、vulture.jpg 三种图片,如下:

img

执行后反馈的结果如下:

img

显示推理检测的结果是正确的!

5. 用“-b”参数指定批量处理的值

执行前面指令的结果可以看到“batch size 1”,表示用户端每次提交一张图片进行推理,所以出现 Request 1、Request 2 与 Request 3 总共提交三次请求。

现在既然有 3 张图片,可否一次提交 3 张图片进行推理呢?我们可以用“-b”参数来设定,如果将前面的指令中添加“-b 3”这个参数,如下:

$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images -b 3

现在显示的结果如下:

img

现在看到只提交一次“batch size 3”的请求,就能对三张图片进行推理。如果 batch 值比图片数量大呢?例如改成“-b 5”的时候,看看结果如何?如下:

img

现在可以看到所推理的图片数量是 5,其中 1/4、2/5 是同一张图片,表示重复使用了。这样就应该能清楚这个“batch size”值的使用方式。

但如果这里将模型改成 densenet_onnx 的时候,执行以下指令:

$ python3 image_client.py -m densenet_onnx -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images -b 3

会得到“ERROR: This model doesn\'t support batching.”的错误信息,这时候就回头检查以下模型仓里 densenet_onnx 目录下的 config.pbtxt 配置文件,会发现里面设置了“max_batch_size : 0”,并不支持批量处理。

而 inception_graphdef 模型的配置文件里设置“max_batch_size : 128”,如果指令给定“-b”参数大于这个数值,也会出现错误信息。

6. 其他:

另外还有指定通讯协议的“-i”参数、使用异步推理 API 的“-a”参数、使用流式推理 API 的“--streaming”参数等等,属于较进阶的用法,在这里先不用过度深入。

以上所提供的 5 个主要参数,对初学者来说是非常足够的,好好掌握这几个参数就已经能开始进行更多图像方面的推理实验。

目录
相关文章
|
17天前
|
人工智能 Linux 测试技术
NexaAI, 一行命令运行魔搭社区模型,首次在设备上运行 Qwen2-Audio
Qwen2-Audio是一个 70亿参数量 SOTA 多模态模型,可处理音频和文本输入。
|
7月前
ModelScope中swft app-ui 命令怎么开启推理日志?
ModelScope中swft app-ui 命令怎么开启推理日志?【1月更文挑战第4天】【1月更文挑战第19篇】
57 1
|
人工智能 搜索推荐 物联网
EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!
EasyPhoto 是一个基于 SD WebUI 的艺术照生成开源插件。允许用户通过上传几张同一个人的照片,快速训练Lora模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。诚邀开发者们一起体验,多多提ISSUE,一同优化,让每个AIGCer都拥有自己的AI写真相机!
EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!
|
7月前
|
并行计算 Linux Docker
Docker【部署 07】镜像内安装tensorflow-gpu及调用GPU多个问题处理Could not find cuda drivers+unable to find libcuda.so...
Docker【部署 07】镜像内安装tensorflow-gpu及调用GPU多个问题处理Could not find cuda drivers+unable to find libcuda.so...
725 0
|
4月前
|
API
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
|
2月前
|
存储 并行计算 C++
NVIDIA Triton系列08-用户端其他特性
本文详细解析了NVIDIA Triton开源项目的image_client.py示例代码,涵盖指定通信协议(HTTP与gRPC)、调用异步模式与数据流处理、以及使用共享内存等核心功能,为开发者提供撰写Triton用户端应用的指导。通过具体代码示例,帮助读者理解如何高效利用Triton服务器进行模型推理。
54 1
NVIDIA Triton系列08-用户端其他特性
|
2月前
|
Ubuntu API Python
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
76 1
|
4月前
|
Java 容器
【Azure 媒体服务】记使用 Media Service 的官网示例代码 Audio Analyzer 出现卡顿在 Creating event processor host .. 直到 Timeout 问题
【Azure 媒体服务】记使用 Media Service 的官网示例代码 Audio Analyzer 出现卡顿在 Creating event processor host .. 直到 Timeout 问题
|
5月前
|
机器学习/深度学习 缓存 运维
函数计算产品使用问题之如何解决SD中安装了ebsynth_utility插件但在webui中没有入口的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
135 4
|
4月前
|
缓存 Java API
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数