基于 llama-Factory 动手实践 Llama 全参数 SFT 和 LoRA SFT

server/2025/2/7 23:47:30/

llamaFactory_Llama__SFT__0">一、llama-Factory:你的 Llama 模型 SFT 工厂

llama-Factory 是一个开源的、用户友好的工具,专门用于对 Llama 系列模型进行微调。它提供了简洁的界面和强大的功能,让你无需复杂的代码编写,就能轻松完成 Llama 模型的 SFT 任务,无论是 全参数微调 还是 参数高效的 LoRA 微调llama-Factory 都能轻松搞定。

llama-Factory 的优势:

  • 易于上手: 简洁的命令行界面,配置简单,即使是新手也能快速上手。
  • 功能强大: 支持全参数 SFT 和 LoRA SFT,满足不同场景的需求。
  • 高效便捷: 集成了常用的训练技巧,优化训练流程,提高效率。
  • 开源免费: 开放源代码,可以自由使用和定制。

二、准备环境:搭建你的 SFT 工作站

在开始实践之前,我们需要先搭建好运行 llama-Factory 的环境。

1. 硬件需求:

  • GPU: 建议使用 NVIDIA GPU,显存越大越好,不同模型大小对显存要求不同 (见经验信息)
  • 内存: 至少 16GB 内存。
  • 硬盘: 足够的硬盘空间,用于存放模型、数据集和训练结果。

2. 软件环境:

  • Python: 建议使用 Python 3.8 或更高版本。
  • CUDA: 如果使用 NVIDIA GPU,需要安装 CUDA 驱动和 Toolkit。
  • PyTorch: llama-Factory 基于 PyTorch 框架,需要安装 PyTorch。

llamaFactory_27">3. 安装 llama-Factory:

使用 pip 命令即可轻松安装 llama-Factory:

pip install llama-factory

安装完成后,可以通过以下命令验证是否安装成功:

llama-factory --version

三、数据准备:打造你的专属 SFT 数据集

SFT 的效果很大程度上取决于数据集的质量。我们需要准备一个符合 (Instruction, Input, Output) 格式的数据集。

1. 数据格式:

llama-Factory 接受 JSON 格式的数据集。每个数据样本包含以下字段:

  • instruction (必须): 指令描述,例如 “Summarize the following article”。
  • input (可选): 输入内容,例如文章内容。
  • output (必须): 期望的输出结果,例如文章摘要。

数据示例 (JSON 格式):

[{"instruction": "Summarize the following article.","input": "Large language models (LLMs) are a type of artificial intelligence (AI) algorithm that uses deep learning techniques and massively large data sets to understand, summarize, generate and predict new content. LLMs are based on a type of neural network architecture called a transformer network, and are pre-trained on massive quantities of text data.","output": "Large language models (LLMs) are AI algorithms using deep learning and large datasets to understand, summarize, generate, and predict content. They are based on transformer networks and pre-trained on vast text data."},{"instruction": "Translate the following English sentence to Chinese.","input": "Hello, world!","output": "你好,世界!"},{"instruction": "Write a Python function to calculate the Fibonacci sequence.","input": "","output": "```python\ndef fibonacci(n):\n  if n <= 1:\n    return n\n  else:\n    return fibonacci(n-1) + fibonacci(n-2)\n```"}
]

将你的数据集保存为 data.json 文件。

2. 数据加载:

llama-Factory 可以直接加载 JSON 格式的数据集。在训练命令中,通过 --dataset 参数指定数据集路径即可。

经验信息:SFT 数据量要求

SFT 数据集的大小对微调效果至关重要。数据量不足可能导致模型过拟合到训练数据,泛化能力不足;数据量过大则会增加训练时间和成本。以下是一些经验性的数据量建议,仅供参考,实际情况可能因任务复杂度、模型大小和数据质量而异

  • LoRA SFT:

    • 简单任务 (例如:情感分类、关键词提取): 几百到几千条样本可能就足够获得不错的效果。
    • 中等任务 (例如:问答、摘要): 建议至少几千到几万条样本。
    • 复杂任务 (例如:代码生成、创意写作): 可能需要数万甚至数十万条样本才能获得理想的效果。
  • 全参数 SFT: 由于全参数 SFT 会更新模型的所有参数,通常需要更多的数据才能充分发挥其潜力,并避免灾难性遗忘 (Catastrophic Forgetting)。在数据量充足的情况下,全参数 SFT 理论上可以达到更好的效果。

更小的 Llama 模型 (例如 7B, 13B) 相对于更大的模型 (例如 70B) 而言,通常对数据量的需求会相对少一些。

数据质量比数据量更重要! 高质量、多样化的 SFT 数据集是获得良好微调效果的关键。

四、全参数 SFT 实战:火力全开,深度微调

全参数 SFT 指的是更新模型的所有参数,这种方法能够充分利用 SFT 数据集的知识,让模型更好地适应特定任务。但全参数 SFT 需要更多的计算资源和时间。

1. 训练命令:

使用 llama-Factory 进行全参数 SFT 的基本命令如下:

llama-factory train \--model_name_or_path <你的 Llama 模型路径> \--dataset <你的数据集路径> \--output_dir <模型保存路径> \--template default \--finetuning_type full \--lora_rank 0 \--num_train_epochs 3 \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--learning_rate 2e-5 \--logging_steps 10 \--save_steps 100 \--fp16

参数解释:

  • --model_name_or_path: 必须,指定你的 Llama 模型的 Hugging Face 模型名称或本地路径。例如 meta-llama/Llama-2-7b-hf/path/to/your/llama-model
  • --dataset: 必须,指定你的 SFT 数据集 JSON 文件路径,例如 data.json
  • --output_dir: 必须,指定微调后模型保存的路径,例如 output/llama-full-sft
  • --template: 必须,指定 Prompt 模板,default 模板适用于大多数场景。
  • --finetuning_type: 必须,设置为 full,表示进行全参数 SFT。
  • --lora_rank: 设置为 0,禁用 LoRA。
  • --num_train_epochs: 训练轮数,根据数据集大小和收敛情况调整。
  • --per_device_train_batch_size: 每个 GPU 的 Batch Size,根据 GPU 显存调整。
  • --gradient_accumulation_steps: 梯度累积步数,用于增大有效 Batch Size。
  • --learning_rate: 学习率,通常设置为 2e-51e-5
  • --logging_steps: 日志打印间隔。
  • --save_steps: 模型保存间隔。
  • --fp16: 使用混合精度训练,加速训练并减少显存占用 (需要 GPU 支持 FP16)。

示例命令 (假设你使用 Llama-2-7b-hf 模型,数据集为 data.json,输出路径为 output/llama-full-sft):

llama-factory train \--model_name_or_path meta-llama/Llama-2-7b-hf \--dataset data.json \--output_dir output/llama-full-sft \--template default \--finetuning_type full \--lora_rank 0 \--num_train_epochs 3 \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--learning_rate 2e-5 \--logging_steps 10 \--save_steps 100 \--fp16

2. 资源需求:

全参数 SFT 对 GPU 显存要求较高,不同 Llama 模型大小对显存需求差异很大

  • Llama 7B: 至少 16GB 显存 (FP16 混合精度)。
  • Llama 13B: 至少 32GB 显存 (FP16 混合精度)。
  • Llama 30B/33B: 至少 64GB 显存 (FP16 混合精度)。
  • Llama 65B/70B: 100GB 甚至更多显存 (FP16 混合精度),可能需要多卡并行训练。

经验信息:模型大小选择

模型越大,效果理论上越好,但也更吃资源。 在选择 Llama 模型大小时,需要权衡你的任务需求和硬件资源:

  • 资源有限 (例如:消费级 GPU): 建议选择 Llama 7B 或 13B,并使用 LoRA SFT。
  • 资源充足 (例如:专业级 GPU 或 GPU 集群): 可以尝试 Llama 30B/33B 甚至更大的模型,并考虑全参数 SFT 或 LoRA SFT。

对于大多数常见的 SFT 任务,Llama 7B 或 13B 模型配合 LoRA SFT 已经能够取得不错的效果。 更大模型通常在需要更强推理能力和知识储备的复杂任务中才能体现出优势。

五、LoRA SFT 实战:参数高效,轻量微调

LoRA (Low-Rank Adaptation) 是一种参数高效的微调方法,它冻结预训练模型的参数,只训练少量新增的 LoRA 适配器层。LoRA SFT 能够在资源有限的情况下,快速有效地对 Llama 模型进行微调。

1. 训练命令:

使用 llama-Factory 进行 LoRA SFT 的基本命令与全参数 SFT 类似,只需要修改 --finetuning_type--lora_rank 参数:

llama-factory train \--model_name_or_path <你的 Llama 模型路径> \--dataset <你的数据集路径> \--output_dir <模型保存路径> \--template default \--finetuning_type lora \--lora_rank 8 \--num_train_epochs 3 \--per_device_train_batch_size 8 \--gradient_accumulation_steps 2 \--learning_rate 1e-4 \--logging_steps 10 \--save_steps 100 \--fp16

参数修改:

  • --finetuning_type: 设置为 lora,表示进行 LoRA SFT。
  • --lora_rank: 设置为 LoRA 的秩 (rank),通常设置为 816。秩越大,模型参数越多,效果可能更好,但也更耗资源。
  • --learning_rate: LoRA SFT 通常可以使用更大的学习率,例如 1e-42e-4
  • --per_device_train_batch_size: LoRA SFT 对显存要求较低,可以适当增大 Batch Size。

示例命令 (假设你使用 Llama-2-7b-hf 模型,数据集为 data.json,输出路径为 output/llama-lora-sft):

llama-factory train \--model_name_or_path meta-llama/Llama-2-7b-hf \--dataset data.json \--output_dir output/llama-lora-sft \--template default \--finetuning_type lora \--lora_rank 8 \--num_train_epochs 3 \--per_device_train_batch_size 8 \--gradient_accumulation_steps 2 \--learning_rate 1e-4 \--logging_steps 10 \--save_steps 100 \--fp16

2. 资源需求:

LoRA SFT 对 GPU 显存要求较低,即使是 8GB 显存的 GPU,例如 NVIDIA RTX 2080 Ti 或 RTX 3070,也可以进行 LoRA SFT。 对于 Llama 7B 和 13B 模型,LoRA SFT 通常可以在消费级 GPU 上流畅运行。

六、模型评估与推理

训练完成后,你可以在 llama-Factory 中加载微调后的模型进行评估和推理。

推理命令:

llama-factory gradio \--model_name_or_path <你的微调模型路径> \--template default

<你的微调模型路径> 替换为你全参数 SFT 或 LoRA SFT 的输出路径,例如 output/llama-full-sftoutput/llama-lora-sft

运行命令后,llama-Factory 会启动一个 Gradio Web UI,你可以在 Web 界面上与微调后的模型进行交互,测试模型的性能。

七、小结

选择哪种 SFT 方式?

  • 全参数 SFT: 效果更好,但资源需求高,训练时间长。适用于追求极致性能,且资源充足的场景。
  • LoRA SFT: 参数高效,资源需求低,训练速度快。适用于资源有限,需要快速迭代,或者需要部署在资源受限设备上的场景。

http://www.ppmy.cn/server/165798.html

相关文章

?和.和*在正则表达式里面的区别

在正则表达式中&#xff0c;?、. 和 * 是三种非常重要的元字符&#xff0c;它们各自有不同的功能和用途&#xff0c;以下是它们的区别&#xff1a; ?&#xff08;问号&#xff09; 功能&#xff1a;表示前面的元素&#xff08;字符、字符集、分组等&#xff09;是可选的&…

Text2Sql:开启自然语言与数据库交互新时代(3030)

一、Text2Sql 简介 在当今数字化时代&#xff0c;数据处理和分析的需求日益增长。对于众多非技术专业人员而言&#xff0c;数据库操作的复杂性常常成为他们获取所需信息的障碍。而 Text2Sql 技术的出现&#xff0c;为这一问题提供了有效的解决方案。 Text2Sql&#xff0c;即文…

【图像处理】-不同的图像存储格式

看到了前面的基础操作介绍&#xff0c;我们再了解一下不同图像的存储格式&#xff0c;更有利于我们理解图像处理的原理。 图像存储格式详细介绍 1. BMP&#xff08;BitMap Picture&#xff09; 发展历史 BMP是一种位图文件格式&#xff0c;由微软公司于1986年推出。它最初是…

阿里云不同账号vpc对等连接

目录 一&#xff0c;VPC对等连接介绍 1&#xff0c;VPC功能介绍 2&#xff0c;使用场景 二&#xff0c;准备vpc,和ECS服务器 1,第一个账号vpc网络/网段 ​编辑 2&#xff0c;第一个账号下的ECS实例 ip:172.19.45.29 ​编辑 3&#xff0c; 第二个账号vpc网络/网段 4&…

AI开发模式:ideal或vscode + 插件continue+DeepSeek R1

如何在 VSCode 中结合插件 Continue 和 DeepSeek 构建智能货柜AI开发环境的详细指南,涵盖环境配置、算法开发与模型优化全流程: 1. 环境搭建与工具选型 核心工具 工具/插件用途推荐配置VSCode主开发环境,支持多语言与插件扩展安装Python/C++/CUDA扩展ContinueAI代码助手(类…

游戏引擎学习第87天

当直接使用内存时&#xff0c;可能会发生一些奇怪的事情 在直接操作内存时&#xff0c;一些意外的情况可能会发生。由于内存实际上只是一个大块的空间&#xff0c;开发者可以完全控制它&#xff0c;而不像高级语言那样必须遵守许多规则&#xff0c;因此很容易发生错误。在一个…

接口测试Day11-代码优化、生成测试报告、日志收集、全量字段校验

获取请求头 1、. 在 common/ 下 创建 get_header.py 文件 2. 在 文件内 创建 get_header() 函数&#xff0c;实现 登录成功&#xff0c;获取令牌&#xff0c;拼接成 请求头&#xff0c;返回。 3. 在 scripts/ 的测试脚本文件中&#xff0c;添加 setUpClass 方法&#xff0c;调用…

kakailio官网推荐的安装流程ubuntu 22.04

https://kamailio.org/docs/tutorials/6.0.x/kamailio-install-guide-git/ # 非必须项 wget -O- https://deb.kamailio.org/kamailiodebkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/kamailio.gpg在/etc/apt/sources.list文件追加以下内容 deb [signed-by/usr/sh…