Qwen3.5-4B 微调实战:LLaMA-Factory 打造医疗AI助手

Qwen3.5-4B 微调实战:LLaMA-Factory 打造医疗AI助手

最近在帮一个医疗创业团队做技术支持,他们想把通用大模型改造成能回答专业医疗问题的智能助手。今天就把整个过程整理出来,希望对有类似需求的朋友有所帮助。

核心工具链: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 模型

模型从魔搭社区下载,国内速度很快:

# 安装 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

💡 小贴士:模型大约 9.3GB,建议挂个代理或者选择网络好的时间段下载。下载完记得检查一下文件完整性。

搭建 LLaMA-Factory 环境

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

准备医疗数据集

数据集是微调效果的关键。这里用的是开源的中文医疗问答数据,主要来自几个渠道:

数据来源推荐:

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/ 下创建一个 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

参数解读:
• lora_rank: 64 —— LoRA 秩,越大表达能力越强,但显存占用也越大
• lora_target: all —— 对所有线性层应用 LoRA,效果更好
• gradient_checkpointing: true —— 用时间换空间,降低显存占用

一切就绪,启动训练:

llamafactory-cli train \ examples/train_lora/qwen35_medical_lora.yaml

训练过程中可以通过 TensorBoard 监控 loss 曲线:

tensorboard --logdir=./output/qwen35_medical_lora/runs

在我的测试环境(RTX 4090)上,1万条数据训练 3 个 epoch 大约需要 40 分钟。

测试效果

训练完成后,先在命令行跑个快速测试:

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 或者 SGLang 部署成 API 服务:

# 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

踩坑记录

分享几个我遇到过的问题:

1. 显存不够用

把 per_device_train_batch_size 调小,或者启用 gradient_checkpointing。实在不行就上 4-bit 量化。

2. Loss 不下降

检查数据格式是否正确,尤其是 dataset_info.json 里的字段映射。另外学习率不要设太大,1e-4 到 5e-5 之间比较稳。

3. 微调后模型变傻了

可能是数据质量问题,或者训练轮数太多导致过拟合。适当减少 epoch 数,或者在数据里混入一些通用对话保持泛化能力。

医疗领域的 AI 应用一定要注意:模型输出仅供参考,不能替代专业医生的诊断。在产品设计时要做好免责声明和人工审核机制。

整个流程走下来,从环境搭建到模型部署,熟练的话半天就能搞定。LLaMA-Factory 确实把微调的门槛降低了很多,配合 Qwen3.5 这样的高质量基座模型,普通开发者也能做出效果不错的垂直领域 AI 助手。

当然,真要做成产品级的医疗 AI,还需要在数据质量、安全合规、持续迭代等方面下功夫。但至少,迈出第一步没那么难。

Read more

一文读懂 Linux 互斥锁:小白也能看懂的临界区保护指南,手把手教你彻底告别多线程数据“打架”

一文读懂 Linux 互斥锁:小白也能看懂的临界区保护指南,手把手教你彻底告别多线程数据“打架”

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.线程间互斥相关背景概念 二.互斥量mutex 2.1为什么会出现问题? 2.1.1判断条件 2.1.2ticket-- 2.2如何解决问题 2.2.1解决方式 2.2.2所产生的疑问 三.互斥实现原理探究 四.由线程互斥的缺点引出线程同步 前言: 在前面的章节中,我们了解了什么是线程,以及如何通过pthread库所提供的函数来对线程进行操作,但是我们要了解的不止有这些,我们创建多线程是为了让它们协作帮助我们去完成任务。 而今天及后面的章节我们就将目光聚焦在线程之间协作的方面,了解线程之间协作时会出现什么样的问题以及如何解决,下面就开始我们今天的内容。 一.线程间互斥相关背景概念 共享资源临界资源:多线程执⾏流被保护的共享的资源就叫做临界资源临界区:

By Ne0inhk
技能提升必备:鸿蒙HarmonyOS应用开发者认证

技能提升必备:鸿蒙HarmonyOS应用开发者认证

技能提升必备:鸿蒙HarmonyOS应用开发者认证,HarmonyOS 认证是华为为开发者打造的能力衡量体系。随着 HarmonyOS 系统影响力不断扩大,市场对相关开发人才需求激增。该认证分为基础与高级等不同级别,覆盖应用开发、设备开发等方向。通过认证,开发者能系统掌握 HarmonyOS 知识与技能,提升个人职业竞争力,为鸿蒙生态繁荣贡献力量,在万物智联时代获得更多发展机遇 。 技能提升必备:鸿蒙HarmonyOS应用开发者认证 🔆 在新时代的软件开发中,HarmonyOS 应用开发技术占据重要地位。随着 HarmonyOS 系统的广泛应用,招聘市场对这类开发者的需求越来越多。鸿蒙 HarmonyOS 应用开发者认证分为基础认证和高级认证两个级别,目的是帮助开发者系统掌握 HarmonyOS 的开发框架、API 调用、界面设计等基本技能,同时深入理解分布式技术原理,掌握跨设备协同、场景化服务等高级功能。 🔆 官方打造了针对不同角色、技术领域和业务场景的认证,让开发者能证明自己的专业水平和能力。其中,和 HarmonyOS 应用开发相关的认证有基础认证和高级认证,还有一些

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争全解析(原子操作/自旋锁/信号量/互斥体)--- Ubuntu20.04

ARM Linux 驱动开发篇--- Linux 并发与竞争全解析(原子操作/自旋锁/信号量/互斥体)--- Ubuntu20.04

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言 一、并发与竞争核心概念 1.1、什么是并发与竞争? 1.2 Linux并发产生的4大原因(记牢!面试常问) 1.3 临界区与保护核心(重点!) 二、原子操作 2.1 原子操作简介 2.2 原子整形操作API 2.3 原子位操作API

By Ne0inhk
Flutter 三方库 fake_http_client 鸿蒙全向仿真拦截网络流测试网段适配:无代码倾入搭建脱网测试矩阵强势模拟各级超时拥塞与脏数据回调彻底肃清-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 fake_http_client 鸿蒙全向仿真拦截网络流测试网段适配:无代码倾入搭建脱网测试矩阵强势模拟各级超时拥塞与脏数据回调彻底肃清-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 fake_http_client 鸿蒙全向仿真拦截网络流测试网段适配:无代码倾入搭建脱网测试矩阵强势模拟各级超时拥塞与脏数据回调彻底肃清网络隐患 在移动应用的自动化测试与敏捷开发中,如何在脱离真实网络环境的情况下快速模拟服务器响应(Mock)是提升交付效率的重中之重。fake_http_client 是一个为 Dart HttpClient 量身定制的 Mock 库。本文将探讨该库在 OpenHarmony 开发与测试工作流中的深度应用。 前言 什么是 fake_http_client?当你编写鸿蒙应用的业务逻辑时,往往依赖于后端接口。如果后端未就绪或在 CI(持续集成)环境下无网络访问,测试就会中断。该库通过注入一个“伪造”的网络客户端,让你在代码中自定义任意的 API 返回结果。在鸿蒙化开发过程中,这一工具能显著降低前后端联调的依赖成本。 一、原理解析

By Ne0inhk