算子开发调试调优——及从零开始实现SoftMax及比赛经验分享
收藏回复举报
算子开发调试调优——及从零开始实现SoftMax及比赛经验分享
发表于2024-12-31 10:34:45
0 查看

华为S3赛季的昇腾AI原生创新算子挑战赛已经如火如荼展开了,全国各地的同学在线上进行激烈的比拼和奋斗,西南交大李阳老师已经就昇腾Ascend C算子开发进行了多次入门培训,为了锻炼交大学子的开发能力,乘上AI算子开发的东风快车,2024年12月6日,李阳老师和姚邦锐同学在西南交通大学的J4104教室为大家带来了一场Ascend C算子调试调优的开发能力分享以及在昇腾AI原生创新算子挑战赛的S1赛季带来的经验,包括S3赛季的一个简单的softmax示例编写,这场以“算子开发调试调优——及从零开始实现SoftMax及比赛经验分享”为主题的分享为现场近200名同学的比赛能力赋能,助推他们的AI算子开发之路。

image.png​

活动开始时,姚同学布置了十台200 DK A2的开发者套件机,并联通到一个统一的wifi网络中,现场的所有同学都可以通过该网络分组的方式直接访问这十台开发者套件,每三个人一组,每8组访问一个开发者套件,每个开发者套件都设置了8个账号供他们同时访问,同学们可以在学习知识的同时直接动手进行算子的开发部署和编译。

​image.png

李阳老师就Ascend C算子的调试调优进行了介绍和分享,从四个方面详细介绍了算子开发时的调试检测调优工具,以及性能优化的步骤。算子的开发调试能力主要是由昇腾原生的孪生调试能力带来的,透过孪生调试能力,开发者可以在没有昇腾NPU的情况下快速使用CPU进行算子功能开发,保证了在CPU开发的功能和在NPU上板实现的一致性,然后再到NPU进行性能和精度调试,可以大幅加快开发者的开发速度。在算子的功能开发完成之后,可以使用昇腾分析器msprof对算子进行性能数据采集和调优,msprof可以采集算子执行时的指令耗时和占比,同时可以生成指令流水图和代码热点图,开发者可以直观高效地定位需要优化的代码,快速准确地进行性能优化。由于昇腾算子的UB需要开发者自行管理,因此昇腾官方提供了算子异常检测工具mssanitizer可以用来协助开发者定位内存问题,如内存非法读写、多核踩踏、非对齐访问、内存泄露、非法释放等,也可以协助用户定位由于竞争风险导致的数据竞争问题。最后,李阳老师就算子的极致性能优化情况介绍了诸多详实可观的优化手段,助力开发者将算力发挥到极致。

image.png

接下来,姚邦锐同学给大家分享了S1赛季的简单算子思路和S3赛季的softmax思路详解,并且实现了一个简单的对最后一个维度(dim)求解的softmax算子。姚同学首先给大家介绍了S1的LessEqual赛题,将其对浮点数和整数的实现进行了分析,并且分享了核心代码,然后给大家带来了切实可靠的比赛经验,比如对文档的重视,先使用python实现核心功能,再进行深度优化,重视最佳实践和积极在昇腾社区反馈。

随后,姚同学给大家带来了softmax的从零开始分析实现,对softmax困扰大家的dim问题进行了清晰简单的分享解析,帮助大家理解对轴的计算与处理,然后姚同学带领大家从项目的初始开始,从零开始实现softmax,分析了对half数据进行softmax计算中可能存在的数值溢出问题,并且实现了一个对所有dim都可以使用的tiling切分策略。最后,将CPU的功能实现与测试通过后,姚同学又带领大家实现了完整的framework项目,从项目创建与配置,到算法移植与部署,最后成功注册算子并用aclnn调用测试通过。这样就实现了一个对最后一个dim进行softmax计算的算子,同时提出了一些优化点,可以接着实现除了最后一个dim外的其他dim的计算,以及对float32的支持,对数据的broadcast和大dim的切分计算。所有实现代码都在仓库中:https://gitee.com/b1ankcat/ai_softmax

image.png​

最后是实践环节,同学们在了解相关知识之后,开始登录开发者套件进行功能完善与开发,同时也可以接着优化点进行进一步优化,大家分小组积极讨论各自的算子实现,李阳老师和姚邦锐同学也参与到实践环节中,为各个组的同学解答他们在实践中需要的不同问题。

在实践环节结束后,还进行了抽奖,为这次丰富多彩的分享活动画上了完美的句号。

image.png​

我要发帖子