当前位置: 首页 > 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

相关文章:

LLaMA-Factory使用实战

LLaMA-Factory使用实战 项目介绍 项目地址:https://github.com/hiyouga/LLaMA-Factory 中文文档:安装 - LLaMA Factory 快速开始文档:https://zhuanlan.zhihu.com/p/695287607(推荐参考) 远程服务器通过本地代理加…...

读一本书,骑行万里路:与维乐 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、 工程结构各部分实现 (…...

音视频 ColorSpace色彩空间详解

前言 基于前篇介绍YUV格式,本文继续介绍另一个重要概念颜色空间,又叫色彩空间;主要用于在音视频开发中的色彩空间转换。 色彩空间Color Space 色彩空间由色彩模型和色域共同定义。当色彩模型与特定的描述相关联以后,就称为色彩空间。 色彩模型Color Model 色彩模型Col…...

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

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

45 55跳跃游戏解题记录

先是55跳跃游戏,暴力解法会怎样?会超出时间限制,而且有很多细节要注意: func canJump(nums []int) bool {// 处理空数组情况,当nums只剩一个元素时,nums[i:]导致越界。if len(nums) 0 {return false}// 如…...

C++_STL之list篇

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

Go中的逃逸分析

什么是逃逸? 逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。 类比: 栈就像一个临时的快餐盒,用来存放短期使用的数据。堆就像…...

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

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

MySQL 当中的锁

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

fyrox 2D和3D游戏的制作

目录 fyrox介绍 1. 核心特性 1.1 高性能渲染 1.2 跨平台支持 1.3 物理引擎集成 1.4 脚本系统 1.5 场景管理 2. 架构设计 2.1 渲染器 2.2 资源管理器 2.3 输入系统 2.4 音频引擎 2.5 网络模块 3. 使用场景 3.1 2D游戏 3.2 3D游戏 3.3 模拟与教育应用 4. 在游戏…...

[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…...

golang 的strconv包常用方法

目录 1. 字符串与整数的转换 2. 字符串与浮点数的转换 3. 布尔值的转换 4. 字符串的转义 5. 补充:rune 类型的使用 方法功能详解 代码示例: 1. 字符串与整数的转换 方法名称功能描述示例Atoi将字符串转换为十进制整数。strconv.Atoi("123&q…...

ComplexE的代码注释

目录 dataloader.pymodel.pyrun.py 先安装软件,配置环境,搞了一周。再看代码写注释搞了一周。中间隔了一周。再安装环境跑代码又一周。最后结果是没结果。自己电脑内存带不动。还不想配电脑,又不会用GPU服务器。哭死哭死。心态崩了。直接发吧…...

vector<int> 的用法

vector<int> 是 C 标准模板库(STL)中的一个容器&#xff0c;用于存储动态大小的整数序列。以下是它的主要用法&#xff1a; 基本操作 1. 创建和初始化 #include <vector> using namespace std;vector<int> v1; // 空vector vector<int>…...

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

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

名言警句1

1、嫉妒是欲望的衍生&#xff0c;而欲望则是成长的驱动&#xff0c;说到底每个人都是为了成长&#xff0c;为了不居人后&#xff0c;在成长的过程中&#xff0c;我们可以让欲望枝繁叶茂&#xff0c;但不能让嫉妒开花结果 2、人生无法奢求更多&#xff0c;我们有健康的身体&…...

【STL】queue

q u e u e queue queue 是一种容器适配器&#xff0c;设计为先进先出&#xff08; 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&#xff09;的数据结构&#xff0c;有两个出口&#xff0c;将元素推入队列的操作称为 p u …...

QXmpp入门

QXmpp 是一个基于 Qt 的 XMPP (Jabber) 协议实现库,用于开发即时通讯(IM)、聊天应用和实时协作系统。它支持客户端和服务端开发,提供完整的 XMPP 核心功能扩展。 1. 核心功能 XMPP 核心协议支持 支持 RFC 6120 (XMPP Core) 和 RFC 6121 (XMPP IM) 基础功能:认证、在线状态…...

使用cursor为代码添加注释

1. add-comments.md英文 You are tasked with adding comments to a piece of code to make it more understandable for AI systems or human developers. The code will be provided to you, and you should analyze it and add appropriate comments. To add comments to …...

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” 代表多种不同通信协议&#xff0c;能将近 200 种协议同时转为 Modbus RTU 和 TCP 服务器 。支持 PC、手机端等访问监控&#xff0c;可解决组态软件连接不常见控制设备难题&#xff0c;广泛…...