解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化

编者按:在刚刚结束的 PyCon China 2022 大会上,龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 Python+AI 算力优化》的技术演讲。本次演讲,作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 Python+AI 优化工作,以及在 ARM 云平台上部署 Python+AI 任务的最佳实践。

以下为本次演讲内容:

(图/朱宏林现场演讲)

我们的场景是 ARM 平台的和 AI 相关的任务,主要的目标是进行性能优化,具体来说我们首先关注的是深度学习推理任务(inference task),主要原因也是来自于业务需求。

这里说的 ARM 平台不是我们理解的终端设备,比如手机之类的,而是指服务端平台。在大家印象中,AI 任务,特别是深度学习的程序一般是跑在 GPU 或者 x86 的 CPU 上,出于功耗、成本、性能等因素的考虑,云厂商逐步开始建设 ARM 架构的服务平台,这是一个趋势。当然 ARM 平台还不是很成熟,许多软件还无法成功跑起来,更不要说提升性能了。

我们想要吸引一部分用户将AI应用从原先的 x86 平台上迁移到 ARM 平台上。这就要求 ARM 平台能提供更好的性能,或者更好的性价比。所以说如何整合 Python+AI 的相关软件使其发挥最好的性能成为了我们关注的重点

下文的分享整体分为两部分,一部分是介绍我们进行的优化工作,主要是跟矩阵乘法相关的优化,第二部分是关于 Python AI 应用在 ARM 云平台-倚天 710 上的最佳实践。

一、优化工作介绍

前面说我们的优化是和矩阵乘法相关的,那首先需要说明为什么我们会关注到这个。

这里有一个绕不开的场景就是深度学习,不管是前几年知名的 AlphaGo,还是当前火热的 ChatGPT,都用到了大量深度学习的技术,深度学习本身只是AI的一个分支,但却影响广泛,不容忽视。所以我们从深度学习开始切入,从当前最广泛使用的深度学习框架,TensorFlow 和 PyTorch 开始。此外,我们还需要结合硬件场景,即前面说到的 ARM 服务端平台,对于阿里云来说就是结合倚天 710 芯片。

深度学习的实现中包含大量的矩阵乘法,甚至有文章直接写出矩阵乘法是深度学习的核心。举个例子,我们熟知的卷积操作,实际上经过一系列的转换后,输入特征和卷积核会被转换为两个矩阵,然后进行矩阵乘法,输出的结果再解码成特征图,就完成了卷积。除此以外,全连接层也由矩阵乘法实现,当前流行的 Transformers 结构,被包括 ChatGPT 在内的各类 NLP 模型所使用,也包含大量矩阵乘法操作。

我们可以看一些例子:

可以看到,像 AlexNet、ResNet-50 之类的模型,在进行推理时,大约 90% 计算耗时在执行矩阵乘法。即使对矩阵乘法做一些微小的优化,影响也是很广泛的。

我们前面说的矩阵乘法,更准确的叫法是 GEMM,通用矩阵乘法,其实还包含系数和累加操作。但是时间复杂度仍然是 MNK 级别,主要还在于 AB 两个矩阵相乘。直观来看,深度学习涉及的矩阵乘法计算量很大,比如常见的卷积操作可能就涉及 5000 万次计算,所以优化就显得很有必要,右下图是最朴素的三层循环迭代法,这种做法通常非常慢,计算机科学家做了许多努力,从优化内存布局和利用向量指令出发,能够将性能提升 10 倍以上

内存布局主要分两步,第一步是对矩阵进行分块,即对于一个超大的矩阵,我们并不是一个一个按顺序计算,而是将矩阵切分为一个一个小块,分小块计算。第二步是对分出的小块,内部的元素序列进行重排,例如原来是按行排列的矩阵,那可能第一行四个计算好了,就需要取第二行的前四个,但是要取第二行就需要指针移动很长的距离,很容易造成 cache 不命中,于是需要重排,使得他们在内存上连续。优化内存布局主要目的是为了增加 cache 命中率,减少访存次数。

其次是利用向量化指令,类似 AVX 对于 x86 设备,NEON 对于 ARM 设备。向量化指令本质上是为了同时对多个数据进行计算,例如我们要对四组数据分别进行乘法,那么常规情况下需要执行四次,如果将它们对应放入向量寄存器中,只需要一条向量化指令,就可以同时得出四个结果,计算效率得到提升。当然这个是需要硬件支持。

因为 AI 推理大量使用了矩阵乘法,如今也有许多硬件对矩阵运算进行了加速:

  • NVIDIA Volta 架构引入了tensor core,可以高效地以混合精度处理矩阵乘
  • Intel AMX(Advanced Matrix Extensions) 通过脉动阵列在硬件层面支持矩阵乘
  • ARM SME(Scalable Matrix Extension) 支持向量外积运算,加速矩阵乘

目前市面上尚没有可以大规模使用的支持 AMX 或者 SME 的硬件,在这个阶段我们应该如何优化 CPU 上的 AI 推理算力呢?我们首先要了解 BF16 数据类型。

BF16(全称 Brain Floating Point),是由 Google Brain 开发设计的 16 位浮点数格式。

相比传统的 FP16 位浮点数,BF16 拥有和 FP32 一样的取值范围,但是精度较差。但对于深度学习来说,较低的精度并不显著影响结果,而较低的表示范围则会显著影响模型训练的好坏。

此外,BF16 还具有转换方便的特点,BF16 和 FP32 的互转只需要截断或填充尾数即可。

使用 BF16 还可以节约一半的内存,紧凑的内存表示通常意味着更高的计算吞吐。

最后,我们也有了硬件指令支持,可以直接对 BF16 数据进行操作。

需要说明的是 BF16 的扩展包含在 ARMv8.6 设备上,当然倚天 710 是 ARMv9 的指令集,同样支持。

我们主要通过 BFMMLA 来进行矩阵乘法计算,例如对于包含 128bit 的向量寄存器的设备来说:

  • 输入 A: 大小为 2*4 的 BF16 矩阵,按行存储
  • 输入 B: 大小为 4*2 的 BF16 矩阵,按列存储
  • 输出 C: 大小为 2*2 的 FP32 矩阵

BFMMLA 单指令完成 16 次乘法和 16 次加法,计算吞吐非常高。

当然这时候如果我们需要 C 是 BF16 类型的话,就需要应用转换指令,例如向量化指令 BFCVT,加速转换过程。

我们的目标还是给 tensorflow 和 pytorch 用户提供加速,这是整体的流程图,对于一个 AI 推理任务,实际上不论是 TensorFlow 还是 PyTorch 都不会自己直接去计算,而是叫个专门的计算后端,在 ARM 主要是两个,一个是 ARM Compute Library,另一个是 OpenBLAS,他们之间的关系如右图。

TensorFlow 在最近的版本中开始采用 oneDNN + ACL 作为计算后端,oneDNN 也是一层皮,实际的计算仍然是 ACL。用户实际上只需要设置一个环境变量,就可以在不该动代码的情况下获得 BF16 加速。这个改进是由 ARM 公司的研发人员首先完成了。具体操作例子如下:

# 假设 resnet.py 包含用户写的模型推理的代码
DNNL_DEFAULT_FPMATH_MODE=BF16 python3 resnet.py

PyTorch的情况比较复杂,PyTorch 支持 OneDNN + ACL,但无法很好的发挥性能,同时 PyTorch 支持 OpenBLAS 后端,因此可以通过 OpenBLAS 来享受 ARM bf16 扩展带来的性能收益。

OpenBLAS 的 BF16 的 GEMM 优化是由龙蜥社区理事单位阿里巴巴贡献的,于此同时,我们为了方便用户使用,也在 PyTorch 中加入了一个API,用户在模型执行前添加一行torch.set_float32_fast_math_mode("BF16"),就可以获得 BF16 加速,不必修改其他代码(需要说明,这个api还没有合入PyTorch,所以目前要使用我们提供的pytorch镜像才可以获得)。操作例子如下:

# ...
# 在模型执行前设置fast math mode
torch.set_float32_fast_math_mode("BF16")
# ...
# 执行模型
pred = model(x)
# ...

之后是一些性能测试的展示,我们测试了 OpenBLAS 纯矩阵计算的性能对比。分别记录了 GFLOPS 和执行时间两个指标。

然后测试 TensorFlow 和 PyTorch 的性能对比,在对比中,我们可以看到,得益于 BF16 扩展,最新的 ECS ARM 平台上的性能优于 x86 平台(g7)

二、Python AI应用在ARM云平台-倚天710上的最佳实践

现在介绍一下在 ARM 平台,特别是倚天 710 的用户,使用 TensorFlow 或 PyTorch 的最佳实践。

要知道软件版本的选择十分重要,随意选择 tensorflow 或者 pytorch 包可能遭遇:

  • 未适配 ARM 架构,安装失败
  • 软件未适配 BF16 扩展或者环境参数有误,无法发挥硬件的全部算力,性能打折
  • 需要精心选择计算后端,例如目前 pytorch下OpenBLAS 较快

在 TensorFlow 上,我们可以选择最新的两个官方版本, 2.10.1 或者 2.11.0(最新版本),才能够获得 ACL 的 BF16 加速。用户也可以选择阿里云的镜像,这个和 pip 安装的其实是一样的,没有区别。

对于 PyTorch 用户,官方版本只有在最新的 1.13.0 才能够获得 ACL 加速,但是正如前面所说的,实际性能并不突出。阿里云则提供了带最新 OpenBLAS 的 PyTorch,在 docker 拉取时标注 torch_openblas 就可以获得。此外,我们也提供了modelzoo 镜像,包含模型的测试代码和验证代码。

目前我们仍然在进行相关的工作,期待后续能为大家提供更加完善的镜像。欢迎大家入群一起探索相关技术。

AI SIG 主页地址:https://openanolis.cn/sig/AI_SIG

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:AugGPT: Leveraging ChatGPT for Text Data Augmentation

AugGPT:利用 ChatGPT 进行文本数据增强 摘要1 介绍2 相关工作2.1 数据增强2.2 小样本学习2.3 超大型语言模型2.4 ChatGPT:现在与未来 3 数据集3.1 亚马逊数据集3.2 症状数据集3.3 PubMed20k数据集 4 方法4.2 使用 ChatGPT 进行数据增强4.3 小样本文本分类…

好用的文献阅读插件(Easy Scholar、EasyPubMedicine、Sci-Hub X Now!)

目录 一、Easy Scholar 二、EasyPubMedicine 一、Easy Scholar Easy Scholar:自动显示期刊等级,帮助筛选优质论文。 安装: 点击浏览器右上角的“。。。”,选择“扩展”。 点击打开加载项 在浏览器的扩展商店中搜索“easy sch…

Zotero 6 文献管理 + 内置PDF阅读器 + 选中翻译

本来想叫《还在用知云?zotero 6内置PDF阅读器了 还带翻译插件的!》,想了想还是算了,不要做标题党,回归我朴实无华的标题吧。 如果你会用zotero只是来看翻译功能的,那你继续往下看。如果你还不会用zotero&a…

[科研神器]如何让ChatPDF帮你日读文献300篇

今天介绍一个新的工具ChatPDF,简直是读文献的绝对生产力啊。 我们要做的就是把PDF文件上传给它,让它帮你读,它会在几分钟内概述和理解整个文档你只需要提问就可以,而且支持中文。 ChatPDF的网址是:https://www.chatp…

【3款文献阅读的插件】

目录 01 easy Scholar 02 EasyPubMed 03 Sci-Hub X Now! 04 总结 重要事情说三遍:这个不涉及翻墙,这个不涉及翻墙,这个不涉及翻墙!!! 01 easy Scholar 点击下载文件,修改后缀名为zip文件&a…

文献阅读软件

文献阅读软件 上次对文献管理软件做了介绍,接下来对文献阅读及笔记整理软件进行介绍。 文献的基本格式是PDF,因此文献阅读软件的基本就是PDF阅读器,知网文献有专门的格式,没什么额外选择。因此,本文主要介绍的是PDF的…

文献阅读神器 ReadPaper

在以前我阅读文献的都是用的WPS,很多小伙伴用知云,但是今天我开始用ReadPaper了😄 推荐理由: 1.直接跳转参考文献 在一篇论文中参考文献,ReadPaper可以直接跳转阅读,不需要再去复制论文名字-搜索了。 就…

Python 带你花式过情人节

阅读文本大概需要 5 分钟。 一年 N 度的情人节又又又又又到了!有对象的人在享受着甜蜜的烦恼:今天 ta 会送我什么礼物?今天晚上去哪里度过?今天去哪里一起吃饭过节呢?啊!ta 竟然送我这么贵的礼物&#xff0…

这个情人节如何过得不一样?快来看哪个国家才是全球浪漫目的地 | 美通社头条...

美通社消息:这个情人节如何过得不一样?爱彼迎近期发布全球浪漫目的地,邀请情侣们住进令人怦然心动的房源,奔赴一场倾心已久的旅程。爱彼迎数据显示,泰国、马来西亚、菲律宾、巴西、南非等目的地,满足了情侣…

得分逼近ChatGPT,人类难以分辨!开源「原驼」爆火,iPhone都能微调大模型了

梦晨 发自 凹非寺来源 | 量子位 QbitAI 自动测试分数达到ChatGPT的99.3%,人类难以分辨两者的回答…… 这是开源大模型最新成果,来自羊驼家族的又一重磅成员——华盛顿大学原驼(Guanaco)。 更关键的是,与原驼一起提出的…

分享基个珍藏已久的良心网站,个个都很好用

推荐一:Poki 这几天4399要实名制了。玩起来挺麻烦的,还是换成Poki吧。也是一个收集游戏的网游网站,种类很多,有军事游戏,有动作游戏,有冒险游戏等等,我最喜欢的是公主换装游戏。 感觉瞬间回到…

GPT 4.0 你知道的和你不知道的?

GPT 4.0 人工智能聊天机器人 介绍GPT 4.0之前,先给大家介绍一下整理的一个类ChatGPT相关的工具,有可以总结论文的、微软作图的、反ChatGPT检测的、数据标注的等等工具,感兴趣的小伙伴可以访问:github链接 言归正传 今天我们主要…

【OpenAI 多模态预训练】VideoGPT?微软透露GPT-4或将在下周发布

【多模态预训练】VideoGPT?微软透露GPT-4或将在下周发布 先让我猜个名字,VideoGPT? 太绝了!看完ChatGPT之后就感觉OpenAI正在做多模态的预训练语言模型。万万没想到来的这么快。据介绍,GPT-4或将为多模态大模型&#…

趣链科技获数亿元C轮融资,晋升区块链核心技术独角兽

近日,区块链明星企业趣链科技官方宣布完成数亿元C轮融资,本轮融资由知名基金易方达资本领投、龚虹嘉带领的银宏基金跟投。相关报道显示,趣链科技这笔融资是今年以来国内区块链企业融资额最高的一起,公司整体估值达到10亿美元&…

Ayar Labs 在 C 轮融资中筹集了 1.3 亿美元

Boardman Bay Capital Management 领投,惠普企业和 NVIDIA 共同推动 Ayar 光学 I/O 的商业化 Ayar Labs 已获得由 Boardman Bay Capital Management 牵头的 1.3 亿美元额外融资。这笔资金用于推动 Ayar 光学 I/O 解决方案的商业化,该解决方案基于专利方…

Anthropic完成4.5亿美元C系列轮融资:Spark Capital领投

雷递网 乐天 5月28日 生成式AI公司Anthropic日前完成C系列轮4.5亿美元融资,由Spark Capital领投,估值可能超过41亿美元。 Anthropic其他投资方包括谷歌、Salesforce、Zoom、Sound Ventures、Menlo Ventures。 Anthropic首席执行官Dario Amodei说&#xf…

C轮累积融资1亿美金 禾多科技如何靠自我造血能力赢得资本青睐?

自动驾驶当前在全球范围内受到广泛关注,是汽车行业正在集中力量攻克的新领域。据英特尔预计,2050年仅自动驾驶汽车的市场规模将达到7万亿美元。引得资本和科技巨头们纷纷“下注”。 近日,全栈自动驾驶科技公司禾多科技宣布,已完成…

神策数据获 3000 万美元 C+ 轮融资,A、B、C 轮资方全部跟投

5 月 19 日,神策数据 5 周年产品暨融资线上发布会正式召开。神策数据创始人 & CEO 桑文锋在发布会上宣布重磅融资信息,即获得由襄禾资本领投,晨兴资本、DCM 资本、华平投资、红杉资本中国基金、线性资本、明势资本跟投的共计 3000 万美元…

第四范式完成C+轮融资,投后估值约20亿美元

相关阅读: 数据猿专访丨第四范式胡时伟:AI的商业化才刚刚开始,谈“收割”尚早【视频版点这里】 大数据产业创新服务媒体 ——聚焦数据 改变商业 数据猿报道 第四范式近期宣布完成C轮融资,C轮总计融资金额达2.3亿美元,…

神策数据获3000万美元C+轮融资,A、B、C轮资方全部跟投

“5月19日,神策数据5周年产品暨融资线上发布会正式召开。神策数据创始人 & CEO 桑文锋在发布会上宣布重磅融资信息,即获得由襄禾资本领投,晨兴资本、DCM 资本、华平投资、红杉资本中国基金、线性资本、明势资本跟投的共计 3000 万美元的 …