ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Triton Inference Server Trace 扩展协议解析:通过 HTTP/REST 与 gRPC 在运行时配置追踪

2026/9/24 5:32:01 拓冰建站 浏览量
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),仅供参考