昇腾CANN 7.0 黑科技:大模型训练性能优化之道
本文分享自华为云社区《昇腾CANN 7.0 黑科技:大模型训练性能优化之道》,作者: 昇腾CANN 。
目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大模型预训练+微调”开发范式即可在实际业务场景取得理想的效果。从经济成本和时间成本来看,预训练是构筑各种行业模型的主要部分,优化大模型预训练具有非常重要的意义。
Open AI研究表明:大模型表现好坏强烈依赖于模型规模,弱依赖于架构;模型表现随着计算量、数据量和参数量提升;模型表现随着训练数据量和参数量的提升是可预测的。总体来讲,大参数量、大数据量、大计算量已经成为大模型表现好的主要因素。
来源:OpenAI Scaling laws for neural language models
这样的趋势给大模型训练带来什么挑战呢?
首先是算力问题。1750亿参数量的GPT-3训练3000亿token,需要算力3.14e11 TFLOPs,千卡A100集群训练时长需要22天左右(算力利用率约为50%);1.8万亿参数的GPT-4模型,训练13万亿token,需要算力2.15e13TFLOPs,2.5万卡A100训练时长达到90~100天(算力利用率32%~36%)。
其次是显存容量问题。1750亿参数量的GPT-3预训练大约需要3TB内存,大模型训练在短序列长度时,模型参数是内存占用的主要部分,在长序列长度时,激活内存是主要部分。总体来说,随着序列增长,需要的内存越来越大。
最后是通信开销问题。大模型预训练的高算力和大内存诉求往往通过分布式集群scale out的方式应对,但这将带来相当大的通信开销。具体包括模型并行通信开销、数据并行通信拖尾开销、流水并行的通信开销,另外还有流水并行引入的bubble。通常情况下,通信耗时约占E2E耗时的10%~30%,当存在更大通信域时,通信占比会更大。
因此,大模型预训练需要解决三个核心问题:大模型可部署,在内存受限的AI加速卡上放得下;充分发挥算力,提升计算效率,让训练流程更快;提升通信性能,降低通信开销,让计算更专注。
为了释放昇腾硬件算力,昇腾AI异构计算架构CANN发布更开放、更易用的CANN 7.0版本,全面兼容业界的AI框架、加速库和主流大模型,同时通过大颗粒算子深度融合、Kernel调度策略优化、通信并发流水等技术手段,解决大模型训练核心问题,使能大模型性能深度优化。
1 支持分布式切分策略+内存优化策略,让大模型放得下
学术界和工业界发明了很多大模型计算加速策略,包括最为经典的3D并行、序列并行、重计算、ZeRO系列的内存优化策略等等。通过这些并行策略,解决大模型放得下、训的快问题。基于昇腾AI处理器的多样算力和丰富的内存资源,异构计算架构CANN提供完备的技术栈功能,支持各种并行策略部署,也有很好的扩展能力,能支持新的并行算法和策略。下面来列举下在大模型训练中常用的计算加速策略:
- 3D并行(TP/PP/DP)
- 序列并行
来源:Reducing Activation Recomputation in Large Transformer Models
- Checkpoint完全重计算
- 选择性重计算
Self-attention中的softmax和dropout算子计算结果占用内存大,但计算量相对少,不保留正向计算结果到反向,在反向计算流程可以重新计算softmax和dropout的结果。
来源:Reducing Activation Recomputation in Large Transformer Models
- 内存优化:ZeRO1/2/3
来源:ZeRO Memory Optimizations Toward Training Trillion Parameter Models
2 充分发挥昇腾算力,提升计算效率,让模型跑得更快
在大模型计算优化方面,CANN通过高频算子优化、大颗粒算子融合、构建Transformer加速库等提升大模型计算效率。在调度方面,CANN通过执行器优化、算子Kernel重构等有效减少或避免host bound,提升算子在Host侧的下发性能。
1、高频算子优化,充分利用L1/L2 cache,发挥cube大算力
来源:Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM
矩阵乘MatMul算子是大模型的高频算子,在GPT-3模型中,占60%以上的计算量。CANN通过算子tiling优化合理切分数据,通过算子流水优化使得数据搬运与计算流水并行,同时,通过cube与vector算子融合,减少内存使用,最终MatMul算子Cube利用率提升显著,性能达到业界先进水平。
2、Flash/Sparse Attention大颗粒算子融合,减少显存耗用,提升计算性能
CANN基于Ascend C编程语言开发了Flash/Sparse Attention算子,支持fp16、bf16、fp32多种数据类型计算,并支持8K及以上的长序列,在bloom、llama、gpt-3等大模型有很好的应用。相对稠密模型,CANN还针对MOE稀疏模型进行了重要的优化,通过MOE融合算子优化内存占用,并实现All-to-All通信与计算并发流水,大幅度提升性能。
3、构筑Transformer加速库提升核心Kernel性能,助力模型加速
基于Transformer,业界已经诞生了很多大模型,CANN针对这些模型进行泛化性分析,构筑Transformer加速库,主要包括FlashAttention、MOE FFN、Norm类等等,加速库为大模型训练保证了高性能下界,客户基于此可以快速改造写出性能更优的算子。
Transformer高性能库构建策略
4、高性能Kernel动态调度和下发,有效减少或避免host bound
大模型训练不仅要提升AI Core上算子的计算性能,也需提升算子在host侧的下发性能。若host侧下发算子不及时,可能会导致AI Core空闲等待,算力利用率降低(即host bound现象)。为此,CANN通过重构runtime执行框架,包括优化执行图,提供多种策略调度器,可根据模型结构特点选择最优调度策略,重构算子的Shape推导、tiling策略实现高性能Kernel,采用用户态直通device、Host2Device快速拷贝技术实现高性能kernel launch,多措并举使能Tiling和Launch性能倍增,有效减少或避免host bound。
3 降低通信开销,让计算更专注
大模型训练随着集群规模和通信域的增大,通信耗时占比升高,逐渐成为主要性能矛盾。提升通信性能、降低通信开销显得愈发重要。学术界和工业界发明了很多高性能通信算法,在此不一一介绍。下面介绍两个充分利用通信带宽的优化点:
- 跨server all-reduce场景:SDMA&RDMA通信流水化
跨server实现all reduce一般分为四个阶段:server内reduce scatter、server间reduce scatter、server间all-gather,server内reduce scatter,在同一时刻,server间链路和server内链路只有一个在工作,由此会造成带宽的浪费。将通信数据切片排布成流水,使server内和server间的链路并发利用起来,通过小步快跑方式节省通信耗时。
跨server all-reduce场景:SDMA&RDMA通信流水化
- 单server内all-reduce场景:TP通信复用RDMA带宽
单server内SDMA通信(比如all-reduce)时,server间的RDMA通信链路通常是空闲的。此时将数据按照一定比例切分,分别由server内SDMA通信、server间的RDMA通信同时传输,从而充分利用server内和server间的通信链路并发,提升通信性能。
单server内all-reduce场景:TP通信复用RDMA带宽
4 总结
昇腾CANN借助根技术创新对大模型训练过程进行了系统级的优化加速,通过合理的分布式切分策略和内存优化策略,使大模型放得下;通过计算层、调度层和通信域的优化,使大模型跑得快,未来CANN也将持续研究、不断突破,以大模型赋能应用,加速千行万业智能化转型。
昇腾CANN 7.0 黑科技:大模型训练性能优化之道的更多相关文章
- CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!
摘要:CANN作为释放昇腾硬件算力的关键平台,通过深耕先进的模型压缩技术,聚力打造AMCT模型压缩工具,在保证模型精度前提下,不遗余力地降低模型的存储空间和计算量. 随着深度学习的发展,推理模型巨大的 ...
- php8.0正式版新特性和性能优化学习
前言 PHP团队宣布PHP8正式GA(链接).php的发展又开启了新的篇章,PHP8.0.0版本引入了一些重大变更及许多新特性和性能优化机制.火速学习下~ JIT(Just in Time Compi ...
- 大流量网站性能优化:一步一步打造一个适合自己的BigRender插件
BigRender 当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片 ...
- ZCGL大数据平台性能优化
对HBase数据库建索引 参见:基于Phoenix对HBase建索引 https://www.cnblogs.com/ratels/p/11203313.html 将HBase访问微服务整合到模块 ...
- 2.69分钟完成BERT训练!新发CANN 5.0加持
摘要:快,着实有点快. 现在,经典模型BERT只需2.69分钟.ResNet只需16秒. 啪的一下,就能完成训练! 本文分享自华为云社区<这就是华为速度:2.69分钟完成BERT训练!新发CAN ...
- 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅
摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...
- 千亿参数开源大模型 BLOOM 背后的技术
假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...
- 黑科技如何制造人类V2.0?
黑科技泛指人类尚未成熟但具有巨大潜力的科学技术,智能手机.大数据.扫码支付.电子地图等等都曾属于黑科技范畴,随着时间的推移,它们慢慢成熟,且展现出巨大的能力,影响人类进程,最终黑科技转变成人类伟大的创 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- [自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”
NOW, 步 将此黑科技传授予你~ 一.普通家电控制电路板分析 普通家电,其人机接口一般由按键和指示灯组成(高端的会稍微复杂,这里不考虑) 这样交互过程,其实就是:由当前指示灯信息,按照操作流程按相应 ...
随机推荐
- 解密长短时记忆网络(LSTM):从理论到PyTorch实战演示
本文深入探讨了长短时记忆网络(LSTM)的核心概念.结构与数学原理,对LSTM与GRU的差异进行了对比,并通过逻辑分析阐述了LSTM的工作原理.文章还详细演示了如何使用PyTorch构建和训练LSTM ...
- 一张图搞懂sql执行顺序
冲浪时发现一张很有意思的图,细分了一个长sql语句的执行顺序
- React同构与极致的性能优化
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 编程技巧 --- VS如何调试.Net源码
引言 如题,在VS中如何调试 .Net 源码呢? 一般来说,VS2022,都是默认启用 F12 转到定义能够看到源码,如果大家发现自己无法使用 F12 查看源码,可以在 "工具" ...
- 一个基于ASP.NET Core完全开源的CMS 解决方案
本文简介 MixCoreCMS是一个基于.NET Core框架的开源内容管理系统(CMS),提供了丰富的的基础功能和插件,是一款面向未来的企业 Web CMS,可轻松构建任何类型的应用程序.集成了Go ...
- timeSetEvent()函数定时器的使用
1.定时器函数的使用 微软公司在其多媒体Windows中提供了精确定时器的底层API支持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件.函数或过程的调用. ...
- 关于fstream对象的open方法报错183的问题
当使用fstream,ifstream,ofstream,这几种对象打开文件, 但文件已经存在的时候, 调用GetLastError()函数,会返回错误代码183, 这个代码代表该文件已经存在,是正常 ...
- c语言实现this指针效果
概要 由于目前在做一个比较复杂的嵌入式项目,想要借此提升一下代码的结构设计能力,所以想要以面向对象的思想来完成这个项目,即把每个板载外设资源视为一个对象,采用msp+bsp的模式,对每个bsp外设实现 ...
- 关于mac电脑突然搜不到家里wifi但手机却能连上的问题解决
今天用mac电脑时,突然遇到一个奇怪的问题,家里wifi用的好好的,突然就连不上了,在看电脑能搜索到的wifi,居然家里的wifi都没有搜索到,但自己的手机却是正常的,然后我再看看我另外一台windo ...