大模型微调 : LLaMA-Factory + Qwen3:4b

发布时间:2026/7/5 14:06:45
大模型微调 : LLaMA-Factory + Qwen3:4b 前言大模型是当前市场上最热门的技术发展方向之一。大模型微调作为其中的关键技术是我们个人开发者能够学习到的最接近现实生产场景的技能。简单来说大模型微调就是使用少量私有数据低成本地改造通用大模型使其适应特定行业需求。现在让我们一起深入拆解大模型微调技术的使用方法和流程。环境搭建适配 Qwen3-8B-HF LLaMA-Factory核心微调套件必用组件LLaMA-Factory 0.9.6.dev0专为 Qwen3 系列设计的微调工具支持封装、量化、训练、推理与模型合并适配 QLoRA/LoRA 训练。Transformers 5.6.0官方模型库用于加载 Qwen3-8B-HF 权重、分词器、对话模板及模型前向传播。PEFT 0.18.1轻量化微调核心库通过少量显存实现大模型微调需配合 bitsandbytes 进行 4bit 量化。Accelerate 1.11.0多/单卡 GPU 分布式训练工具提供显存优化与混合精度训练支持是 LLaMA-Factory 的底层依赖。Bitsandbytes 0.48.0支持 Windows 的 4/8bit 量化工具可将 Qwen3-8B 显存需求压缩至 6GB。Safetensors 0.8.0安全轻量化模型权重存储格式替代传统不安全的 bin 文件。Tokenizers 0.22.2高速分词工具配合 Qwen3 专用分词器完成文本编码、填充、截断及数据预处理。数据集处理工具Datasets 4.0.0HuggingFace 数据集库支持加载本地 JSON/CSV 数据提供分片、清洗及对话格式化功能。PyArrow 24.0.0Datasets 的底层依赖用于高效读写大容量训练数据集。Multiprocess 0.70.16 / Dill 0.3.8多进程并行处理工具加速数据预处理流程。CUDA/GPU 运行环境RTX3050 适配PyTorch 2.12.1cu126包含 Torch、TorchVision、TorchAudio支持 GPU 张量运算与反向传播需 CUDA 12.6 驱动。CUDA Version 13.1系统环境标识确保 PyTorch 正确识别显卡并向下兼容。GPU 下载网址Get Started配置与参数解析Omegaconf 2.3.1读取 YAML 配置文件设置模型路径、量化参数、学习率等训练超参。PyYAML 6.0.3YAML 文件读写工具用于存储微调参数与数据集路径。Tyro 0.8.14命令行参数解析工具支持启动训练脚本时动态传入超参。辅助工具Tqdm 4.68.3训练/推理进度条直观显示 Epoch 与 Step 进度。Rich 15.0.0彩色控制台日志输出便于调试与错误追踪。SentencePieceQwen 分词器底层依赖部分基座模型需此库支持。HuggingFace Hub 1.21.0模型权重下载/上传工具支持本地 Qwen3-8B-HF 文件夹校验。下载LLaMA-Factory —— 微调大模型的工具代码框架执行以下命令克隆 LLaMA-Factory 仓库git clone https://github.com/hiyouga/LLaMA-Factory.gitQwen3-8B-HF —— 基座大模型使用以下命令下载 Qwen3-8B-HF 模型# 设置 HuggingFace 镜像加速国内用户 $env:HF_ENDPOINThttps://hf-mirror.com 下载模型到本地 hf download Qwen/Qwen3-8B --local-dir ./qwen3-8b-hf微调LLaMA-Factory步骤 1克隆 LLaMA-Factory 仓库执行命令git clone https://github.com/hiyouga/LLaMA-Factory.git注意需要开启 VPN否则可能会报端口号对不上的错误。步骤 2配置数据集信息文件在 LLaMA-Factory 项目目录中定位到week_two/week2_00/week2_00/LLaMA-Factory/data/路径下的dataset_info.json文件添加以下配置# 这个就是我经过AI调整后的所有.json文件代码 { medical_train: { file_name: train.json, columns: { prompt: instruction, query: input, response: output, history: history } } }步骤 3准备训练数据集文件在 LLaMA-Factory 项目目录中定位到week_two/week2_00/week2_00/LLaMA-Factory/data/路径下的train.json文件。该文件需要自行创建可以从以下仓库获取示例文件git clone https://github.com/GDB-Creator/LLaMA-Factory-LLM-Fine-Tuning.git步骤 4配置训练参数文件配置文件路径week_two/week2_00/week2_00/LLaMA-Factory/config/my_qwen3_4b_qlora.yaml注意my_qwen3_4b_qlora.yaml文件名称对应基准模型 Qwen3-4B。配置文件内容示例### model model_name_or_path: E:\python\DM\ZG-five-CV\week_two\week2_00\week2_00\qwen3-4b-hf # 对应本地下载的 qwen3-4b-hf 路径 trust_remote_code: true 新增配置 upcast_layernorm: true # 消除警告 template: qwen3_nothink # 添加后再次运行训练指令这条推理模板警告会直接消失 注意template: qwen3 和上行代码会起冲突步骤 5开始微调1. 查看 GPU 版本nvidia-smi2. 根据自己版本运行对应 Qwen3 系列部署的本地模型可根据 AI 的指导进行。3. 在编译器的终端输入运行指令$env:CUDA_VISIBLE_DEVICES0 $env:HF_ENDPOINThttps://hf-mirror.com python src/train.py config/my_qwen3_4b_qlora.yaml微调成功后的指令返回示例***** train metrics ***** epoch 1.0 total_flos 470905GF train_loss 5.8936 train_runtime 0:02:49.65 train_samples_per_second 0.589 train_steps_per_second 0.024 [WARNING|2026-07-04 10:39:00] llamafactory.extras.ploting:149 No metric loss to plot. [WARNING|2026-07-04 10:39:00] llamafactory.extras.ploting:149 No metric eval_loss to plot. [WARNING|2026-07-04 10:39:00] llamafactory.extras.ploting:149 No metric eval_accuracy to plot. [INFO|modelcard.py:263] 2026-07-04 10:39:00,481 Dropping the following result as it does not have all the necessary fields: {task: {name: Causal Language Modeling, type: text-generation}}步骤 6测试模型测试文件路径week_two/week2_00/week2_00/LLaMA-Factory/test.py在项目中载入 test.py 文件运行报错后根据 AI 描述修改原本的 test 文件。from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig from peft import PeftModel import torch import os os.environ[CUDA_VISIBLE_DEVICES] 0 BASE_MODEL rE:\python\DM\ZG-five-CV\week_two\week2_00\week2_00\qwen3-4b-hf LORA_WEIGHT rsaves\qwen3-8b\lora\sft bnb_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_use_double_quantTrue, bnb_4bit_quant_typenf4, bnb_4bit_compute_dtypetorch.bfloat16 ) print(加载 tokenizer...) tokenizer AutoTokenizer.from_pretrained( BASE_MODEL, local_files_onlyTrue, trust_remote_codeTrue ) print(加载 4bit 基座模型) model AutoModelForCausalLM.from_pretrained( BASE_MODEL, quantization_configbnb_config, local_files_onlyTrue, trust_remote_codeTrue, device_mapauto ) print(加载 LoRA 微调权重) model PeftModel.from_pretrained(model, LORA_WEIGHT) def medical_chat(question: str) - str: messages [{role: user, content: question}] # 正确拆分 text tokenizer.apply_chat_template(messages, add_generation_promptTrue, tokenizeFalse) inputs tokenizer(text, return_tensorspt).to(cuda) input_ids inputs[input_ids] outputs model.generate( input_ids, max_new_tokens512, temperature0.2, top_p0.8 ) response tokenizer.decode(outputs[0][len(input_ids[0]):], skip_special_tokensTrue) return response if name main: res medical_chat(咳嗽、痰多该怎么缓解) print(模型回答\n, res)测试结果展示和原始基准模型使用结果对比微调后的模型测试输出微调前的模型测试输出问题为什么感觉没有经过微调的模型回答的更加具体、更加全面一些呢模型微调的问题分析与解决在微调过程中如果发现微调后的模型输出不如原始基座模型详细全面通常与训练数据质量、训练配置和模型架构有关。以下是常见问题及解决方案一、训练数据本身缺陷1. 单条样本内容篇幅短、知识点少问题表现基座大模型在原生预训练阶段见过全网海量的完整科普文一条问答就能输出完整分层、带表格、分轻重度、区分就医指征的长文。而你的微调数据集每条问答大概率是简短短句、碎片化回答缺乏多层分类、禁忌、就医红线、操作细节等深度内容。导致结果模型微调后只会模仿数据中的简短行文风格学会简短概括式输出丢失了原生长篇科普能力。解决方案扩充训练样本的深度和广度每条样本应包含完整的知识链条避免过于简短的问答对。2. 数据覆盖维度不全问题表现原基座模型自带完整的医学常识链病因 → 居家操作 → 饮食禁忌 → 用药区分 → 危险就医信号。而你的训练数据可能只写了少量缓解办法缺少用药分类、紧急就医判断、拍背标准手法、婴儿禁忌、痰液颜色区分这类细分知识点。导致结果模型学不到这些内容自然在输出时不会主动补充。解决方案构建多维度的训练数据确保覆盖目标领域的所有关键知识点和场景。二、训练损失目标微调强制模型贴合训练集格式问题表现训练过程中损失函数会强制模型学习训练数据的分布特征。具体机制基座模型默认偏好长、全面、分点详细的输出你的训练样本全是精简回答模型训练时会不断收敛主动压缩篇幅、省略细分条目避免输出超长文本不然 loss 会变大简单说微调会强制模型模仿你数据的简短文风主动删减细节哪怕它原本知道更多知识点。解决方案在训练数据中适当加入详细、结构化的样本调整损失函数的权重避免过度惩罚长文本输出使用长度惩罚参数控制生成文本的长度。三、训练超参与显存限制导致拟合不足/过拟合1. 过拟合符合现在现象问题表现模型在训练集上表现很好但在验证集或实际应用中表现下降输出变得过于简单或模式化。 完结撒花 感谢您的观看与支持 项目文件已开源本文涉及的所有配置文件、数据集和代码均已上传至Git平台希望能为有需要的开发者提供参考和帮助。