Triton Inference Server Trace 扩展协议解析:通过 HTTP/REST 与 gRPC 在运行时配置追踪
模型推理服务AI 应用后端【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址https://gitcode.com/gh_mirrors/server117/server点击查看免费下载导读本文围绕 Triton Inference Server 的 Trace 扩展Trace Extension协议展开讲解如何在不重启服务的前提下通过v2/.../trace/setting端点与TraceSettinggRPC RPC 动态获取、修改单个模型或全局的推理追踪配置。读完本文你将掌握 trace 设置的 HTTP 与 gRPC 请求/响应格式、trace_file/trace_level/trace_rate/trace_count/log_frequency五个设置项的完整语义并能结合 src/tracer.cc 与 src/tracer.h 的源码理解其采样、计数与落盘的底层实现。Trace 扩展是什么Trace 扩展Trace Extension允许客户端在 Triton 运行期间动态配置追踪trace设置而无需重启tritonserver进程。由于该扩展受支持Triton 会在其 Server Metadata 的extensions字段中报告trace。也就是说客户端可以通过查询/v2端点Server Metadata确认当前服务实例是否支持 trace 扩展。该扩展与 docs/user_guide/trace.md 中描述的启动期追踪能力互补启动期通过--trace-config命令行参数设置全局追踪而 trace 扩展则允许在运行期覆盖这些设置并支持按模型model-level粒度进行配置。全局设置与模型级设置从协议设计与源码实现看Triton 的 trace 设置分为两层全局设置global setting不指定模型名时生效是整个服务实例的默认追踪配置模型级设置model setting为某个具体模型单独覆盖的追踪配置。两层之间存在回退fallback语义模型级设置中未指定的字段会继承全局设置的当前值如果请求中的某个设置值为 JSONnullHTTP或空值列表gRPC则该设置被清除回退到全局设置。在 src/tracer.h 中可以看到这一设计的实现结构TraceManager内部维护了global_default_、global_setting_、model_settings_模型名到设置的映射以及fallback_used_models_部分字段回退到全局设置的模型集合std::unique_ptrTraceSetting global_default_; std::shared_ptrTraceSetting global_setting_; std::unordered_mapstd::string, std::shared_ptrTraceSetting model_settings_; // The collection of models that have their own trace setting while // some of the fields are mirroring global setting. std::setstd::string fallback_used_models_;注意global_default_不直接参与采样它仅用于在清除全局设置的某些字段时还原默认值。HTTP/REST 接口端点定义Triton 在以下 URL 暴露 trace 端点src/http_server.cc 中的路由正则与之对应GET v2[/models/${MODEL_NAME}]/trace/setting POST v2[/models/${MODEL_NAME}]/trace/settingHTTP GET获取当前的 trace 设置HTTP POST修改 trace 设置成功后返回更新后的设置失败则返回错误可选的MODEL_NAME用于针对特定模型获取或设置 trace 配置不带模型名则作用于全局配置。本文档中的 JSON 模式里$number、$string、$boolean、$object、$array指 JSON 基础类型#optional表示可选 JSON 字段。Trace Setting 响应 JSON 对象成功的 trace 设置请求以 HTTP 200 状态码标识响应体为$trace_setting_response对象每次成功的请求都会返回该对象$trace_setting_response { $trace_setting, ... } $trace_setting $string : $string | [ $string, ...]每个$trace_setting是一个名称/值对name是设置项名称value是设置值的字符串表示对某些设置项如trace_level则是$string数组。目前定义的设置项如下设置项类型说明trace_file字符串trace 输出保存的文件。若设置了log_frequency该值作为文件名前缀实际生成${trace_file}.0、${trace_file}.1等索引文件详见log_frequency说明trace_level字符串数组追踪级别。OFF表示禁用追踪TIMESTAMPS追踪时间戳TENSORS追踪张量。数组允许指定多个级别同时追踪多种信息trace_rate字符串追踪采样率。表示每多少个请求采样一次 trace。例如值为1000时每 1000 个请求采样 1 次trace_count字符串剩余待采样的 trace 数量。值变为0后不再采样新的 trace已收集的 trace 会按log_frequency描述的形式写入索引文件无论log_frequency当前状态如何。值为-1表示不限采样数量log_frequency字符串Triton 将 trace 输出写入文件的频率。值为0时仅在服务关闭时将 trace 输出写入${trace_file}否则每收集满指定数量的 trace就写入${trace_file}.${idx}。例如频率为100收集到第 100 条 trace 时写入${trace_file}.0收集到第 200 条时把第 101200 条写入${trace_file}.1。注意更新trace_file设置时文件索引会重置为 0HTTP 响应中实际序列化时服务端会把trace_level输出为 JSON 数组OFF或[TIMESTAMPS, ...]其余设置以字符串形式输出并额外包含一个trace_mode字段值为triton或opentelemetry见 src/http_server.cc 的构造逻辑。Trace Setting 错误响应 JSON 对象失败的 trace 设置请求以 HTTP 错误状态码通常为 400标识响应体必须包含$trace_setting_error_response对象$trace_setting_error_response { error: $string }error错误的描述信息。例如向 HTTP 端点发送无法解析的trace_count服务端会返回400与{error: Unable to parse trace_count, got: ...}之类的错误体错误信息格式与 src/http_server.cc 中构造的INVALID_ARG错误一致。Trace Setting 请求 JSON 对象通过 HTTP POST 向 trace 端点发起设置请求请求体必须包含$trace_setting_request对象$trace_setting_request { $trace_setting, ... }$trace_setting的定义与 响应 JSON 对象 相同只有请求中指定的设置项会被更新。除响应对象中提到的取值外还可以使用 JSONnull值来移除某项设置此时该项回退使用当前全局设置。同理如果是首次初始化某个模型的 trace 设置请求中未指定的设置项也会沿用当前全局设置。一个完整的 GET 与 POST 示例curl# 查询全局 trace 设置 curl -X GET http://localhost:8000/v2/trace/setting # 查询模型 simple 的 trace 设置 curl -X GET http://localhost:8000/v2/models/simple/trace/setting # 更新全局设置每 100 个请求采样 1 次追踪时间戳收集 50 条后停止 curl -X POST http://localhost:8000/v2/trace/setting \ -H Content-Type: application/json \ -d {trace_rate: 100, trace_level: [TIMESTAMPS], trace_count: 50} # 针对模型 simple 设置并将 trace_count 回退到全局设置JSON null 清除 curl -X POST http://localhost:8000/v2/models/simple/trace/setting \ -H Content-Type: application/json \ -d {trace_count: null}gRPC 接口TraceSetting RPCtrace 扩展在 gRPC 中实现为GRPCInferenceService下的一个 RPCservice GRPCInferenceService { … // Update and get the trace setting of the Triton server. rpc TraceSetting(TraceSettingRequest) returns (TraceSettingResponse) {} }TraceSettingAPI 返回最新的trace 设置。错误通过请求的google.rpc.Status指示OK码表示成功其他码表示失败。TraceSetting的请求与响应消息定义为message TraceSettingRequest { // The values to be associated with a trace setting. // If no value is provided, the setting will be clear and // the global setting value will be used. message SettingValue { repeated string value 1; } // The new setting values to be updated, // settings that are not specified will remain unchanged. mapstring, SettingValue settings 1; // The name of the model to apply the new trace settings. // If not given, the new settings will be applied globally. string model_name 2; } message TraceSettingResponse { message SettingValue { repeated string value 1; } // The latest trace settings. mapstring, SettingValue settings 1; }请求语义要点与 HTTP 一致参见 src/grpc/grpc_server.cc 的处理逻辑SettingValue是repeated string value。不提供 value空列表即表示清除该设置回退到全局设置settings是一个map只有请求中列出的键会被更新未列出的保持原样model_name为空时设置应用到全局非空时应用到指定模型对只接受单值的设置trace_rate、trace_count、log_frequency如果提供了多个值服务端会返回类似expect only 1 value for trace_rate的INVALID_ARG错误src/grpc/grpc_server.cctrace_count的值必须不小于TraceManager::MIN_TRACE_COUNT_VALUE即-1否则返回校验错误src/grpc/grpc_server.cc。响应中的trace_level以SettingValue多值列表形式返回OFF/TIMESTAMPS/TENSORS的组合其余设置以单值字符串返回并同样包含trace_mode。关于设置项的完整定义与取值请参考上文 Trace Setting 响应 JSON 对象。特别地如果是首次初始化某个模型的 trace 设置请求中未指定的设置项会从当前全局设置复制。底层实现采样、计数与落盘TraceManager 与 TraceSetting服务端的 trace 配置管理集中在TraceManager类src/tracer.h中。每个TraceSetting持有level_、rate_、count_、log_frequency_、file_TraceFile对象、mode_以及一组*_specified_布尔标志后者用于区分该字段是显式指定还是从上层回退镜像——这正是实现两级设置合并的基础。在 src/tracer.cc 的UpdateTraceSettingInternal中可以看到两遍合并算法先以回退设置为基准更新模型设置时以global_setting_为回退源更新全局设置时以global_default_为回退源把所有字段初始化为回退值再叠加显式指定值对level_specified_、rate_specified_等标志为真的字段用当前/新设置中的值覆盖。当模型设置的全部字段都显式指定时该模型从fallback_used_models_移除当没有任何字段指定时直接从model_settings_中删除模型设置、让它完全使用全局设置部分字段指定时则加入fallback_used_models_。更新全局设置后还会遍历fallback_used_models_中的所有模型递归同步它们回退的字段src/tracer.cc。值得注意的并发设计更新设置时采用替换对象而非修改对象以保证正在进行的 trace 仍引用采样时的旧设置对象src/tracer.cc 的注释说明了这一点。采样与计数逻辑TraceSetting::SampleTracesrc/tracer.cc实现了采样与计数sample_统计到达服务端的所有请求数count_rate_hit (((sample_) % rate_) 0)判断当前请求是否命中采样命中且count_ 0时--count_并created_当count_归零时Valid()返回 false此后不再采样新的 trace除非force_sample采样命中后通过TRITONSERVER_InferenceTraceTensorNew创建 trace 对象注册活动回调TraceActivity、张量回调TraceTensorActivity与释放回调TraceRelease。TraceSetting构造函数src/tracer.cc会对设置做有效性校验level_ TRITONSERVER_TRACE_LEVEL_DISABLEDtracing is disabled、rate_ 0sample rate must be non-zero、TRITON 模式下文件名为空trace file name is not given都会使设置失效。HTTP/gRPC 端点在更新设置时会拒绝非禁用但无效的设置src/tracer.cc。落盘与索引文件TraceSetting::WriteTracesrc/tracer.cc决定何时把内存中的 trace 流写入文件。满足以下任一条件时写入索引文件${trace_file}.${idx}trace_count已指定且收集数量达标((count_ 0) (collected_ sample_))log_frequency非零且流中样本数达到阈值((log_frequency_ ! 0) (sample_in_stream_ log_frequency_))。TraceFile::SaveTracessrc/tracer.cc负责实际的写文件写索引文件时打开${file_name}.${index}并以[、]包裹 JSON 数组写非索引文件时维护first_write_状态首次写[之后以,分隔追加。TraceFile内部用index_原子计数器递增文件索引用互斥锁保证多个并发 trace 落盘安全。TraceSetting析构时若仍有未落盘的 tracesample_in_stream_ ! 0会把剩余 trace 写入文件log_frequency_ ! 0时写入索引文件对应文档中log_frequency 为 0 时关闭时写入${trace_file}的语义src/tracer.cc。与启动期命令行配置的关系trace 扩展在运行期配置的设置项与 docs/user_guide/trace.md 中描述的启动期--trace-config参数一一对应全局设置格式--trace-config settingvalue例如--trace-config rate100TRITON 模式特有设置--trace-config triton,filepath、--trace-config triton,log-frequency50旧参数--trace-file、--trace-rate、--trace-level、--trace-log-frequency、--trace-count均已废弃tritonserver --help会提示改用--trace-config见 src/command_line_parser.cc。关于兼容性的一个重要限制trace 扩展运行期配置目前不支持opentelemetry追踪模式该模式下的 trace 配置只能在启动时通过--trace-config opentelemetry,...指定docs/user_guide/trace.md。相应地HTTP/gRPC 响应中trace_mode为opentelemetry时log_frequency与trace_file字段不会返回src/http_server.cc。测试与验证仓库中的 QA 测试为上述协议提供了可复现的验证入口qa/L0_cmdline_trace/test.sh 覆盖了--trace-file/--trace-level/--trace-rate等启动期配置的组合场景例如--trace-levelOFF时不生成 trace 文件、--trace-rate1 --trace-levelTIMESTAMPS时每个请求都被追踪并通过 qa/common/trace_summary.py 汇总验证qa/L0_cmdline_trace/trace_client.py 演示了使用tritonclient的 HTTP/gRPC 客户端发起推理请求的写法可作为与 trace 设置端点配合使用的基础端到端验证建议先用--trace-config triton,file/tmp/trace.json --trace-config rate100 --trace-config levelTIMESTAMPS --trace-config count100启动服务再通过GET /v2/trace/setting读取当前配置、通过POST调整trace_rate/trace_count最后用qa/common/trace_summary.py汇总生成的 trace 文件观察采样率与计数是否符合预期。小结Trace 扩展为 Triton Inference Server 提供了运行期、按模型粒度的动态追踪配置能力HTTP 端点的GET/POST v2[/models/${MODEL_NAME}]/trace/setting与 gRPC 的TraceSettingRPC 语义完全对应均支持未指定字段保持原样、null/空值回退全局设置的两级设置模型。结合 src/tracer.h 与 src/tracer.cc 的实现可以清楚看到采样rate、计数count、周期落盘log_frequency与索引文件${trace_file}.${idx}的完整数据链路。需要提醒的是该扩展仅适用于triton追踪模式若使用opentelemetry模式请在启动时通过--trace-config完成配置。赞分享模型推理服务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 分类扩展Classification Extension实战HTTP/REST 与 gRPC 用法及源码原理Triton Inference Server 分类扩展Classification Extension实战HTTP/REST 与 gRPC 用法及源码原模型推理服务AI 应用后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

IPD集成产品开发流程管理:从PACE到Charter的研发项目管理实践

IPD集成产品开发流程管理:从PACE到Charter的研发项目管理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 5:31:51 阅读更多 →
读懂AI设计发展演变史后,教你应对设计焦虑

读懂AI设计发展演变史后,教你应对设计焦虑

AI 行业的爆发始于2022年 ChatGPT 和 Midjouney 的发布,到现在已经快4年了,整个发展过程用突飞猛进、日新月异形容一点都不过分。 但不管它过去还是现在,发展得有多迅猛,都依旧处于行业早期的开荒和发展阶段,离真正成…

2026/9/24 5:31:51 阅读更多 →
RK3588交叉编译FFmpeg:启用RKMPP与RGA硬件加速实践

RK3588交叉编译FFmpeg:启用RKMPP与RGA硬件加速实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 5:30:51 阅读更多 →

最新新闻

从 Yii 1.1 升级到 Yii 2.0:核心架构差异与迁移实践全指南(Yii 2 Framework)

从 Yii 1.1 升级到 Yii 2.0:核心架构差异与迁移实践全指南(Yii 2 Framework)

后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 Yii 2.0 是相对 1.1 完全重写的一代框架,两者在命名空间、对象模型、事件机制、Acti…

2026/9/24 7:06:51 阅读更多 →
案例4.6 image组件:14种显示模式详解与学习笔记

案例4.6 image组件:14种显示模式详解与学习笔记

一、案例概述本案例来自《微信小程序开发》课程,由逄焕刚老师设计,主要演示微信小程序中 image 组件的使用方法和不同显示模式的实现效果。通过本案例的学习,我们可以掌握 image 组件的基础用法、14种显示模式的区别,以及如何通过…

2026/9/24 7:06:50 阅读更多 →
一键部署 acg-faka 发卡系统

一键部署 acg-faka 发卡系统

一条命令,在一台干净的 Linux 服务器上把 acg-faka(异次元店铺系统) 跑起来。脚本会自动装 Docker、拉上游源码、构建应用镜像(nginx PHP-FPM)、拉起 MySQL 与 Redis、顺手修掉一个会让安装向导失败的权限坑&#xff…

2026/9/24 7:06:50 阅读更多 →
OpenLayers 10.2.1 补丁版解析:移除重投影瓦片缓存,修复缺失瓦片问题

OpenLayers 10.2.1 补丁版解析:移除重投影瓦片缓存,修复缺失瓦片问题

前端GIS数据可视化 【免费下载链接】openlayers OpenLayers 项目地址: https://gitcode.com/gh_mirrors/op/openlayers 点击查看 免费下载 OpenLayers 10.2.1 是一个聚焦于修复的补丁版本,核心变更是通过 PR #16221「Get rid of reprojection tile cach…

2026/9/24 7:06:50 阅读更多 →
Manim 渲染故障排查实战指南:video-use manim-video 技能的 Troubleshooting 全解

Manim 渲染故障排查实战指南:video-use manim-video 技能的 Troubleshooting 全解

AI 技能/插件音视频视频处理人工智能 【免费下载链接】video-use Edit videos with coding agents 项目地址: https://gitcode.com/GitHub_Trending/vid/video-use 点击查看 免费下载 导读 本指南以 video-use 仓库中 manim-video 技能的 troubleshooting.md 为骨…

2026/9/24 7:06:50 阅读更多 →
PostGraphile wrapPlans 解析器仿真警告(wpr)深度解析:成因、风险与三种解决方案

PostGraphile wrapPlans 解析器仿真警告(wpr)深度解析:成因、风险与三种解决方案

后端API网关 【免费下载链接】crystal 🔮 Graphiles Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more! 项目地址: https://gitcode.com/gh_mirrors/cry/crystal 点击查看 免费下载 本篇文章围绕 PostGraphi…

2026/9/24 7:05:49 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →