三、LLaMA 模型微调实践3.1 Huatuo让 LLaMA 学习中文医学知识前面我们已经完成了 LLaMA 的运行、量化和部署。但通用语言模型并不一定擅长专业领域的问题例如医学知识问答。如果希望模型能够回答更专业的问题就需要在基础模型上进行进一步训练这便引出了领域微调Domain Fine-tuning。3.1.1 什么是 HuatuoHuatuo华驼后更名为本草是一个面向中文医学知识的大语言模型项目。项目通过医学知识图谱、医学文献以及构建的中文医学指令数据对 LLaMA 等基础模型进行指令微调以增强模型的医学知识问答能力。项目地址https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese3.1.2 Huatuo 是如何增强模型能力的其核心思路可以概括为基础 LLaMA → 构建中文医学指令数据 → LoRA 微调 → 医学问答模型组成部分主要作用基础 LLaMA提供通用语言理解与生成能力医学知识图谱提供结构化医学知识医学文献提供专业领域知识来源中文医学指令数据让模型学习医学问题与回答的对应关系LoRA以较少的可训练参数适配医学任务这里使用的 LoRALow-Rank Adaptation是一种参数高效微调方法。它不需要更新基础模型的全部权重而是训练一组相对较小的附加参数从而降低微调所需的计算和显存成本。3.1.3 医学指令微调有什么意义通用模型虽然具备一定的医学知识但未必能够按照专业问答的形式组织回答。通过医学指令数据进行微调可以让模型进一步学习医学术语、专业问题的表达方式以及医学知识问答的任务格式。需要注意领域微调可以增强专业任务的适应能力但不能保证回答一定准确也不能代替专业医生的临床判断。3.1.4 小结Huatuo 展示了一条将通用大语言模型应用到专业领域的技术路线利用已有基础模型通过专业数据和 LoRA 微调构建面向特定领域的语言模型。接下来我们将以 Huatuo 为例介绍 LoRA 权重的加载、模型推理以及实际微调过程。3.2 Huatuo 医学模型的 LoRA 权重加载与推理了解 Huatuo 的基本思路后我们进一步看看如何加载已经微调好的医学模型。这里不需要重新训练 LLaMA而是使用原版 LLaMA-7B 和医学 LoRA 权重让模型执行中文医学问答任务。3.2.1 下载项目与 LoRA 权重首先获取 Huatuo 项目git clone https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese.git cd Huatuo-Llama-Med-Chinese随后下载医学 LoRA 权重git clone https://huggingface.co/thinksoso/lora-llama-med下载完成后主要包含以下文件文件作用adapter_model.bin保存医学微调得到的 LoRA 参数adapter_config.json保存 LoRA 的结构与配置信息LoRA 权重并不是完整的大模型需要与对应的基础模型一起使用。3.2.2 加载模型并执行推理准备好 Hugging Face 格式的原版 LLaMA-7B 后可以使用infer.py进行推理python infer.py \ --base_model /home/models/llama-7b-hf \ --lora_weights ./lora-llama-med \ --use_lora True \ --instruct_dir ./data/infer.json \ --prompt_template med_template主要参数如下参数作用–base_model指定基础模型路径–lora_weights指定医学 LoRA 权重路径–use_lora启用 LoRA 权重–instruct_dir指定测试数据文件–prompt_template指定医学问答的 Prompt 模板以上命令对应项目的早期版本实际复现时应确保代码、模型和依赖版本兼容。3.2.3 医学问答数据是什么样的项目使用的测试数据主要包含三个字段{ instruction: 请解释什么是心肌炎。, input: , output: 这里填写参考回答 }其中instruction表示用户提出的问题input表示额外输入信息output表示参考回答。模型会根据医学问题生成文本我们可以通过参考回答和实际输出观察它是否掌握了相关知识以及能否按照要求组织答案。3.2.4 小结Huatuo 的推理流程可以概括为加载 LLaMA-7B → 加载医学 LoRA 权重 → 输入医学问题 → 生成回答。这说明通过 LoRA我们可以在保留基础模型通用能力的同时让模型进一步适应特定领域的任务。接下来我们将进入 Huatuo 的实际微调过程了解如何准备医学指令数据并训练属于自己的 LoRA 参数。3.3 Huatuo 医学模型的微调数据与训练准备前面我们已经可以加载 Huatuo 的医学 LoRA 权重进行推理。接下来进一步看看如果想训练自己的医学 LoRA 模型需要准备哪些内容。整体流程可以概括为准备基础模型 → 准备医学数据 → 安装训练依赖 → 设置训练参数 → 启动 LoRA 微调。3.3.1 医学指令数据长什么样Huatuo 使用的是中文医学指令数据常见格式如下{instruction:请解释什么是心肌炎。,input:,output:这里填写参考回答}3.4 LoRA 微调中的显存不足与参数调整准备好医学指令数据和训练环境后就可以正式启动 Huatuo 的 LoRA 微调。不过第一次训练并没有顺利完成而是遇到了一个常见问题CUDA Out of MemoryGPU 显存不足。3.4.1 为什么 LoRA 微调还会显存不足第一次训练使用了以下参数--micro_batch_size 128 --batch_size 128虽然 LoRA 只训练少量附加参数但训练时仍然需要加载完整的基础模型并保存中间激活值、梯度等数据。因此LoRA 减少的是可训练参数量并不意味着训练时只需要存储 LoRA 参数。第一次运行时显卡的显存已经接近耗尽最终出现了以下错误torch.cuda.OutOfMemoryError: CUDA out of memory这说明当前训练配置超过了 GPU 能够承受的显存范围。3.4.2 如何解决显存不足最直接的方法是减小micro_batch_size降低每次前向和反向计算需要同时处理的样本数量。第二次实验将参数从 128 调整为 64python finetune.py \ --base_model /home/models/llama-7b-hf \ --data_path ./data/llama_data.json \ --output_dir ./lora-llama-med-e2 \ --prompt_template_name med_template \ --micro_batch_size 64 \ --batch_size 64 \ --wandb_run_name e2调整后训练可以正常开始运行。参数第一次训练第二次训练micro_batch_size12864batch_size12864训练情况显存不足正常开始运行如果显存仍然不足可以继续尝试将micro_batch_size降低为 32、16 或 8具体取决于显卡显存和训练配置。3.4.3 micro_batch_size 和 batch_size 有什么区别这两个参数虽然名字相似但含义不同参数作用micro_batch_size每次前向和反向计算实际处理的样本数量batch_size希望一次参数更新对应的有效样本数量例如假设micro_batch_size 8 batch_size 64在单 GPU、支持梯度累积的训练设置下可以先处理 8 组小批次累积梯度后再进行一次参数更新。这样可以降低单次计算的显存压力同时保留较大的有效批次大小。不过本次实验直接将两个参数都调整为 64没有利用梯度累积来保持原来的有效批次大小。3.4.4 小结LoRA 虽然能够大幅减少可训练参数但基础模型权重和训练过程中的中间数据仍然会占用大量显存。当训练出现 CUDA Out of Memory 时可以优先减小 micro_batch_size再根据实际显存占用逐步调整 batch_size 和其他训练参数。理解这一点能够帮助我们在有限的 GPU 资源下更合理地开展大语言模型微调。3.5 使用 WandB 监控 LoRA 微调并查看训练结果调整 Batch Size 后Huatuo 的 LoRA 微调能够正常运行。接下来我们需要关注训练是否顺利进行以及模型是否逐渐学会医学指令数据中的知识和回答方式。这里使用Weights BiasesWandB记录训练过程并通过 Loss 曲线观察模型的学习情况。3.5.1 WandB 是什么WandB 是一个机器学习实验管理与可视化工具可以记录训练损失、学习率、训练步数等信息。安装并登录pip install wandb wandb login在训练命令中指定实验名称--wandb_run_name e2随后便可以在 WandB 页面查看训练记录。3.5.2 训练过程中需要关注什么指标作用train/loss观察训练数据上的损失变化eval/loss观察验证数据上的损失变化train/epoch查看已经完成的训练轮数train/global_step查看参数更新步数train/learning_rate查看学习率变化其中Loss 是衡量模型预测结果与训练目标之间差异的指标通常越低表示模型对相应数据的拟合越好。如果训练 Loss 逐渐下降说明模型正在学习训练数据如果验证 Loss 持续上升则需要警惕过拟合。3.5.3 Huatuo 的实际训练结果本次微调完成了 10 个 Epoch也就是将训练数据完整学习了 10 轮。最终训练日志中的主要结果如下指标结果Epoch10Global Step1280训练总耗时约 7 小时 37 分钟train_loss全程平均0.8467最终记录的 train/loss0.5994最终 eval/loss0.8584这里需要注意train_loss是训练结束时统计的全程平均损失而train/loss是 WandB 最后记录的训练损失两者含义不同。从训练记录可以看到模型完成了预定的训练轮数训练损失也呈现下降趋势。3.5.4 Loss 下降就代表模型变强了吗不一定。Loss 下降只能说明模型在相应数据上的预测表现有所改善并不能直接证明医学回答更加准确。因此训练完成后还需要使用没有参与训练的医学问答数据对模型的回答质量进行评估重点关注事实准确性、专业术语使用以及是否生成不可靠的医学建议。3.5.5 小结WandB 帮助我们观察模型如何学习Loss 帮助我们判断训练是否在正常优化而独立测试才能进一步评估模型的实际应用能力。至此我们完成了从医学指令数据准备、LoRA 微调、显存问题处理到训练过程监控与结果分析的完整实践流程。3.6 本章小结从 LLaMA 到中文医学模型至此我们已经完成了 Huatuo 医学模型的 LoRA 微调实践也走完了从基础模型到领域模型的完整流程。这一过程展示了一个重要思路不必从零训练大语言模型也可以利用已有模型和专业数据让模型适应特定领域的任务。3.6.1 医学模型的完整微调流程Huatuo 的微调过程可以概括为准备 LLaMA-7B → 构建医学指令数据 → 配置 LoRA → 启动训练 → 调整显存参数 → 使用 WandB 监控训练。各个环节的作用如下环节核心作用基础模型提供通用语言理解与生成能力医学指令数据让模型学习医学知识与问答形式LoRA 微调以较少的可训练参数适配医学任务Batch Size 调整控制训练过程中的显存占用WandB记录训练过程观察 Loss 等指标3.6.2 从实际训练中学到了什么本次实践有三个值得记住的经验。第一LoRA 能降低微调成本但不代表训练完全不占显存。基础模型权重、中间激活值和梯度仍然需要占用计算资源。第二训练参数需要根据硬件条件调整。首次使用较大的 Micro Batch Size 导致显存不足减小批次后才得以继续训练。第三训练完成不等于模型已经具备可靠的专业能力。Loss 下降说明模型对相应数据的预测有所改善真正的医学问答能力还需要通过独立测试进一步验证。3.6.3 最终总结通过 Huatuo我们了解了如何将通用语言模型转变为面向专业领域的模型。基础模型提供通用能力专业数据提供领域知识LoRA 提供低成本的适配方式而训练监控帮助我们观察和改进整个过程。这套思路不仅适用于中文医学问答也可以作为理解其他专业领域大模型开发流程的基础。
企业数字化 ERP 产品动态
相关推荐
Matplotlib入门教程(二):安装与环境配置——画出你的第一个图表 一、安装前的准备
Matplotlib 是一个强大的 Python 绘图库,用于创建各种类型的静态、动态和交互式图表。
在安装之前,请确认:
前提条件检查方式已安装 Python 3.8python3 --version已安装 pippip --version建议已安装 NumPypip show numpy… · 2026/9/24 17:45:54
Windows实操|OpenClaw 3.1.0 本地智能体落地完整手册 📌 说明 本文基于 OpenClaw 版本展开讲解,全程采用图形化可视交互模式。整合包已内置全部运行依赖,普通使用者无需额外配置,即可完整复现整套部署流程。 ✨核心亮点: 全程可视化图形交互界面,自动补齐全部运… · 2026/9/24 17:45:54
本地 AI 自动化实战,OpenClaw 3.1.0 从下载解压到指令验证全流程 📌 说明
本文基于 OpenClaw 版本展开讲解,全程采用图形化可视交互模式。整合包已内置全部运行依赖,普通使用者无需额外配置,即可完整复现整套部署流程。
✨核心亮点: 全程可视化图形交互界面,自动补齐全部… · 2026/9/24 17:45:54
企业RAG知识库从零搭建:切块、表格入库、多轮对话与服务商选型全攻略 上个月一个做设备制造的客户找我,说想在公司内部上一套AI知识库系统,手头有几百份设备手册、质检规范、历史工单,员工每次查资料都要翻半天,新人培训更是折磨。他说得直白:“我就想让员工像聊天一样,直接问… · 2026/9/24 21:09:07
低显存大模型微调实战:从显存瓶颈到 LoRA 与量化方案 1. 为什么第 1 讲就要直面显存问题打开社交平台搜“大模型微调”,你会看到两种极端声音。一边是厂商发布会上的“千亿参数全量微调”Demo,另一边是普通开发者在社区里问“8G 显存是不是就不能微调了”“RX6750GRE 能不能跑 LoRA”。真实情况是࿱… · 2026/9/24 21:09:07
海康工业相机接入ROS:MVS SDK驱动源码包从编译到调参实战 简介:面向工业自动化与机器视觉开发者,这份资源是基于MVS SDK与ROS框架打造的海康机器人(HIKROBOT)工业相机驱动程序源码。它主要解决相机在ROS环境下的通信配置与数据采集问题,适合有ROS基础、需要集成海康相机的开发… · 2026/9/24 21:09:07
JavaScript数据类型深度解析:从typeof陷阱到深浅拷贝的完整指南 null 的 typeof 为什么是 "object"?这大概是每个 JavaScript 开发者第一次产生"这语言是不是有点毛病"念头的瞬间。别笑,我在面试前端岗位时经常拿这个问题开场,能当场说出根因的人不超过两成。更别说把基本类型、引用类… · 2026/9/24 21:09:01
SVC与PSS联合仿真:基于Matlab/Simulink的电力系统暂态稳定分析 那天我坐在实验室里,盯着屏幕上那条功率曲线迟迟不肯回落,心里只有一个念头:这台区域电网的阻尼到底去哪了。后来排查一圈,问题出在励磁系统身上。高放大倍数的快速励磁提升了暂态同步能力,可同时削弱了系统固有的阻尼… · 2026/9/24 21:09:00
Git Worktree + Skill:多任务并行开发的高效工作流实践 1. 多任务并行开发的真实痛点:从"切分支噩梦"说起1.1 一次紧急修复引发的分支切换事故先讲个真实经历。上个月某个周五下午,我正在一个功能分支上开发新模块,代码改到一半,涉及六个文件,逻辑已经在大脑里串起… · 2026/9/24 21:09:00
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44