专栏算法工具链【J6工具链部署实用技巧-3】J5->J6 你必须知道的关键字使用建议

【J6工具链部署实用技巧-3】J5->J6 你必须知道的关键字使用建议

momo(社区版)2024-11-29
307
0

背景

随着征程6平台和工具链技术架构的全面升级,J6 工具链较 J5 实现显著技术升级。它革新底层架构,融入前沿理念与算法,计算效率、资源整合及任务适应性均大幅提升,却也造成与 J5 的 “兼容性断层”,用户在将智驾方案由J5平台一直到J6时,不可避免要对模型/部署代码做一些适应性改变。

鉴于此背景,本文梳理了 J6 相对 J5 关键字变化详情,结合行业实践与验证,给出实用替代策略,助客户跨越迁移鸿沟,释放 J6 强大效能,推动业务创新升级。

关键字及使用建议

model name

含义及应用场景:

model name是包含模型名称及其版本号的字段,在板端部署时,可以使用UCP的hbDNNGetModelNameList接口读取此字段来匹配模型,尤其是在部署打包后的模型时,可以使用此字段索引模型。

使用建议:

建议在export qat.bc的时候,QAT链路可以使用horizon_plugin_pytorch的export接口指定model name,即在导出qat.bc的时候配置name参数。需要注意的是,bc和编译得到的hbm模型的name字段不支持修改,如果想要修改name,需要在重新导出qat.bc的时候指定。

export接口介绍如下所示:

feature name & feature id

含义及应用场景:

feature name & feature id为输入/输入分支的name/id,基于该字段判断是哪个输入分支,以便于把生成对应的tensor送入模型。此字段在J5中有小范围的使用,在J6工具链中已取消。

使用建议:

建议在将模型部署到J6平台上时,使用UCP到hbDNNGetInputName和hbDNNGetOutputName接口获取输入/输出节点的name,然后基于此name判断输入分支。

input_names和output_names配置方法:

在export qat.bc的时候,使用horizon_plugin_pytorchexport接口指定input_names和output_names,即在导出qat.bc的时候配置input_names和output_names。

详细教程可以参考博主前面的帖子:

J6工具链部署实用技巧-1】如何修改bc和hbm模型的输入输出名称和顺序

input source

含义及应用场景:

input source的配置项为{""pyramid","ddr","resizer"},不同的参数代表模型数据不同的输入来源。J5工具链在部署时,可以通过此参数判断一些输入是否合理。J6工具链中的pyramid/resizer新方案都变为ddr input source,因此不再支持其他类型的source,因此,J6工具链取消了input source参数,UCP中也移除了hbDNNGetInputSource接口。

使用建议:

如果用户在部署侧对input source字段有强依赖,建议将input source写入模型的desc中,然后在板端部署的时候使用UCP的hbDNNGetInputDesc获取input_source字段。

模型输入desc添加及修改:

在export qat.bc的时候,使用horizon_plugin_pytorchexport接口指定input_descs和output_descs,即在导出qat.bc的时候配置input_descs和input_descs。

详细教程可以参考博主前面的帖子:

【J6工具链部署实用技巧-2】如何读取和修改模型的desc信息

 

valid dim & aligned dim

含义及应用场景:

valid dim 和 aligned dim分别为输入/输出内存的有效范围和对齐范围,用于在部署时申请输入/输出内存和从内存中读取有效的信息。

 

使用建议:

建议使用UCP的alignedByteSize来申请输入/输出内存,根据stride来读取信息。相关介绍如下:

 

hbDNNTensorProperties

成员变量:

  • validShape:张量有效内容的形状。

  • tensorType:张量的类型。

  • scale:量化比例因子。

  • quantiType:量化类型。

  • quantizeAxis:量化轴索引,仅按per-axis量化时生效。

  • alignedByteSize:张量对齐内容的内存大小。

  • stride:张量中validShape各维度步长,字节为单位。

 

注解:

  1. validShape 字段中若某些维度为 -1,则代表模型的 validShape 在该维度上为动态输入,需要您在创建任务前根据实际输入进行填写。
  2. quantizeAxis 表示量化轴索引所在维度,仅按 per-axis 量化时生效,当数据按照 per-tensor 量化时 quantizeAxis 为负数。
  3. 通过接口获取的张量信息为模型要求的,您可以根据实际输入修改对应的张量信息,目前只允许修改 stride 和 tensorType 的信息,而且必须符合要求。
      stride:
    1. 若您根据 stride 准备输入,则无需更改 stride。
    2. 若您根据 validShape 准备输入,则需更改 stride 的值为 validShape 各维度跳跃的步长,推理库内部会对数据进行padding操作。
    3. 若从模型获取的 stride 中某些维度为 -1,则代表模型的 stride 在该维度上为动态输入,需要您在创建任务前根据实际输入进行填写。填写的约束请参考用户手册 动态输入介绍 章节。
  4. alignedByteSize 表示tensor中占据的内存空间大小,非动态场景下一般可用来申请输入输出内存。

 

算法工具链
社区征文技术深度解析征程6杂谈
+2
评论0
0/1000