使用 AWS Trainium 在 Amazon SageMaker 上训练 Llama 2 的简单
使用 AWS Trainium 在 Amazon SageMaker 上训练 Llama 2 的简明指南
主要重点
解析了如何使用 AWS Trainium 提高大型语言模型的训练效率,特别是 Llama 2。强调了 SageMaker 提供的管理基础设施与恢复功能,如何降低训练成本和时间。详细介绍了载入、训练、持续微调 Llama 2 模型的过程及其小说示例。大型语言模型LLMs在人工智慧AI领域产生了重大影响。这些模型的生成能力已在多个行业和用例中广泛应用,包括内容生成、情感分析、聊天机器人开发和虚拟助理技术。其中,Meta 的 Llama 2 是 AWS 提供的一个例子,这是一个自回归语言模型,使用优化的变压器架构,专为商业和研究用途而设,支持多种参数规模,包括 7 亿、13 亿和 70 亿,还有预训练和微调的变体。如需了解更多关于 Llama 2 的信息,请参阅 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 上可用。
许多实践者会用自己的文本数据对这些 Llama 2 模型进行微调或预训练,以提升其在特定用例上的准确性。然而,训练和微调的高成本常常成为实践者面临的挑战。在组织迫切希望提升 LLM 的表现时,寻求具成本效益的训练解决方案变得更为重要。本文将探讨如何使用 Neuron 分散式训练库,在 Amazon SageMaker 上搭配 AWS Trainium 实例进行微调和持续预训练,以降低训练成本。
AWS Trainium 实例的训练工作负载
SageMaker 的 mltrn1 和 mltrn1n 实例,基于 Trainium 加速器设计,专为高性能深度学习训练量身定制。这些实例提供比类似的 Amazon Elastic Compute Cloud (Amazon EC2) 更高达 50 的训练成本节省。本文实现了一个解决方案,使用 mltrn132xlarge Trainium 实例类型,通常用于训练大型模型。还有可比较的 mltrn1n 实例能提供更高的网络吞吐量1600 Gbps。SageMaker 训练目前支持这些实例在美东维吉尼亚北部和美西俄勒冈AWS 区域的可用性。最近,这些实例也在美东俄亥俄州区域宣布了普遍可用性。
有关 Trainium 加速器芯片的更多资讯,请参阅 使用 AWS Inferentia2 和 AWS Trainium 在 Amazon SageMaker 上实现高性能与最低成本的生成 AI 推理。另外,查看 AWS Trainium 客户 以了解客户见证,或查看 Amazon EC2 Trn1 实例现已可用于高性能模型训练 深入了解加速器的亮点和规格。

使用 Neuron 分散式库与 SageMaker
SageMaker 是一个全管理的服务,为开发人员、数据科学家和实践者提供在大规模上构建、训练和部署机器学习ML模型的能力。SageMaker 训练包含改善和简化 ML 训练体验的功能,包括管理基础设施和深度学习的映像、自动模型调优与超参数优化,以及按需付费的计费结构。本节将重点介绍使用 Neuron 分散式库进行分散训练的优势,特别是其相关的稳定性和恢复功能所带来的时间和成本效益。
在高性能计算HPC集群中,例如用于深度学习模型训练的集群,硬体稳定性问题可能成为潜在障碍。目前,SageMaker 训练提供了几项稳定性功能,使监控和恢复过程更加流畅:
集群健康检查 在训练任务开始之前,SageMaker 会运行健康检查并验证提供的实例的通信情况。必要时,它会更换故障实例,以确保训练脚本能在健康的实例集群上运行。自动检查点 使用者指定的位置中的检查点会自动复制到 Amazon S3。重新启动训练时,SageMaker 会自动将先前保存的检查点从 S3 位置复制回本地,以保证训练脚本能载入并恢复到最后一个保存的检查点。监控和追踪训练 如果节点失效,能够确定失效发生的位置非常重要。使用 PyTorch Neuron,数据科学家可以在 TensorBoard 中追踪训练进展,这有助于捕捉训练任务的损失情况,从而判断何时应停止训练任务以实现模型的最佳收敛。内建重试和集群修复 可配置 SageMaker 自动重试出现服务器错误的训练任务。作为重试的一部分,SageMaker 会替换任何遭遇无法恢复错误的实例,重启所有健康实例并重新开始工作。对于在数百个实例的大型集群中工作的客户,SageMaker 训练的稳定性和恢复功能可以通过减少故障和加快恢复过程,将模型收敛的总时间降低多达 20。这也使得工程团队能够随时监控并及时反应故障。尽管 SageMaker 训练任务拥有可供一般训练使用的可自定义配置及与广泛的 AWS 生态系统的整合,然而 Amazon SageMaker HyperPod 则专门优化了大规模基础模型的高效训练。
在这篇文章中,我们将使用 Neuron 分散式库来持续预训练 Llama 2 模型,使用张量和管道并行技术,结合 SageMaker 训练任务。详细了解 SageMaker 训练的稳定性和恢复功能,可以参考 在 Amazon SageMaker 上训练大型语言模型的最佳实践。
解决方案概述
在这个解决方案中,我们在 SageMaker Jupyter 笔记本上使用 mlt3medium 实例类型来处理提供的数据。我们将使用 trn132xlarge Trainium 实例持续预训练 llama270b 模型。首先,我们来熟悉用于在解决方案中处理训练任务分发的技术,持续预训练我们的 llama270b 模型,借此使用 Neuron 分散式训练库。
在 convertpretrainedweightsipynb 笔记本中将预训练权重转换为 ptPyTorch权重文件的过程中,所使用的技术有管道并行和张量并行:
管道并行是一种训练策略,通过把批次或深度神经网络分成多个微批次或层,优化训练过程,允许每个工作阶段处理一个微批次。张量并行则是将神经网络的张量分拆到多个设备上,这样大型张量就能在单个设备的内存中处理。在我们使用上述技术将预训练权重转换后,我们接下来会遵循位于相同 sagemakertrainiumexamples 资料夹中的两个独立笔记本。第二个笔记本是 Trainingllama270bipynb,它描述了持续预训练过程,并保存我们在第一个笔记本中转换的模型权重检查点,为推理做准备。当这个步骤完成后,我们可以运行 ConvertNxdtohfipynb 笔记本,将我们使用 NeuronX 库的预训练权重转换为 Hugging Face 可读格式以供推理使用。
前置条件
在您可以运行第一个笔记本之前,您需要完成一些前置条件。
首先,确保已经 创建了 Hugging Face 访问令牌,以便稍后下载 Hugging Face 分词器。在获得访问令牌后,您需要为 SageMaker 提出一些配额增加请求。您需要请求最少 8 个 Trn1 实例,最多可达 32 个 Trn1 实例具体取决于训练时间与成本的权衡。
在服务配额控制台中,请求以下 SageMaker 配额:
配额项目数量范围用于训练作业的 Trainium 实例 (mltrn132xlarge)832用于训练热池的 mltrn132xlarge832每个训练作业的最大实例数832请求配额增加后可能需要最多 24 小时进行批准。然而,在提交配额增加后,您可以转到 sagemakertrainiumexamples GitHub 库,找到用于开始持续预训练过程的 convertpretrainedweightsipynb 文件。
现在,您已准备好开始持续预训练 llama270b 模型的过程,接下来可以转换预训练权重以准备模型并创建检查点。
开始使用
完成以下步骤:
安装所有需要的套件和库:SageMaker、Boto3、transformers 和 datasets。这些套件确保您能设置环境以访问您的预训练 Llama 2 模型,下载分词器,并获取预训练数据集。
python!pip install U sagemaker boto3 quiet!pip install transformers datasets[s3] quiet
安装完套件后,检索您的 Hugging Face 访问令牌,并下载和定义您的分词器。metallama/Llama270bhf 是一个专业分词器,用以将文本拆分成更小的单位进行自然语言处理。这些标记化数据将稍后上传到 Amazon S3,以便用于运行训练作业。
pythonfrom huggingfacehubhfapi import HfFolder
更新访问令牌以下载分词器
accesstoken = hfinsertkeyhereHfFoldersavetoken(accesstoken)
from transformers import AutoTokenizertokenizername = metallama/Llama270bhftokenizer = AutoTokenizerfrompretrained(tokenizername)blocksize = 4096
完成上述单元后,请下载来自 Hugging Face 数据集的 wikicorpus 数据集。使用刚刚初始化的 llama2 分词器对数据集进行标记化。通过标记化数据,您正在为预训练您的 Llama 2 模型做准备,增强模型的性能,使其能够接触到 wikicorpus 数据集中包含的三语加泰罗尼亚语、英语、西班牙语文本数据,以学习数据集中的复杂模式和关系。
在数据标记化完成后,运行以下单元以将训练数据集存储到 S3:
鲸鱼加速器官方下载python
保存训练数据集到 S3
traininginputpath = fs3//{sessdefaultbucket()}/neuronxdistributed/dataprint(f上传训练数据集到 {traininginputpath})traindatasetsavetodisk(traininginputpath)
print(f数据上传到 {traininginputpath})
上面的单元确保您定义了 traininginputpath 并已将数据上传到您的 S3 存储桶。现在您已准备好开始训练工作作业过程。
运行训练作业
对于训练作业,我们使用拥有 32 个神经元内核的 trn132xlarge 实例。这使得我们能够使用张量并行和管道并行,将模型拆分到 Neuron 核心上进行训练。
以下代码是用于预训练 llama270b 的配置:
python
每个节点的处理进程数
PROCESSESPERNODE = 32
集群中实例的数量,若想调整 instancecount 参数请更改此处
WORLDSIZE = 32
全局批量大小
GBS = 512
输入序列长度
SEQLEN = 4096
管道并行度
PPDEGREE = 8
张量并行度
TPDEGREE = 8
数据并行大小
DP = (PROCESSESPERNODE WORLDSIZE / TPDEGREE / PPDEGREE)
每个模型副本的批次大小
BS = (GBS / DP)
管道执行的微批次数。设定相同的BS,使每个微批次包含单一数据样本
NUMMICROBATCHES = BS
训练模型的总步骤数。此数字应根据损失函数接近收敛时进行调整
MAXSTEPS = 1500
训练的超时限制,超过此时间 Amazon SageMaker 将无论其当前状态怎样终止作业
MAXRUN = 2 (24 60 60)
现在您可以定义训练的超参数。请注意,根据硬体能力、数据集特性和收敛要求调整这些参数,可以显著影响训练性能和效率。
以下是超参数的代码:
pythonhyperparameters