大模型医疗微调实战:从数据准备到LoRA训练的命令行流程
医疗场景做微调,最先要解决的不是选哪个模型,而是数据能不能用、显存够不够、训练完怎么判断有没有效果。
本文按零基础也能照做的顺序,从数据脱敏、格式整理到LoRA训练和结果验证走一遍,命令和配置可直接参考。
先确认你的医疗数据能进训练环境
医疗数据涉及患者隐私,训练前必须先脱敏。
常见需要清理的字段包括姓名、身份证号、手机号、住院号、详细住址和具体日期。
建议先做规则替换,再用脚本抽检:
# 示例:用sed粗筛手机号并替换为占位符
sed -E 's/1[3-9][0-9]{9}/[PHONE]/g' raw_medical.jsonl > clean_step1.jsonl
替换后人工抽查至少50条,确认没有残留可识别信息。
如果数据来自医院内部系统,还要确认使用范围符合所在机构的数据管理规定,不要直接把原始病历上传到公网训练平台。
环境方面,单卡24GB显存可以跑7B模型的小规模LoRA微调,但批量大小要调小。
准备Python 3.10以上、CUDA可用环境,并安装训练框架。
以LLaMA-Factory为例:
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
python -c "import torch; print(torch.cuda.is_available())"
最后一条命令输出True才说明GPU可用;
输出False时先检查驱动和CUDA版本,不要急着开始训练。
把问答整理成训练框架认识的格式
微调数据通常整理成Alpaca格式,每条包含instruction、input、output三个字段。
医疗问答可以把问题放instruction,补充信息放input,标准回答放output:
{
"instruction": "患者发热三天伴咳嗽,需要询问哪些关键信息?",
"input": "",
"output": "需要询问体温最高值、咳嗽是否有痰及颜色、有无呼吸困难、基础疾病和用药史。"
}
数据量少时不要追求条数,先把答案质量把关。
建议按8:2划分训练集和验证集,验证集单独存放,训练过程中不要混入。
文件放到data/目录后,在dataset_info.json中注册数据集名称,后续训练命令通过名称引用。
启动LoRA微调并观察显存
下面是一个7B模型LoRA训练的命令示例,关键参数按单卡24GB显存设置:
llamafactory-cli train \
--model_name_or_path /models/Qwen2.5-7B-Instruct \
--stage sft \
--do_train true \
--dataset medical_sft \
--template qwen \
--finetuning_type lora \
--lora_rank 16 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--learning_rate 1e-4 \
--num_train_epochs 3 \
--output_dir /output/medical_lora \
--logging_steps 10 \
--save_steps 200 \
--fp16 true
启动后先看日志里是否出现显存不足报错。
如果报CUDA out of memory,优先把per_device_train_batch_size降到1,再考虑开启--gradient_checkpointing true。
不要一上来就调大lora_rank,医疗小样本场景下rank过高容易过拟合。
训练过程中Loss不是越低越好。
如果训练Loss持续下降但验证集Loss开始上升,说明模型在背训练样本,应减少epoch或增加数据多样性。
训练后必须做的验证和避坑
训练完成后用验证集跑推理,检查模型是否真的学会回答,而不是只会复述训练集。
可以用框架自带推理命令:
llamafactory-cli chat \
--model_name_or_path /models/Qwen2.5-7B-Instruct \
--adapter_name_or_path /output/medical_lora \
--template qwen
准备10到20个验证集之外的问题,观察回答是否包含危险建议。
医疗场景要特别注意:模型不能替代医生诊断,输出中如果出现绝对化用药结论,需要在应用层加提示和人工复核。
常见坑有三个:数据脱敏不彻底导致隐私泄露;
验证集和训练集重复导致指标虚高;
显存不足时强行加大batch导致训练中断。
每个坑都可以在训练前用检查清单规避。
关于效果和适用边界
LoRA微调适合让通用模型熟悉医疗问答的表达方式,但不等于让模型获得诊疗能力。
小样本微调后,模型在训练覆盖的问题上回答会更贴近预期,遇到未覆盖的复杂病例仍可能出错。
上线前应保留人工审核环节,并记录模型版本和训练数据范围,方便后续排查。
如果你正在处理大模型医疗微调实战,建议先按本文步骤完整执行,再根据自己的数据和显存做参数调整;
遇到异常时优先回看避坑和高频问题部分。