当前位置: 首页 > news >正文

征程 6 | 多任务 不同帧率 部署方案

1.方案描述

推理多任务模型时,可能会有不同任务分支 部署不同帧率的需求,例如 BEV 动态任务 20 帧,静态任务 10 帧这种情况。

最简单的方式是编译两个模型,分开推理:

  • 模型 1:backbone+neck+ 动态 head
  • 模型 2:backbone+neck+ 静态 head

此时,重复的公共部分 backbone+neck 会重复占用内存与存储,且 backbone+neck 重复推理,会造成多余的资源消耗、影响性能。

为了解决这些问题,且实现不同任务分支推理不同帧率,可以使用工具链提供的 link 打包功能。

工具链提供的 link 功能,能够 复用 不同 模型/任务 的公共部分 constant 常量(包括权重等),即不会存多份。上图中 link 打包生成的模型 3,相比于模型 1 体积并不会大多少,同时具备推理模型 1 与模型 2 的功能。根据需求,调整模型 1 与模型 2 的推理次数,即可实现不同任务采用不同帧率部署。

2.实现示例

在工具链用户手册《进阶内容-HBDK Tool API Reference》章节中详细介绍了 compile 与 link API,可以看到:

  • compile 输出同时支持 hbm 与 hbo 两种文件格式,可通过配置文件后缀名为"。hbm" or ".hbo"来区分。
  • link 支持将多个 hbo 文件打包生成一个 hbm 文件。

将两个 hbo 文件通过 link 打包生成一个 hbm 模型,示例代码如下:

2.2 打包模型推理

2.2.1 hrt_model_exec 工具推理

通过 hrt_model_exec model_info --model_file compiled.hbm 可查看打包模型的数量,输入输出等信息,示例如下

This model file has 2 model:
[2_backbone_head1]      [1_backbone_head1_head2]
---------------------------------------------------------------------
[model name]: 2_backbone_head1input[0]:
name: ...output[0]:
name: ...------------------------------------------------------------------------------------------------------------------------------------------
[model name]: 1_backbone_head1_head2input[0]:
name: ...output[0]:
name: ...output[1]:
name: ...

结合–model_file 与–model_name 即可实现对打包 compiled.hbm 模型中的某一个模型进行推理。

以 perf 评测打包 compiled.hbm 模型 中 2_backbone_head1 的性能为例,参考命令如下:

hrt_model_exec perf --model_file compiled.hbm --model_name 2_backbone_head1

2.2.2 UCP API 推理

在工具链用户手册《统一计算平台 UCP - 模型推理开发 - 模型推理 API 手册 - 功能接口》中,详细介绍了加载打包模型 hbDNNInitializeFromFiles 与 获取单个模型句柄 hbDNNGetModelHandle 的使用方式,截图如下:

在工具链开发包路径:OE/samples/ucp_tutorial/dnn/basic_samples 下方的示例中有用到这两个接口,可参考使用。

2.3 多任务不同帧率推理

根据需求,调整打包模型 compiled.hbm 中的 模型 1 backbone_head1_head2 与模型 2 backbone_head1 的推理次数,即可实现不同任务采用不同帧率部署。

2.4 性能数据示例

下表中,backbone_head1 是公共部分,注意:公共部分权重是一样的

可以看到,compiled.hbm 体积相比于 1_backbone_head1_head2.hbm 并没有增加多少。

模型加载推理时,ION 内存差异如下:

可以看到,compiled.hbm 占用的内存相比于 1_backbone_head1_head2.hbm 并没有增加多少。

http://www.jsqmd.com/news/27901/

相关文章:

  • 10月31号
  • 10月29号
  • ️ 深度解析我的 Overleaf 私有化部署:一份稳定、高兼容性的 `docker-compose.yaml`
  • 支配点对小记
  • 2025赣南脐橙最新推荐品牌榜,源头赣南脐橙果园品牌综合评测!
  • Manacher 代码贴贴
  • Python测试(上)_ 不存在不写bug的程序员
  • P9119 [春季测试 2023] 圣诞树
  • Java性能调优的艺术:从字节码到云端的全链路优化
  • 2025.10.31总结 - A
  • 用隐式马尔科夫模型检测XSS攻击Payload
  • revit api创建文字注释
  • mysql 查询今天、昨天、本周、上周、本月、上月、本季度、上季度、本年、上一年、的数据
  • P10674 [MX-S1-T3] 电动力学 题解
  • 【UE引擎解构】- GamePlay篇 : 移动
  • 读后感一:《代码大全 2》—— 从 “写代码” 到 “做工程” 的思维跃迁 - A
  • Ai元人文:对“局限性”的反驳
  • 读后感二:《代码大全 2》—— 穿越技术迭代的 “软件开发说明书” - A
  • JDBC练习
  • 2-SAT学习笔记
  • 打造自己的 Claude Code:LangGraph + MCP 搭建一个极简的 AI 编码助手
  • CSP-S 2023-2024 分析
  • 专栏目录
  • 代码大全2 第四五章
  • 程序员修炼之道:从小工到专家读后感1
  • 代码大全2阅读1
  • 代码大全2阅读2
  • 软件工程学习日志2025.10.30
  • BOE(京东方)“百堂故宫传统文化公益课”暨2025照亮成长路收官 推动“科技+教育+文化”可持续发展
  • Java的深层逻辑与未来生态延伸