大模型开发 (一)使用Llamafactory来微调qwen模型

发布时间:2026/7/31 19:52:34
大模型开发 (一)使用Llamafactory来微调qwen模型 大模型开发系统一使用Llamafactory来微调qwen模型首先介绍Llamafactory是一个开源、高效、易用的LLM微调框架由ModelScope社区推出。它支持多种主流开源大模型如Qwen、Llama、ChatGLM、Baichuan等的高效微调提供了统一的训练接口和丰富的训练策略大大降低了LLM微调的技术门槛。Llamafactory 的核心特性Llamafactory 具有以下突出特点统一接口通过配置文件即可定义模型、数据、训练参数无需编写大量代码。高效训练支持多种高效微调技术如 LoRA、QLoRA、全参数微调等显著降低显存消耗。丰富的数据集支持内置多种数据格式如 Alpaca、ShareGPT、指令跟随格式并支持自定义数据集。可视化界面提供 Web UIGradio让用户可以通过图形界面轻松配置和启动训练。多任务支持支持指令微调SFT、奖励模型训练、DPO 对齐等多种任务。使用 Llamafactory 微调 Qwen 模型的基本流程下面以微调 Qwen2-7B 模型为例介绍使用 Llamafactory 的基本步骤首先应该是确定自己的电脑是否有gpu/npu或者amd的显卡。在官网去看好像现在只支持这三个平台。官方安装的网址cuda:https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html1. 环境准备首先自己创建一个虚拟环境进入虚拟环境之后拉依赖1.1首先安装 Llamafactory 及其依赖gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory pipinstall-e.pipinstall-rrequirements/metrics.txt 如果出现环境冲突请尝试使用 pipinstall--no-deps-e.解决可以自己去网站拉稳定版1.2 LLaMA-Factory 校验完成安装后可以通过使用llamafactory-cli version来快速校验安装是否成功如果您能成功看到类似下面的界面就说明安装成功了。1.3WebUILLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 在完成 安装 后您可以通过llamafactory-cli webui点击网址指令进入 WebUI:WebUI 主要分为四个界面训练、评估与预测、对话、导出。2. 准备数据集数据集的格式官方文档https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.htmldataset_info.json 包含了所有经过预处理的 本地数据集 以及 在线数据集。如果您希望使用自定义数据集请 务必 在 dataset_info.json 文件中添加对数据集及其内容的定义。支持 Alpaca 格式和 ShareGPT 格式的数据集。Llamafactory 支持多种数据格式。这里以简单的指令跟随格式为例创建一个 JSON 文件dataset.json[{instruction:请用中文回答什么是机器学习,input:,output:机器学习是人工智能的一个分支它使计算机系统能够从数据中学习并改进性能而无需进行明确的编程。},{instruction:写一首关于春天的五言绝句。,input:,output:春风吹绿柳花开满枝头。鸟语花香处人间好景收。}]2.2这里为了快速训练走个流程使用项目里面自带的数据集进入/LlamaFactory-0.9.5/data/里面有数据集可以选择的。数据集的区别自己百度。2.3准备模型下载一个模型可以在webui上自动下载又或者可以modelscope自己下载国内下载推荐魔塔很快的首先需要下载modelscope这个库进入虚拟环境终端里面运行pipinstallmodelscope2然后下载模型模型有很多微调的量化的基础的使用的话根据自己情况我下载基础的用来微调modelscope download--modelQwen/Qwen3.5-0.8B-Base--local_dir./dir./dir是自己下载的位置自己改一下然后等下载好就配置参数3. 配置训练参数语言zh模型选择自己下载的路径是你选择的路径如果是下载的模型选择使用的下载库微调的方法lora full freeze oft 这几种方法。他们的概念和区别是LoRALow-Rank Adaptation低秩适应概念LoRA 是一种参数高效的微调方法它通过在预训练模型的权重矩阵旁添加低秩分解的适配器Adapter来学习微调任务而不是直接更新原始模型的所有参数。原理将权重更新 ΔW 分解为两个低秩矩阵的乘积ΔW BA其中 B ∈ ℝ^(d×r)A ∈ ℝ^(r×k)r ≪ min(d,k)。这样只需要训练这两个小矩阵大大减少了可训练参数。优点显存占用小、训练速度快、易于多任务切换只需保存不同的适配器、通常能保持原始模型的大部分能力。缺点可能无法完全适应需要大规模参数调整的任务。适用场景资源有限如单卡消费级GPU、需要快速实验、希望保持基础模型通用性。Full全参数微调概念也称为标准微调会更新模型的所有参数。原理在预训练模型的基础上使用新数据对整个模型的所有权重进行梯度下降更新。优点理论上能达到最好的微调效果因为所有参数都能适应新任务。缺点显存占用极大、训练速度慢、容易过拟合、需要大量数据。适用场景计算资源充足多卡高显存、有大量高质量领域数据、追求极致性能。Freeze冻结微调概念冻结模型的大部分层通常是底层或中间层只微调顶层如分类头或少数特定层。原理保持预训练模型的知识表示不变只让顶层适应新任务。优点训练极快、显存占用小、避免灾难性遗忘。缺点适应能力有限如果任务与预训练差异大效果可能不佳。适用场景任务与预训练任务相似、数据量少、需要快速部署、资源极度有限。OFTOrthogonal Fine-Tuning正交微调概念一种保持模型表示空间几何结构的微调方法通过正交变换来更新权重以保持模型在预训练中学到的特征之间的相对关系。原理约束权重更新 ΔW 为正交矩阵或近似正交即 W’ W ΔW其中 ΔW 满足正交性条件从而最小化对原始表示空间的扭曲。优点更好地保持预训练模型的泛化能力、减少灾难性遗忘、在某些任务上比LoRA更稳定。缺点实现相对复杂、计算开销比LoRA略高。适用场景需要保持模型强泛化能力、多任务学习、防止灾难性遗忘的重要应用。简单对比总结方法可训练参数量显存占用训练速度效果潜力适用资源LoRA很少0.1%-1%低快良好单卡消费级GPUFull全部100%非常高慢最好多卡专业级GPUFreeze极少1%很低很快一般低端GPU/CPUOFT中等1%-10%中等中等良好-优秀单卡中等GPU在实际选择时可以根据以下原则资源优先显存不足 → LoRA 或 Freeze显存充足 → Full。数据量数据少 → LoRA 或 Freeze数据多且质量高 → Full。任务相关性任务与预训练高度相关 → Freeze 或 LoRA任务差异大 → Full 或 OFT。部署需求需要轻量部署、快速切换任务 → LoRA。量化与高效训练配置在配置训练参数时除了选择微调方法LLaMA-Factory 还提供了多种量化技术和训练加速选项以进一步降低显存占用、提升训练速度。量化Quantization量化是一种通过降低模型权重和激活值的数值精度来减少模型内存占用和计算开销的技术。在大型语言模型LLM微调中量化技术尤为重要它使得在消费级硬件上运行数十亿参数模型成为可能。LLaMA-Factory 支持多种量化方法适用于 QLoRA 等高效微调场景。量化等级Quantization Bits4-bit 量化QLoRA-4将模型权重压缩至 4 位整数INT4显存占用最低适合在消费级 GPU如 RTX 4060 8GB上运行 7B/13B 模型。精度损失相对可控是资源受限时的首选。QLoRA-4 通常能将模型显存占用减少到原始 FP16 模型的 1/4 左右但可能会带来约 1-3% 的性能下降取决于任务和数据。它特别适合快速原型验证、资源有限的个人开发者或对推理延迟要求不高的应用场景。8-bit 量化QLoRA-8将模型权重压缩至 8 位整数INT8在显存节省和精度保留之间取得较好平衡适合对模型效果要求稍高、且显存有限的场景。8-bit 量化通常能将显存占用减少约一半同时性能损失极小通常在 1% 以内是生产环境中常用的折中方案。量化方法Quantization MethodsbnbBitsAndBytes由 Hugging Face 开发支持 4-bit 和 8-bit 量化集成在transformers库中使用方便社区支持广泛。它提供了load_in_4bit和load_in_8bit等简单接口并支持多种量化数据类型如 nf4、fp4。BitsAndBytes 是目前最成熟、最稳定的量化方案兼容性最好。hqqHalf-Quadratic Quantization一种较新的量化方法旨在更好地保持模型性能尤其适合低比特量化如 2-bit、3-bit。HQQ 通过优化量化过程在极低比特下仍能保持较好的模型能力适合对模型大小有极端压缩需求的边缘设备部署。eetqEfficient Engine for Transformer Quantization专为 Transformer 模型优化的量化推理引擎训练时也可结合使用以提升效率。EETQ 针对 Transformer 架构进行了深度优化在保持精度的同时提供更高的推理速度适合对延迟敏感的生产环境。量化技术的工作原理量化本质上是在模型的权重和激活值上应用一个映射函数将高精度浮点数如 FP16、BF16转换为低精度整数如 INT8、INT4。这个过程包括校准Calibration使用一小部分数据确定权重和激活值的动态范围。量化Quantization将浮点数值映射到整数表示。反量化Dequantization在计算时再将整数转换回浮点数进行运算。QLoRAQuantized Low-Rank Adaptation结合了量化和低秩适配技术在保持模型性能的同时大幅减少显存需求。它首先将预训练模型量化为 4-bit然后在此基础上添加可训练的 LoRA 适配器只训练这些适配器而不更新原始量化权重。如何选择量化配置追求极致显存节省选择4-bit bnb。适合单卡消费级 GPU如 RTX 3060 12GB、RTX 4060 8GB运行 7B-13B 模型。平衡速度与精度选择8-bit bnb。适合需要较好模型效果且显存有限的场景如 RTX 4070 12GB 运行 13B-20B 模型。尝试最新量化技术可实验hqq或eetq但需注意兼容性和稳定性。HQQ 适合需要极低比特量化的边缘部署EETQ 适合对推理速度有高要求的场景。生产环境建议对于大多数应用8-bit bnb 量化提供了最佳平衡对于资源极度受限的场景4-bit bnb 是可靠选择。量化配置示例在 Web UI 中你可以在“量化”选项卡中选择相应的等级和方法。在配置文件中可以通过以下参数指定# 量化配置quantization_bit:4# 4-bit 或 8-bit 量化quantization_method:bnb# 量化方法bnb、hqq、eetqquantization_type:nf4# 量化数据类型nf4、fp4仅4-bitdouble_quantization:true# 是否使用双重量化进一步压缩注意事项量化会引入一定的精度损失对于复杂任务可能需要更多数据或更长时间的训练来补偿。不同模型对量化的敏感度不同建议在最终部署前进行充分的评估测试。量化模型在推理时可能需要额外的反量化开销这会略微增加推理延迟。某些硬件如某些 NPU可能对特定量化格式有更好的支持选择时需考虑硬件兼容性。通过合理选择量化配置你可以在有限的硬件资源下高效地微调和部署大型语言模型。RoPE 插值RoPE InterpolationRoPERotary Position Embedding旋转位置编码 是大多数现代 LLM包括 Qwen使用的位置编码。当微调时上下文长度超过预训练长度例如Qwen2-7B 预训练长度为 32768但你需要 65536就需要使用 RoPE 插值来扩展位置编码避免模型在长文本上表现不佳。LLaMA-Factory 支持多种 RoPE 插值方法线性linear最简单的插值方式将位置索引按比例缩放。动态 NTKdynamic NTK根据当前序列长度动态调整缩放因子在短文本上保持原性能在长文本上平滑扩展。YaRNYet another RoPE extensioN更先进的插值方法能更好地保持模型在长短文本上的性能。选择建议如果微调任务不需要超过预训练长度太多例如 1.5 倍可使用线性插值。如果需要较大扩展例如 2 倍以上推荐动态 NTK或YaRN。在配置中可通过rope_scaling参数设置例如rope_scaling: {type: linear, factor: 2.0}。训练加速方法为了进一步提升训练速度LLaMA-Factory 集成了多种加速内核和优化技术auto自动选择当前硬件和模型配置下的最优加速方法。flashattn2Flash Attention 2一种高效的自注意力实现大幅减少显存占用并提升训练速度尤其适合长序列。建议在支持 Flash Attention 2 的 GPU如 Ampere 架构及以上上开启。unsloth一个专注于高效微调的开源库通过内核融合、梯度检查点优化等技术显著提升 LoRA/QLoRA 的训练速度。liger_kernelLLaMA-Factory 自研的高效训练内核针对特定硬件和模型进行了深度优化。配置示例在train_config.yaml中# 量化配置quantization_bit:4# 4-bit 量化quantization_method:bnb# 使用 BitsAndBytes# RoPE 插值配置如需扩展上下文长度rope_scaling:type:dynamic_ntk# 使用动态 NTK 插值factor:2.0# 将上下文长度扩展至 2 倍# 加速配置flash_attn:true# 启用 Flash Attention 2unsloth:false# 根据需求开启use_liger_kernel:true# 启用 Liger 内核加速通过合理配置量化、RoPE 插值和加速方法你可以在有限的硬件资源下更高效地完成大模型微调任务。创建配置文件train_config.yaml或直接使用命令行参数model_name_or_path:Qwen/Qwen2-7B-Instructdataset_path:./dataset.jsontemplate:qwenfinetuning_type:loralora_target:alloutput_dir:./outputper_device_train_batch_size:4gradient_accumulation_steps:4learning_rate:1e-4num_train_epochs:3logging_steps:10save_steps:100eval_steps:100其他参数其他参数自己调整首先设置保存的文件夹和路径。然后点击开始训练训练在webui和终端里面都会有log信息。4. 启动训练使用命令行启动训练llamafactory-cli train\--stagesft\--model_name_or_pathQwen/Qwen2-7B-Instruct\--dataset./dataset.json\--templateqwen\--finetuning_typelora\--output_dir./output\--per_device_train_batch_size4\--gradient_accumulation_steps4\--learning_rate1e-4\--num_train_epochs3或者使用 Web UIllamafactory-cli webui然后在浏览器中打开http://localhost:7860通过界面配置并启动训练。5. 模型评估与推理训练完成后可以使用以下命令进行推理测试llamafactory-cliexport\--model_name_or_path./output\--templateqwen\--finetuning_typelora llamafactory-cli chat\--model_name_or_path./output\--templateqwenPS:我是在wsl2里面安装的ubuntu22.04的。然后拉取下来的自己安装然后跑起来的。没有问题然后训练的模型保存到的路径流程还是很简单的能够轻松微调模型有问题留言总结Llamafactory 为开发者提供了一个极其便捷的 LLM 微调解决方案。通过简单的配置和命令即可对 Qwen 等主流大模型进行高效微调使其更好地适应特定领域或任务。无论是研究还是生产部署Llamafactory 都能显著提升开发效率。Llamafactory