亚马逊AWS官方博客
基于 Amazon SageMaker 和 LLaMA-Factory 打造一站式无代码模型微调部署平台 Model Hub
1. 前言
在当今人工智能技术迅猛发展的背景下,大型语言模型(Large Language Models, LLMs)已成为推动各类应用创新的重要驱动力。随着模型的复杂性和应用场景的多样化,如何高效地进行模型微调和部署,成为了开发者和研究人员面临的关键挑战。为此,结合 Amazon SageMaker 与 LlamaFactory 构建的一站式无代码模型微调部署平台应运而生。
Amazon SageMaker 是亚马逊云科技提供的全面机器学习平台,支持从数据准备、模型训练到最终部署的完整工作流程。其强大的计算能力和灵活的资源管理,使得用户能够轻松处理大规模的机器学习任务。而 LlamaFactory 则是一个开源大模型微调框架,旨在简化大模型的训练过程,不仅支持百余种预训练模型,还提供了丰富的微调方法和参数配置选项。通过将这两者结合,用户可以在无需深入掌握编程知识的情况下,快速实现大模型的微调与部署。LlamaFactory 为各个领域的开发者提供了便捷、高效的大模型开发工具,使他们能够专注于模型性能优化,降低了技术门槛,也加速了 AI 应用的开发进程。
本文将深入探讨基于 SageMaker 和 LlamaFactory 构建的一站式无代码模型微调部署平台的优势与实践,帮助读者更好地理解如何利用这一强大工具提升 AI 项目的效率与效果。
2. LlamaFactory 介绍
LlamaFactory 是一个简单易用的开源大模型训练框架,通过用户友好的界面和高效的算法实现,降低了大模型训练的学习成本和资源成本。LlamaFactory 不仅支持 100 多种单模态/多模态大模型的预训练、SFT 和 RLHF 训练,还集成了诸如 LoRA、QLoRA、Flash Attention 和 Liger Kernel 等高效大模型优化技术。LlamaFactory 的主要特点有:
- 模型支持速度快:在 LlamaFactory 中,我们可以选择近几周内开源的大语言模型作为基座,充分利用先进的预训练模型能力,完成领域模型的构建。
- 数据支持种类多:LlamaFactory 支持用户选择多轮对话数据、人类偏好数据、纯文本数据进行模型的调优,同时也支持多图理解、视频理解和图文交错数据的学习。
- 模型训练成本低:LlamaFactory 通过结合 LoRA、模型量化、高性能算子等技术,将大模型的训练成本降低了 3~20 倍,速度提升 2 倍。
LlamaFactory 在开源大模型微调领域扮演着重要的角色,未来 LlamaFactory 还将逐步集成数据生成、模型评测能力,旨在为开源社区提供一站式的大模型精调解决方案。更详细内容可阅读 LlamaFactory 的技术报告。
3. Model Hub 介绍
Model Hub 是亚马逊云科技在 Github 上的一个开源项目,基于 LlamaFactory 和 Amazon SageMaker 提供了一站式的模型微调、部署、调试的零代码可视化平台,可以帮助用户快速微调各类开源模型,高效同时地进行大量的实验和验证,提升模型微调的工程效率。
平台定位
与 LlamaFactory 开源框架的区别
LLaMA-Factory 提供 Web UI 和命令行接口两种使用方式,其中 Web UI 只支持单机训练,尚未支持多机分布式训练。如果要做分布式训练,需要自行搭建计算集群,用命令行工具启动;而 Model Hub 平台是把 LlamaFactory 训练部分封装到了 SageMaker Training Job 中,用户在 Model Hub 上进行单机或者分布式训练时,只需要选择机型和数量,无需自行搭建分布式集群,做到真正即需即用,任务结束自动释放资源,无需提前购买资源,提供更简易、经济和一致的使用体验。
与 SageMaker JumpStart 的区别
Model Hub:
- Model Hub 是 SageMaker Jumpstart 的补充,Model Hub 的底层训练采用 LlamaFactory,支持更多的中文开源模型和更全面的微调算法,方便国内用户对这类模型进行微调和部署;
- Model Hub 的推理框架采用了社区版的 vLLM 框架和 SageMaker LMI 推理框架,支持更多的模型种类和更敏捷的更新迭代;
- Model Hub 提供了分布式训练,可以对更大的模型进行全量微调。
SageMaker JumpStart:
- SageMaker JumpStart 提供更广泛的模型选择,除开源模型外,包括如 A121Labs,Cohere 的商业闭源模型,以及 embedding,speech recognition 等不同任务类别的模型;
- SageMaker JumpStart 提供的模型能力有微调、部署、推理优化、性能评估和效果评估;
- SageMaker JumpStart 内嵌了推理优化工具包,可通过量化、投机解码等手段进行优化,支持测试 performance benchmark;
- SageMaker JumpStart 内嵌模型评估能力,可基于不同任务比如文本总结、分类、Q&A,使用用户自定义或内嵌的数据集进行模型评估。
适用场景
Model Hub | • 客户需要一个基于 LlamaFactory 生态的开箱即用的平台 • 以中文开源 LLM 的微调和原生的 vLLM 部署为主 |
JumpStart | • 客户倾向原生的 SageMaker 使用体验 • 需要一站式平台访问到多个模型,并对模型进行微调、性能测试/优化,评估和部署 • 客户需要使用 Studio 里的其他 feature 比如 Notebook 等 |
整体流程介绍
模型训练流程
1. 选择基础模型:从 Model Hub 预置的模型列表(HuggingFace 或者 ModelScope)中选择一个开源模型,也可从已有模型权重或 checkpoint 继续训练
2. 数据准备:输入自有数据集的 S3 路径地址,也可以从 Model Hub 预置的数据集列表选择公开数据集
3. 选择机型和数量
4. 训练参数调整
5. 启动训练
6. 得到训练结果
模型部署流程
1. 选择模型和推理框架:支持直接从 HuggingFace 或者 ModelScope Repo 地址部署原始模型,或选择训练好的模型 checkpoint
2. 开始部署
3. 部署成功后,可以通过以下两种方式使用模型:
- Playground 界面
- API 接口
系统架构
Model Hub 系统可以部署在一台 CPU EC2 实例(推荐配置 m5.xlarge, 4C/16G) 上,包含:
- Web 前端(React 框架实现)
- 后端服务模块(任务管理、端点管理、模型推理、任务处理引擎)
- 一个本地 MySQL 数据库,存储任务和推理端点信息
实例上的服务通过 assume role 的形式调用 SageMaker 服务,进行模型训练和部署
4. Model Hub 安装方法
Model Hub 在海外区已经支持 CloudFormation 自动化部署(中国区由于 github 源、pip 源、docker 源等访问原因,需要手动修改后部署,具体可以参考我们项目 repo 中的部署说明)。
1. 进入 CloudFormation 创建一个 stack,选择上传部署文件 cloudformation-template.yaml
2. 填入项:
- stack 名:例如 modelhub
- HuggingFaceHubToken(可选,建议添加):如果需要从 HuggingFace 下载某些需要授权的模型或者数据集(如 Llama3 模型)
- WandbApiKey(可选):如果需要用到 ai 记录实时训练指标
- WandbBaseUrl (可选):如果需要用到私有化部署的 ai,可以指定 BaseUrl
3. 一直下一步,直到勾选确认框,然后提交
4. 配置完成后,等待 stack 创建完成(约 25 分钟左右),从 Stack output 栏找到 PublicIP 地址,然后访问 http://{ip}:3000 访问 modelhub,默认用户名 demo_user
5. 登陆密码获取:进入 System Manager->Parameter Store 服务控制台,可以看到多了一个/modelhub/RandomPassword,进入之后打开 Show decrypted value 开关,获取登陆密码
5. Model Hub 使用示例
示例:使用 LoRA 微调一个 Llama 3.2-3B 角色扮演模型
数据集准备
将上述数据集上传到一个跟 Model Hub 所在的同样账号和区域的 S3 桶里。
- 该数据集是以电视剧《甄嬛传》为基础,提取的剧中主角甄嬛的对话数据,通过 LoRA 微调,打造一个契合角色人设的个性化 AI
创建训练任务
进入 Model Hub 之后中在 Training Jobs 导航栏中点击右上角“创建新任务”,进入任务详情表单
- 选择 Llama3.2-3B-Instruct 模型
- 选择 Llama3.2-3B-Instruct 模板
- 选择 Lora 微调
- 选择 Flashattn2 作为加速选项(FlashAttention 2 是一个训练加速算法)
- 在 Datasets settings 中添加数据集上传的 s3_upload_path 和 dataset_info
数据集来源有 2 种,一种是直接在开源数据集下拉菜单中选择一个开源数据集,如下图所示:
另一种是事先按一定的格式准备好(详细可以见 LlamaFactory readme 中的例子 Alpaca 或者 ShareGPT 格式和官方指南)数据文件,并存到 S3, 这时只需要把对应文件的 S3 目录填入,然后在 json 编辑器中填写数据集的信息,该信息的填写方式同样参考 LlamaFactory 官方文档。
{"huanhuan":
{
"file_name":"huanhuan.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
}
- 选择 1 台 g5.12xlarge 作为训练实例
12xlarge 有 4 张 A10g GPU,我们以采用多卡实例用 ddp(分布式数据并行)的方式数据并行训练。如果数据量较少我们也可以选 g5.2xlarge 单卡实例进行训练。
- 训练超参如下
- Learning rate = 1e-4
- Epoch = 10
- Batch size per device = 2
- Gradient accumulation =2
- Training precision = bf16
- 训练开始启动
训练开始大约 2-3 分钟后,在详情页下方可以看到日志详情的输出:
等待训练完成,部署模型
- 大概 25 分钟后训练状态变成 SUCCESS,相关日志在任务详情页面会展示出来,模型文件会保存到 S3 中,路径在页面 Output 中展示出来
- 在 Training Jobs 列表中选中任务,点击右上角“部署”按钮,默认值保持不变,点击“Confirm”
部署一个未经过微调的模型作对比
- 在 Model Hub 的 Endpoints 菜单中,点击右上角“创建”,在模型下拉菜单中选择 Llama-3.2-3B-Instruct,其余默认值保持不变,点击“Confirm”
- 大约等待 8 分钟之后,刷新列表,直到状态变成“InService”
测试原始未经过微调的 Llama 3.2 模型
- 在 Endpoints 中选中部署成功“InService”的端点,点击右上角“Start Chat”,进入 Playground
- 在“更多设置”-“系统角色提示词”区域填写“假设你是皇帝身边的女人–甄嬛”
- 在页面底部的对话框输入想要和模型对话的内容,点击提交即可发送消息
- 尝试进行一些简单的对话
可以看出微调前模型的回复很冗长,也不符合角色扮演的回复,且偶尔还参杂一些英文单词
测试微调后的模型
- 点击 Endpoint 名称下拉菜单,选择另外一个 endpoint(带有 finetune 标签), 点击“发送”按钮旁边的垃圾桶图标,清空历史会话记录
- 在页面底部的对话框输入跟之前一样的对话内容,点击提交
可以看出经过微调之后的模型,回复的长度和风格比较符合角色扮演的设定。
6. 实际项目示例
项目背景
大语言模型在翻译领域相较于传统机器翻译具有明显优势,如更自然流畅的语言和更低的成本,但仍面临一些挑战。常见问题包括:翻译语种错误、乱码、专业术语翻译不准确、符号错误、格式丢失、拒答敏感内容,以及内容的遗漏或冗余。为了解决这些问题,实践中采用了几种优化策略:首先,通过优化提示(Prompt)来引导模型注意特定问题;其次,利用多轮翻译-检测-优化的工作流,虽然能显著改善翻译质量,但成本和时间消耗较高;最后,构建后检查机制以检测并纠正错误,适合对成本和延迟有要求的应用。最终这一项目采用第三种方法,微调一个轻量模型来学习和归纳错误特征,以进一步提升翻译质量。并且达到以下业务目标:
- 足够高的检出率(召回率),90% 以上;
- 较低的误检率,不超过 20%;
- 较低的成本,比如 A10 卡即可部署,并且其吞吐能力 RPM 能够高于翻译模型(如 Claude Haiku)的水平;
- 延迟尽可能低,最好低于 1s;
- 检测结果除了通过与否,最好能给出出错细节,方便为下一轮翻译模型提供参考。
项目过程及结果
整个项目包括训练数据准备、模型选型实验对比、数据合成调优、实验参数调优、效果和吞吐延迟测试等几个阶段。项目人员利用 Model Hub,一共发起了训练任务 50+个,且无需考虑训练数据加载,基座模型下载打包,训练脚本修改适配,训练后模型保存和部署等重复性的代码工作,只需要在 Model Hub 上进行点击就可以一站式地完成几十个模型的训练和部署工作;部署模型时也无需关心使用的推理框架和不同模型推理接口的差异,最终采用统一的接口进行推理。最终从多个基础模型候选中,实验并训练出一个满足业务预定目标的最佳模型。
7. 总结
在许多使用开源大语言模型的场景中,结合特定数据和需求进行微调至关重要。这涉及大量数据准备、模型训练和验证等工作,工作量巨大。缺乏有效的工程支持平台使得这些任务难以快速推进,因此,Model Hub 应运而生。它以可视化、无代码的方式支持大量并发实验,提高大模型微调效率,使开发人员能更专注于业务场景、数据准备和实验设计,而无需编写重复代码。
本文介绍了 Model Hub 的定位、架构设计及其安装和使用方法,并通过两个示例展示了如何使用 LoRA 训练 Llama 3.2 角色扮演模型,以提高其在垂直领域的知识问答能力。整个微调过程可以完全依靠 Amazon SageMaker 服务完成,无需编写代码。我们启动了多台 GPU 计算实例进行分布式微调,整个过程在1小时以内完成。得益于 SageMaker Training Job 的资源管理,训练结束后,计算实例立即释放,节省了资源。此外,我们将推理和训练任务分开处理,充分利用亚马逊云科技的动态资源优势,使得多种微调实验和推理或生产服务的并行进行,大大提高了效率和灵活性。
目前,Model Hub 的源代码已经在 AWS Samples 代码仓库中开源: https://github.com/aws-samples/llm_model_hub。
另外,Dify(一个开源的 LLM 应用开发平台)主分支已经整合 aws-samples/dify-aws-tool 的全部工作,使得 Dify 和 Model Hub 完成了深度协同,所有通过 Model Hub 部署的 LLM 模型(On SageMaker)都可以在 Dify 无缝使用。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。