华为开发者峰会报告讲稿
个人介绍
(2-3页,1分钟左右)
大家好,我是来自西安交通大学的贺浩庭,很高兴能为大家做这次分享。我将讲解我和CANN结缘的4个故事,从初始的智能基座课程,到通过华为开发板深入了解推理应用开发,再到昇腾众智项目中进行模型迁移,到最后积累了一定经验,使用CANN平台进行模型训练和推理,并参与互联网+产业赛道。接下来,我将对这4个方面一一进行讲解。首先我介绍一下我自己,我来自西安交通大学,专业是软件工程。获得过互联网+国赛银奖,特等学业奖学金,众智模型金质量奖等。在研究生期间,多次参与华为项目,从一开始的成员到后面的负责人,在项目中不断成长。
首先,在课程学习方面,我多次参与了华为智能基座课程,比如人工智能原理,深度学习,以及昇腾方向线上课程,计算机视觉与机器学习,在这个过程中一方面夯实了自己在AI领域的基础知识,另一方面为我将来参与华为项目进行实践打下了坚实的基础。 其次是项目实践,我们完成了基于Atlas 200DK开发板的交通场景语义分割项目,以及基于Atlas 800服务器的Pytorch&Tensorflow模型迁移项目,这里只是先提一下,之后会详细去讲。最后是参与互联网+产业赛道,我们取得了国赛银奖的好成绩,之后也会详细讲述。
初次认识昇腾AI—学习”西交-华为“智能基座课程
(3页,2分钟左右)
在人工智能原理课中,学习昇腾AI的相关知识
初次认识昇腾AI首先得从智能基座课程开始讲起,我们在课上学到,人工智能相关技术逐步成为“事关国家安全和发展全局的基础核心领域”。比如,4月份openai发布的gpt4成功地让人工智能走进了大众视野。基于chatgpt的autogpt仅仅在上线两周内,其star数便超过了已经发布4,5年的pytorch等仓库。 而昇腾CANN即是在这种大背景下蓬勃发展的。
目前国内在算法应用层“枝繁叶茂”。目前数据集海量,应用场景也很丰富,算法顶会论文逐渐增多,部分算法模型处于世界前沿。但是计算系统层“根基薄弱”,也就是说底层“硬核科技”原创贡献少,如此一来核心系统和芯片易受国外制约,使得我国智能产业成为空中楼阁。在这种情况之下,华为从底层的芯片研发出发,再到计算架构层CANN,最后到AI框架Mindspore,推出了昇腾AI全栈软硬件平台。
首先是CANN统一异构计算架构,它可以降低硬件适配难度,并通过软硬件协同优化,实现高性能算子,提升模型运行性能,释放底层芯片的算力。昇腾910芯片是聚焦AI特定领域的处理器,强调计算性能,而不是通用性。
深入了解昇腾AI—基于Atlas 200 DK 开发板的智能交通应用
(4页,3分钟左右)
接下来,有了开发AI应用知识上的储备,我们通过一个小项目:基于Atlas 200 DK 开发板的智能交通应用来进行实践和深入了解。我简要讲一下这个项目。自动驾驶在近年来取得了丰硕的成果,并有望在不远的未来大规模商业化。然而,在现实应用中,自动驾驶仍然面临许多挑战,如路面标志、行人、车辆、障碍物等的识别和理解。语义分割技术可以帮助自动驾驶车辆实现对复杂场景的感知和理解,从而为车辆的自主行驶提供更加全面和精准的支持。
因此,我们团队在华为Atlas 200 DK开发板上部署一种交通场景下的语义分割模型,并期望达到以下效果:在算力有限的移动设备上部署语义分割模型,并验证部署的语义分割模型的实用性与可行性。
先简单介绍一下Atlas 200 DK 开发板。Atlas 200 DK 开发板广泛应用于智能安防、智能交通等领域,可以提供强大的AI算法支持,帮助企业快速实现AI技术落地。并且其硬件接口丰富,如以太网口,HDMI接口等。而且昇腾社区算法模型极其丰富,支持不同领域的SOTA模型;而且应用广泛,可以部署在摄像头、无人机和机器人等设备上。其上手也相对轻松,只需30分钟即可配好环境。接下来我讲讲怎么去入门AI应用开发,通过什么渠道或是方式去学习。
首先是参与CANN训练营,每年CANN都会推出好几期新的训练营系列活动,参与课程并完成小作业可以有效提高我们对AI开发的动手能力。首先训练营内容是很丰富的,而且针对不同层级的开发者也有不同的内容。其次是参与昇腾众智计划,华为与多个高校在AI领域合作,我们可以参与适合的众智项目,进一步锻炼自己在调模型参数,模型debug,训练性能优化等方面的能力,一定程度上也有利于自己在科研或者未来工作中去优化自己的模型。如果在做项目的过程中,遇到了难以解决的问题,首先推荐去查阅官方文档,之前在modelzoo仓库的wiki页面有着模型训练迁移,性能优化的丰富文档,大部分问题都可以解决。推理应用开发也推荐看官网的指导手册,内容比较详细且有利于上手。最后,如果自己能力不足,查阅资料和搜索引擎也无法解决,推荐求助昇腾社区,项目中可以求助于仓库issue,可以先搜索issue看有没有人遇到过相同问题(大概率你会遇到的问题之前也有人遇到过了),或是去看社区论坛FAQ,没找到的话发一个求助帖,但是需要注意如何去提一个好问题,这样也有利于别人帮你去解决。最后,如果参与众智项目的话,一般会有项目接口人,积极与华为接口人沟通推进进度,而不是等待他们主动联系你。
接下来回归正题,继续讲我们的项目。我们使用的模型是PIDNet,它是一种三分支网络架构。三个分支来分别解析细节、上下文和边界信息;并使用边界注意力机制来指导细节和上下文分支的融合。具体的细节如果有兴趣的话可以去看原论文。之后就是编写推理脚本了,如果你之前参与过训练营或者看过开发指导文档,这个推理脚本会很好写,这里就不多做赘述了。接下来是一个结果展示,证明在在算力有限的移动设备上部署语义分割模型是实用且可行的。
实际探索昇腾AI—基于Atlas 800服务器的Tensorflow&Pytorch模型迁移
(4页,4分钟左右)
因为有了之前在CANN上的知识和实践积累,我们也有能力去承接众智项目。我一共做过两期模型迁移项目,所以对这个项目还是了解比较深入的,接下来我会分享我在项目中遇到的问题,以及我是如何去解决它们的,我还会分享一些模型调优的经验,希望会对大家有所帮助。
首先我简单介绍一下这个项目是在做什么。我们的核心任务是在华为NPU芯片上训练和推理开源模型,对标原论文在GPU上的性能和精度。指标有两个方面的要求,第一个是GPU复现的精度要达到原论文的99%以上。这个有时候就很难达到,我跑过很多代码,参数什么的都没改,但就是达不到原文的精度。这个确认不是训练问题并且实在没办法的话,可以把问题反映给华为接口人,因为不是我们训练的问题,而是原论文代码的问题,所以交由华为专家评审判定即可。第二个是NPU迁移,模型在NPU上的精度需要达到GPU的99%以上,才视为精度达标;性能上,在NPU8卡的性能也必须高于GPU8卡的性能。
接下来我介绍一下整体的项目流程,大家可以宏观上了解这个项目究竟是在做什么。首先是GPU精度要达到原论文精度,并且如果原论文不支持混合精度和分布式训练的话,我们需要对源代码进行修改以支持它们。这个修改方法官网文档里有详细步骤。其次是NPU的功能打通,即模型能够在NPU上正常训练和推理。这里主要是修改原生pytorch的接口,使其支持NPU芯片。接下来如果训练性能出现了问题,会从以下几个方面考虑是哪里出了问题。比如说算子瓶颈,或是框架瓶颈亦或是编译瓶颈。一般来说主要是算子的问题。如果GPU精度正常,但是迁移到NPU之后,发现精度不达标,会从以下角度去考虑:比如说模型计算错误,loss计算错误等等。发现NPU在精度的bug其实很难,很考验一个人debug能力。
我做的第一个迁移任务是tensorflow模型迁移。这个模型有两个大难点。第一个是训练周期极长,一次训练大概要一周时间,很耽误任务进度,对调试影响也很大,因为得到训练指标数据真的很慢。我记得当时训练的时候还要等待代金券的审批,这个也很麻烦。第二个难点,因为它是图像超分辨模型,所以该模型支持动态shape,也就是说它支持不同大小图片同时作为输入。这个应该是算子的问题,而且训练时也没有任何报错,只是训练卡住了,我记得之前我们在这个问题上卡了很久,不知道出了什么问题。之后算子上面修复了这个bug,我们才真正解决这个问题。
我做的第二个迁移任务是pytorch模型迁移。在这个项目中因为一开始NPU只支持pytorch1.5,而这个原仓是pytorch1.8的,一些torch1.8的接口在在1.5是没有的。比如说,amp在1.6之后才内置于pytorch。所以只能用原生apex库代替。再比如说,原代码使用了timm库一些接口。但是这些接口默认使用的是cuda,而不是npu接口。所以还需要修改第三方库的源代码,还是比较麻烦的。之后我也有关注,发现NPU支持pytorch1.8之后,又需要将已迁移的代码升级到pytorch1.8,但是这个修改还是相对容易的。在这个项目中,我也遇到了性能方面的问题,接下来会介绍我使用过的一些性能调优的方法。第一个是使用NPU版本的优化器FusedAdam代替原来的adam优化器。然后是关键,如果你增大batchsize 的话,一定要同比例地增加学习率,这里还需要注意多卡的因素。学习率对训练的影响比较大,是很重要的参数。最后给大家讲一个小技巧,可以同时在 pytorch和npu上同时使用profilling工具进行性能测试,它会可视化的显示耗时大的算子,一对比你就可以发现究竟是哪个算子导致了NPU上的性能下降。
通过参与这些项目也获得了很多奖项,比如昇腾众智开发者,昇腾众智金质量奖等。
产业应用昇腾AI—基于昇腾算力及CANN的高级辅助驾驶
(16页,10分钟左右,选取比赛PPT中的关键内容)
因为之前我们在CANN技术栈上进行了多次项目开发,对于在CANN上模型的训练和推理我们团队也更加熟练,所以我们将在CANN上的经验和优势应用到互联网+产业赛道中。我们将课题组在智能交通领域科研成果在华为CANN架构上进行应用,并取得了不错的性能优势。接下来我介绍一下我们的比赛项目。
首先我先讲一下项目背景。早在2019年华为就已经开始在智能车行业开展战略布局,其中,华为的ADS布局,全称为自动驾驶解决方案,就是针对智能车辅助驾驶方面的。华为目前在该领域进行了深入探索,但仍面临着许多卡脖子的技术难题。
因此华为作为命题企业,希望我们能够利用昇腾人工智能软硬件技术,在自动驾驶领域攻克算法关键性难题,同时赋能昇腾平台,拓展华为社区生态。在研发过程中,我们团队基于CANN提出了针对自动驾驶的一种新的解决方案。我们在CANN计算架构之上,将昇腾强大的算力与我们创新设计的算法相结合。
在自动驾驶领域,无人车的安全性非常依赖视觉识别算法对道路场景元素的精确感知和检测,只有准确且及时地检测车辆以及行人等元素,才能最大程度地避免事故的发生。而算法所搭载系统的实时性较差、检测精准度较低也是如今自动驾驶行业的痛点问题。因此华为在指标上对于算法计算速度和精确度有着极高的要求,例如对于车辆行为识别,我们需要保证推理速度(fps)大于85帧/秒,检测精度大于87.25%。
CANN 使得我们能够基于昇腾平台快速构建自己的应用。CANN作为桥梁,能使得上层AI框架能够在底层NPU上高效运行。同时它的强大算力,使得我们的模型性能更加强大。
我们团队所在的实验室积累了相当多的辅助驾驶方向的技术成果:首先,我们有来自中科院计算所等单位百万级的数据集作为算法的训练和测试数据集;其次,我们所在的实验室具有数百篇高水平计算机视觉论文及多项国家科技奖作为技术支持;另外,我们有智能交通领域的多项专利获得授权。
在整体解决方案中,我们以车辆行为识别和轨迹预测作为我们的高级辅助驾驶的关键技术。 依托于华为的昇腾CANN计算架构,我们将设计的AI算法,应用到华为的ADS辅助驾驶系统中,把创新设计的算法与强大算力的CANN计算架构相结合。
接下来我简要介绍一下我们的技术。我们使用多流3DCNN的网络进行车辆行为识别,如左图所示,我们的识别精度极高,高达99%,可用于工业界落地。我们其次使用结合StrongSORT进行车辆目标跟踪,得到车辆轨迹后,使用Traffic-STGCNN对其未来轨迹预测,预测未来轨迹也能确保安全性。通过这两个技术,我们能够构建范围更大,更安全的高级辅助驾驶系统。
在3DCNN SELayer网络在中,我们对真实的道路图像进行处理,生成光流信息和边缘检测信息,将它们一起作为输入,送入到3DCNN SELayer网络中,通过加入三维感受野增强和特征融合模块,模型能够快速精确的得出各个车辆的行为类别。
三维感受野增强采用多分支卷积结构,并使用空洞卷积也就是扩张卷积来增大感受野,在充分利用视频中的时空信息的基础上增强特征的判别能力和鲁棒性。
因为我们有多个模态的输入,所以需要充分融合多模态特征,为此,我们提出了通道注意力特征融合模块,对通道信息进行充分融合,实现了跨通道交互,增加特征中重要通道的权值,抑制无用通道的权值,并且增加非线性特征,提高特征表达能力。
由表格可以看出,我们的算法具有模型小,精度高,速度快、计算少的特点。我们的模型精度高达92.46%,而大小仅仅只有14.8Mb,推理速度极快,尤其将它与华为昇腾CANN相结合后,每秒能处理94.27张图像。
该图是我们的可视化演示结果,可以看出我们识别和预测的精度是很高的。
在华为给出的模型测试报告上:通过在华为Atlas800上进行测试,我们模型的训练性能提升12%,推理性能提升10%,远优于现有方法,满足了命题企业答题指标要求。我们的算法也获得了华为公司权威专家的高度认可。项目在昇腾算力及CANN平台的架构下进行开发,设计的模型在NPU上进行了训练和推理,能够有效降低预测和识别的系统时延,具有较高的技术难度,解决了当前辅助驾驶系统中存在的难点问题。
团队成员在实践方面,10余名学生在参与产业赛道命题的过程中,完成华为众智项目,项目交付质量较高,华为官方授予所有团队成员昇腾众智金质量奖。在创新方面,2022年4月以来,团队在参与产业赛道命题过程中,共10余名本硕博学生,投稿“三类高质量”论文8篇、申请发明专利5项。
我的分享到此结束,谢谢大家聆听
- Post title:华为开发者峰会报告讲稿
- Post author:sixwalter
- Create time:2023-08-05 11:14:26
- Post link:https://coelien.github.io/2023/08/05/jobs/华为报告讲稿/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.