动态

详情 返回 返回

征程 6 | 多任務 不同幀率 部署方案 - 动态 详情

1.方案描述

推理多任務模型時,可能會有不同任務分支 部署不同幀率的需求,例如 BEV 動態任務 20 幀,靜態任務 10 幀這種情況。

image.png
最簡單的方式是編譯兩個模型,分開推理:

  • 模型 1:backbone+neck+ 動態 head
  • 模型 2:backbone+neck+ 靜態 head

此時,重複的公共部分 backbone+neck 會重複佔用內存與存儲,且 backbone+neck 重複推理,會造成多餘的資源消耗、影響性能。

為了解決這些問題,且實現不同任務分支推理不同幀率,可以使用工具鏈提供的 link 打包功能。

image.png
工具鏈提供的 link 功能,能夠 複用 不同 模型/任務 的公共部分 constant 常量(包括權重等),即不會存多份。上圖中 link 打包生成的模型 3,相比於模型 1 體積並不會大多少,同時具備推理模型 1 與模型 2 的功能。根據需求,調整模型 1 與模型 2 的推理次數,即可實現不同任務採用不同幀率部署。

image.png

2.實現示例

2.1 模型 link 打包

在工具鏈用户手冊《進階內容-HBDK Tool API Reference》章節中詳細介紹了 compile 與 link API,可以看到:

  • compile 輸出同時支持 hbm 與 hbo 兩種文件格式,可通過配置文件後綴名為"。hbm" or ".hbo"來區分。
  • link 支持將多個 hbo 文件打包生成一個 hbm 文件。

將兩個 hbo 文件通過 link 打包生成一個 hbm 模型,示例代碼如下:

image.png

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 模型中的某一個模型進行推理。

image.png
以 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 的使用方式,截圖如下:

image.png
image.png
在工具鏈開發包路徑:OE/samples/ucp\_tutorial/dnn/basic\_samples 下方的示例中有用到這兩個接口,可參考使用。

2.3 多任務不同幀率推理

根據需求,調整打包模型 compiled.hbm 中的 模型 1 backbone\_head1\_head2 與模型 2 backbone\_head1 的推理次數,即可實現不同任務採用不同幀率部署。

image.png

2.4 性能數據示例

下表中,backbone\_head1 是公共部分,注意:公共部分權重是一樣的

image.png
可以看到,compiled.hbm 體積相比於 1\_backbone\_head1\_head2.hbm 並沒有增加多少。

模型加載推理時,ION 內存差異如下:

image.png
可以看到,compiled.hbm 佔用的內存相比於 1\_backbone\_head1\_head2.hbm 並沒有增加多少。

user avatar haoqingwanqiandesigua 头像 secretflow 头像 chang_lehung 头像 huikaichedemianbao 头像 huamingshixunkeji 头像 infodator 头像 dewujishu 头像 beishangdejianjidan_cqxuxf 头像 dl1024 头像
点赞 9 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.