使用 AWS Trainium 加速芯片进行 Llama 2 继续预训练

使用 AWS Trainium 加速芯片进行 Llama 2 继续预训练

💡 原文中文,约9600字,阅读约需23分钟。
📝

内容提要

通联数据与亚马逊云科技合作,使用Trainium芯片对Llama2进行了继续预训练,取得了良好结果。Trainium芯片具有高计算能力和成本效益,支持与TensorFlow和PyTorch等流行框架的本地集成。预训练过程中可能遇到问题,可以通过分析日志和检查节点初始化情况进行故障排除。

🔎

延伸解读

Trainium 芯片的架构特点

AWS Trainium 是专为超过 1000 亿参数模型训练设计的第二代加速芯片。每个 Neuron 核心包含四个专用引擎:张量引擎针对矩阵运算优化,FP16/BF16 性能超过 100 TFLOPS;矢量引擎优化批量归一化和池化;标量引擎优化激活函数;通用 SIMD 引擎支持自定义运算符,可用 C++ 编写。每个 Trainium 芯片配备 32GB 高带宽内存,并通过 NeuronLink 实现实例内高速互连。

选择 Trainium 进行训练的关键考量

文章指出选择 AWS Trainium 的三个主要原因:超级计算机级性能,支持按需访问高达 6 exaflops 的计算能力;成本效益,通过 Trn1 实例可显著降低成本,最高可达 50%;生态系统支持,AWS Neuron SDK 提供与 TensorFlow 和 PyTorch 等流行框架的原生集成,简化了开发人员的过渡。这些因素共同降低了大规模模型训练的门槛和费用。

继续预训练的实施流程要点

使用 AWS ParallelCluster 进行 Llama2 继续预训练时,需先准备网络环境(公有子网、私有子网及 NAT Gateway),安装 AWS CLI 和 ParallelCluster CLI,然后通过 pcluster.yaml 配置文件创建集群。训练前需将 Llama2 模型从 Hugging Face 格式转换为 NeMo 格式,并对训练数据进行分词预处理。启动训练需先运行预编译任务,再运行训练任务,并通过 slurm 日志监控进度。

训练故障排查的基本方向

如果在继续预训练过程中遇到问题,可以从两个方向进行排查:如果训练任务已启动并生成了 slurm 日志,可以分析日志内容定位问题原因;如果训练任务未能启动,则应检查计算节点的初始化情况,参考 AWS 官方文档中关于节点初始化和扩展问题的排查指南。这种分阶段的排查方法有助于快速定位问题所在。

❓

Q&A

AWS Trainium 芯片是什么?它有哪些主要特点?

AWS Trainium 是亚马逊云科技专为超过 1000 亿参数模型的深度学习训练打造的第二代机器学习加速芯片。每个 Amazon EC2 Trn1 实例有 16 个 Trainium 芯片,每个芯片具有 32GB 高带宽内存,提供高达 190 TFLOPS 的 FP16/BF16 计算能力,并采用 NeuronLink 互连技术。

为什么选择 AWS Trainium 芯片进行 Llama2 继续预训练?

选择 AWS Trainium 芯片进行训练的原因包括:超级计算机级性能,可按需访问高达 6 exaflops 的计算能力;成本效益,通过 Trn1 实例可显著降低成本最高达 50%;生态系统支持,由 AWS Neuron SDK 提供与 TensorFlow 和 PyTorch 等流行框架的原生集成,简化开发人员过渡。

什么是继续预训练?它在 Llama2 上的应用场景是什么?

继续预训练是基于基础模型(如 Llama2、Baichuan),继续从大量无标签文本数据中使用自监督学习方式学习文本中的潜在知识。常见场景包括中文能力增强和垂直领域知识增强。

使用 AWS ParallelCluster 进行 Llama2 继续预训练需要哪些准备步骤?

需要准备网络环境(包含公有子网和私有子网,公有子网部署 NAT Gateway),在云端跳板机上安装 AWS CLI 和 AWS ParallelCluster CLI,然后新建 AWS ParallelCluster 集群,配置 pcluster.yaml 文件,指定子网、密钥对、实例类型等参数。

在 Llama2 继续预训练过程中,如何对数据进行预处理?

使用 neuronx-nemo-megatron 中的 preprocess_data_for_megatron.py 脚本对数据进行分词预处理,指定输入文件、tokenizer 路径、输出前缀等参数,并设置 --append-eod 和 --need-pad-id 等选项。

训练完成后,如何将模型转换为 Hugging Face 格式?

在 megatron_llama_config.yaml 文件中设置 convert_to_hf 为 True,并指定 output_dir 和 config_path,这样在继续预训练完成后会自动将 Nemo 格式的 checkpoint 转换为 Hugging Face 格式的模型文件。

在继续预训练过程中遇到问题,应该如何进行故障排除?

可以从两个方向进行 Troubleshooting:如果训练任务已启动并生成了 slurm 日志,则分析 slurm 日志检查问题原因;如果训练任务没有启动,则参考 AWS 文档检查节点的初始化情况。

🏷️

标签

➡️

继续阅读