作为服务器的最重要任务,就是要接受来自不同终端所提出的各种请求,然后根据要求执行对应的计算,再将计算结果返回给终端。
当 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会出现以下的信息:
接下来就来说明这些参数的用途与用法。
用“-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 推理服务器所支持的模型列表:
这里显示有的 8 个推理模型,就是启动服务器时使用“--model-repository=”参数指定的模型仓内容,因此客户端使用“-m”参数指定的模型,必须是在这个表所列的内容之列,例如“-mdensenet_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 模型所返回的结果,分别如下:
虽然两个模型所得到的检测结果一致,但是二者所得到的置信度表达方式并不相同,而且标签编号并不一样(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.jpg4. 对文件夹所有图片进行推理
如果有多个要进行推理计算的标的物(图片),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 三种图片,如下:
执行后反馈的结果如下:
显示推理检测的结果是正确的!
5. 用“-b”参数指定批量处理的值
执行前面指令的结果可以看到“batch size 1”,表示用户端每次提交一张图片进行推理,所以出现 request1、request 2 与 request 3 总共提交三次请求。
现在既然有 3 张图片,可否一次提交 3 张图片进行推理呢?我们可以用“-b”参数来设定,如果将前面的指令中添加“-b3”这个参数,如下:
$ python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s inception ${home}/images -b 3现在显示的结果如下:
现在看到只提交一次“batch size 3”的请求,就能对三张图片进行推理。如果 batch 值比图片数量大呢?例如改成“-b 5”的时候,看看结果如何?如下:
现在可以看到所推理的图片数量是 5,其中 1/4、2/5 是同一张图片,表示重复使用了。这样就应该能清楚这个“batchsize”值的使用方式。
但如果这里将模型改成 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 个主要参数,对初学者来说是非常足够的,好好掌握这几个参数就已经能开始进行更多图像方面的推理实验。
推荐阅读
nvidia jetson nano 2gb 系列文章(1):开箱介绍
nvidia jetson nano 2gb 系列文章(2):安装系统
nvidia jetson nano 2gb 系列文章(3):网络设置及添加 swapfile 虚拟内存
nvidia jetson nano 2gb 系列文章(4):体验并行计算性能
nvidia jetson nano 2gb 系列文章(5):体验视觉功能库
nvidia jetson nano 2gb 系列文章(6):安装与调用摄像头
nvidia jetson nano 2gb 系列文章(7):通过 opencv 调用 csi/usb 摄像头
nvidia jetson nano 2gb 系列文章(8):执行常见机器视觉应用
nvidia jetson nano 2gb 系列文章(9):调节 csi 图像质量
nvidia jetson nano 2gb 系列文章(10):颜色空间动态调节技巧
nvidia jetson nano 2gb 系列文章(11):你应该了解的 opencv
nvidia jetson nano 2gb 系列文章(12):人脸定位
nvidia jetson nano 2gb 系列文章(13):身份识别
nvidia jetson nano 2gb 系列文章(14):hello ai world
nvidia jetson nano 2gb 系列文章(15):hello ai world 环境安装
nvidia jetson nano 2gb 系列文章(16):10行代码威力
nvidia jetson nano 2gb 系列文章(17):更换模型得到不同效果
nvidia jetson nano 2gb 系列文章(18):utils 的 videosource 工具
nvidia jetson nano 2gb 系列文章(19):utils 的 videooutput 工具
nvidia jetson nano 2gb 系列文章(20):“hello ai world” 扩充参数解析功能
nvidia jetson nano 2gb 系列文章(21):身份识别
nvidia jetson nano 2gb 系列文章(22):“hello ai world” 图像分类代码
nvidia jetson nano 2gb 系列文章(23):“hello ai world 的物件识别应用
nvidia jetson nano 2gb 系列文章(24): “hello ai world” 的物件识别应用
nvidia jetson nano 2gb 系列文章(25): “hello ai world” 图像分类的模型训练
nvidia jetson nano 2gb 系列文章(26): “hello ai world” 物件检测的模型训练
nvidia jetson nano 2gb 系列文章(27): deepstream 简介与启用
nvidia jetson nano 2gb 系列文章(28): deepstream 初体验
nvidia jetson nano 2gb 系列文章(29): deepstream 目标追踪功能
nvidia jetson nano 2gb 系列文章(30): deepstream 摄像头“实时性能”
nvidia jetson nano 2gb 系列文章(31): deepstream 多模型组合检测-1
nvidia jetson nano 2gb 系列文章(32): 架构说明与deepstream-test范例
nvidia jetson nano 2gb 系列文章(33): deepstream 车牌识别与私密信息遮盖
nvidia jetson nano 2gb 系列文章(34): deepstream 安装python开发环境
nvidia jetson nano 2gb 系列文章(35): python版test1实战说明
nvidia jetson nano 2gb 系列文章(36): 加入usb输入与rtsp输出
nvidia jetson nano 2gb 系列文章(37): 多网路模型合成功能
nvidia jetson nano 2gb 系列文章(38): nvdsanalytics视频分析插件
nvidia jetson nano 2gb 系列文章(39): 结合iot信息传输
nvidia jetson nano 2gb 系列文章(40): jetbot系统介绍
nvidia jetson nano 2gb 系列文章(41): 软件环境安装
nvidia jetson nano 2gb 系列文章(42): 无线wifi的安装与调试
nvidia jetson nano 2gb 系列文章(43): csi摄像头安装与测试
nvidia jetson nano 2gb 系列文章(44): jetson的40针引脚
nvidia jetson nano 2gb 系列文章(45): i2c总线与pioled
nvidia jetson nano 2gb 系列文章(46): 机电控制设备的安装
nvidia jetson nano 2gb 系列文章(47): 组装过程的注意细节
nvidia jetson nano 2gb 系列文章(48): 用键盘与摇杆控制行动
nvidia jetson nano 2gb 系列文章(49): 智能避撞之现场演示
nvidia jetson nano 2gb 系列文章(50): 智能避障之模型训练
nvidia jetson nano 2gb 系列文章(51): 图像分类法实现找路功能
nvidia jetson nano 2gb 系列文章(52): 图像分类法实现找路功能
nvidia jetson nano 2gb 系列文章(53): 简化模型训练流程的tao工具套件
nvidia jetson nano 2gb 系列文章(54):ngc的内容简介与注册密钥
nvidia jetson nano 2gb 系列文章(55):安装tao模型训练工具
nvidia jetson nano 2gb 系列文章(56):启动器cli指令集与配置文件
nvidia jetson nano 2gb 系列文章(57):视觉类脚本的环境配置与映射
nvidia jetson nano 2gb 系列文章(58):视觉类的数据格式
nvidia jetson nano 2gb 系列文章(59):视觉类的数据增强
nvidia jetson nano 2gb 系列文章(60):图像分类的模型训练与修剪
nvidia jetson nano 2gb 系列文章(61):物件检测的模型训练与优化
nvidia jetson nano 2gb 系列文章(62):物件检测的模型训练与优化-2
nvidia jetson nano 2gb 系列文章(63):物件检测的模型训练与优化-3
nvidia jetson nano 2gb 系列文章(64):将模型部署到jetson设备
nvidia jetson nano 2gb 系列文章(65):执行部署的 tensorrt 加速引擎
nvidia jetson 系列文章(1):硬件开箱
nvidia jetson 系列文章(2):配置操作系统
nvidia jetson 系列文章(3):安装开发环境
nvidia jetson 系列文章(4):安装deepstream
nvidia jetson 系列文章(5):使用docker容器的入门技巧
nvidia jetson 系列文章(6):使用容器版deepstream
nvidia jetson 系列文章(7):配置ds容器python开发环境
nvidia jetson 系列文章(8):用ds容器执行python范例
nvidia jetson 系列文章(9):为容器接入usb摄像头
nvidia jetson 系列文章(10):从头创建jetson的容器(1)
nvidia jetson 系列文章(11):从头创建jetson的容器(2)
nvidia jetson 系列文章(12):创建各种yolo-l4t容器
nvidia triton系列文章(1):应用概论
nvidia triton系列文章(2):功能与架构简介
nvidia triton系列文章(3):开发资源说明
nvidia triton系列文章(4):创建模型仓
nvidia triton 系列文章(5):安装服务器软件
nvidia triton 系列文章(6):安装用户端软件
原文标题:nvidia triton 系列文章(7):image_client 用户端参数
文章出处:【微信公众号:nvidia英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。
基于DSP和X5165芯片的非易失性数据存储设计
基于LM12CLK的100W音频放大器电路图
笔记本和台式机处理器差在哪 笔记本最常见的处理器都有哪些?
2021曙光区块链存储系统强势来袭
一文解读SDK中包含的实用性方法
NVIDIA Triton 系列文章(7):image_client 用户端参数
到2027年全球智能虚拟助手市场的复合年增长率将达34.0%
舆芯半导体成功完成近亿元天使轮融资,加强车规级MCU芯片技术研发实力
非接触式ic卡的优缺点
AMD锐龙5000系列台式机处理器带来更高的响应效率和更惊艳的视觉效果
电力监控系统的主要功能 电力系统的主要作用
数字化成汽车零部件发展趋势,数商云SRM系统库存管理模块助力企业转型升级
华为HMS Core 5.0上线,服务能力开放可覆盖七大领域
AI实现拐角处的实时汽车成像有什么意义
Excel新功能要逆天 微软把Python加入Excel
“站在后天看明天”:华为给金融广厦架起数字栋梁
给电动车充电,一定要做好这三点,电池续航更持久
LED照明灯的功率因数和功率因数补偿的关系解析
你会辨别ESD静电保护器的正负跟方向吗?
石墨烯材料纳米机器人可治理污染水体重金属