MiniMind 医疗 LoRA 微调实战:2 小时 3 元训出 64M 垂直医疗助手
【免费下载链接】minimind🧠 Train a 64M-parameter LLM from scratch in just 2h!项目地址: https://gitcode.com/GitHub_Trending/min/minimind
周一上午九点,社区健康站窗口排起长队。一位阿姨第三次问:"医生,出院开的那个阿司匹林,我早上吃还是晚上吃?"护士嘴边的答案已经念熟,但系统里挂着的通用问答机器人只会答"请咨询主治医生"。同一天下午,我把科室 FAQ 塞进了 MiniMind——用 LoRA 微调给这个 64M 的模型注入医疗知识,单张显卡跑完,从零到能上手的医疗助手约 2 小时,全程算力成本 3 元左右。
动手前先锚定:你会拿到这 4 样东西
- 一个医疗 LoRA 权重文件
out/lora_medical_768.pth,只有几十 MB,可随时热插拔到同规格基座上 - 一个命令行问答入口(eval_llm.py),打开终端就能试医疗问答
- 一个兼容 OpenAI 协议的 HTTP 接口(scripts/serve_openai_api.py,端口 8998),接进现有对话前端只改 base_url
- 一套可复用的数据 + 命令模板,第二个垂直领域直接换 jsonl 重跑
环境速览 🔧:克隆、依赖、权重 10 分钟搞定
三步合并成一段,复制即可:
git clone https://gitcode.com/GitHub_Trending/min/minimind cd minimind pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple再从官方数据集页下载两样东西:full_sft基座权重(PyTorch 格式,放out/目录,命名full_sft_768.pth)和内置医疗问答集lora_medical.jsonl(几千条量级,wc -l可自行确认),后者放进dataset/目录。硬件门槛一句话:6GB 显存的个人显卡就够,官方"2 小时"标尺是单张 3090 跑 SFT 1 个 epoch,本文的 LoRA 阶段比它还轻。MiniMind 本体是纯手写的极简 Transformer,结构长这样:
核心实操:数据、训练、推理三段
数据侧:医疗问答 JSONL 怎么写
训练集就是多轮对话格式,解析逻辑在 dataset/lm_dataset.py,核心规则:每行一条 JSON 记录,role按 user / assistant 交替:
{"conversations": [ {"role": "user", "content": "出院要服阿司匹林,是早上吃还是晚上吃?"}, {"role": "assistant", "content": "一般建议餐后服用,减少胃肠道刺激,固定每天同一时间即可..."} ]}(实际文件中一条记录压缩成一行。)想用自己的数据增补,把科室 FAQ 按这个格式整理到dataset/下,训练时--data_path指向它就行。科室 FAQ 有 800 条足够跑第一轮,不用追条数。
训练侧:只需记住的一条 LoRA 命令
trainer/train_lora.py 的参数都有默认值,跑通只需要这条:
cd trainer python train_lora.py --data_path ../dataset/lora_medical.jsonl \ --lora_name lora_medical --epochs 3 --from_resume 1两个点说一下:rank 固定在 16(model/model_lora.py 里写死的,这个参数别动);--from_resume 1打开断点续训,中途被同事叫走打断,回来重跑同一条命令就接着练。训练时盯 loss 就够:日志每 10 步打印一次,第一个 epoch 内从 3 附近快速跌到 1 以内,后面两个 epoch 只是细磨。同规格 768dim 配置下的 loss 曲线可作参照:
推理侧:命令行问答与 8998 端口接口
# 命令行速测 python eval_llm.py --weight full_sft --lora_weight lora_medical # 或起 OpenAI 兼容接口(端口 8998) python scripts/serve_openai_api.py --weight full_sft --lora_weight lora_medical注意 serve 脚本从out/lora/子目录读 LoRA 权重,把刚训好的权重挪进这个子目录再启动即可。接口起来后,前端把 OpenAI SDK 的 base_url 指到http://localhost:8998/v1就能调。试一句典型的:
用户:我爸 58 岁,上周因感冒住院五天,今天出院,嗓子还有点痰,正常吗? 助手:痰液白而稀、体温正常、无气促的话,多为呼吸道感染后的残余炎症,一般 1~2 周自行缓解。若痰转黄稠或再发热,建议及时复诊。
效果对照 📊:哪里变好了,哪里仍然不行
| 对比维度 | 基座 full_sft | 挂医疗 LoRA 后 |
|---|---|---|
| 医疗术语应答 | 常绕回"请咨询医生" | 能直接给出术语与处置上下文 |
| 回答风格 | 通用助手腔,偏泛 | 简洁,贴近训练数据的问答结构 |
| 通用能力保留 | 基准 | 几乎不损,只更新约 1% 新增参数(脚本启动时会打印精确占比) |
| 首 token 延迟 | 同 | 同,LoRA 权重小,热插拔加载以秒计 |
边界也说实话:64M 参数量摆在那,复杂多轮追问、长病历报告解读、跨科鉴别诊断这类问题它明显干不过大模型;它不是诊断工具,定位就是"分诊前 FAQ 与健康宣教问答",别让科室拿它出治疗方案。
成本与部署一页纸 ⚡
| 档位 | 硬件 | 首 token 延迟 | 适合场景 |
|---|---|---|---|
| 本地单 GPU | 6GB 显存显卡 | <1s | 诊室端助手,接 HIS 前端 |
| 云租用 | 单张 3090,约 2 元/小时 | <1s | 训练与阶段性验证 |
| CPU 兜底 | i5 + 16GB 内存 | 5s 以上 | 演示、低频查询 |
成本算一笔:LoRA 3 个 epoch 单张 3090 实测 1 小时以内,按 2 元/时约 2 元,加上首跑验证,全程 3 元以内;权重只有几十 MB,部署端不用再加机器。
回到那个窗口:下一步
那位阿姨的问题第二天就由机器人接住了,护士只做抽查。下一步建议只做一个:把另一个科室的 FAQ 也整成 jsonl,换掉--data_path再跑一版垂域 LoRA——整条流水线不用改一行代码。
【免费下载链接】minimind🧠 Train a 64M-parameter LLM from scratch in just 2h!项目地址: https://gitcode.com/GitHub_Trending/min/minimind
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考