Triton Inference Server Model Repository 扩展协议详解:Index / Load / Unload 全流程实战
模型推理服务AI 应用后端【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址https://gitcode.com/gh_mirrors/server117/server点击查看免费下载模型仓库Model Repository扩展是 Triton Inference Server 对外提供的核心管理协议之一它允许客户端通过 HTTP/REST 或 gRPC 查询服务器当前托管的全部模型并在运行期动态加载、重载或卸载模型而无需重启服务进程。本文以仓库内 docs/protocol/extension_model_repository.md 为骨架结合 HTTP 服务端实现、gRPC 服务端实现 与 生命周期测试完整讲解该扩展的协议格式、参数语义、底层调用链与工程约束读者读完即可直接编写客户端代码调用这三组 API并理解其内部实现原理。扩展能力概述动态管理模型的生命周期模型仓库扩展让客户端能够查询并控制 Triton 正在服务的一个或多个模型仓库。只要服务端启用了该扩展Server Metadata 的extensions字段中就会报告model_repository字符串。此外该扩展还包含一个可选组件允许 Unload API 携带unload_dependents参数。支持该可选组件的 Triton 版本还会在extensions字段中额外报告model_repository(unload_dependents)客户端可以据此判断服务端是否支持级联卸载依赖模型的能力。从源码角度看该扩展在 HTTP 端与 gRPC 端分别注册了两套入口HTTP 端路由正则定义在 src/http_server.cc匹配形如/v2/repository/...的 URLgRPC 端三个 RPCRepositoryIndex、RepositoryModelLoad、RepositoryModelUnload在 src/grpc/grpc_server.cc 中注册均绑定MODEL_REPOSITORY受限类别restricted category可通过服务端受限 API 配置进行开关控制。HTTP/REST 协议HTTP 版本要求实现 Index、Load、Unload 三组 API暴露在以下 URL 上${MODEL_NAME}为模型名占位符POST v2/repository/index POST v2/repository/models/${MODEL_NAME}/load POST v2/repository/models/${MODEL_NAME}/unload本文所有 JSON schema 中$number、$string、$boolean、$object、$array分别指代 JSON 基础类型#optional表示该字段可选。Index查询仓库中所有可用模型Index API 返回模型仓库中每个模型的信息——即使该模型当前尚未被加载进 Triton。它提供了一种途径让客户端可以判断哪些模型可以被 Load API 加载。请求通过 HTTP POST 发送到 index 端点响应体为 JSON。请求对象$repository_index_request必须出现在 POST 请求的 HTTP body 中$repository_index_request { ready : $boolean #optional, }ready可选默认值为false。若为true则只返回当前已就绪可以执行推理的模型。成功的 Index 请求以 HTTP 200 状态码表示响应对象$repository_index_response为 JSON 数组数组中每个元素描述一个模型$repository_index_response [ { name : $string, version : $string #optional, state : $string, reason : $string }, … ]name模型名称version模型版本state模型当前状态典型的取值包括READY、UNAVAILABLE、LOADING、UNLOADINGreason模型处于当前状态的原因如有。失败的 Index 请求以 HTTP 错误状态码通常为 400表示HTTP body 必须包含$repository_index_error_response对象$repository_index_error_response { error: $string }error错误的描述性信息。在服务端实现中HTTPAPIServer::HandleRepositoryIndex 会先校验请求必须是 POST 方法然后解析 body 中的ready布尔字段类型不合法会返回INVALID_ARG错误将其映射为TRITONSERVER_INDEX_FLAG_READY标志位最终调用底层 C APITRITONSERVER_ServerModelIndex获取模型索引消息并序列化为 JSON 返回。Load加载或重载模型Load API 请求 Triton 加载某个模型若该模型已加载则触发重载。请求通过 HTTP POST 发送到 load 端点HTTP body 可以为空也可以包含加载请求对象$repository_load_request。成功的加载请求以 HTTP 200 状态码表示。$repository_load_request { parameters : $parameters #optional }parameters包含零个或多个键值对形式的请求参数。Load API 支持以下参数config字符串参数内容是模型配置的 JSON 表示必须能够被解析为model_config.proto中定义的ModelConfig消息。该配置将替代模型目录中的config.pbtxt用于加载模型。一旦提供了config就相当于模型元数据被更新会触发一次与元数据更新等价的重载行为。file:version/file-namebase64 编码的序列化模型文件用于指定覆盖override模型目录让 Triton 从请求中携带的文件而非磁盘目录加载模型。例如用户希望加载一个版本号为 2 的 ONNX 模型就把参数名写为file:2/model.onnx值为该文件的 base64 编码内容。注意使用file:参数时必须同时提供config参数作为覆盖模型目录的模型配置。失败的 Load 请求以 HTTP 错误状态码通常为 400表示HTTP body 必须包含$repository_load_error_response$repository_load_error_response { error: $string }error错误的描述性信息。Load 完整请求示例以下请求将加载模型mymodel并同时提供模型配置与模型文件内容POST /v2/repository/models/mymodel/load HTTP/1.1 Host: localhost:8000 { parameters: { config: { name: mymodel, backend: onnxruntime, inputs: [{ name: INPUT0, datatype: FP32, shape: [ 1 ] } ], outputs: [{ name: OUTPUT0, datatype: FP32, shape: [ 1 ] } ] }, file:1/model.onnx : base64-encoded-file-content } }从源码看HTTP 端 HandleRepositoryControl 对action load的分支会遍历parameters对象中的每个成员config被构造为字符串类型参数键名以file:前缀开头的成员见 src/http_server.cc则先经过DecodeBase64解码为二进制内容再构造为字节类型参数。解码后的文件内容会被保存在一个列表中其生命周期覆盖TRITONSERVER_ServerLoadModelWithParameters调用全程确保参数在底层加载完成前始终有效。最终统一调用TRITONSERVER_ServerLoadModelWithParameters完成带参数的模型加载。Unload卸载模型Unload API 请求 Triton 卸载某个模型。请求通过 HTTP POST 发送到 unload 端点HTTP body 可以为空也可以包含卸载请求对象$repository_unload_request。成功的卸载请求以 HTTP 200 状态码表示。$repository_unload_request { parameters : $parameters #optional }parameters包含零个或多个键值对形式的请求参数。Unload API 支持以下参数unload_dependents布尔参数指示除了卸载请求的模型外还要一并卸载随该模型一起加载的所有依赖模型。例如请求卸载构成某个 ensemble模型集成的组成模型时会连带卸载该 ensemble 本身。失败的 Unload 请求以 HTTP 错误状态码通常为 400表示HTTP body 必须包含$repository_unload_error_response$repository_unload_error_response { error: $string }error错误的描述性信息。在 HandleRepositoryControl 的action unload分支中服务端会解析 body 中的unload_dependents布尔字段解析失败会返回包含Unable to parse unload_dependents的错误信息为true时调用TRITONSERVER_ServerUnloadModelAndDependents级联卸载否则调用TRITONSERVER_ServerUnloadModel只卸载指定模型。gRPC 协议gRPC 版本同样要求实现三组 API定义在GRPCInferenceService服务中service GRPCInferenceService { … // Get the index of model repository contents. rpc RepositoryIndex(RepositoryIndexRequest) returns (RepositoryIndexResponse) {} // Load or reload a model from a repository. rpc RepositoryModelLoad(RepositoryModeLoadRequest) returns (RepositoryModelLoadResponse) {} // Unload a model. rpc RepositoryModelUnload(RepositoryModelUnloadRequest) returns (RepositoryModelUnloadResponse) {} }gRPC 的参数通过ModelRepositoryParameter消息承载它使用oneof支持四种取值类型message ModelRepositoryParameter { // The parameter value can be a string, an int64, a boolean // or a message specific to a predefined parameter. oneof parameter_choice { // A boolean parameter value. bool bool_param 1; // An int64 parameter value. int64 int64_param 2; // A string parameter value. string string_param 3; // A bytes parameter value. bytes bytes_param 4; } }错误通过请求返回的google.rpc.Status指示OK表示成功其他状态码表示失败。gRPC 端三个 RPC 的注册与执行逻辑位于 src/grpc/grpc_server.cc其中 RepositoryIndex 是同步执行asyncfalseLoad 与 Unload 则标记为异步执行。RepositoryIndexRepositoryIndexAPI 返回模型仓库中每个模型的信息——即使模型尚未被加载进 Triton。请求与响应消息定义如下message RepositoryIndexRequest { // The name of the repository. If empty the index is returned // for all repositories. string repository_name 1; // If true return only models currently ready for inferencing. bool ready 2; } message RepositoryIndexResponse { // Index entry for a model. message ModelIndex { // The name of the model. string name 1; // The version of the model. string version 2; // The state of the model. string state 3; // The reason, if any, that the model is in the given state. string reason 4; } // An index entry for each model. repeated ModelIndex models 1; }实现上src/grpc/grpc_server.cc服务端先检查repository_name是否为空非空则返回UNSUPPORTED错误原因见下文关键实现约束然后将ready标志映射为TRITONSERVER_INDEX_FLAG_READY调用TRITONSERVER_ServerModelIndex得到 JSON 索引消息逐条解析name、version、state、reason字段填充到响应中的models数组。RepositoryModelLoadRepositoryModelLoadAPI 请求加载或重载模型。请求与响应消息定义如下message RepositoryModelLoadRequest { // The name of the repository to load from. If empty the model // is loaded from any repository. string repository_name 1; // The name of the model to load, or reload. string model_name 2; // Optional parameters. mapstring, ModelRepositoryParameter parameters 3; } message RepositoryModelLoadResponse { }RepositoryModelLoad支持以下参数config字符串参数内容是模型配置的 JSON 表示必须能解析为ModelConfig消息用于替代模型目录中的配置提供后相当于模型元数据更新触发等价的重载行为。file:version/file-name字节参数包含模型文件内容用于指定覆盖模型目录。例如加载一个版本为 2 的 ONNX 模型参数名为file:2/model.onnx值为文件内容。注意同样必须同时提供config参数。gRPC 端对参数做了严格的类型校验src/grpc/grpc_server.ccconfig必须是string_paramfile:前缀的参数必须是bytes_param否则返回INVALID_ARG错误遇到无法识别的参数名同样返回错误。校验通过后统一调用TRITONSERVER_ServerLoadModelWithParameters执行加载。RepositoryModelUnloadRepositoryModelUnloadAPI 请求卸载模型。请求与响应消息定义如下message RepositoryModelUnloadRequest { // The name of the repository from which the model was originally // loaded. If empty the repository is not considered. string repository_name 1; // The name of the model to unload. string model_name 2; // Optional parameters. mapstring, ModelRepositoryParameter parameters 3; } message RepositoryModelUnloadResponse { }RepositoryModelUnload支持以下参数unload_dependents布尔参数指示除卸载请求的模型外还要一并卸载随其加载的所有依赖模型。例如请求卸载组成某个 ensemble 的模型会连带卸载该 ensemble。gRPC 端实现src/grpc/grpc_server.cc遍历参数找到名为unload_dependents的参数并校验其必须是bool_param否则返回INVALID_ARG为true时调用TRITONSERVER_ServerUnloadModelAndDependents否则调用TRITONSERVER_ServerUnloadModel。关键实现约束与注意事项repository_name 目前不被支持无论 HTTP 还是 gRPC 协议请求消息中都定义了repository_name字段但当前版本的服务端实现并不支持指定仓库名。从源码看HTTP 端 HandleRepositoryControl 与 gRPC 端 RepositoryModelLoad、RepositoryModelUnload 以及 RepositoryIndex 都会在repository_name非空时返回repository_name specification is not supported的UNSUPPORTED错误。客户端应始终留空该字段让操作作用于全部仓库。动态加载/卸载需要显式模型控制模式Load 与 Unload API 是否真正生效取决于服务端的模型控制模式配置。若以--model-control-modenone默认启动Triton 会在启动时加载全部模型运行期加载/卸载请求会被拒绝。只有在explicit显式模式下客户端才能通过这两个 API 精确控制模型的加载与卸载。仓库内的生命周期测试 qa/L0_lifecycle/lifecycle_test.py 对此有充分覆盖test_dynamic_model_load_unload、test_dynamic_version_load_unload验证显式模式下动态加载/卸载全流程包括加载后模型状态变为 READY、可执行推理卸载后状态变为不可用而test_dynamic_model_load_unload_disabled则验证了动态加载/卸载被禁用时加载请求不会生效、模型状态保持可用的行为。file: 参数是无目录加载的关键路径file:version/file-name参数使得 Triton 可以不依赖磁盘模型仓库目录直接从请求体中恢复模型文件配合config参数即可完整描述一个模型。这在需要将模型二进制与配置一并下发给服务端、实现无状态模型加载的场景中非常实用。注意 HTTP 端要求 base64 编码gRPC 端直接传原始字节内容bytes_param。与 SageMaker 前端的复用模型仓库索引与级联卸载逻辑不仅在标准 HTTP/gRPC 前端被使用SageMaker 兼容前端同样复用了底层能力src/sagemaker_server.cc 调用TRITONSERVER_ServerModelIndex获取模型索引src/sagemaker_server.cc 调用TRITONSERVER_ServerUnloadModelAndDependents实现卸载。这印证了该扩展协议的底层 C API 是跨前端共享的统一控制面。总结Model Repository 扩展为 Triton Inference Server 提供了运行期模型管理的标准协议Index 用于盘点仓库中所有可加载的模型及其状态Load 支持通过config参数覆盖模型配置、通过file:系列参数携带模型文件实现覆盖目录加载Unload 支持unload_dependents布尔参数实现 ensemble 等依赖关系的级联卸载。HTTP 与 gRPC 两套接口语义完全对齐底层统一收敛到TRITONSERVER_ServerModelIndex、TRITONSERVER_ServerLoadModelWithParameters、TRITONSERVER_ServerUnloadModel(AndDependents)三个核心 C API。实际使用时需注意三点repository_name字段必须留空、服务端需以显式模型控制模式运行、file:参数必须与config参数搭配使用。结合 HTTP 实现、gRPC 实现 与 生命周期测试 阅读本文可完整掌握该扩展从协议到实现的全部细节。赞分享模型推理服务AI 应用后端【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址https://gitcode.com/gh_mirrors/server117/server点击查看免费下载相关推荐Triton Inference Server 的 KServe 协议扩展全景从 HTTP/REST 到 gRPC 的 11 个扩展机制详解Triton Inference Server 的 KServe 协议扩展全景从 HTTP/REST 到 gRPC 的 11 个扩展机制详解 导读 Trito模型推理服务AI 应用后端Triton Inference Server 序列扩展Sequence Extension协议详解有状态模型推理的 sequence_id 与流式推断Triton Inference Server 序列扩展Sequence Extension协议详解有状态模型推理的 sequence_id 与流式推断模型推理服务AI 应用后端Triton Inference Server 统计扩展Statistics Extension协议深度解析HTTP/REST 与 gRPC 接口全解Triton Inference Server 统计扩展Statistics Extension协议深度解析HTTP/REST 与 gRPC 接口全解 T模型推理服务AI 应用后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

联邦学习攻击防御复现:从论文到可运行代码的闭环路径

联邦学习攻击防御复现:从论文到可运行代码的闭环路径

简介:本资源是一份面向计算机及相关专业本科生的联邦学习安全方向毕业设计实践包,聚焦于论文级攻击防御方案的代码复现与工程落地,适用于毕设选题、课程设计、AI安全入门及科研验证场景。压缩包含184个文件,主体为109个Python源码…

2026/9/24 0:38:47 阅读更多 →
汽车制动系统故障诊断与维修:从现象定位到精准修复的完整指南

汽车制动系统故障诊断与维修:从现象定位到精准修复的完整指南

简介:汽车制动系统故障诊断与维修毕业论文文档,面向汽车维修专业学生、一线维修技师及相关技术人员,系统梳理制动系统从结构原理到故障排除的完整知识链路。资源重点涵盖制动系统四大组成部分、盘式与鼓式制动器的结构差异与适用场景、真空增…

2026/9/24 0:37:47 阅读更多 →
NS2代码再挖掘:从tcl仿真到awk结果提取的完整实践

NS2代码再挖掘:从tcl仿真到awk结果提取的完整实践

简介:这是一份面向NS2入门者与网络仿真研究者的代码包,聚焦网络协议仿真、路由算法、移动模型与性能统计等核心场景。通过28个文件、623KB的紧凑组织,读者可直接运行Tcl脚本观察TCP拥塞控制、DSDV路由决策和Random Waypoint移动节点的行为&am…

2026/9/24 0:37:47 阅读更多 →

最新新闻

ctf-wiki 橢圓曲線加密(ECC)從入門到實戰:離散對數基礎、ElGamal 方案與 SECCON CTF 破解

ctf-wiki 橢圓曲線加密(ECC)從入門到實戰:離散對數基礎、ElGamal 方案與 SECCON CTF 破解

文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 本篇技術指南以 ctf-wiki 的 ecc.md 為主體,系統梳理橢圓曲線加密(Elliptic Curve C…

2026/9/25 2:49:25 阅读更多 →
swagger-codegen 生成的 Java 只读模型文档解读:以 okhttp-gson-parcelableModel 的 HasOnlyReadOnly 为例

swagger-codegen 生成的 Java 只读模型文档解读:以 okhttp-gson-parcelableModel 的 HasOnlyReadOnly 为例

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

2026/9/25 2:49:25 阅读更多 →
TypeResolver 入门指南:基于 PSR-5 的 PHP 类型与 FQSEN 解析实战

TypeResolver 入门指南:基于 PSR-5 的 PHP 类型与 FQSEN 解析实战

开发工具静态分析 【免费下载链接】TypeResolver A PSR-5 based resolver of Class names, Types and Structural Element Names 项目地址: https://gitcode.com/gh_mirrors/ty/TypeResolver 点击查看 免费下载 本文是一份面向 PHP 开发者的 TypeResolver 上手指南…

2026/9/25 2:49:24 阅读更多 →
Apereo CAS Standalone 配置模式全解:外部化配置目录、文件加载顺序与覆盖策略

Apereo CAS Standalone 配置模式全解:外部化配置目录、文件加载顺序与覆盖策略

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 导读:本文深入讲解 Apereo CAS 默认的 Standalone&#…

2026/9/25 2:49:24 阅读更多 →
企业采购矩阵工具:版本选型需要考量哪些核心要素?

企业采购矩阵工具:版本选型需要考量哪些核心要素?

很多企业做线上内容矩阵运营,在挑选矩阵管理工具的时候,很容易陷入只看价格、只对比基础功能的误区。不少运营负责人采购后才发现,版本不匹配团队规模、账号上限不够、缺少内容分发或者数据汇总能力,后续升级还要额外付费&#xf…

2026/9/25 2:49:23 阅读更多 →
EasyWeChat 6.x 开放平台第三方平台实战示例:从推送事件接收、预授权到代公众号/小程序调用

EasyWeChat 6.x 开放平台第三方平台实战示例:从推送事件接收、预授权到代公众号/小程序调用

后端即时通讯 【免费下载链接】easywechat 📦 一个 PHP 微信 SDK 项目地址: https://gitcode.com/gh_mirrors/ea/easywechat 点击查看 免费下载 本篇基于 EasyWeChat 6.x(PHP 微信 SDK)的开放平台第三方平台模块,围绕…

2026/9/25 2:48:22 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

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

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

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

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

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

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

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

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

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

2026/9/24 14:33:56 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/24 12:49:17 阅读更多 →