AI加速引擎PAI-TorchAcc:OLMo训练加速最佳实践
作者:黄奕桐、沈雯婷、艾宝乐、王昂、李永
摘要
阿里云机器学习平台PAI开发的Pytorch训练加速框架PAI-TorchAcc已接入最新开源的大语言模型 OLMo。 在保证模型效果和易用性的前提下,PAI-TorchAcc相对 PyTorch 性能在 OLMo 1B 上加速比达到 1.64X,在 OLMo 7B 上加速比达到 1.52X。 本文分析了 PAI-TorchAcc 的性能收益来源。
1、PAI-TorchAcc 简介
PAI-TorchAcc(Torch Accelerator)是阿里云机器学习平台开发的Pytorch上的大模型训练加速框架。
PAI-TorchAcc借助社区PyTorch/XLA,通过 GraphCapture 技术将 Pytorch 动态图转换为静态计算图,基于计算图进行分布式优化、计算优化、显存优化等,为包括大语言模型在内的Pytorch上的模型提供高效训练支持。相比于社区Pytorch/XLA,PAI-TorchAcc具有更好的易用性、更高的性能和更丰富的功能。更详细的介绍可以见文章:AI加速引擎PAI-TorchAcc:整体介绍与性能概述。
2、完全开源的 OLMo 模型
OLMo (Open Language Model) 是由艾伦人工智能研究所等机构发表的完全开源的大语言模型。OLMo 模型提供了完整的训练数据集、代码、checkpoint 等,几乎完全开源了一个大语言模型从零开始训练所需的代码和数据。不仅如此,OLMo 模型在多项核心指标上接近而且部分超过 LLAMA2 模型。
3、如何使用 PAI-TorchAcc 加速 OLMo 模型训练?
通过 PAI-TorchAcc 加速模型训练一般需要三个步骤:
- 定义 torchacc.Config,并指定加速选项。
- 调用 torchacc.accelerate,并传入model和config,完成加速训练的准备。
- 通过torchacc.AsyncLoader对 torch dataset_loader 进行封装,加速数据加载。
# 定义 model 和 dataloader model = AutoModelForCausalLM.from_pretrained("allenai/OLMo-1B", trust_remote_code=True) tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-1B", use_fast=False, trust_remote_code=True) train_loader = get_dataloader(tokenizer) # 定义 TorchAcc Config config = torchacc.Config() config.compute.bf16 = True # 开启 bf16 config.compute.acc_scaled_dot_attn = True # 自动替换 Torch ScaledDot 为torchacc flash attn 版本 config.dist.fsdp.size = torchacc.dist.world_size() # 开启 FSDP,设置 FSDP 数目 config.dist.fsdp.wrap_layer_cls = {"OlmoSequentialBlock"} # 将OLMo模型的decoder layer进行FSDP封装 # 一行代码加速模型 model = torchacc.accelerate(model, config) # 异步加速数据加载 train_loader = torchacc.AsyncLoader(train_loader, model.device) # training loop ...
阿里云 DSW Gallery 现在有更完整的 OLMo 模型加速示例:TorchAcc加速OLMo模型训练。
4、PAI-TorchAcc 的性能表现
以单机 8 卡 A100 为例,在 OLMo 1B 上,PAI-TorchAcc 相比 PyTorch FSDP 加速比为 1.64X;在 OLMo 7B 上,PAI-TorchAcc 相比 PyTorch FSDP 加速比为 1.52X。
图 1: PAI-TorchAcc 相比 PyTorch FSDP 在 OLMo 模型上的性能提升
5、PAI-TorchAcc 为何这么快?
在 OLMo 模型的性能对比中,PAI-TorchAcc和 PyTorch 都采用相同的分布式策略 FSDP(ZeRO-3)。PAI-TorchAcc 通过计算优化、通信优化、显存优化等,在 OLMo 7B 上相比 PyTorch 达到了 1.52X 的加速比。下面我们以 OLMo 7B 为例分析 PAI-TorchAcc 的性能收益来源。
计算优化&通信优化
为了方便对比,我们将 PAI-TorchAcc和 PyTorch 的 micro batch size都设置为 2 进行对比。
从图 2 中可以看出,通过计算优化,PAI-TorchAcc 将访存密集型算子的时间优化为 PyTorch 对应算子时间的 45.56%,整体的加速比约为 1.25X。通过通信优化,PAI-TorchAcc 能够将计算和通信更好进行 overlap,将没有 overlap 的通信占整体时间的占比从 8.19%降低到 2.43%。
通过计算优化&通信优化,PAI-TorchAcc 相比PyTorch达到了 1.32X 的加速比。
图 2: micro batch size=2 时,PAI-TorchAcc 相比 PyTorch FSDP 在 OLMo 7B 上的性能提升
显存优化
在 PAI-TorchAcc 中,由于 PyTorch 模型已经转换为静态计算图,所以可以使用比较多的显存优化方法。例如,通过对算子的执行顺序进行调整,可以得到更小的显存峰值;通过更优的显存分配算法,可以让显存碎片更少,减少显存使用;通过 patten match 等方式将 attention 替换为使用显存更少的 flash attention 等等。
通过显存优化,PAI-TorchAcc 的最大 micro batch size 能够达到 4,而 PyTorch 的最大 micro batch size 只能达到 2,这使得PAI-TorchAcc 能够获得更高的性能加速比,这一部分的性能收益主要来自于计算密集型算子。
如图 3 所示,PAI-TorchAcc micro batch size=4 相比 micro batch size=2 的吞吐加速比为 1.15X,这使得PAI-TorchAcc 相比 PyTorch 最终达到了 1.52X 的加速比。
图 3: 在不同 micro batch size 下,PAI-TorchAcc 相比 PyTorch FSDP 在 OLMo 7B 上的性能提升
6 总结
本文介绍了如何使用 PAI-TorchAcc 加速 OLMo 模型训练,分析了PAI-TorchAcc 的性能收益来源。实际上,PAI-TorchAcc可以通过并行化策略、显存优化、计算优化和调度优化等方法来加速更多的大语言模型训练,目前已接入常见的开源大模型,包括LLaMA、LLaMA-2、BaiChuan、ChatGLM、QWen等。除了大语言模型之外,PAI-TorchAcc也易于接入视觉类、语音类模型,并大幅度提升训练性能。欢迎在阿里云上使用该产品。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
通义千问1.5(Qwen1.5)大语言模型在PAI-QuickStart的微调与部署实践
作者:汪诚愚(熊兮)、高一鸿(子洪)、黄俊(临在) Qwen1.5(通义千问1.5)是阿里云最近推出的开源大型语言模型系列。作为“通义千问”1.0系列的进阶版,该模型推出了多个规模,从0.5B到72B,满足不同的计算需求。此外,该系列模型还包括了Base和Chat等多个版本的开源模型,为全球的开发者社区提供了空前的便捷性。阿里云的人工智能平台PAI,作为一站式的机器学习和深度学习平台,对Qwen1.5模型系列提供了全面的技术支持。无论是开发者还是企业客户,都可以通过PAI-QuickStart轻松实现Qwen1.5系列模型的微调和快速部署。 1、Qwen1.5系列模型介绍 通义千问1.5在先前发布1.0版本模型的基础上进行了大幅更新,主要体现在如下三个方面: 多语言能力提升:Qwen1.5在多语言处理能力上进行了显著优化,支持更广泛的语言类型和更复杂的语言场景。 人类偏好对齐:通过采用直接策略优化(DPO)和近端策略优化(PPO)等技术,增强了模型与人类偏好的对齐度。 长序列支持:所有规模的Qwen1.5模型均支持高达32768个tokens的上下文长度,大幅提升了处理长文本的能力。 ...
- 下一篇
我的历时一年的独立开发故事
在2023年2月5日,当我从赫尔辛基飞往上海浦东机场时,并没有预见到接下来一年的生活将会是怎样的。经过几个月悠闲轻松的日子后,我开始了独立开发的征程。首先我会简要介绍一下成果,然后分享我对独立开发的看法以及一些技术层面的经验。 经过一年的努力,截至目前,我的成果如下: 支出2000美元,主要云服务支出 收入0,注册用户0 一个可运行的系统: https://lets-script.com 我不反对独立开发,但要认清现实,如果你的目标是通过独立开发发财致富,那么一个可能的结果是(开玩笑): 一年,众叛亲离 二年,妻离子散 三年,灰飞烟灭 如果你有这样的觉悟,或者不是从致富的角度出发,独立开发也是一种宝贵的经历。 接下来,我将分享我开发的产品以及一些技术经验。请允许我以一个业余选手的身份谈论这些想法。。 产品理念 我希望打造一个以脚本为核心的简单任务执行平台。市面上的产品往往认为Shell脚本不够友好,因此会在外层添加各种包装,有的使用YAML配置,有的采用自定义编程逻辑,类似于Github Action。然而,Github用一个checkout插件来完成git checkout的功能,我...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作