DeepSeek 7B + 华佗医疗数据集增量预训练技术笔记
把基模型从 Qwen2.5-0.5B 换成 DeepSeek-Coder-7B-Base-v1.5,在华佗医疗问答数据集上做增量预训练,方法还是 LoRA。数据集是 shibing624/huatuo_medical_qa_sharegpt(27 万+ 对话),机器是 RTX 5090,环境 Python 3.11.5 + PyTorch nightly(CUDA 12.8)。
数据格式转换
华佗数据集是 ShareGPT 的对话格式,用 conversations 字段,而训练脚本期望的是 text 字段:
{
"conversations": [
{"from": "human", "value": "问题"},
{"from": "gpt", "value": "回答"}
]
}
在 pretraining.py 的数据处理里加一段自动检测加转换,把对话拼成纯文本:
def convert_conversations_to_text(examples):
texts = []
for conversations in examples['conversations']:
text = ""
for conv in conversations:
if conv['from'] == 'human':
text += f"问:{conv['value']}\n"
elif conv['from'] == 'gpt':
text += f"答:{conv['value']}\n"
text += "\n" + "="*50 + "\n\n"
texts.append(text)
return {"text": texts}
网络与缓存
国内访问 HF 慢,切镜像源、清掉可能干扰的代理变量、把缓存都指到数据盘:
export HF_ENDPOINT=https://hf-mirror.com
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
export HF_HOME=/root/autodl-tmp/huggingface
export TRANSFORMERS_CACHE=/root/autodl-tmp/huggingface
export HF_DATASETS_CACHE=/root/autodl-tmp/huggingface/datasets
训练配置与结果
先拿 1 万样本快速验证。LoRA rank 16 / alpha 32 / dropout 0.05,对所有线性层生效;batch 1(7B 模型显存吃紧)、梯度累积 8、学习率 2e-4、block 512、bf16 加梯度检查点。
python pretraining.py \
--model_name_or_path deepseek-ai/deepseek-coder-7b-base-v1.5 \
--dataset_name shibing624/huatuo_medical_qa_sharegpt \
--per_device_train_batch_size 1 --gradient_accumulation_steps 8 \
--max_train_samples 10000 --num_train_epochs 1.0 \
--learning_rate 2e-4 --block_size 512 \
--use_peft True --lora_rank 16 --lora_alpha 32 --lora_dropout 0.05 \
--torch_dtype bfloat16 --bf16 True --gradient_checkpointing True \
--target_modules "all" --output_dir outputs-pt-deepseek-huatuo-original
跑下来:22 分 21 秒,6,781 个训练样本,训练 loss 从 1.7279 降到 1.4042,评估 loss 1.3124、准确率 67.51%、困惑度 3.7152。只训练了约 37M 参数,LoRA 适配器 adapter_model.safetensors 149MB。
效果对比
同一个高血压问题,基模型的回答基本是在复读定义、话没说完就断了:
收缩压是指心脏收缩时,动脉血管的压强,用一个血压计测量的数值;舒张压是指心脏
增量预训练后的回答明显更像医疗问答,成体系地讲了定义、症状和风险因素:
高血压,也被称为高血压病,是一种长期血压持续升高的情况。正常人的血压通常在120/80毫米汞柱以下……高血压的症状可能包括头痛、头晕、心悸、疲劳、失眠、视力模糊等。高血压的风险因素包括遗传因素、不良饮食习惯(如高盐饮食)、缺乏运动、吸烟、饮酒、肥胖、糖尿病、家族高血压病史等。
一个要注意的点:训练后一定要验证 LoRA 适配器确实挂上了(对比基模型和加载适配器后的输出、看可训练参数),否则很容易“训练完了但根本没生效”。下一步是拿完整 27 万样本重训、再调 LoRA 配置和学习率。