大模型金融微调实战:从环境准备到效果验证的完整流程
金融文本里的财报、公告、研报术语密集,通用大模型常常答得笼统甚至编造数字。
金融微调的目标不是让模型背下所有数据,而是让它学会按金融语境回答,并且能引用输入中的事实。
下面按单卡服务器、7B 级模型和 LoRA 方式展开,显卡显存建议 24GB 起步,显存更小需要调小批次或换用更小模型。
先确认你的场景和数据是否适合微调
适合微调的情况:有几百到几千条高质量金融问答或摘要样本,任务格式稳定,比如财报要点提取、金融新闻情绪判断、研报摘要生成。
不适合的情况:只是想让模型多懂几个金融名词,这类需求优先用检索增强或提示词解决。
准备一份指令数据,建议用 JSONL,每行一条,字段统一。
例如:
{"instruction": "根据以下公告判断属于利好还是利空,并说明理由。", "input": "公司公告:拟回购不超过2亿元股份用于员工持股计划。", "output": "利好。回购通常传递管理层对股价的信心,但需结合回购金额占市值比例判断实际影响。"}
数据要划分训练集和验证集,比例可参考 8:2。
金融领域尤其要检查输出中是否出现编造的具体数字,训练前先把明显错误样本剔除。
环境准备与微调工具安装
以下命令以 Linux 服务器、Python 3.10 和 CUDA 12 环境为例,具体版本请按你的显卡驱动和官方文档调整。
conda create -n finetune python=3.10 -y
conda activate finetune
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
下载基座模型,例如 Qwen2.5-7B-Instruct,放到本地目录 /data/models/Qwen2.5-7B-Instruct。
如果服务器无法直接访问模型源,先在有网络的环境下载后上传。
验证环境是否可用:
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
输出应为 True 和显卡型号。
如果为 False,先检查驱动和 CUDA 版本,不要急着开始训练。
配置 LoRA 微调并启动训练
LLaMA-Factory 支持命令行和 Web 面板两种方式。
习惯命令行的可以用配置文件,先在 data/dataset_info.json 中登记数据集:
"fin_train": {
"file_name": "fin_train.jsonl"
}
把 fin_train.jsonl 放到 data/ 目录。
然后新建训练配置 fin_lora.yaml,核心参数如下:
model_name_or_path: /data/models/Qwen2.5-7B-Instruct
stage: sft
do_train: true
finetuning_type: lora
dataset: fin_train
cutoff_len: 2048
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
learning_rate: 2.0e-4
num_train_epochs: 3
lora_rank: 16
output_dir: /data/output/fin_lora
启动训练:
llamafactory-cli train fin_lora.yaml
训练开始后关注日志中的 loss 是否平稳下降,以及显存占用。
如果出现显存不足,优先把 per_device_train_batch_size 调到 1,并适当增大 gradient_accumulation_steps;
仍然不足时降低 cutoff_len 或换用更小参数模型。
常见报错与避坑提醒
- 报错
CUDA out of memory:先确认没有其他进程占用显卡,可用nvidia-smi查看;再依次调小批次、序列长度和 LoRA rank。 - 报错找不到数据集:检查
dataset_info.json中的键名是否和 yaml 里的dataset完全一致,文件是否放在data/目录。 - 训练 loss 不降或剧烈震荡:学习率可能偏大,金融小数据集可尝试
1e-4到2e-4;同时检查数据中是否有大量空输出或格式错乱。 - 不要用训练集当验证集汇报效果,金融问答很容易过拟合,验证集必须单独留出。
- 微调后模型仍可能编造数字,涉及金额、日期、监管条款的输出要人工复核或接入检索校验。
验证微调效果是否真的变好
训练结束后,用验证集做对比推理。
命令行方式可参考:
llamafactory-cli chat fin_lora.yaml
准备 20 到 50 条验证问题,分别用基座模型和微调后模型回答,从三个维度检查:格式是否符合要求、是否引用了输入中的事实、是否出现编造内容。
不要只看一两个例子就下结论,建议把对比结果记录成表格。
如果微调后格式更稳定但事实性下降,说明训练数据里混入了低质量样本,需要回到数据清洗环节。
金融微调实战的关键往往不在训练脚本,而在数据质量和验证方法。
读者常问的两个问题
没有金融标注团队,能不能用公开数据做微调?
可以先用公开金融问答数据跑通流程,但公开数据质量参差,正式使用前仍需人工抽检和清洗。
单卡 24GB 显存能微调多大的模型?
以 LoRA 和 7B 级模型、较短序列长度为例通常可以跑通,具体取决于批次、序列长度和框架实现,建议先用小样本试跑再放大。
按以上步骤完整执行一遍,你就能得到第一个可用的金融 LoRA 适配器。
后续优化优先从数据清洗和验证集设计入手,而不是盲目增加训练轮数。