从训练新模型到将它们部署到生产中, 亚马逊SageMaker 为初创企业和企业提供最完整的工具集,以利用机器学习 (ML) 和深度学习的力量。
凭借其 Transformers 开源库和 ML 平台,Hugging Face 使全球 AI 社区可以访问迁移学习和最新的 ML 模型,从而减少了全球公司的数据科学家和 ML 工程师利用每一个新科学技术所需的时间进步。
将 Transformer 应用于新的 NLP 任务或领域需要对大型语言模型进行微调,这是一种利用预训练模型积累的知识,在额外、高效的训练过程中使其适应新任务或特定类型文档的技术。
微调模型以对手头的业务问题产生准确的预测需要训练大型 Transformers 模型,例如 BERT、BART、RoBERTa、T5,这可能很难以可扩展的方式执行。
Hugging Face 一直与 SageMaker 密切合作以交付 即用型深度学习容器 (DLC) 使培训和部署最新的变形金刚模型比以往任何时候都更容易和更快。 由于将 SageMaker Data Parallel (SMDP)、SageMaker Model Parallel (SMMP)、S3 管道模式等功能集成到容器中,使用这些功能可以大大减少公司创建基于 Transformer 的 ML 解决方案(例如问答、生成)的时间文本和图像,优化搜索结果,并改进客户支持自动化、对话界面、语义搜索、文档分析和更多应用程序。
在这篇博文中,我们重点介绍 SageMaker 分布式库与 Hugging Face 的深度集成,这使数据科学家能够将 Transformers 模型的训练和微调从几天加速到几小时,这一切都在 SageMaker 中进行。
分布式训练概述
ML 从业者和数据科学家在训练模型时面临两个缩放挑战:缩放模型大小(参数和层数)和缩放训练数据。 缩放模型大小或训练数据可以获得更好的准确性,但在深度学习中可能会出现加速器(CPU 或 GPU)上的内存量限制训练数据大小与模型大小的组合的情况。模型。 例如,在训练大型语言模型时,批量大小通常仅限于少量样本,这会导致模型的准确性降低。
分布式训练可以拆分工作负载以在多个处理器之间训练模型,称为 工人. 这些 worker 并行操作以加速模型训练。
根据我们想要扩展的内容(模型或数据),有两种分布式训练方法: 数据并行和模型并行.
数据并行是最常见的分布式训练方法。 数据并行性需要在不同的加速器上创建模型架构和权重的副本。 然后,我们可以将训练集划分到不同的加速器,而不是将整个训练集传递给单个加速器,从而更快地完成训练集。 尽管这增加了加速器需要将其梯度信息传回参数服务器的步骤,但这个时间被每个加速器迭代整个数据集的一小部分的速度提升所抵消。 因此,数据并行性可以显着帮助减少训练时间。 例如,在没有并行化的情况下训练单个模型需要 4 个小时。 使用分布式训练可以将时间缩短至 24 分钟。 SageMaker 分布式训练还在梯度更新方面实现了前沿技术。
模型并行方法用于大型模型,这些模型太大而无法安装在一个加速器 (GPU) 上。 这种方法实现了一种并行化策略,其中模型架构被分成碎片并放置在不同的加速器上。 这些分片中的每一个的配置都依赖于神经网络架构,并且通常包括多个层。 每次训练数据从一个分片传递到下一个分片时,加速器之间就会进行通信。
总而言之,对于大型数据集导致的时间密集型任务,或者当您想要加速训练实验时,您应该使用分布式训练数据并行性。 当您的模型无法适用于一个加速器时,您应该使用模型并行性。
先决条件
要在 SageMaker 中对 Hugging Face Transformers 模型进行分布式训练,您需要完成以下先决条件:
实施分布式训练
Hugging Face Transformers 库提供了一个经过优化的 Trainer API,可以训练或微调库提供的模型。 如果它们的工作方式与变形金刚模型相同,您也可以在自己的模型上使用它; 看 训练者 更多细节。 这个 API 用于我们的 示例脚本,展示了如何为各种 NLP 任务预处理数据,您可以将其作为模型来编写脚本来解决您自己的自定义问题。 Trainer API 的承诺是该脚本可以在任何分布式设置(包括 SageMaker)上开箱即用。
Trainer API 获取训练所需的一切。 这包括您的数据集、模型(或返回模型的函数)、 compute_metrics
该函数从预测和标签数组、优化器和学习率调度程序(提供了良好的默认值)以及您可以为训练调整的所有超参数返回您想要跟踪的指标,这些超参数分组在一个名为 TrainingArguments
. 综上所述,它公开了三种方法——训练、评估和预测——来训练你的模型,获得任何数据集的度量结果,或获得任何数据集的预测。 要了解有关 Trainer 对象的更多信息,请参阅 使用 Trainer API 微调模型 和视频 培训师API,它会引导您完成一个简单的示例。
在幕后,Trainer API 首先分析您在创建脚本时启动脚本的环境 TrainingArguments
. 例如,如果您使用 SageMaker 启动训练,它会查看 SM_FRAMEWORK_PARAMS
环境中的变量以检测您是否启用了 SageMaker 数据并行性或模型并行性。 然后它在执行必要的初始化步骤(例如 smdistributed.dataparallel.torch.distributed.init_process_group()
).
Trainer 包含整个训练循环,因此它可以调整必要的步骤以确保 smdistributed.dataparallel
后端在必要时使用,而无需更改脚本中的一行代码。 它仍然可以在您的本地机器上运行(虽然慢得多)以进行调试。 它处理数据集的分片,以便每个过程自动看到不同的样本,在每个时期进行重新洗牌,在优化步骤之前同步梯度,如果激活它则进行混合精度训练,如果不能适应大批量大小则进行梯度累积您的 GPU,以及更多优化。
如果您激活了模型并行性,它会确保必须看到相同数据的进程(如果它们 dp_rank
是相同的)得到相同的批次,并且处理不同 dp_rank
看不到相同的样本,在每个时期再次重新洗牌。 它确保模型或优化器的状态字典在检查点时正确同步,并再次处理所有优化,如混合精度和梯度累积。
使用评估和预测方法时,Trainer 会执行分布式评估,以利用您的所有 GPU。 它可以正确处理每个进程的数据拆分(相同的进程 dp_rank
如果激活了模型并行性)并确保在将预测发送到 compute_metrics
功能或刚刚返回。 使用 Trainer API 不是强制性的。 用户仍然可以在 Hugging Face 中使用 Keras 或 PyTorch。 但是,Trainer API 可以提供有用的抽象层。
使用 SageMaker Hugging Face Estimators 训练模型
Estimator 是 SageMaker 培训的高级接口,可处理端到端 SageMaker 培训和部署任务。 调用时会调用脚本的训练 fit
上 HuggingFace
估算器。 在 Estimator 中,您定义要用作的微调脚本 entry_point
,这 instance_type
使用,以及传入哪些超参数。有关的更多信息 HuggingFace
参数,请参阅 拥抱脸估计器.
分布式训练:数据并行
在此示例中,我们使用新的 Hugging Face DLC 和 SageMaker SDK 来训练分布式 Seq2Seq-transformer 模型,以使用 Transformers 和数据集库处理问答任务。 这 bert-large-uncased-全字掩码 模型是微调的 队 数据集。
以下代码示例向您展示了创建一个 HuggingFace
具有数据并行性的分布式训练估计器。
- 选择 Hugging Face Transformers 脚本:
当您创建一个 HuggingFace
Estimator,您可以指定存储在 GitHub 存储库中的训练脚本作为 Estimator 的入口点,因此您不必在本地下载脚本。 您可以使用 git_config
运行 Hugging Face Transformers 示例脚本和正确的“分支”,如果你 transformers_version
需要配置。 例如,如果您使用 transformers_version
4.6.1,你必须使用 'branch':'v4.6.1
“。
- 配置传递到训练作业中的训练超参数:
作为超参数,我们可以定义任何 Seq2SeqTraining参数 以及训练脚本中定义的那些。
- 定义分布参数
HuggingFace
估算器:
您可以使用 SageMaker数据并行库 开箱即用的分布式训练。 我们将数据并行的功能直接添加到 Trainer 中。 要启用数据并行性,您只需将一个参数添加到您的 HuggingFace
Estimator 让您的基于 Trainer 的代码自动使用它。
- 创建一个
HuggingFace
估计器包括前面步骤中定义的参数并开始训练:
拥抱脸变形金刚存储库 包含几个示例和脚本,用于在从语言建模到标记分类的任务上微调模型。 在我们的例子中,我们使用 run_qa.py
来自 examples/pytorch/question-answering
例子。
smdistributed.dataparallel
支持 SageMaker 上的模型训练 仅限以下实例类型. 为获得最佳性能,我们建议使用支持的实例类型 弹性织物适配器 (全民教育):
- 毫升.p3.16xlarge
- ml.p3dn.24xlarge(推荐)
- ml.p4d.24xlarge(推荐)
获得最佳性能并充分利用 SMDataParallel
,你应该至少使用两个实例,但你也可以使用一个来测试这个例子。
下列 示例笔记本 提供更详细的分步指导。
分布式训练:模型并行
对于具有模型并行性的分布式训练,我们将 Hugging Face Transformers 和数据集库与 SageMaker SDK 一起用于序列分类 通用语言理解评估 (GLUE) 使用多节点、多 GPU 集群进行基准测试 SageMaker 模型并行库.
与数据并行性一样,我们首先在 HuggingFace
估算器:
模型并行库在内部使用 MPI,因此要使用模型并行,必须使用分布参数启用 MPI。 “processes_per_host
”在前面的代码中指定了 MPI 应该在每台主机上启动的进程数。 我们建议这些用于开发和测试。 在生产时,如果需要大量 GPU 容量,您可以联系 AWS Support。 有关详细信息,请参阅 运行 SageMaker 分布式模型并行训练作业.
下列 示例笔记本 包含完整的代码脚本。
竞价实例
借助 SageMaker Python SDK 的 Hugging Face 框架扩展,我们还可以利用完全托管的 亚马逊弹性计算云 (Amazon EC2) 竞价实例 并节省高达 90% 的培训成本。
除非你的训练工作很快完成,否则我们建议你使用 检查点 使用托管现场培训,因此您需要定义 checkpoint_s3_uri
.
将 Spot 实例与 HuggingFace
估计器,我们必须设置 use_spot_instances
参数为 True 并定义你的 max_wait
和 max_run
时间。 有关托管现场培训生命周期的更多信息,请参阅 Amazon SageMaker中的托管现场培训.
以下是设置现场训练 Estimator 的代码片段:
下列 笔记本 包含完整的代码脚本。
结论
在这篇博文中,我们讨论了使用 SageMaker 对 Hugging Face Transformer 进行分布式训练。 我们首先回顾了数据并行与模型并行的用例。 数据并行性通常更合适,但不一定限于训练受到计算瓶颈的情况,而当模型无法适应单个加速器提供的内存时,您可以使用模型并行性。 然后我们展示了如何使用这两种方法进行训练。
在我们讨论的数据并行性用例中,在单个 p3.2xlarge 实例(使用单个 GPU)上训练模型需要 4 个小时,在撰写本文时成本约为 15 美元。 通过数据并行,我们可以在 24 分钟内以 28 美元的成本训练同一个模型。 虽然成本增加了一倍,但是却减少了10倍的训练时间。对于需要在短时间内训练很多模型的情况,数据并行可以以相对较低的成本增加来实现。 至于模型并行性用例,它增加了训练模型的能力,这些模型以前由于硬件限制根本无法训练。 这两个功能都为 ML 从业者提供了新的工作流程,并且可以通过 HuggingFace
Estimator 作为 SageMaker Python SDK 的一部分。 将这些模型部署到托管端点遵循与其他 Estimator 相同的过程。
此集成支持作为 SageMaker 生态系统一部分的其他功能。 例如,您可以通过向 Estimator 添加一个简单的标志来使用 Spot 实例,以实现额外的成本优化。 下一步,您可以找到并运行 培训演示 和 示例笔记本.
作者简介
阿奇斯·乔格卡 是新兴技术团队的 AI/ML 合作伙伴解决方案架构师。 他对使用 AWS 构建块的高性能、可扩展深度学习和科学计算感兴趣。 他过去的经历从计算物理研究到学术界、国家实验室和初创公司的机器学习平台开发。 他远离电脑的时间是踢足球和与朋友和家人一起度过的。
詹姆斯·易 是 Amazon Web Services 新兴技术团队的高级 AI/ML 合作伙伴解决方案架构师。 他热衷于与企业客户和合作伙伴合作,设计、部署和扩展 AI/ML 应用程序以获取他们的商业价值。 工作之余,他喜欢踢足球、旅行和与家人共度时光。
菲利普·施密德 是 Hugging Face 的机器学习工程师和技术主管,负责领导与 Amazon SageMaker 团队的合作。 他热衷于使尖端 NLP 模型民主化、优化和生产化,并提高深度学习的易用性。
西尔万·古格 是 Hugging Face 的研究工程师,也是 Transformers 库的主要维护者之一。 他热爱开源软件并帮助社区使用它。
杰夫布迪尔 在领先的开源 ML 库 Transformers 的创建者 Hugging Face 构建产品。 此前,Jeff 是 Stupeflix 的联合创始人,该公司被 GoPro 收购,他在该公司担任产品管理、产品营销、业务开发和企业发展总监。
- '
- 100
- 7
- 9
- 关于
- 加快
- 加速器
- 加速器
- 横过
- 额外
- 优点
- AI
- 所有类型
- 尽管
- Amazon
- Amazon EC2
- 亚马逊SageMaker
- 亚马逊网络服务
- 其中
- API
- 应用领域
- 架构
- 围绕
- 自动化
- AWS
- 基准
- 最佳
- 盒子
- 建筑物
- 商业
- 呼叫
- 容量
- 例
- 挑战
- 更改
- 分类
- 联合创始人
- 码
- 合作
- 组合
- 相当常见
- 沟通
- 社体的一部分
- 公司
- 计算
- 计算
- 配置
- 容器
- 包含
- 对话介面
- 成本
- 可以
- 创造
- 创造者
- 客户支持
- 合作伙伴
- data
- 深入学习
- 部署
- 设计
- 研发支持
- 不同
- 副总经理
- 分布
- 文件
- 域名
- ,我们将参加
- 生态系统
- 新兴经济体的新市场。
- 工程师
- 工程师
- 企业
- 企业客户
- 环境
- 例子
- 体验
- 布
- 面部彩妆
- 家庭
- 快
- 特征
- 姓氏:
- 适合
- 专注焦点
- 对于初创企业
- 骨架
- 功能
- 混帐
- GitHub上
- 全球
- 非常好
- GPU
- 图形处理器
- 硬件
- 有
- 帮助
- 创新中心
- How To
- HTTPS
- IAM
- 改善
- 包含
- 增加
- 信息
- 积分
- IT
- 工作
- 凯拉斯
- 知识
- 标签
- 实验室
- 语言
- 大
- 最新
- 发射
- 发射
- 铅
- 领导
- 学习用品
- 学习
- 自学资料库
- 有限
- Line
- 本地
- 当地
- 机器学习
- 颠覆性技术
- 营销
- 指标
- 杂
- ML
- 模型
- 造型
- 模型
- 更多
- 最先进的
- National
- 打印车票
- 网络
- 神经
- 神经网络
- NLP
- 优惠精选
- 抵消
- 打开
- 开放源码
- 秩序
- 其他名称
- 合伙人
- 伙伴
- 性能
- 物理
- 管
- 平台
- 功率
- 平台精度
- 预测
- 市场问题
- 过程
- 过程
- 产品
- 产品管理
- 生产
- 热销产品
- 提供
- 提供
- 蟒蛇
- pytorch
- 题
- 范围
- 减少
- 研究
- 成果
- 回报
- 运行
- 运行
- sagemaker
- 鳞片
- 缩放
- 科学家
- SDK
- 搜索
- 看到
- 特色服务
- 集
- 设置
- 分片
- 短
- 简易
- 尺寸
- 小
- So
- 足球
- 软件
- 解决方案
- 速度
- 花费
- 分裂
- Spot
- 传播
- 开始
- 初创企业
- 州/领地
- 策略
- SUPPORT
- 支持
- 科技
- 技术
- 技术
- 测试
- 世界
- 通过
- 次
- 一起
- 象征
- 工具
- 火炬
- 跟踪时
- 产品培训
- 最新动态
- 的URI
- 用户
- 视频
- 卷筒纸
- Web服务
- 什么是
- 中
- 也完全不需要
- 工作
- 工人
- 加工
- 合作
- 世界
- 写作