征程 6 工具链性能分析与优化 2|模型性能优化建议

01 引言

图片

为了应对低、中、高阶智驾场景,以及当前 AI 模型在工业界的应用趋势,地平线推出了征程 6 系列芯片。

在软硬件架构方面,征程 6 不仅保持了对传统 CNN 网络的高效支持能力,还强化了对 Transformer 类型网络的支持,主要表现为大幅强化了对逐点计算、数据搬运的能力。基于征程 6 硬件平台的增强和算法移植的痛点,同时坚持 ‘软硬协同’ 的设计理念,征程 6 工具链衍生了诸多新特性。

在 征程 6 工具链性能分析与优化 1|编译器预估 perf 解读与性能分析 这篇文章中,我们解释了编译器预估 perf 中各个参数的含义以及对性能的初步分析。

本篇文章,我们将基于征程 6 软硬件特性,整理出征程 6 工具链算法优化常用策略。

02 模型性能优化建议

本节将结合笔者在征程 6 工具链参考算法的学习经验,整理常用的性能优化策略。

2.1 高效 backbone

HENet 是针对征程 6 平台专门设计的高效 backbone,其采用了纯 CNN 架构,总体可分为四个 stage,每个 stage 会进行 2 倍下采样。以下为总体的结构配置:

depth = [4, 3, 8, 6]
block_cls = ["GroupDWCB", "GroupDWCB", "AltDWCB", "DWCB"]
width = [64, 128, 192, 384]
attention_block_num = [0,0,0,0]
mlp_ratios, mlp_ratio_attn = [2, 2, 2, 3], 2
act_layer = ["nn.GELU", "nn.GELU", "nn.GELU", "nn.GELU""]
use_layer_scale = [True,True,True,True]
final_expand_channel, feature_mix_channel = 0,1024
down_cls = ["S2DDown", "S2DDown", "S2DDown", "None"71

模型相关细节可以参考 HENet 高效模型相关介绍。

2.2 算子优化建议

2.2.1 遵循硬件对齐原则

一般的 tensor shape 对齐到 2 的幂次,conv-like 的算子 H 维度对齐到 8、W 维度对齐到 16、C 维度对齐到 32,若设计尺寸不满足对齐规则时会对 tensor 自动进行 padding,造成无效的算力浪费。

2.2.2 尽量使用 BPU 算子搭建模型

BPU 算子本身性能远高于 CPU 算子,且 CPU 和 BPU 之间的异构调度还会引入量化、反量化节点,其计算因为需要遍历数据,所以耗时也与 shape 大小成正比。

所以建议结合用户手册中的算子支持列表,选择合适的 BPU 算子来搭建模型。

2.2.3 减少数据搬运操作

虽然征程 6 中大幅度强化了对数据搬运(transpose、reshape)操作的效率,但是建议在模型中还是避免频繁的数据搬运操作,同时注意 reshape 操作时,改动的维度越多,计算效率越低。

2.2.4 将 attention 层的 add、sum、mean 替换为 conv 计算

self.sum_ref_offset = nn.Linear(
    self.num_levels * self.num_heads * self.num_points * 2 * 2,
    self.num_levels * self.num_heads * self.num_points * 2,
    bias=False,
)
self.sum_ref_offset = nn.Linear(
    self.num_levels * self.num_heads * self.num_points * 2 * 2,
    self.num_levels * self.num_heads * self.num_points * 2,
    bias=False,
)

self.add_pos = nn.Linear(
    self.embed_dims * 2,
    self.embed_dims,
    bias=False,
)
self.queries_mean_pad = nn.Conv2d(
    self.num_bev_queue * self.view_num,
    self.view_num,
    1,
    bias=False,
)

另外,笔者还建议将 Linear 替换为 Conv1x1 ,从而获得性能的进一步提升。

详情见:地平线 3D 目标检测 Bevformer 参考算法 V1.0

2.2.5 GridSample 性能优化

GridSample 是 BEV 坐标变换和 deformable conv 高频使用的算子,若 grid 的 size 过大或 H,W 分布的不均匀则可能会有带宽问题(该问题在征程 5 上常有发生,随着征程 6 的带宽增加,对 gridsample 的约束限制降低)或运行到 CPU 上,可以采用以下方式提供此算子的运行效率:

  1. 对 gridsample 计算做拆分,比如 Nx22223x4x2 的 gird,数据集中在 H 维度,导致硬件对齐后计算量相较于之前增加不少,所以在算法设计的时候可以将 22223 维度进行拆分,比如 Nx22223x4x2–>Nx313x284x2;

  2. 合理选择 BEV Grid 尺寸,征程 6 平台的带宽得到增强,但仍需考虑 BEV Grid 尺寸对模型性能的影响,并且综合衡量模型精度预期,选择合适的 BEV Grid 尺寸以获得模型性能和精度的平衡;

2.2.6 cumsum 算子替换

公版模型的 QCNetDecoder 中使用了征程 6 暂不支持的 torch.cumsum 算子,参考算法中将其替换为了 Conv1x1,相关代码如下:

        self.loc_cumsum_conv = nn.Conv2d(
            self.num_future_steps,
            self.num_future_steps,
            kernel_size=1,
            bias=False,
        )
        self.scale_cumsum_conv = nn.Conv2d(
            self.num_future_steps,
            self.num_future_steps,
            kernel_size=1,
            bias=False,
        )

详情见:地平线轨迹预测 QCNet 参考算法-V1.0

2.2.7 Gather/GatherND 算子高效支持

在地平线以往的版本(OE3.0.17)中,Gather/GatherND 算子底层均为 CPU 实现,效率较低,在地平线征程 6 工具链即将发布的正式版本中,Gather/GatherND 算子将支持 BPU 加速,可以极大地提升计算效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【真题笔记】16年系统架构设计师要点总结

【真题笔记】16年系统架构设计师要点总结 存储部件接口嵌入式处理器产品配置配置管理用户文档系统文档CMM(能力成熟度模型)螺旋模型敏捷软件开发的方法学软件工具面向对象的分析模型设计模型COP(面向构件的编程)构件原子构件模块S…

GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)

前言 上个月的24年10.9日,我在朋友圈看到字节发了个机器人大模型GR2,立马去看了下其论文(当然了,本质是个技术报告) 那天之后,我就一直想解读这个GR2来着 然,意外来了,如此文《OmniH2O——通用灵巧且可全…

Autocad2018

链接: https://pan.baidu.com/s/1MTd0gc5Q5zoKFnPNwk1VXw 提取码: x15v

把握数字化新趋势,迎接生态架构新时代——The Open Group 2024生态系统架构·可持续发展年度大会参会指南

距离大会还有:22天 在数字化转型的浪潮中,如何抓住机遇,实现可持续发展,已成为各行各业关注的焦点。The Open Group 2024生态系统架构可持续发展年度大会,将于2024年11月22日在北京国贸大酒店隆重举行。本次大会汇聚全…

OpenGL入门006——着色器在纹理混合中的应用

本节将理解顶点和片段着色器在纹理混合中的应用 文章目录 一些概念纹理时间依赖动画 实战简介dependenciesshader.fsshader.vsteenager.pngtex.png utilswindowFactory.hshader.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 纹理 概述&…

Spring Cloud Bus快速入门Demo

1.什么是Spring Cloud Bus? Spring Cloud Bus 是一个用于将分布式系统的节点连接起来的框架,它使用了轻量级消息代理来实现节点之间的通信。Spring Cloud Bus 可以将配置变更事件、状态变更事件和其他管理事件广播到系统中的所有节点,以便于…

通过Wireshark抓包分析,体验HTTP请求的一次完整交互过程

目录 一、关于Wireshark 1.1、 什么是Wireshark 1.2、下载及安装 二、HTTP介绍 2.1、HTTP请求过程介绍 2.2 、TCP协议基础知识 2.2.1、概念介绍 2.2.2、TCP协议的工作原理 2.2.3、三次握手建立连接 2.3.4、四次挥手断开连接 2.3、Wireshark抓包分析过程 2.3.1、三次握…

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …

tomcat 开启远程debug模式

1.修改位置 CATALINA_OPTS"-Xdebug -Xrunjdwp:transportdt_socket,address*:8000,servery,suspendn"2.修改环境变量的方式 apache-tomcat-9.0.86/bin/setenv.sh export JAVA_HOME/opt/jdk1.8.0_171 export CATALINA_HOME/opt/apache-tomcat-9.0.86 export JAVA_OP…

【工具变量】中国制造2025试点城市数据集(2000-2023年)

数据简介:《中国制造2025》是中国ZF于2015年5月8日印发的一项战略规划,旨在加快制造业的转型升级,提升制造业的质量和效益,实现从制造大国向制造强国的转变。该规划是中国实施制造强国战略的第一个十年行动纲领,明确提…

VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)

以最简单的以原子的跑马灯为例: 1、点击CtrlShiftP,输入setting,然后回车 2、输入Browse 3、点击下面C_Cpp > Default > Browse:Path里面添加你的工程路径 然后就可以愉快地跳转定义啦~ 希望对你有帮助,如果还不可以的话&a…

java常用框架介绍

1. Spring Boot 特点:Spring Boot是Spring家族中的一个新成员,它基于Spring 4.0设计,提供了默认配置、简化依赖管理以及内嵌式容器等特性,使得开发者能够快速创建独立的、生产级别的Spring应用。 用途:Spring Boot特别…

Leetcode328奇偶链表,Leetcode21合并两个有序链表,Leetcode206反转链表 三者综合题

题目描述 思路分析 这题的思路就和我们的标题所述一样,可以看作是这3个题的合并,但是稍微还有一点点区别 比如:奇偶链表这道题主要是偶数链在了奇数后面,字节这个的话是奇偶链表分离了 所以字节这题的大概思路就是: …

自监督学习:机器学习的未来新方向

引言 自监督学习(Self-Supervised Learning, SSL)是近年来机器学习领域的一个重要发展方向,迅速成为许多研究和应用的热点。与传统的监督学习不同,自监督学习利用未标注数据,通过设计自我生成标签的任务,帮…

【算法】Prim最小生成树算法

目录 一、思想 二、代码 在阅读本文前推荐优先食用: 【算法】Kruskal最小生成树算法-CSDN博客https://blog.csdn.net/Eristic0618/article/details/143312482?spm1001.2014.3001.5501 一、思想 Kruskal算法基于边的选择,因此更适用于稀疏图。而对于…

CPU用户时间百分比

在计算机系统中,"CPU用户时间百分比(CPU User Time)"是一个性能监控指标,它描述了CPU在用户模式下执行的累积时间与总的CPU时间的比例。这个指标可以帮助我们了解系统在执行用户态程序时的负载情况。下面是一些关于CPU用…

java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl

用大模型做车牌号识别,最简单高效 在Java场景中,java识别车牌号的需求非常普遍。过去,我们主要依赖OCR等传统方法来实现java识别车牌号,但这些方法的效果往往不稳定。随着技术的发展,现在有了更先进的解决方案——大模…

IoTDB时序数据库使用

简介 Apache IoTDB 是一款低成本、高性能的物联网原生时序数据库。它可以解决企业组建物联网大数据平台管理时序数据时所遇到的应用场景复杂、数据体量大、采样频率高、数据乱序多、数据处理耗时长、分析需求多样、存储与运维成本高等多种问题。 IoTDB官网 1. 连接数据库 官方…

Android camera2

一、序言 为了对阶段性的知识积累、方便以后调查问题,特做此文档! 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…

【设计模式系列】组合模式(十二)

目录 一、什么是组合模式 二、组合模式的角色 三、组合模式的典型应用 四、组合模式在Mybatis SqlNode中的应用 4.1 XML映射文件案例 4.2 Java代码使用案例 一、什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,其核…