写点什么

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

  • 2025-10-31
    广东
  • 本文字数:1319 字

    阅读完需:约 4 分钟

征程 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.实现示例

2.1 模型 link 打包

在工具链用户手册《进阶内容-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_head1
input[0]:name: ...
output[0]:name: ...
---------------------------------------------------------------------
---------------------------------------------------------------------[model name]: 1_backbone_head1_head2
input[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 并没有增加多少。

用户头像

还未添加个人签名 2021-03-11 加入

还未添加个人简介

评论

发布
暂无评论
征程 6 | 多任务 不同帧率 部署方案_自动驾驶_地平线开发者_InfoQ写作社区