首页/新闻资讯/正文详情

Triton Inference Server 二进制张量数据扩展(Binary Tensor Data Extension)协议完全指南

发布时间:2026/9/23 23:47:55 来源:云帆数科 栏目:资讯中心
Triton Inference Server 二进制张量数据扩展(Binary Tensor Data Extension)协议完全指南
模型推理服务AI 应用后端【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址https://gitcode.com/gh_mirrors/server117/server点击查看免费下载本指南系统讲解 Triton Inference Server 的binary_tensor_data扩展如何在 HTTP/REST 推理请求与响应中以二进制形式传输张量数据包括binary_data_size、binary_data、binary_data_output三个核心参数的使用方式、Inference-Header-Content-Length头的语义以及不携带推理头 JSON 的 Raw Binary 请求模式。读完本文你将能够手写任意数据类型的二进制推理请求、正确解析二进制响应并理解该扩展在 src/http_server.cc 中的底层实现与边界校验逻辑。一、扩展概述为什么需要二进制张量数据Triton Inference Server 默认通过 HTTP/REST 的 JSON 表示来承载张量数据每个输入/输出张量的数据都以数组形式嵌入 JSON 对象。当张量元素数量庞大例如图像、嵌入向量、大 Batch 推理结果时JSON 文本编码会带来双重开销——datatype到文本的转换开销与体积膨胀。Binary Tensor Data Extension 允许在 HTTP 请求/响应体中在 JSON 对象之后直接追加一段原始二进制数据来承载张量内容从而消除 JSON 数组中数字到文本的编解码开销大幅缩减请求/响应体体积数值类型二进制表示通常比文本表示小 35 倍保持 HTTP/REST 协议的简单性同时获得接近 gRPC 的传输效率。由于该扩展受支持Triton 会在其 Server Metadata 的extensions字段中报告binary_tensor_data客户端可据此探测服务器能力。二、二进制数据的组织方式与编码规则当张量以二进制形式传输时数据遵循以下严格的组织约定由 src/http_server.cc 中CheckBinaryInputData/ReadDataFromJson/WriteDataToJson等实现印证字节序小端序little-endian内存布局按行主序row-major连续排列元素之间无 stride、无 padding数据类型所有支持的数据类型都以该类型的原生字节宽度表示BOOL 类型true为单个值为1的字节false为单个值为0的字节BYTES 类型每个元素由「4 字节无符号整数长度 实际字节内容」组成即每个元素都带有一个uint32长度前缀。BYTES 类型的这一编码在响应序列化中有直接证据src/http_server.cc的WriteDataToJson分支针对TRITONSERVER_TYPE_BYTES逐元素读取uint32_t长度前缀后再取对应字节在 qa/L0_http/http_test.py 的test_byte用例中客户端解析原始二进制输出时也通过r.content[header_size 4:]跳过 4 字节长度前缀来还原字符串。三、三个核心参数详解二进制扩展通过请求 JSON 中的parameters字段控制数据传输方式共涉及三个参数1.binary_data_sizeint64——输入/输出张量以二进制发送出现在$request_input请求输入与$response_output响应输出的parameters中表示该张量二进制数据占用的字节数。只要该参数存在即宣告该张量以二进制形式传递。从源码看src/http_server.cc 的CheckBinaryInputData约 L944-963在输入的parameters中查找binary_data_size将其解析为无符号整数作为byte_size一旦命中即置is_binary true而ValidateInputContentType约 L1045-1085强制要求每个输入在dataJSON 内联数据、binary_data_size二进制数据、shared_memory_region共享内存三者中只能且必须设置一个否则返回INVALID_ARG错误。2.binary_databool——指定某个输出以二进制返回出现在$request_output的parameters中取值为true表示该输出应返回二进制数据false或省略表示该输出以 JSON 返回。对应的CheckBinaryOutputDatasrc/http_server.cc L965-981解析该布尔值同时ValidateOutputParameter约 L1087-1119校验输出不能同时设置shared_memory_region与binary_data: true否则报错。3.binary_data_outputbool——请求级全局默认出现在$inference_request顶层的parameters中为true时表示所有输出默认以二进制返回除非某个输出通过自身的binary_data参数覆盖此设置。源码中ParseJsonTritonParamssrc/http_server.cc L2894-2984在遍历请求级参数时识别binary_data_output将其解析为布尔值并赋给infer_req-alloc_payload_.default_output_kind_BINARY或JSON作为未显式列出输出时的全局默认输出格式。四、请求/响应体结构JSON 头 二进制数据尾当一个或多个张量以二进制通信时HTTP 请求或响应体由两部分拼接而成JSON 推理请求/响应对象位于体首按 JSON 中张量声明顺序排列的二进制数据块紧跟在 JSON 之后。此时必须提供Inference-Header-Content-Length头其值为 JSON 对象的字节长度而标准 HTTP 的Content-Length继续表示整个请求/响应体的总长度即 JSON 长度 全部二进制数据长度。服务端在 src/http_server.cc 的GetInferenceHeaderLength约 L2490-2534解析该头若未提供则默认取整个Content-Length提供时校验其取值必须落在(0, Content-Length]区间内否则返回INVALID_ARG。测试用例qa/L0_http/http_test.py的test_inference_header_content_length_out_of_range专门验证了该边界。响应侧SetResponseHeader约 L4376-4405在存在二进制数据时将Content-Type设为application/octet-stream并回写Inference-Header-Content-Length无二进制数据时Content-Type为application/json。五、Binary Tensor Request 实战示例下面是一个将输入以二进制发送、并要求输出也以二进制返回的完整请求。两个输入张量二进制数据合计 19 字节16 3必须计入Content-LengthPOST /v2/models/mymodel/infer HTTP/1.1 Host: localhost:8000 Content-Type: application/octet-stream Inference-Header-Content-Length: xx Content-Length: xx19 { model_name : mymodel, inputs : [ { name : input0, shape : [ 2, 2 ], datatype : UINT32, parameters : { binary_data_size : 16 } }, { name : input1, shape : [ 3 ], datatype : BOOL, parameters : { binary_data_size : 3 } } ], outputs : [ { name : output0, parameters : { binary_data : true } } ] } 16 bytes of data for input0 tensor 3 bytes of data for input1 tensorinput0形状[2, 2]、类型UINT324 个元素 × 4 字节 16 字节二进制数据input1形状[3]、类型BOOL3 个元素 × 1 字节 3 字节二进制数据outputs中的binary_data: true要求output0以二进制返回。假设模型返回形状[3, 2]、类型FP32的张量6 元素 × 4 字节 24 字节响应如下HTTP/1.1 200 OK Content-Type: application/octet-stream Inference-Header-Content-Length: yy Content-Length: yy24 { outputs : [ { name : output0, shape : [ 3, 2 ], datatype : FP32, parameters : { binary_data_size : 24 } } ] } 24 bytes of data for output0 tensor注意响应 JSON 中 Triton 会为二进制输出自动填入binary_data_size见 src/http_server.cc L4301-4311BINARY类型的输出在parameters中写入binary_data_size为实际字节数并将对应输出缓冲加入ordered_buffers最终按序追加到 JSON 之后。六、Raw Binary Request不携带推理头的裸二进制请求对于张量元数据可由二进制数据字节数直接推导的模型客户端可以进一步省去推理头 JSON请求体仅包含张量的二进制数据。判定条件为模型只有一个输入输入数据类型非BYTES时可变维度数量至多 1 个即除已知维度外只有一个维度可由字节数反推输入数据类型为BYTES时形状必须为[1]支持的数据类型范围与 KServe Predict V2 协议定义的张量数据类型一致。发送裸二进制请求时Inference-Header-Content-Length头必须显式给出且值为 0用以声明请求体不包含推理头 JSON。服务端逻辑位于 src/http_server.cc 的EVRequestToJsonImpl约 L3004-3106当header_length 0时整个 HTTP 体都被视为原始输入数据随后EVBufferToRawInput约 L3108 起为该请求添加名为raw_input的原始输入并校验字节数不超过--http-max-input-size限制。形状推导失败多输入、BYTES 多元素、多可变维度时返回 400 错误错误信息可参见 qa/L0_http/http_test.py 中的test_byte_too_many_elements、test_multi_variable_dimensions、test_multi_inputs等用例断言。使用裸二进制请求时还需注意两个语义若模型支持 batching由于推理头被省略请求会被视为batch-1请求模型所有输出都将以二进制张量形式返回等效于请求级设置了binary_data_output: true。Raw Binary Request 示例以下请求体为 16 字节输入数据Content-Length即总长POST /v2/models/mymodel/infer HTTP/1.1 Host: localhost:8000 Content-Type: application/octet-stream Inference-Header-Content-Length: 0 Content-Length: 16 16 bytes of data for input tensor假设模型返回两个输出形状均为[3, 1]、类型FP32各 12 字节响应为HTTP/1.1 200 OK Content-Type: application/octet-stream Inference-Header-Content-Length: yy Content-Length: yy24 { outputs : [ { name : output0, shape : [ 3, 1 ], datatype : FP32, parameters : { binary_data_size : 12 } }, { name : output1, shape : [ 3, 1 ], datatype : FP32, parameters : { binary_data_size : 12 } } ] } 12 bytes of data for output0 tensor 12 bytes of data for output1 tensor七、源码级实现剖析二进制输入的处理链路在服务端二进制输入从 HTTP 体解析到推理请求的完整调用链为EVRequestToJsonImpl / EVBufferToJson切分 JSON 头 → ParseJsonTritonRequestID解析 id → ParseJsonTritonParams解析请求级参数含 binary_data_output → ParseJsonTritonIO逐输入处理含二进制数据搬运在ParseJsonTritonIOsrc/http_server.cc L2572 起中对每个输入先调用ValidateInputContentType校验数据来源唯一性调用CheckBinaryInputData解析binary_data_size得到byte_size若为二进制输入且byte_size 0直接追加空数据支持零形状张量否则若header_length 0即请求被当作裸二进制请求会返回INVALID_ARG错误——提示必须同时提供有效的Inference-Header-Content-Length与binary_data_size随后通过evbuffer_iovec分块消费请求体中的二进制数据逐块调用TRITONSERVER_InferenceRequestAppendInputData将数据以TRITONSERVER_MEMORY_CPU追加进推理请求直至消费完byte_size字节若请求体不足以满足声明的大小则返回「unexpected size for input ... expecting N additional bytes」错误。八、客户端验证与最佳实践仓库测试对二进制扩展覆盖相当完整可作为客户端实现的参考qa/L0_http/http_test.pytest_raw_binary/test_raw_binary_longer用numpy.tobytes()生成 FP32 输入、以Inference-Header-Content-Length: 0发送并用响应头中的Inference-Header-Content-Length定位输出二进制数据的起始偏移test_byte验证 BYTES 类型的 4 字节长度前缀test_content_encoding_chunked_manually验证 chunked 编码下裸二进制请求同样可用qa/L0_http/http_request_many_chunks.py验证输入分多个块传输时服务端按binary_data_size精确切分消费qa/L0_http/http_input_size_limit_test.py验证--http-max-input-size对二进制输入的字节数上限约束。实践要点总结二进制输入必须在parameters中给出精确的binary_data_size且与Content-Length中的实际数据字节数一致只要请求/响应含二进制数据就必须携带Inference-Header-Content-Length普通二进制请求为其 JSON 头长度裸二进制请求为0解析二进制响应时先读Inference-Header-Content-Length得到 JSON 头偏移再按输出声明顺序从该偏移开始依次读取各输出的原始字节对于 BYTES 类型输出需按「4 字节长度前缀 内容」逐元素解析仅在模型满足「单输入、形状可由字节数推导」条件时使用 Raw Binary Request否则退化为携带完整 JSON 头的普通二进制请求。九、相关文档与进一步阅读本扩展所属协议目录docs/protocol含分类、generate、共享内存、序列等扩展的并行说明扩展二进制数据在 HTTP 服务端的完整实现src/http_server.cc二进制输入限制校验与参数解析辅助函数CheckBinaryInputData、CheckBinaryOutputData、ValidateInputContentType、ValidateOutputParameter均位于 src/http_server.cc推理协议的整体说明与 gRPC/HTTP 端点约定docs/protocol/README.mdKServe Predict V2 协议张量数据类型定义可作为 Raw Binary 请求支持类型的参考依据赞分享模型推理服务AI 应用后端【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址https://gitcode.com/gh_mirrors/server117/server点击查看免费下载相关推荐Triton Inference Server 统计扩展Statistics Extension协议深度解析HTTP/REST 与 gRPC 接口全解Triton Inference Server 统计扩展Statistics Extension协议深度解析HTTP/REST 与 gRPC 接口全解 T模型推理服务AI 应用后端Triton Inference Server 的 KServe 协议扩展全景从 HTTP/REST 到 gRPC 的 11 个扩展机制详解Triton Inference Server 的 KServe 协议扩展全景从 HTTP/REST 到 gRPC 的 11 个扩展机制详解 导读 Trito模型推理服务AI 应用后端如何在Triton Inference Server中实现自定义元数据传递推理协议扩展终极指南如何在Triton Inference Server中实现自定义元数据传递推理协议扩展终极指南 Triton Inference Server是一款由NVID模型推理服务AI 应用后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

基于CNN与LSTM的网络入侵检测实战:UNSW-NB15数据集与机器学习流水线
基于CNN与LSTM的网络入侵检测实战:UNSW-NB15数据集与机器学习流水线

简介:这是一份基于机器学习与深度学习实现的入侵检测完整项目,主要面向计算机相关专业的学生,可用于毕业设计、课程设计或期末大作业,也适合希望进行实战练习的初学者。项目通过CNN、LSTM等模型对网络安全数据进行分类识别&#x… · 2026/9/23 23:47:49

SOME/IP、MQTT、DDS:车载以太网中间件选型与实战解析
SOME/IP、MQTT、DDS:车载以太网中间件选型与实战解析

如果回到五年前,问一辆量产车上通信用的什么,答案非常统一:CAN、LIN、FlexRay。但放到今天,打开一台智能电动汽车的网络架构图,你会看到一套完全不同的景象:动力域控制器之间跑着SOME/IP,智驾域… · 2026/9/23 23:47:42

kustomize sortOptions 字段完全指南:掌控 Kustomization 构建输出的资源排序
kustomize sortOptions 字段完全指南:掌控 Kustomization 构建输出的资源排序

CLI开发工具云原生 【免费下载链接】kustomize Customization of kubernetes YAML configurations 项目地址: https://gitcode.com/gh_mirrors/ku/kustomize 点击查看 免费下载 sortOptions 是 kustomize v5.0.0 提供的 Kustomization 顶层字段,用于控制… · 2026/9/23 23:47:36

PHPStan 错误标识符 new.interface 详解:为什么接口不能被实例化,以及如何修复
PHPStan 错误标识符 new.interface 详解:为什么接口不能被实例化,以及如何修复

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 导读 new.interface 是 PHPStan 静态分析工具报告的错… · 2026/9/24 0:28:24

IronClaw 扩展体系中的 Google Drive create_folder:从 Prompt 文档到 WASM 实现的完整契约
IronClaw 扩展体系中的 Google Drive create_folder:从 Prompt 文档到 WASM 实现的完整契约

人工智能AI 应用交互助手AI Agent 【免费下载链接】ironclaw IronClaw is an Agent OS focused on privacy, security and extensibility 项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw 点击查看 免费下载 这篇技术指南以 IronClaw 开源仓库中 google-dr… · 2026/9/24 0:27:41

ogg文件无法播放?解码器、VLC、FFmpeg三招彻底搞定
ogg文件无法播放?解码器、VLC、FFmpeg三招彻底搞定

1. 先说清楚:ogg 到底是什么文件,为什么双击会翻车你有没有遇到过这种情况:朋友发来一个音乐文件,后缀是 .ogg,你双击下去,系统弹窗提示“Windows Media Player 无法播放此文件”,或者干脆没有任… · 2026/9/24 0:27:34

SAOP学习笔记:用结构化笔记搞定复杂长篇的设定考据
SAOP学习笔记:用结构化笔记搞定复杂长篇的设定考据

SAOP,全称 Sword Art Online Progressive,国内一般译作《刀剑神域:进击篇》,是川原砾从2012年开始推出的轻小说企划。很多人第一次听到这个名字,会以为是主线的平行世界或者番外,事实上它更像是一套“补完计… · 2026/9/24 0:27:34

读懂国际标准书号ISBN:结构、校验位与出版应用
读懂国际标准书号ISBN:结构、校验位与出版应用

我最早接触“国际标准书号ISBN”这七个字,是很多年前帮一位朋友整理一摞旧书稿件。当时他把出版社退回的样书翻来覆去地看,指着封底那串印着条码和数字的编号问我:“这个号到底代表啥?是不是有了它,我的书就算正式出版… · 2026/9/24 0:27:28

Axure流程图自定义元件库建设与实战方法论
Axure流程图自定义元件库建设与实战方法论

1. 为什么现在还要花时间学Axure画流程图?——一个老UE设计师的坦白你可能刚在招聘网站上看到“熟悉Axure,能输出高保真原型及业务流程图”这条要求,心里嘀咕:Figma不是更火?ProcessOn画流程图不是更轻量?甚… · 2026/9/24 0:27:28

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码