晓查 发自 凹非寺
量子位 报道 | 公众号 QbitAI

“研究芯片光砸钱不行,要砸数学家、物理学家。”

任正非今年5月在接受《科技日报》专访时如是说。据任正非透露,华为已拥有700多名数学家。

现在,这些数学家的基础研究,让华为在AI和芯片等领域得到了回报。

最近,来自郑州数学工程与先进计算国家重点实验室的赵捷老师与华为MindSpore团队合作,凭借着在基础数学上的能力,解决了一个AI芯片优化的重要问题,获得了顶级学术会议MICRO 2020的最佳论文提名,MICRO是计算机体系结构领域的国际顶级会议,这也是中国团队53年第3次入围该大会的最佳论文提名。

这篇论文主要研究了如何优化在AI芯片上的程序编译,尽可能的“榨干”AI芯片的性能,不仅支持对华为自研的昇腾910芯片,也支持现在主流的NVIDIA A100/V100 GPU,今后还会支持更多硬件。

在CPU上,其方法相较PolyMage和Halide分别平均性能提升了20%和33%。在GPU上,其方法比Halide提供了17%的平均性能改进。在AI芯片华为昇腾910上,该论文提出的方法可将ResNet-50模型整个执行时间提升16%。

华为不仅发表了论文,同时快速推进这项研究的落地。基于Polyhedral模型的算子自动生成技术MindAKG现已集成到AI框架MindSpore中。

MindAKG的作用就是对深度神经网络中的算子进行优化,利用Polyhedral模型来解决AI应用在不同芯片架构中的性能自动优化难题。

Polyhedral模型则是MindAKG的数学核心。

目前所有MindAKG的源代码早已在Gitee上开源代码,可谓所见即所得的典范。论文合作者赵捷老师目前也是MindSpore社区SIG-AKG的核心成员。业界少见的坚定开源开发如此大规模复杂技术,拥有如此开源雄心的MindSpore无疑将极大的考验其他开源AI框架的“硬核程度”。

基于Polyhedral的编译技术

Polyhedral编译技术历史悠久,最早可追溯到大型机时代研究程序自动并行问题开始。两位图灵奖得主Richard Karp、Leslie Lamport先后为此提出相关理论。

Polyhedral模型需要在编译器中构建一个非常好的数学模型来计算调度。

这种数学模型底层是通过解决整数线性规划问题来得到最优解的,但整数线性规划问题的求解过程是一个NP完全问题,因此只能通过一些近似方法求解。

如果这种数学模型的调度不够好,那么可能还不如手工编写调度性能。

如何构建Polyhedral模型的整数线性规划问题,使其能够达到手工编写调度性能相当的结果,是当前研究的核心难点。

既然是NP完全问题,如何降低Polyhedral模型求解的复杂度,也是当前需要解决的问题。

Polyhedral模型涉及大量的基础数学理论,包括但不限于线性代数、空间几何、最优化理论和矩阵论,以及基础计算机理论科学的知识如图论、数理逻辑等,这些知识点本身并不复杂,但是将这些知识点统一地表示在一个模型里,导致该模型的比较复杂,难以理解,入门的“门槛”比较高。

当前国内从事Polyhedral模型研究的人员较少,但在国外,多家科技厂商对该技术的研究十分重视,Google、Facebook、NVIDIA这几家AI领军企业都在研究利用Polyhedral模型来实现算子层的循环优化。

华为MindSpore团队也集结了Polyhedral领域的顶尖专家,全力攻关新的调度算法。

华为自研AI框架MindSpore利用Polyhedral模型,实现了昇腾系列芯片的算子自动生成器MindAKG,采用了可定制化的求解算法,保证程序性能的同时,有效缓解了编译时长的问题。

MindSpore的应用创新

这篇新论文的研究重点是利用Polyhedral模型来解决算子自动生成的问题,与Halide和TVM采用的”compute+schedule”的方式不同。本文研究的算子自动化技术,无需手动编写算子调度算法。

在此基础上,这项研究有以下关键创新点:

首先,这项工作自动化地实现了一种循环分块和合并的新组合。这种组合在已有的基于Polyhedral的自动编译过程中没有被考虑到,因为现有的Polyhedral编译流程限定了这两种循环变换的组合顺序。

同时,这种组合在已有的基于手工编写调度的编译工作中也很难实现,因为在复杂场景下,底层计算和数据之间的映射关系很难用手工编写的方式指定,所以基于手工编写调度的方式很难深入和系统地构建这种组合。

其次,该研究工作在提升程序性能的同时,又有效地缓解了现有Polyhedral编译技术的时间复杂度问题。

通常性能的提升和时间复杂度的降低是矛盾的,但这项研究由于避开了使用前面提到的整数线性规划问题来求解调度的过程,从而能在降低编译时间复杂度的同时,保证了程序性能的显著提升。

最后,这项研究工作具有很好的可扩展性,可支持多种异构硬件架构的代码自动生成,包括Intel的CPU以及NVDIA的GPU。特别地,这项工作已经在华为自研AI框架MindSpore的算子自动生成器MindAKG中落地,可支持昇腾系列AI芯片上的算子自动生成。

通过对包括神经网络、图像处理、稀疏矩阵计算、线性代数等应用领域在内的11项基准测试实验,该研究证明其方法能在先进的CPU、GPU及AI芯片架构上获得有效的性能改进。

在AI芯片华为昇腾910上,该论文提出的方法可将ResNet-50模型整个执行时间提升16%。

代码已开源

华为MindAKG相关代码已经在Gitee开源,用户既能从MindSpore侧构建,也能独立编译运行。

MindAKG当前已支持华为自研昇腾AI芯片、GPU V100/A100等硬件上的高性能算子自动生成。

MindAKG主要流程可以分为四个部分:

  • 规范化:为了解决polyhedral表达能力的局限性(只能处理静态的线性程序),需要首先对计算公式IR进行规范化。规范化模块中的优化主要包括自动运算符inline、循环拆分和公共子表达式优化等。
  • 自动调度:自动调度模块基于polyhedral技术,主要包括自动向量化、自动切分、依赖分析和数据搬移等。
  • 指令发射:指令发射模块的优化主要包括循环规范化、标签自动生成和指令发射等。
  • 后端优化:后端优化模块的优化主要包括双缓冲区、存储重写和同步指令插入等。

MindSpore期待开发者加入

今年国产AI框架如雨后春笋一般涌现,华为MindSpore也是其中一员。华为也是少有的具有自研AI框架、AI推理芯片、AI训练芯片的国内厂商。

华为Polyhedral技术获得MICRO最佳论文的提名,也说明了华为在AI基础技术上获得了国际认可。让我们看到了任正非口中的数学家在华为AI中起到的最大作用。

华为MindSpore不是国内最早开源的AI框架,却靠着在基础技术上的投入快速得到学界和开发者的认可。

但不可忽视的是,生态才是AI框架最重要的生命力,作为一个正在快速成长的AI社区,MindSpore需要AI开发者积极加入,一起引领AI创新,共同成长。

12月14日至25日,MindSpore社区将在目前已展开过MSG活动的12个城市,开展别开生面的“MindCon极客周”活动,在已渐寒冷的冬日,开发者每天聚集在一个城市,修复社区bug,分享学习心得,还可以参加昇腾模型王者挑战赛的青铜赛段。这次活动还首次通过点亮城市的积分评比(新增star积10分、完成bugfix积100、完成青铜赛段任务积200分)方式,12个城市PK产生明年6月第二届MindCon极客周的主办城市。想要了解像AKG这样黑科技的开发者,快来报名吧!

论文地址:
https://www.microarch.org/micro53/papers/738300a427.pdf

开源地址:
https://gitee.com/mindspore/akg

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

华为代码规范_53年国内唯三,华为MindSpore论文获顶会最佳论文提名相关推荐

  1. 53年来国内唯三,MindSpore加速昇腾芯片论文获国际顶会MICRO最佳论文提名

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 "研究芯片光砸钱不行,要砸数学家.物理学家." 任正非今年5月在接受< ...

  2. GPT-3等三篇论文获NeurIPS 2020 最佳论文奖!华人一作获时间检验奖

    作者 | AI科技评论 刚刚,NeurIPS 2020在官网公布了2020年度最佳论文奖和时间检验奖两项大奖! 今年一共有三篇论文共同获得最佳论文奖,其中第二篇获奖论文就是来自OpenAI团队打造的今 ...

  3. 阿里达摩院获KDD 2022最佳论文,国内企业首次获奖

    来源:机器之心 8 月 18 日,全球数据挖掘领域顶级会议 KDD 2022 大奖公布,阿里巴巴达摩院团队斩获应用科学方向"最佳论文奖",这是中国企业首次获得该重磅奖项. KDD( ...

  4. 中国军团称霸KDD:华人博士斩获最佳论文,清华北大中科大华为等榜上有名

    乾明 鱼羊 栗子 安妮 一璞 边策 发自 凹非寺  量子位 报道 | 公众号 QbitAI 又一全球AI顶会,尽是中国力量举杯相庆. KDD,数据挖掘领域国际最高级别会议,今年在美国阿拉斯加州举行,最 ...

  5. 代码规范之华为公司代码规范

    华为公司代码规范 转于http://blog.sina.com.cn/s/blog_61176a740100ffer.html 内容简要:写代码习惯以及注释的要求. 1-1:程序块要采用缩进风格编写, ...

  6. Verilog代码规范(三) -- assign always for

    这一节简单聊聊 assign & always & for 三种语句中会出现的代码规范问题. 代码规范(三) 一.assign语句 1. 数值的实际位宽大于指定的位宽会导致截位.如果截 ...

  7. React Native三端同构(二: webpack@4脚手架构建和项目代码规范)

    (一)前言 一个完整的web开发手脚架,应该包含以下 babel-loader 图片 音视频 字体 样式处理等loader 开发环境配置 生产环境配置,流程化前端多生产构建 生产环境打包优化, 如构建 ...

  8. Android进阶之路 - 代码规范

    后来 - 回头再看该篇的时候,发现当项目处于中后期的时候,命名规范还是不太严谨,扩展性有限,所以推荐各位可以借鉴阿里.美团.华为等大厂的命名规范 ~ 关于代码规范(主要针对Android),我于202 ...

  9. 上手评测国内第一的华为云桌面,企业远程安全办公首选

    目录 前言 华为云桌面的特性和优势都有哪些? 1. 安全可靠,奠定企业稳定基石 1.1 云管端全方位安全防护 1.2 安全策略按需管控,保障数据安全 1.3 数据加密存储安全可靠 2. 降本增效,助力 ...

最新文章

  1. java fromstring_Java UUID fromString()方法与示例
  2. MySQL-索引优化篇(2)_使用索引扫描来优化排序
  3. GitLab CI持续集成配置方案
  4. 微信小程序打开pdf文件;uni-app下载打开pdf文件;uni-app微信小程序下载打开pdf文件预览;
  5. 转:VMware、微软等四种主要的网络IO虚拟化模型
  6. 讲真话的朋友才是我们需要的!
  7. UITableView 系列一 :基本使用方法 (显示,删除,添加图片,添加样式等) (实例)...
  8. PHP中preg_match_all正则匹配出需要的内容
  9. Windows内核驱动Hook入门
  10. 【好玩的代码雨(附源代码
  11. python双线性插值函数_OpenCV ——双线性插值(Bilinear interpolation)
  12. 开氏温度与摄氏度换算_温度是怎么来的,有没有物质没有温度?
  13. c语言输出字母空心菱形,C语言实现打印菱形和空心菱形
  14. 已知华氏温度f c语言,编程题:已知两种温度的换算公式C=(5/9)(F-32),试编写一个程序输入华氏度F,输出摄氏度。...
  15. 微信小程序文本如何换行
  16. matplotlib隐藏坐标轴
  17. SpringBoot后台管理+Uniapp(混合APP)前端 之 酒店住宿+景点下单管理系统(SpringBoot前后端分离)
  18. 百度AI——人脸识别的简单应用
  19. 白嫖高级神器,不付费真香!
  20. 数字后端:track的作用与创建

热门文章

  1. 【拔刀吧少年】之shell编程规范与变量
  2. window7不要光盘修复计算机,Win7若崩溃了就靠它——Win7系统修复光盘制作方法解析...
  3. php应用编程,极客编程必备的五大PHP开发应用_PHP
  4. java 短语_从Java中的文本文件中提取短语
  5. SAE 助力「海底小纵队学英语」全面拥抱 Serverless,节省 25% 以上成本
  6. SAP(HANA+S/4)上云基础环境部署最佳实践
  7. 监控最佳实践--redis及业务接口
  8. linux系统下怎么修改sshd端口?
  9. ORA-00257: archiver error. Connect internal only, until freed.
  10. C# WPF动画——小游戏