LLaMA-Factory使用实战

news2025/4/1 19:36:25

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.coloradmin.cn/o/2325199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读一本书,骑行万里路:与维乐 Angel Rise+骑行看世界

最近读到了一本名为《自行车改变的世界:女性骑行的历史》的书,才发现原来女性的骑行自由来得并不轻易,激励着每一位女性勇敢地踏上骑行之路。而我一直在使用的维乐坐垫品牌,除了产品专业之外,也一直都非常关注女性骑行…

【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解

目录 一、前言 二、LangChain4j 介绍 2.1 什么是LangChain4j 2.2 LangChain4j 主要特点 2.3 Langchain4j 核心组件 三、RAG介绍 3.1 什么是RAG 3.2 RAG工作流程 3.2.1 补充说明 3.3 Embedding模型 3.3.1 RAG实际使用步骤 3.3.2 什么是Embedding 3.3.3 Embedding 技…

流动的梦境:GPT-4o 的自回归图像生成深度解析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

北大人工智能研究院朱松纯:“中国的AI叙事” 存在认知偏差

3月29日,在2025中关村论坛通用人工智能论坛上,北京通用人工智能学院院长,北京大学人工智能研究院、智能学院院长朱松纯表示,目前,行业对AI的讨论几乎被大模型能力所占据,而基础学科、原始创新与智能本质的研…

习题1.26

解释题,说简单也简单,难在如何表达清楚。 首先解释下代码的变化 (defn expmod[base exp m](cond ( exp 0) 1(even? exp) (mod (square (expmod base (/ exp 2) m)) m):else (mod (* base (expmod base (- exp 1) m)) m)))(defn expmod[base exp m](co…

FPGA调试笔记

XILINX SSTL属性电平报错 错误如下: [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…

基于Java(SSM)+Mysql实现移动大厅业务办理(增删改查)

基于 SSM 框架的移动业务大厅 数据库需要自行创建! 一、 整体基本实现情况 对本学期的 Java 作业 1 的 SOSO 移动大厅进行改进, 基于 SSM、JSP、Maven、Tomcat、MySQL 等实现。 二、 实现详情 1、 工程结构图 2、 工程结构各部分实现 (…

【字符设备驱动开发–IMX6ULL】(一)简介

【字符设备驱动开发–IMX6ULL】(一)简介 一、Linux驱动与裸机开发区别 1.裸机驱动开发回顾 ​ 1、底层,跟寄存器打交道,有些MCU提供了库。 spi.c:主机驱动(换成任何一个设备之后只需要调用此文件里面的…

C++_STL之list篇

一、list的介绍 std::list是C标准模板库(STL)中的一个双向链表容器。与vector和deque不同,list不支持随机访问,但它在任何位置插入和删除元素都非常高效。 1.基本特性 (1)双向链表结构:每个元素都包含指向前驱和后继的指针 (2)非连续存储&…

Spring 声明式事务 万字详解(通俗易懂)

目录 Δ前言 一、声明式事务快速入门 1.为什么需要声明式事务? 2.定义: 3.应用实例: 二、声明式事务的传播机制 1.引出问题: 2.传播机制分类: 3.应用实例: 三、声明式事务的隔离机制 1.四种隔离级别&…

MySQL 当中的锁

MySQL 当中的锁 文章目录 MySQL 当中的锁MySQL 中有哪些主要类型的锁?请简要说明MySQL 的全局锁有什么用?MySQL 的表级锁有哪些?作用是什么?元数据锁(MetaData Lock,MDL)意向锁(Inte…

[Linux]基础IO

基础IO C文件IO相关操作磁盘文件与内存文件inode(index node)硬链接与软连接硬链接软连接总结 动静态库静态库动态库总结 C文件IO相关操作 当前路径:进程运行的时候,所处的路径叫做当前路径 打开文件的时候,一定是进…

力扣刷题-热题100题-第27题(c++、python)

21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-two-sorted-lists/description/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 创建一个新链表,遍历list1与list2,将新链表指向list1与list2…

Vue3 其它API Teleport 传送门

Vue3 其它API Teleport 传送门 在定义一个模态框时,父组件的filter属性会影响子组件的position属性,导致模态框定位错误使用Teleport解决这个问题把模态框代码传送到body标签下

windows下安装sublime

sublime4 alpha 4098 版本 下载 可以根据待破解的版本选择下载 https://www.sublimetext.com/dev crack alpha4098 的licence 在----- BEGIN LICENSE ----- TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D…

Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器

JVM是Java高级部分,深入理解程序的运行及原理,面试中也问的比较多。 JVM是Java程序运行的虚拟机环境,实现了“一次编写,到处运行”。它负责将字节码解释或编译为机器码,管理内存和资源,并提供运行时环境&a…

【STL】queue

q u e u e queue queue 是一种容器适配器,设计为先进先出( F i r s t I n F i r s t O u t , F I F O First\ In\ First\ Out,\ FIFO First In First Out, FIFO)的数据结构,有两个出口,将元素推入队列的操作称为 p u …

20250330-傅里叶级数专题之离散时间傅里叶变换(4/6)

4. 傅里叶级数专题之离散时间傅里叶变换 20250328-傅里叶级数专题之数学基础(0/6)-CSDN博客20250330-傅里叶级数专题之傅里叶级数(1/6)-CSDN博客20250330-傅里叶级数专题之傅里叶变换(2/6)-CSDN博客20250330-傅里叶级数专题之离散傅里叶级数(3/6)-CSDN博客20250330-傅里叶级数专…

漏洞挖掘---迅饶科技X2Modbus网关-GetUser信息泄露漏洞

一、迅饶科技 X2Modbus 网关 迅饶科技 X2Modbus 网关是功能强大的协议转换利器。“X” 代表多种不同通信协议,能将近 200 种协议同时转为 Modbus RTU 和 TCP 服务器 。支持 PC、手机端等访问监控,可解决组态软件连接不常见控制设备难题,广泛…

网络安全之前端学习(css篇2)

那么今天我们继续来学习css,预计这一章跟完后,下一章就是终章。然后就会开始js的学习。那么话不多说,我们开始吧。 字体属性 之前讲到了css可以改变字体属性,那么这里来详细讲一讲。 1.1字体颜色 之前讲到了对于字体改变颜色食…