当前位置: 首页 > article >正文

LLaMA-Factory使用实战

LLaMA-Factory使用实战

项目介绍

项目地址:https://github.com/hiyouga/LLaMA-Factory

中文文档:安装 - LLaMA Factory

快速开始文档:https://zhuanlan.zhihu.com/p/695287607(推荐参考)

远程服务器通过本地代理加速访问网站:

  • https://zhuanlan.zhihu.com/p/18500712254

  • Centos7 -- 用三种方法设置代理服务器上网_center os如何强制所有应用使用代理上网-CSDN博客 (适用于服务器下载速度较慢的情况)

一、DeepSpeed技术解析

讲这个的原因就是因为,训练大模型肯定是得多卡并行的,这样不仅能节省空间,还能加快速度,所以,微调训练的时候,一般都会采用分布式训练。

有很多种情况,单机多卡,多机多卡等等。

核心原理

DeepSpeed的核心就在于:GPU显存不够,CPU内存来凑

DeepSpeed是微软开发的分布式训练工具,通过ZeRO技术优化内存占用,支持更大规模的模型训练。ZeRO通过分片模型参数、优化器状态和梯度来减少显存需求,分为多个阶段(Stage1、2和3),每个阶段逐步增加内存优化程度。混合精度训练结合FP16和FP32,降低显存使用,但需要平衡精度和计算效率。

具体而言,DeepSpeed将当前时刻训练模型用不到的参数缓存到CPU中,需要时再从CPU挪到GPU。这里的"参数"不仅指模型参数,还包括optimizer、梯度等。

越多的参数挪到CPU上,GPU的负担就越小;但代价是更频繁的CPU-GPU交互,显著增加训练推理的时间开销。因此,DeepSpeed使用的核心要义是时间开销和显存占用的权衡。

Offload技术

将forward中间结果保存到内存、硬盘(NVMe)等缓存中,然后在需要时进行加载或重计算,进一步降低显存占用。

并行训练范式

在大规模深度学习模型训练中有两个主要范式:

  • 数据并行

  • 模型并行

目前训练超大规模语言模型技术路线:GPU + PyTorch + Megatron-LM + DeepSpeed

DeepSpeed优势

DeepSpeed是Microsoft提供的分布式训练工具,旨在支持更大规模的模型和提供更多的优化策略和工具。主要优势在于:

  • 支持更大规模的模型

  • 提供更多的优化策略和工具(例如ZeRO和Offload等)

核心技术特点

  1. 3D并行化实现万亿参数模型训练:DeepSpeed实现了三种并行方法的灵活组合:ZeRO支持的数据并行,流水线并行和张量切片模型并行。适应不同工作负载需求,支持万亿参数超大型模型,实现近乎完美的显存扩展性和吞吐量扩展效率。提高的通信效率使用户可以在网络带宽有限的常规集群上以2-7倍的速度训练有数十亿参数的模型。

  2. ZeRO-Offload使GPU单卡能够训练10倍大的模型:扩展了ZeRO-2,同时利用CPU和GPU内存训练大型模型。使用单张英伟达V100 GPU时,可运行多达130亿参数的模型,模型规模扩展至现有方法的10倍,并保持有竞争力的吞吐量。

  3. DeepSpeed Sparse Attention实现6倍速度执行10倍长的序列:提供稀疏attention kernel,支持长序列模型输入(文本、图像、语音)。比经典稠密Transformer支持的输入序列长一个数量级,获得最高6倍执行速度提升,比最新稀疏实现快1.5-3倍。

  4. 1比特Adam减少5倍通信量:新算法最多可减少5倍通信量,同时实现与Adam相似的收敛率。在通信受限场景下,分布式训练速度提升3.5倍,适用于不同类型的GPU集群和网络环境。

ZeRO策略详解

DeepSpeed本质上属于数据并行,核心是其ZeRO策略。训练模型时显存主要用在四个方面:

  1. 模型参数

  2. 梯度

  3. 优化器

  4. 激活值

ZeRO策略分级:

  • Zero-0:不使用所有类型的分片,仅使用DeepSpeed作为DDP,速度最快(显存够时使用)

  • Zero-1:切分优化器状态,分片到每个数据并行的工作进程(每个GPU)下;有微小的速度提升

  • Zero-2:切分优化器状态 + 梯度,分片到每个数据并行的工作进程(每个GPU)下

  • Zero-3:切分优化器状态 + 梯度 + 模型参数,分片到每个数据并行的工作进程(每个GPU)下

二、环境安装

首先创建一个虚拟环境。建议不要轻易使用conda,因为conda创建虚拟环境后自带很多包,容易造成依赖冲突。最好创建一个干净的虚拟环境,直接使用框架提供的requirements文件。

推荐使用以下方式创建虚拟环境:

  • virtualenv

  • Python自带的venv:python -m venv .env

  • UV:最近流行的包管理工具,很多大模型文档推荐使用

安装时按照官方文档提供的步骤进行即可。

Tips

  • Docker安装后,还需安装Docker插件

  • 初次部署项目可能会遇到各种问题,这是正常的学习过程,经历多了就会知道如何调试

三、数据准备(自定义数据集)

1. 数据获取

使用爬虫获取数据,常见的爬虫库包括:

  • 直连浏览器(容易被拦截)

  • requests+bs4:通过requests的get方法获取网页HTML结构,然后用bs4解析HTML提取所需内容

  • selenium模拟浏览器请求:爬取成功率更高,但实现难度较大

爬虫技巧:

  • 验证码处理:可保存到本地由开发者手动输入,或尝试自动识别(较复杂)

  • 代理池和随机useragent:通过代理地址列表,每次随机选择,避免IP被封

2. 数据处理

建议先将数据整理为markdown格式,因为结构分明,易于程序和人类理解。

然后根据任务需求将数据转换为适当的JSON格式(如alpaca格式、sharegpt格式等)。

3. 数据配置

将JSON文件的配置信息添加到LLaMA-Factory的数据配置文件中。

例如,上图中news_llama是自定义数据集,dataset_info是LLaMA-Factory的数据配置文件。

四、微调训练

运行以下命令启动基于Gradio的UI界面:

界面示例:

通过调整参数开始微调训练。参数调整可参考网上资料,也可使用默认配置,但需考虑GPU性能是否支持,必要时调低参数。

重要提示: 建议不要在UI界面直接进行微调训练,因为UI界面本身也会占用GPU资源,可能导致显存不足。最好在预览命令区获取完整命令,关闭UI界面后直接在命令行中运行。

五、模型导出和部署

可以使用LLaMA-Factory提供的export功能进行模型导出和部署。

总结

LLaMA-Factory是一个对小白友好的框架,没有太多技术门槛,适合作为大模型训练的入门项目,帮助提升自信心。通过实践操作,可以逐步掌握大模型微调的基本流程和技巧。

参考资料

VSCode链接远程服务器时报错解决方案:https://zhuanlan.zhihu.com/p/582696696


http://www.kler.cn/a/612171.html

相关文章:

  • Elasticsearch 之 ElasticsearchRestTemplate 聚合查询
  • Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
  • Linux驱动开发--IIC子系统
  • 基于HTML5的3D魔方项目开发实践
  • leetcode 150. 逆波兰表达式求值
  • 22、web前端开发之html5(三)
  • HarmonyOS Next~鸿蒙系统开发类Kit深度解析与应用实践
  • 211、【图论】建造最大岛屿(Python)
  • 计算机网络——传输层(TCP)
  • 广东新政激发产业活力,凡拓数创以全场景AI3D方案领跑机器人赛道
  • Go File容器化部署方案:本地快速搭建与无公网IP远程传输文件指南
  • css的animation属性展示
  • 双周报Vol.68: Bytes模式匹配增强、函数别名上线、IDE体验优化...核心技术迎来多项更新升级!
  • 蓝桥杯python编程每日刷题 day 20
  • 关于我对接了deepseek之后部署到本地将数据存储到mysql的过程
  • Selenium基本使用(三)隐藏框、获取文本、断言、切换窗口
  • 【数据可视化艺术·进阶篇】热力图探秘:用色彩演绎场馆和景区的人流奥秘
  • Xcode 打开报错 / 解決 Could not open workspace file at xxx 问题
  • vue2自定义指令实现滚动动画-使用IntersectionObserver观察器
  • 从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.3分布式数据加载与并行处理(PyTorch DataLoader优化)