网易首页 > 网易号 > 正文 申请入驻

NVIDIA Triton 系列文章(8):用户端其他特性

0
分享至

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

  • 指定通信协议

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

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

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

这个范例支持两种通信协议,一开始先导入tritonclient.httptritonclient.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 代码内,获取功能与函数定义的细节。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女子称1000万存款被“诱导”购买基金亏损超500万,起诉银行一审被驳回!本人上诉

女子称1000万存款被“诱导”购买基金亏损超500万,起诉银行一审被驳回!本人上诉

红星新闻
2026-03-22 13:34:10
别骂了!都被高市早苗骗了,真相是她把特朗普耍了,成功救了日本

别骂了!都被高市早苗骗了,真相是她把特朗普耍了,成功救了日本

凡人说体育
2026-03-22 15:04:41
刘大锤直播曝白敬亭宋轶分手内幕:别墅里的小板车,搬不动的爱情

刘大锤直播曝白敬亭宋轶分手内幕:别墅里的小板车,搬不动的爱情

完善法
2026-03-12 11:41:14
清华大学今年起陆续出版61册思政课教学用书

清华大学今年起陆续出版61册思政课教学用书

中国青年报
2026-03-19 21:27:08
光刻机巨头开始慌了,中国造不成光刻机,但是要造一个光刻工厂!

光刻机巨头开始慌了,中国造不成光刻机,但是要造一个光刻工厂!

史智文道
2026-03-22 14:31:24
美国最担心的事发生了,伊朗亮出中国“底牌”,中国或成最大赢家

美国最担心的事发生了,伊朗亮出中国“底牌”,中国或成最大赢家

徐云流浪中国
2026-03-04 15:30:07
战争打到第22天:伊朗越打越有信心,战争再次验证了毛主席的论断

战争打到第22天:伊朗越打越有信心,战争再次验证了毛主席的论断

鸢飞九天
2026-03-21 18:42:32
广东91岁老人让儿子保管900多万养老钱,儿媳去世前却将300多万分给自己姐姐,老人瞬间傻眼,法院:钱是保管不是赠与,全额返还

广东91岁老人让儿子保管900多万养老钱,儿媳去世前却将300多万分给自己姐姐,老人瞬间傻眼,法院:钱是保管不是赠与,全额返还

观威海
2026-03-18 22:11:07
98岁祖母离世!多年不来往的娘家来了十几个人,网友:娘死等舅来

98岁祖母离世!多年不来往的娘家来了十几个人,网友:娘死等舅来

火山詩话
2026-03-21 10:20:37
你们看我像是个宅女吗?

你们看我像是个宅女吗?

飛娱日记
2026-03-21 08:34:14
美知情人士:美向中东增兵意在“打通”霍尔木兹海峡或夺岛

美知情人士:美向中东增兵意在“打通”霍尔木兹海峡或夺岛

财联社
2026-03-21 19:42:21
痛心!江西跑友刘涛去世,仅51岁,生前坚持晨跑,是3家公司老板

痛心!江西跑友刘涛去世,仅51岁,生前坚持晨跑,是3家公司老板

离离言几许
2026-02-25 10:43:45
3月21日23国罕见联手怒斥伊朗:霍尔木兹海峡不是你家后院!

3月21日23国罕见联手怒斥伊朗:霍尔木兹海峡不是你家后院!

Nee看
2026-03-22 14:19:44
他骗过斯大林和蒋介石两大枭雄,最后却亲手杀了毛主席的亲弟弟,下场极惨

他骗过斯大林和蒋介石两大枭雄,最后却亲手杀了毛主席的亲弟弟,下场极惨

历史回忆室
2026-03-22 00:09:05
马筱梅儿子姓氏已敲定,大名很特别,满月酒在台北办,张兰不出席

马筱梅儿子姓氏已敲定,大名很特别,满月酒在台北办,张兰不出席

手工制作阿歼
2026-03-22 17:13:55
正部级高官任上落马,此前曾受过党内处分

正部级高官任上落马,此前曾受过党内处分

中国新闻周刊
2026-03-21 17:11:03
书法对决!王洪文江青的字竟比颜真卿差那么多?

书法对决!王洪文江青的字竟比颜真卿差那么多?

书画相约
2026-03-17 08:44:28
月底有意外之喜的三个生肖,中奖发横财,财神爷找上门!

月底有意外之喜的三个生肖,中奖发横财,财神爷找上门!

毅谈生肖
2026-03-22 12:12:48
男子称在官网花1499元购买耐克篮球鞋,试穿时感觉右脚脚底偏硬,后发现气垫上下装反;平台客服:承认气垫装反问题,仅同意退货退款

男子称在官网花1499元购买耐克篮球鞋,试穿时感觉右脚脚底偏硬,后发现气垫上下装反;平台客服:承认气垫装反问题,仅同意退货退款

大风新闻
2026-03-22 12:54:11
美国商务部:在美国制裁下,中国别想制造出数量巨大的AI芯片

美国商务部:在美国制裁下,中国别想制造出数量巨大的AI芯片

李摻穷游天下
2026-03-22 17:54:54
2026-03-22 20:11:00
NVIDIA英伟达中国 incentive-icons
NVIDIA英伟达中国
英伟达(中国)官方账号
3462文章数 1444关注度
往期回顾 全部

科技要闻

嫌台积电太慢 马斯克要把芯片产能飙升50倍

头条要闻

以色列防空神话被击穿损失惨重核圈失守 伊朗表态

头条要闻

以色列防空神话被击穿损失惨重核圈失守 伊朗表态

体育要闻

郑钦文连续迎战大满贯冠军 “双教练”团队正式亮相

娱乐要闻

今晚首播!央视年代剧《冬去春来》来了

财经要闻

睡梦中欠债1.2万?这只“虾”杀疯了

汽车要闻

14.28万元起 吉利银河星耀8远航家开启预售

态度原创

艺术
旅游
游戏
教育
军事航空

艺术要闻

Alexander Bobrov | 印象风景写生(二)

旅游要闻

来城桥镇,请这样赏玉兰→

Bin哥自证世界第一上单引热议!BLG决战G2迎关键战

教育要闻

神奇的父子定律,准到让人惊叹

军事要闻

伊导弹击中以核设施附近 爆炸视频公布

无障碍浏览 进入关怀版