跳到主要内容Qwen3.5-4B 微调实战:基于 LLaMA-Factory 构建医疗 AI 助手 | 极客日志Python
Qwen3.5-4B 微调实战:基于 LLaMA-Factory 构建医疗 AI 助手
最近在帮一个医疗创业团队做技术支持,他们想把通用大模型改造成能回答专业医疗问题的智能助手。今天就把整个过程整理出来,希望对有类似需求的朋友有所帮助。 **核心工具链:** LLaMA-Factory + Qwen3.5-4B + 医疗问答数据集 Qwen3.5 是阿里最新发布的千问系列模型,4B 参数量刚好卡在"效果够用 + 显存友好"的甜蜜点;LLaMA-Factory 则是目前开源社区最成熟的…
不羁57K 浏览 最近在帮一个医疗创业团队做技术支持,他们想把通用大模型改造成能回答专业医疗问题的智能助手。今天就把整个过程整理出来,希望对有类似需求的朋友有所帮助。
核心工具链: LLaMA-Factory + Qwen3.5-4B + 医疗问答数据集
Qwen3.5 是阿里最新发布的千问系列模型,4B 参数量刚好卡在"效果够用 + 显存友好"的甜蜜点;LLaMA-Factory 则是目前开源社区最成熟的微调框架,上手简单,坑也相对少。
准备工作
先说硬件要求。4B 模型用 LoRA 微调的话,一张 12GB 显存的显卡就够了(比如 RTX 4070)。如果手头只有 8GB 显存的卡,可以上 QLoRA 量化方案,牺牲一点精度换显存空间。
| 微调方式 | 4B 模型显存需求 | 推荐显卡 |
|---|
| LoRA (16-bit) | ~10-12 GB | RTX 4070 / RTX 3090 |
| QLoRA (8-bit) | ~6-8 GB | RTX 4060 / RTX 3070 |
| QLoRA (4-bit) | ~4-6 GB | RTX 3060 |
软件环境这边,建议 Python 3.11+,PyTorch 2.0 以上。CUDA 版本最好 12.x,兼容性更好。
下载 Qwen3.5-4B 模型
pip install modelscope
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen3.5-4B')
print(f"模型已下载到:{model_dir}")
💡 小贴士: 模型大约 9.3GB,建议挂个代理或者选择网络好的时间段下载。下载完记得检查一下文件完整性。
搭建 LLaMA-Factory 环境
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
pip install -r requirements/metrics.txt
pip install -r requirements/deepspeed.txt
准备医疗数据集
数据集是微调效果的关键。这里用的是开源的中文医疗问答数据,主要来自几个渠道:
GitHub 上有个 llm-medical-data 仓库,整理了几十万条医疗问答数据,覆盖内科、外科、妇产科、儿科等科室。另外 HuggingFace 上的 shibing624/medical 数据集也不错,格式比较规范。
LLaMA-Factory 要求的数据格式是这样的:
[
{
"instruction": "你是一个专业的医疗助手,请根据患者描述给出建议。",
"input": "我最近总是头痛,尤其是下午的时候,已经持续一周了。",
"output": "持续性头痛需要关注。建议您先排除以下几个常见原因:1)睡眠质量,2)用眼过度,3)颈椎问题。如果休息后仍不缓解,建议到医院神经内科就诊,做个头部 CT 检查。"
},
{
"instruction": "你是一个专业的医疗助手,请根据患者描述给出建议。",
"input": "孩子 3 岁,发烧 38.5 度,要不要去医院?",
"output": "38.5 度属于中度发热。可以先在家观察处理:1)物理降温,温水擦拭腋下、腹股沟;2)保持室内通风;3)多喝水。如果体温超过 39 度、持续超过 3 天、或出现精神萎靡、抽搐等情况,需要立即就医。"
}
]
把处理好的数据放到 data/ 目录下,然后在 data/dataset_info.json 里注册:
{
"medical_qa": {
"file_name": "medical_qa.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
}
开始微调
配置文件是整个流程的核心。在 examples/train_lora/ 下创建一个 qwen3.5_medical_lora.yaml:
model_name_or_path: ./models/Qwen3.5-4B
trust_remote_code: true
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 64
lora_alpha: 128
lora_target: all
dataset: medical_qa
template: qwen3
cutoff_len: 2048
preprocessing_num_workers: 8
output_dir: ./output/qwen3.5_medical_lora
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
logging_steps: 10
save_steps: 500
bf16: true
gradient_checkpointing: true
lora_rank: 64 —— LoRA 秩,越大表达能力越强,但显存占用也越大
lora_target: all —— 对所有线性层应用 LoRA,效果更好
gradient_checkpointing: true —— 用时间换空间,降低显存占用
llamafactory-cli train examples/train_lora/qwen3.5_medical_lora.yaml
训练过程中可以通过 TensorBoard 监控 loss 曲线:
tensorboard --logdir=./output/qwen3.5_medical_lora/runs
在我的测试环境(RTX 4090)上,1 万条数据训练 3 个 epoch 大约需要 40 分钟。
测试效果
llamafactory-cli chat examples/inference/qwen3.5_medical_lora.yaml
对应的推理配置文件 qwen3.5_medical_lora.yaml:
model_name_or_path: ./models/Qwen3.5-4B
adapter_name_or_path: ./output/qwen3.5_medical_lora
template: qwen3
finetuning_type: lora
实测下来,微调后的模型在医疗问答上明显比原版更专业。比如问"孕妇能不能吃螃蟹",原版模型可能给个模棱两可的回答,微调后的版本会从中医寒凉属性、现代营养学、个体差异等多个角度分析,更像一个有经验的医生。
导出和部署
如果效果满意,可以把 LoRA 权重合并到基座模型里,方便后续部署:
llamafactory-cli export examples/merge_lora/qwen3.5_medical_merge.yaml
model_name_or_path: ./models/Qwen3.5-4B
adapter_name_or_path: ./output/qwen3.5_medical_lora
template: qwen3
finetuning_type: lora
export_dir: ./models/Qwen3.5-Medical
export_size: 2
export_device: cuda
export_legacy_format: false
合并后的模型可以直接用 vLLM 或者 SGLang 部署成 API 服务:
pip install vllm
vllm serve ./models/Qwen3.5-Medical --port 8000
API_PORT=8000 llamafactory-cli api examples/inference/qwen3.5_medical.yaml
踩坑记录
把 per_device_train_batch_size 调小,或者启用 gradient_checkpointing。实在不行就上 4-bit 量化。
检查数据格式是否正确,尤其是 dataset_info.json 里的字段映射。另外学习率不要设太大,1e-4 到 5e-5 之间比较稳。
可能是数据质量问题,或者训练轮数太多导致过拟合。适当减少 epoch 数,或者在数据里混入一些通用对话保持泛化能力。
医疗领域的 AI 应用一定要注意:模型输出仅供参考,不能替代专业医生的诊断。在产品设计时要做好免责声明和人工审核机制。
整个流程走下来,从环境搭建到模型部署,熟练的话半天就能搞定。LLaMA-Factory 确实把微调的门槛降低了很多,配合 Qwen3.5 这样的高质量基座模型,普通开发者也能做出效果不错的垂直领域 AI 助手。
当然,真要做成产品级的医疗 AI,还需要在数据质量、安全合规、持续迭代等方面下功夫。但至少,迈出第一步没那么难。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown 转 HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
- HTML 转 Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online