Llama-Factory 训练中文小说续写模型的实践心得
通用大模型在中文小说续写任务中常存在风格不符、逻辑断裂等问题,而从头训练专属模型又面临显存与代码门槛。本文分享使用 Llama-Factory 结合 QLoRA 技术,在单张 RTX 3090 上对 Baichuan2-7B 进行高效微调的实践经验,实现具备古风韵味的垂直领域模型。
为什么选择 Llama-Factory?
相比手动基于 Hugging Face Transformers 搭建流程,Llama-Factory 提供了开箱即用的解决方案:
- 统一接口:适配多种主流架构(Qwen, Baichuan, ChatGLM, LLaMA 等);
- 多模式微调集成:支持全参数、LoRA、QLoRA,切换仅需修改参数;
- WebUI 可视化操作:浏览器即可完成数据导入、配置、训练及监控;
- 端到端闭环:覆盖从预处理到合并导出的全流程。
技术底座:LoRA 与 QLoRA
传统全参数微调显存占用高(7B 模型需>80GB)。LoRA 通过引入低秩矩阵 $ A \in \mathbb{R}^{d \times r} $、$ B \in \mathbb{R}^{r \times k} $,仅更新少量参数,大幅降低显存需求。QLoRA 在此基础上增加 4-bit 量化、双重量化及 Paged Optimizers,使消费级显卡(如 RTX 3090)也能运行。
| 微调方式 | 显存占用 | 可训练参数比例 | 是否适合消费级 GPU |
|---|---|---|---|
| 全参数微调 | >80GB | 100% | ❌ |
| LoRA | ~20GB | ~0.5% | ⚠️ |
| QLoRA | <24GB | ~0.5% | ✅ |
实战流程
1. 数据准备
构建'上下文 → 续写'样本对,采用 JSONL 格式:
{"instruction": "请续写以下小说段落", "input": "夜色如墨,山风呼啸。林间小道上,一道黑影疾驰而过……", "output": "他脚步轻盈,仿佛踏叶无痕。忽然,前方传来一阵铃声,清脆却透着诡异……"}
Llama-Factory 默认将其拼接为 Alpaca 模板。
2. 模型选择与训练配置
选用 Baichuan2-7B-Base,启动命令如下:
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--do_train \
--model_name_or_path baichuan-inc/Baichuan2-7B-Base \
--dataset chinese_novel_demo \
--template baichuan2 \
--finetuning_type lora \
--lora_target W_pack \
--output_dir ./output/chinese_novel_lora \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--fp16 \
--plot_loss \
--quantization_bit 4 \
--device_map auto

