NVIDIA Triton系列08-用户端其他特性

TensorRT&Triton学习笔记(一):triton和模型部署+client 前言 先介绍TensorRT、Triton的关系和区别: TensorRT:为inference(推理)为生,是NVIDIA研发的一款针对深度学习模型在GPU上的计算,显著提高GPU上的模型推理性能。即一种专门针对高性能推理的模型框架,也可以解析其他框架的模型如tensorflow、torch。 主要优化手段如下: Triton:类似于TensorFlow Serving,但triton包括server和client。 triton serving能够实现不同模型的统一部署和服务,提供http和grpc协 阅读详情

NVIDIA Triton系列08-用户端其他特性

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

博客:肆十二-优快云博客

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

前面文章用 Triton 开源项目提供的 image_client.py 用户端作示范,在这个范例代码里调用大部分 Triton 用户端函数,并使用多种参数来配置执行的功能,本文内容就是简单剖析 image_client.py 的代码,为读者提供撰写 Triton 用户端的流程。

指定通信协议

为了满足大部分网路环境的用户端请求,Triton 在服务器与用户端之间提供 HTTP 与 gRPC 两种通信协议,如下架构图所示:

img

当我们启动 Triton 服务器之后,最后状态会停留在如下截屏的地方:

img

显示的信息表示,系统提供 8001 端口给 gRPC 协议使用、提供 8000 端口给 HTTP 协议使用。此时服务器处于接收用户端请求的状态,因此“指定通信协议”是执行 Triton 用户端的第一个工作。

这个范例支持两种通信协议,一开始先导入 tritonclient.http 与 tritonclient.grpc 两个模块,如下:

import tritonclient.grpc as grpcclientimport tritonclient.http as httpclient

代码使用“-i”或“–protocal”其中一种参数指定“HTTP”或“gRPC”协议类型,如果不指定就使用“HTTP”预设值。再根据协议种类调用 httpcclient.InferenceServerClient() 或 grpcclient.InferenceServerClient() 函数创建 triton_client 对象,如下所示:

try: if FLAGS.protocol.lower() == “grpc”: # Create gRPC client for communicating with the server triton_client = grpcclient.InferenceServerClient( url=FLAGS.url, verbose=FLAGS.verbose) else: # Specify large enough concurrency to handle the # the number of requests. concurrency = 20 if FLAGS.async_set else 1 triton_client = httpclient.InferenceServerClient( url=FLAGS.url, verbose=FLAGS.verbose, concurrency=concurrency)

最后启用 triton_client.infer() 函数对 Triton 服务器发出推理要求,当然得将所需要的参数提供给这个函数,如下所示:

responses.append( triton_client.infer(FLAGS.model_name, inputs, request_id=str(sent_count), model_version=FLAGS.model_version, outputs=outputs))

不过 image_client.py 代码中并未设定 gRPC 所需要的 8001 端口,因此使用这个通讯协议时,需要用“-u”参数设定**“IP:端口”**,例如下面指令:

$ python3 image_client.py -m inception_graphdef -s INCEPTION VGG ${HOME}/images/mug.jpg -i GRPC -u <服务器IP>:8001

‍在 examples 范例目录下还有 20 个基于 gRPC 协议的范例以及 10 个基于 HTTP 协议的范例,则是在代码内直接指定个别通信协议与端口号的范例,读者可以根据需求去修改特定的范例代码。

调用异步模式(async mode)与数据流(streaming)

大部分读者比较熟悉的并行计算模式,就是在同一个时钟脉冲(clock puls)让不同计算核执行相同的工作,也就是所谓的 SIMD(单指令多数据)并行计算,通常适用于数据量大而且持续的密集型计算任务。

对 Triton 推理服务器而言,并不能确认所收到的推理要求是否为密集型的计算。事实上很大比例的推理要求是属于零碎型计算,这种状况下调用“异步模式”会让系统更加有效率,因为它允许不同计算核(线程)在同一个时钟脉冲段里执行不同指令,这样能大大提高执行弹性进而优化计算性能。

当 Triton 服务器端启动之后,就能接收来自用户端的“异步模式”请求,不过在 HTTP 协议与 gRPC 协议的处理方式不太一样。

在代码中用 httpclient.InferenceServerClient() 函数创建 HTTP 的 triton_client 对象时,需要给定**“concurrnecy(并发数量)”**参数,而创建 gRPC 的用户端时就不需要这个参数。

调用异步模式有时会需要搭配数据流(stream)的处理器(handle),因此在实际推理的函数就有 triton_client.async_infer() 与 triton_client.async_stream_infer() 两种,使用 gRPC 协议创建的 triton_client,在调用无 stream 模式的 async_infer() 函数进行推理时,需要提供 partial(completion_callback, user_data) 参数。

由于异步处理与数据流处理有比较多底层线程管理的细节,初学者只需要范例目录下的代码,包括 image_client.py 与两个 simple_xxxx_async_infer_client.py 的代码就可以,细节部分还是等未来更熟悉系统之后再进行深入。

使用共享内存(share memory)

如果发起推理请求的 Triton 用户端与 Triton 服务器在同一台机器时,就可以使用共享内存的功能,这包含一般系统内存与 CUDA 显存两种,这项功能可以非常高效地降低数据传输的开销,对提升推理性能有明显的效果。

在 image_client.py 范例中并未提供这项功能,在 Python 范例下有 6 个带有“shm”文件名的代码,就是支持共享内存调用的范例,其中 simple_http_shm_client.py 与 simple_grpc_shm_client.py 为不同通信协议提供了使用共享系统内存的代码,下面以 simple_grpc_shm_client.py 内容为例,简单说明一下主要执行步骤:

# 1.为两个输入张量创建数据:第1个初始化为一整数、第2个初始化为所有整数 input0_data = np.arange(start=0, stop=16, dtype=np.int32) input1_data = np.ones(shape=16, dtype=np.int32) input_byte_size = input0_data.size * input0_data.itemsize output_byte_size = input_byte_size# 2. 为输出创建共享内存区域,并存储共享内存管理器 shm_op_handle = shm.create_shared_memory_region(“output_data”, “/output_simple”, output_byte_size * 2)# 3.使用Triton Server注册输出的共享内存区域 triton_client.register_system_shared_memory(“output_data”, “/output_simple”, output_byte_size * 2)# 4. 将输入数据值放入共享内存 shm_ip_handle = shm.create_shared_memory_region(“input_data”, “/input_simple”, input_byte_size * 2)# 5. 将输入数据值放入共享内存 shm.set_shared_memory_region(shm_ip_handle, [input0_data]) shm.set_shared_memory_region(shm_ip_handle, [input1_data], offset=input_byte_size)# 6. 使用Triton Server注册输入的共享内存区域 triton_client.register_system_shared_memory(“input_data”, “/input_simple”, input_byte_size * 2)# 7. 设置参数以使用共享内存中的数据 inputs = [] inputs.append(grpcclient.InferInput(‘INPUT0’, [1, 16], “INT32”)) inputs[-1].set_shared_memory(“input_data”, input_byte_size) inputs.append(grpcclient.InferInput(‘INPUT1’, [1, 16], “INT32”)) inputs[-1].set_shared_memory(“input_data”, input_byte_size, offset=input_byte_size) outputs = [] outputs.append(grpcclient.InferRequestedOutput(‘OUTPUT0’)) outputs[-1].set_shared_memory(“output_data”, output_byte_size) outputs.append(grpcclient.InferRequestedOutput(‘OUTPUT1’)) outputs[-1].set_shared_memory(“output_data”, output_byte_size, offset=output_byte_size) results = triton_client.infer(model_name=model_name, inputs=inputs, outputs=outputs)# 8. 从共享内存读取结果 output0 = results.get_output(“OUTPUT0”)

至于范例中有两个 simple_xxxx_cudashm_client.py 这是针对 CUDA 显存共享的返利代码,主要逻辑与上面的代码相似,主要将上面“shm.”开头的函数改成“cudashm.”开头的函数,当然处理流程也更加复杂一些,需要有足够 CUDA 编程基础才有能力驾驭,因此初学者只要大致了解流程就行。

以上就是 Triton 用户端会用到的基本功能,不过缺乏足够的说明文件,因此其他功能函数的内容必须自行在开源文件内寻找,像 C++ 版本的功能得在 src/c++/library 目录下的 common.h、grpc_client.h 与 http_client.h 里找到细节,Python 版本的函数分别在 src/python/library/triton_client 下的 grpc、http、utils 下的 init.py 代码内,获取功能与函数定义的细节。

Triton部署Torch和Onnx模型,集成数据预处理 使用Triton Inference Server对torch模型和onnx模型进行简单部署,并将数据预处理集成在triton中 阅读详情

相关推荐

运行 Triton 示例

NVIDIA Triton 推理服务器 提供针对 CPU 和 GPU 优化的云和边缘推理解决方案。

chenjambo的博客 2366

tritonserver学习之九:tritonserver grpc异步模式

gRPC的异步模式允许服务器同时处理多个客户端请求,而不会因等待某个请求的响应而阻塞其他请求的处理。这使得TritonServer能够充分利用系统资源,提高并发性能,从而能够更高效地处理大量的模型推理请求。:在异步模式下,服务器不会为每个请求创建单独的线程或进程,而是将请求放入队列中,并通过事件循环机制来处理这些请求。这减少了系统资源的开销,使得TritonServer能够在有限的资源下处理更多的请求。

liupenglove的专栏 3770

Triton 模型推理使用案例、tritonclient https,grpc访问;导出onnx指定输入维度可变dynamic_axes

参考:https://www.cnblogs.com/infgrad/p/16283130.html https://www.bilibili.com/video/BV1ET411G7zV参考:https://github.com/triton-inference-server/server/blob/main/docs/quickstart.md **我测试安装的是nvcr.io/nvidia/tritonserver:20.09-py3 首先可以看到densenet_onnx的config.pbtxt

weixin_42357472的博客 3866

Triton Inference Server HTTP/GRPC接口实战:构建高并发推理服务

在大规模深度学习推理场景中,你是否面临以下痛点: - 高并发请求下的吞吐量瓶颈 - 多模型部署的资源竞争问题 - 不同客户端框架的兼容性障碍 - 推理延迟波动影响用户体验 本文将系统介绍如何利用Triton Inference Server(以下简称Triton)的HTTP/GRPC接口构建企业级高并发推理服务,读完后你将掌握: - Triton接口协议的核心设计与性能特性 - HTTP/GRP...

gitblog_00391的博客 1256

基于一维卷积神经网络对机械振动信号进行分类并加以预测

基于一维卷积神经网络对机械振动信号进行分类并加以预测 *使用一维卷积神经网络训练振动信号进行二分类 2020年7月16日,一学期没等到开学,然而又放假了。 总览优快云中大多数卷积神经网络都是对二维图片进行分类的,而图片也都是常见的猫狗分类,minst手写数字分类。一维卷积神经网络的使用非常少见,有也是IDMB情感分类,和鸢尾花分类的。 作者研究生就读于河北一所双飞,全国排名270多,哈哈哈,不吹不黑。 在网上翻来翻去找不到一篇可以利用的代码去研究我的机械故障诊断,后来在无奈下到某宝搜寻到一段代码,可以利用

qq_45714906的博客 1万+

Bertopic库安装(二)

Bertopic库安装

weixin_43392789的博客 4893

Triton推理服务器中的协议与API详解

Triton推理服务器作为高性能推理服务解决方案,提供了多种通信协议和API接口,以满足不同场景下的推理需求。本文将深入解析Triton支持的协议类型、使用场景以及相关配置选项,帮助开发者更好地理解和应用这些功能。 ## 主要通信协议 ### 1. HTTP/REST协议 HTTP/REST协议基于KServe项目提出的标准推理协议实现,具有以下特点: - 采用标准的HTTP请求/响应模式...

gitblog_00347的博客 551

NVIDIA B300 vs B200:详细解析与性能对决

详细解析 NVIDIA B300 整机)的性能,并与前代的 B200 进行对比。它不仅在核心计算能力(FP8)上实现了飞跃,更重要的是通过革命性的第二代 Transformer Engine 和第五代 NVLink 技术,彻底重塑了大规模 AI 模型训练和推理的效率与规模上限。其显存容量和带宽的巨大提升也为处理超大型模型和数据提供了坚实基础。与 B200 相比,B300 是一次全面的、代际性的性能跃升,特别适合那些需要处理最前沿、最复杂 AI 和科学计算任务的用户和组织。

2401_89353317的博客 3042

Triton Inference Server gRPC连接池配置:优化客户端资源使用

在高并发AI推理场景中,gRPC作为Triton Inference Server(推理服务器)的主要通信协议,其连接管理策略直接影响系统吞吐量与资源利用率。大多数开发者在使用Triton客户端时,往往忽视连接池配置的重要性,导致频繁创建/销毁连接带来的性能损耗(平均每次TCP握手耗时约300ms)和资源泄露风险。本文将系统解析Triton gRPC连接池的实现机制,提供从基础配置到高级调优的完整...

gitblog_00455的博客 811

1、vectorCast单元测试常用操作

进入软件主页面,点击file,选择set working directory,随便选择一个保存该项目的目录即可。

weixin_59334478的博客 2156

rknn-toolkit推理yolov5-face.rknn模型--python代码

import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THR.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3079

深度学习部署神器——triton inference server入门教程指北

triton作为一个NVIDIA开源的商用级别的服务框架,个人认为很好用而且很稳定**,API接口的变化也不大,我从2020年的20.06切换到2022年的22.06,两个大版本切换,一些涉及到代码的工程变动很少,稍微修改修改就可以直接复用,很方便。 > 本系列讲解的版本也是基于22.06。

老潘的博客 7217

YOLO 线性小目标涨点|3890 张输电导线散股 VOC+YOLO 单类别数据集实战,无人机电力缺陷巡检全流程落地

架空输电导线是电网能量传输核心载体,长期受风力摆动、雷击、腐蚀、外力撞击作用,外层铝股极易出现断裂散股故障。导线散股初期仅少量铝丝开裂,肉眼与无人机远距离航拍下属于细长微弱线性小目标;若未及时发现,散股会持续扩张,引发导线过热、断线、大面积停电重大电力安全事故。传统人工巡检存在多重行业痛点:山区、跨江河线路人员无法攀爬登杆,高空作业人身坠落风险极高;无人机单次航拍产出数千张高清图片,人工逐帧筛查微小散股耗时 3-5 天,阴天、逆光、植被遮挡场景漏检率超 45;

lin_xiu的博客 52

基于LMDeploy部署大模型和量化

LMDeploy 是LLM在英伟达设备上部署的全流程解决方案。包括模型轻量化、推理和服务。核心功能-量化核心功能-推理引擎TurboMind核心功能-推理服务。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 2307

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

3.python3 使用tritonclient

根据我的测试,grpc方式调用triton的性能远远高于http方式,在极端情况下甚至可以达到十倍的性能差距,因此如果没有特殊需要,我不建议使用http方式调用。如果报如下错误ModuleNotFoundError: No module named 'tritonclient',则使用。triton python client的安装非常简单,使用如下方式即可,如果你只使用http或grpc方式调用,可以将。这样可以确保你的依赖被安装到你使用的python环境中。

天启的博客 3964

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

tritonserver学习之八:redis_caches实践

triton redis_cache实践

liupenglove的专栏 1502

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

通用大模型应用研究五:model services

大模型部署

yunxinan的专栏 1287

triton 部署yolov5模型

triton 部署yolov5模型

what_wrong的博客 1351

深度学习模型部署-triton

链接:https://www.zhihu.com/question/517971355/answer/2721126560老潘用triton有两年多了,一直想写个教程给大家。顺便自己学习学习,拖了又拖,趁着这次换版本的机会,终于有机会了写了。triton作为一个NVIDIA开源的商用级别的服务框架,个人认为很好用而且很稳定,API接口的变化也不大,我从2020年的20.06切换到2022年的22.06,两个大版本切换,一些涉及到代码的工程变动很少,稍微修改修改就可以直接复用,很方便。本系列讲解重点是结合实际

张伟的专栏 2355

Triton Inference Server 快速上手指南(2.40版本 预计12月写完)

文章目录1.介绍2.server端部署流程2.1安装2.2运行2.3验证3.client端部署流程3.1安装3.2运行3.3验证 1.介绍 公司项目中需要做AI云平台的部署,一开始尝试Paddle serving做云端部署,发现很不稳定,QPS也比较低,准备换英伟达平台尝试一下,这篇旨在上手使用,更多需求请查看官方文档: https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/index.html 推荐上手项目

qq_38032876的博客 1万+

简析gRPC client 连接管理

简析gRPC client 连接管理 背景 客户端skd 使用gRPC作为通信协议,定时(大概是120s)向服务器发送pingServer 请求。 服务端是80端口,如xxx:80. 问题 发现客户端不断的端口重连服务器的。 使用netstat -antp 如图, 如标红的服务器地址连接是TIME_WAIT,后面有和服务器建立连接 ...

weixin_33806300的博客 7122
上一篇: NVIDIA Triton系列07-image_client 用户端参数
下一篇: CVPR2024 医学图像相关论文
肆十二
肆十二 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆十二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值