目录
背景
相较于直接使用 EC2,通过 Amazon SageMaker 进行模型训练具有训练环境统一,降低训练实例的空置率,减少训练任务的等待资源的时间等优势。在复杂模型的训练场景下,一般我们会选用 BYOC(Bring Your Own Container),即构建自定义镜像的方式在 Amazon SageMaker 上进行模型训练。构建的容器中包含了训练所需要的操作系统和依赖项构成的独立隔离环境,因此其可以确保一致的运行时和可靠的训练过程。通过在容器中增加 SageMaker-Training-Toolkit 的依赖即可完成训练环境与 SageMaker 的集成。通常不同的模型需要的框架和依赖不同,因此需要为不同的模型构建不同的镜像。LlamaFactory 框架支持多种 Llama 类模型的训练与微调技术,因此我们可以构建统一的容器来完成多种 Llama 类模型的训练与微调,减少构建不同镜像的工作量。本文以 Amazon SageMaker 平台上使用 LlamaFactory 框架训练 Llama3 为例介绍这一过程。
源码:GitHub - aws-samples/training-meta-llama-3-on-amazon-sagemager-with-llama-factory
Amazon SageMaker 介绍
Amazon SageMaker 是一项机器学习服务,可帮助数据科学家和开发人员快速准备机器学习模型。它提供了全面的工具集,涵盖了从构建、训练到部署机器学习模型的整个过程,其功能涵盖了机器学习全流程,提供了完整的工具集,使数据科学家和开发人员能够快速构建、训练和部署机器学习模型,并持续优化模型性能。
LlamaFactory 介绍
LlamaFactory 是一个统一高效微调大型语言模型(LLMs)的框架,主要具有以下特点:
- 模块化设计,最小化了模型、数据集和训练方法之间的依赖,能够灵活地微调 100 多种预训练 LLM。
- 集成了多种先进的高效微调技术,包括 LoRA+、GaLore、QLoRA、mixed precision、checkpointing、flash attention、S2 attention 等,大幅降低微调成本。
- 提供命令行和网页界面 LlamaBoard,用户无需编码即可自定义和微调 LLM 模型,监控训练状态。
- 实现了高度抽象,支持生成式预训练、监督微调、强化学习、直接偏好优化等多种训练方法。
- 支持分布式训练,利用 DeepSpeed 的 ZeRO 优化器,可进一步减少内存占用。
- 集成了多个指标用于 LLM 评估,如 MMLU、BLEU、ROUGE 等。
- 经过系统评估,该框架显著提高了微调效率,在下游任务上也取得了很好的效果。
LlamaFactory 为高效微调各类大型语言模型提供了统一、灵活、高效的解决方案,推动了相关开源社区的发展。
SageMaker Training 镜像构建
我们可以使用 EC2 来进行镜像构建。本文采用了 g5.2xlarge 的 EC2 以及 Deep Learning AMI GPU PyTorch 2.0.0(Ubuntu 20.04)的 AMI 进行了测试验证 。
训练脚本来源于 GitHub - Shenzhi-Wang/Llama3-Chinese-Chat: This is the first Chinese chat model specifically fine-tuned for Chinese through ORPO based on the Meta-Llama-3-8B-Instruct model.。请确保您拥有 Hugging Face 的 API Token(https://huggingface.co/docs/transformers.js/guides/private)并且已经通过了 https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 的权限申请。
1. 构建包含 LlamaFactory 以及 SageMaker-Training-Toolkit 的 Dockerfile
# 根据https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html 找到合适的基础镜像
FROM nvcr