过去几年,自然语言处理(NLP)领域发展迅速。 虽然硬件有所改进,例如 NVIDIA 和亚马逊的最新一代加速器,但高级机器学习 (ML) 从业者仍然经常遇到跨多个 GPU 扩展其大型语言模型的问题。
在这篇博文中,我们简要总结了大型和小型 NLP 模型的兴起,主要是通过 Hugging Face 提供的抽象和 Amazon SageMaker 的模块化后端。 我们特别强调了在 SageMaker 模型并行库中推出的四个附加功能,这些功能为客户解锁了 175 亿个参数的 NLP 模型预训练和微调。
我们在 SageMaker 训练平台上使用了这个库,在 32 ml.p120d.4xlarge 实例和 24 亿个参数上实现了每秒 175 个样本的吞吐量。 我们预计,如果我们将其增加到 240 个实例,则整个模型将需要 25 天的时间来训练。
有关模型并行性的更多信息,请参阅论文 Amazon SageMaker 模型并行性:用于大型模型训练的通用且灵活的框架.
您还可以在我们的网站上查看我们用来生成这些性能数据的 GPT2 笔记本 GitHub存储库.
要了解有关如何在 SageMaker 模型中并行使用新功能的更多信息,请参阅 PyTorch 的 SageMaker 模型并行库的扩展功能及 与 SageMaker Python SDK 一起使用.
Amazon SageMaker 上的 NLP – Hugging Face 和模型并行性
如果您不熟悉 Hugging Face 和 NLP,那么您需要了解的最大亮点是使用自然语言处理 (NLP) 的应用程序开始达到人类水平的性能。 这主要是由一种学习机制驱动的,称为 关注我们,这产生了一个深度学习模型,称为 变压器,这比以前的深度学习顺序方法更具可扩展性。 现在名闻遐迩 BERT模型 是为了利用变压器而开发的,并在此过程中开发了几种有用的 NLP 策略。 NLP 内外的变形金刚和模型套件都受到 BERT 的启发, 是您的 Google 搜索结果背后的主要引擎, 在你的 谷歌翻译结果及 许多新的初创公司.
SageMaker 和 Hugging Face 合作使客户比以往任何时候都更容易。 我们推出了 Hugging Face 深度学习容器 (DLC),供您直接从 Hugging Face 训练和托管预训练模型 超过 26,000 个模型的存储库。 我们推出了 SageMaker 训练编译器 让您将 Hugging Face 训练循环的运行时间加快 50%。 我们还整合了 Hugging Face 旗舰变形金刚 SDK 我们的分布式训练库 让你的 NLP 模型比以往更容易扩展。
有关 Amazon SageMaker 上 Hugging Face Transformer 模型的更多信息,请参阅 支持拥抱脸变压器模型。
使用 SageMaker 模型并行库进行大规模 NLP 模型训练的新功能
在 AWS re:Invent 2020 上,SageMaker 推出了分布式库,可在云上提供最佳性能,用于训练计算机视觉模型,例如 面罩-RCNN 和 NLP 模型,例如 T5-3B。 这可以通过在 AWS 上比 NCCL 快 20-40% 的增强型通信原语以及使超大型语言模型能够扩展到数十到数百到数千个 GPU 的模型分发技术来实现。
SageMaker 模型并行库 (SMP) 始终让您能够在 PyTorch 中获取预定义的 NLP 模型,无论是通过 Hugging Face 还是其他地方,并将该模型分区到集群中的多个 GPU 上。 换句话说,SMP 将您的模型分解成更小的块,这样您就不会遇到内存不足 (OOM) 错误。 我们很高兴添加对大型模型至关重要的额外内存节省技术,即:
- 张量并行度
- 优化器状态分片
- 激活检查点
- 激活卸载
您可以将这四个功能结合起来,以更有效地利用内存并训练下一代极端规模的 NLP 模型。
分布式训练和张量并行
要了解张量并行性,了解有多种分布式训练或并行性会很有帮助. 您可能已经熟悉最常见的类型, 数据并行。 数据并行的核心是这样工作的:向集群添加一个额外的节点,例如在 SageMaker 估算器中从一到两个 ml.EC2 实例。 然后,您使用数据并行框架,例如 Horovod、PyTorch 分布式数据并行或 SageMaker 分布式。 这会创建模型的副本,每个加速器一个,并处理将数据分片到每个节点,同时在神经网络的反向传播步骤中将所有结果汇总在一起。 想想分布式梯度下降。 数据并行性在服务器中也很流行; 您正在将数据分片到所有节点上的所有 GPU 中,偶尔也会分片到 CPU 中。 下图说明了数据并行性。
模型并行 略有不同。 我们不会复制相同的模型,而是将您的模型分成几部分。 然后我们管理它的运行,所以你的数据在数学上仍然以完全相同的方式流过你的神经网络,但是你的模型的不同部分位于不同的 GPU 上。 如果您使用的是 ml.p3.8xlarge,则您有四个 NVIDIA V100,因此您可能希望将您的模型分成 4 块,每个 GPU 一块。 如果您最多跳到两个 ml.p4d.24xlarge,则集群中总共有 16 个 A100,因此您可能会将模型分成 16 个部分。 这有时也被称为 管道并行性。 这是因为网络中的层集是跨 GPU 划分的,并以流水线方式运行以最大化 GPU 利用率。 下图说明了模型并行性。
为了使模型并行性大规模发生,我们需要第三种分布: 张量并行. 张量并行进一步应用了相同的概念——我们分解了神经网络的最大层,并将这些层的一部分放置在不同的设备上。 当您使用 175 亿个或更多参数并尝试将几条记录连同模型的某些部分一起放入 RAM 以训练该转换器时,这很重要。 下图说明了张量并行性。
启用 张量并行度,在 smp 选项中设置 你传递给你的估算器。
在前面的代码中, pipeline_parallel_degree
根据我们上面讨论的管道并行性,描述了您的模型应该分片的段数。 另一个词是 分数.
要启用张量并行性,请设置 tensor_parallel_degree
到你想要的水平。 确保您选择的数字等于或小于每个实例的 GPU 数量,因此对于 ml.p8d.4xlarge 机器不大于 24。 有关其他脚本更改,请参阅 使用张量并行运行 SageMaker 分布式模型并行训练作业.
ddp 参数是指分布式数据并行。 如果您使用数据并行或张量并行,则通常启用此功能,因为模型并行库依赖于 DDP 来实现这些功能。
优化器状态分片、激活卸载和检查点
如果您有一个非常大的模型,您还需要一个非常大的优化器状态。 为 SMP 准备优化器很简单:只需在脚本中从磁盘中提取它并将其加载到 smp.DistributedOptimizer()
目的。
确保通过设置在估算器中启用此功能 shard_optimizer_state
为真 smp_options
您用于配置 SMP:
与张量和管道并行性类似,SMP 分析您的模型和您的世界大小(所有训练节点中的 GPU 总数),以找到最佳放置策略。
在深度学习中,中间层的输出也称为激活,这些需要在前向传递期间存储。 这是因为它们需要用于反向传播中的梯度计算。 在大型模型中,将所有这些激活同时存储在内存中会造成严重的内存瓶颈。 为了解决这个瓶颈,您可以使用 激活检查点,SageMaker 模型并行库中的第三个新功能。 激活检查点,或 梯度检查点, 是一种通过清除某些层的激活并在反向传递期间重新计算它们来减少内存使用的技术。 这有效地用额外的计算时间换取了减少的内存使用。
最后, 激活卸载 直接使用激活检查点。 这是一种在模型训练期间仅在 GPU RAM 上保留少量张量激活的策略。 具体来说,我们在前向传递期间将检查点激活移动到 CPU 内存,并将它们加载回 GPU 以进行特定微批次的反向传递。
微批量和放置策略
有时会引起客户混淆的其他主题是微批量和放置策略。 这两个都是您可以提供给 SageMaker 模型并行库的超参数。 在实现依赖于流水线并行性的模型时,特别是微批次是相关的,例如那些至少有 30 亿个或更多参数的模型。
微批量是小批量的子集。 当您的模型处于其训练循环中时,您定义了一定数量的记录来拾取并通过层向前和向后传递——这称为 小批量,或者有时只是一个 批量. 完整通过您的数据集称为 时代. 为了通过管道并行运行前向和后向传递,SageMaker 模型并行库将批次分割成更小的子集,称为微批次,一次运行一个,以最大限度地提高 GPU 利用率。 结果,每个 GPU 上的示例集要小得多,称为微批处理。 在我们的 GPT-2 示例中, 我们直接在训练脚本中添加了 1 个微批次的默认值.
当您扩大训练配置时, 强烈建议您相应地更改批量大小和微批量大小. 这是确保良好性能的唯一方法:在依赖管道并行性时,您必须将批量大小和微批量大小视为您的整体世界大小的函数。
放置策略是如何在物理上告诉 SageMaker 放置模型分区的位置。 如果您同时使用模型并行和数据并行,设置 placement_strategy
至 “cluster”
将模型副本放置在物理上彼此靠近的设备 ID (GPU) 中。 但是,如果您真的想对并行策略更加规范,可以将其分解为三个字母的不同组合的单个字符串:D 表示数据并行, P
表示管道并行性,并且 T
用于张量并行性。 我们通常建议保留默认位置 "cluster"
,因为这最适合大规模模型训练。 “集群”放置对应于“DPT
“。
有关放置策略的更多信息,请参阅 具有张量并行性的放置策略.
示例用例
假设您的训练工作中有一个 ml.p3.16xlarge。 那给你 每个节点 8 个 NVIDIA V100. 请记住,每次添加额外的实例时,您都会遇到额外的带宽开销,因此在单个节点上拥有更多的 GP'U 总是更好的选择。 在这种情况下,使用一个 ml.p3.16xlarge 比使用两个 ml.p3.8xlarge 更好。 即使 GPU 的数量相同,额外节点的额外带宽开销也会降低吞吐量。
下图说明了四路模型并行性,以及两路数据并行性。 这意味着您实际上有两个模型副本(想想数据并行),每个副本都分布在四个 GPU 上(模型并行)。
如果这些模型分区中的任何一个太大而无法容纳在单个 GPU 上,您可以添加一种额外的分布类型——张量并行性——来吐出它并利用这两个设备。
结论
在这篇博文中,我们讨论了 SageMaker 分布式训练库,尤其关注模型并行性。 我们分享了最新测试的性能基准,在 Amazon SageMaker 上跨 32 ml.p120d.4xlarge 实例和 24B 参数实现了每秒 175 个样本。 我们预计,如果我们将其增加到 240 个 p4 实例,我们可以在 175 天内训练一个 25B 参数模型。
我们还讨论了支持大规模训练的最新功能,即张量并行、优化器状态分片、激活检查点和激活卸载。 我们分享了一些提示和技巧,通过在 Amazon SageMaker 上进行培训来实现这一点。
自己尝试一下 使用生成我们数字的同一笔记本,可在此处的 GitHub 上找到. 您还可以通过以下方式为您的 AWS 账户申请更多 GPU 在此处请求服务限制批准.
作者简介
艾米丽·韦伯(Emily Webber) 在 SageMaker 推出后就加入了 AWS,从那时起就一直在努力向全世界宣传它! 除了为客户打造新的机器学习体验之外,Emily 还喜欢冥想和研究藏传佛教。
阿迪亚·宾达尔(Aditya Bindal) 是AWS深度学习的高级产品经理。 他致力于开发使客户更轻松地在AWS上训练深度学习模型的产品。 业余时间,他喜欢和女儿一起度过时光,打网球,阅读历史小说和旅行。
路易斯·昆特拉 是 AWS SageMaker 模型并行库的软件开发人员经理。 在他的业余时间,可以发现他在旧金山湾区骑着他的哈雷。
- "
- 000
- 100
- 2020
- 39
- 关于
- 加速器
- 账号管理
- 实现
- 横过
- 额外
- 地址
- 高级
- 所有类型
- 已经
- Amazon
- 另一个
- 应用领域
- 国家 / 地区
- 可使用
- AWS
- 海湾
- 最佳
- 最大
- 亿
- 博客
- 建筑物
- 原因
- 更改
- 云端技术
- 码
- 组合
- 相当常见
- 沟通
- 配置
- 混乱
- 集装箱
- 核心
- 可以
- 合作伙伴
- data
- 发达
- 开发商
- 研发支持
- 设备
- 设备
- 不同
- 分布
- 分配
- 向下
- 驱动
- 使
- 特别
- 例子
- 体验
- 体验
- 极端
- 面部彩妆
- 快
- 专栏
- 特征
- 小说
- 适合
- 以下
- 向前
- 发现
- 骨架
- ,
- 功能
- 其他咨询
- 生成
- GitHub上
- 去
- 非常好
- 谷歌
- 谷歌搜索
- GPU
- 硬件
- 有帮助
- 近期亮点
- 历史的
- 创新中心
- How To
- HTTPS
- 数百
- 增加
- 信息
- 灵感
- 集成
- 问题
- IT
- 工作
- 加盟
- 跳
- 保持
- 语言
- 大
- 最新
- 发射
- 学习用品
- 学习
- Level
- 自学资料库
- 加载
- 机
- 机器学习
- 机
- 制作
- 经理
- 内存
- ML
- 模型
- 模型
- 模块化
- 最先进的
- 移动
- 亦即
- 自然
- 网络
- 新功能
- 节点
- 笔记本
- 数字
- 其他名称
- 纸类
- 合作
- 性能
- 片
- 平台
- 热门
- 可能
- 小学
- 产品
- 热销产品
- 简介
- 提供
- 内存
- RE
- 阅读
- 建议
- 记录
- 减少
- 成果
- 运行
- 运行
- 说
- 可扩展性
- 鳞片
- 缩放
- SDK
- 搜索
- 服务
- 集
- 设置
- 分片
- 共用的,
- 显著
- 尺寸
- So
- 软件
- 特别是
- 速度
- 花费
- 分裂
- 州/领地
- 策略
- 策略
- 供应
- 策略
- 技术
- test
- 世界
- 数千
- 通过
- 次
- 秘诀
- 技巧和窍门
- 一起
- Topics
- 行业
- 产品培训
- 理解
- 使用
- 利用
- 愿景
- 中
- 加工
- 合作
- 世界
- 年