**核心工具链:**LLaMA-Factory + Qwen3.5-4B + 医疗问答数据集
Qwen3.5 是阿里发布的千问系列模型,4B 参数量在效果和显存之间比较均衡;LLaMA-Factory 则是开源社区里用得很成熟的微调框架。这个组合的优点很直接:上手成本不高,能比较快地把一个通用模型调成偏医疗问答的版本。
准备工作
硬件要求:
| 微调方式 | 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 模型
# 安装 modelscope
pip install modelscope
# 方式一:Python 代码下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen3.5-4B')
print(f"模型已下载到:{model_dir}")
# 方式二:命令行下载
# modelscope download --model Qwen/Qwen3.5-4B --local_dir ./models/Qwen3.5-4B
搭建 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
# 如果需要 DeepSpeed 加速(可选)
pip install -r requirements/deepspeed.txt
运行测试命令确认环境:
llamafactory-cli version
准备医疗数据集
数据集格式示例如下:
[
{
"instruction": "你是一个专业的医疗助手,请根据患者描述给出建议。",
"input": "我最近总是头痛,尤其是下午的时候,已经持续一周了。",
"output": "持续性头痛需要关注。建议您先排除以下几个常见原因:1)睡眠质量,2)用眼过度,3)颈椎问题。如果休息后仍不缓解,建议到医院神经内科就诊,做个头部 CT 检查。"
}
]
把处理好的数据放到 data/ 目录下,再在 data/dataset_info.json 里注册:
{
"medical_qa": {
"file_name": "medical_qa.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
}
开始微调
配置文件位于 examples/train_lora/qwen35_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/qwen35_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
启动训练:
llamafactory-cli train examples/train_lora/qwen35_medical_lora.yaml
监控 loss 曲线:
tensorboard --logdir=./output/qwen35_medical_lora/runs
测试效果
快速测试命令:
llamafactory-cli chat examples/inference/qwen35_medical_lora.yaml
推理配置文件 qwen35_medical_lora.yaml:
model_name_or_path: ./models/Qwen3.5-4B
adapter_name_or_path: ./output/qwen35_medical_lora
template: qwen3
finetuning_type: lora
导出和部署
合并 LoRA 权重:
llamafactory-cli export examples/merge_lora/qwen35_medical_merge.yaml
合并配置:
model_name_or_path: ./models/Qwen3.5-4B
adapter_name_or_path: ./output/qwen35_medical_lora
template: qwen3
finetuning_type: lora
export_dir: ./models/Qwen35-Medical
export_size: 2
export_device: cuda
export_legacy_format: false
vLLM 部署示例:
pip install vllm
vllm serve ./models/Qwen35-Medical --port 8000
或者直接用 LLaMA-Factory 内置的 API 服务:
API_PORT=8000 llamafactory-cli api examples/inference/qwen35_medical.yaml
常见问题
- 显存不够用:先把
per_device_train_batch_size调小,再开gradient_checkpointing,实在不行就换 4-bit 量化。这个顺序比较省时间。 - Loss 不下降:先查数据格式和字段映射,很多时候问题不在模型,而在数据没喂对;学习率可以在 1e-4 到 5e-5 之间试。
- 微调后模型变差:通常是数据质量不稳或者过拟合,减少 epoch,或者混一点通用对话数据,能缓一缓。
医疗领域的 AI 应用要留一道安全边界,模型输出只能作为参考,不能替代医生诊断。产品里最好保留免责声明和人工审核机制。


