中文法律问答 LoRA 微调与推理(MindSpore) English | 中文简体
简介
- 基于 MindSpore 与 MindNLP 的中文法律问答 LoRA 微调与推理工程,底座模型默认使用
Qwen2.5-7B-Instruct。 - 支持从 JSON 指令数据进行 LoRA 微调,保存 Adapter,按需合并为全量权重,命令行推理与 Gradio WebUI 流式输出。
特性
- LoRA 微调:快速微调中文法律问答能力,支持断点续训与持久化保存。
- 权重合并:一键将 LoRA 适配器合并回全量模型,便于独立部署。
- 流式推理:命令行与 WebUI 均支持逐字流式输出,响应更平滑。
- WebUI:基于 Gradio 的聊天页面,开箱即用。
- Ascend/NPU:默认在 Ascend 环境运行,张量自动放置到
npu:0。
安装 测试环境
- Python 3.9
- MindSpore 2.7.0
- MindNLP 0.5.1
- Linux(Ascend/NPU)
Conda 建议
conda create -n law-lora-ms python=3.9
conda activate law-lora-ms
pip install -r requirements.txt
依赖安装
pip install -r requirements.txt
requirements.txt(已提供)
python==3.9.25mindspore==2.7.0mindnlp==0.5.1gradiotqdm
预训练模型
- 默认底座模型路径:
/home/ma-user/work/pretrained/Qwen/Qwen2.5-7B-Instruct - 你可以将官方权重下载到本地,并通过命令行的
--model_path指定不同路径。
数据准备
- 训练数据为 JSON 列表,每条样本包含:
[
{
"instruction": "问题或指令",
"input": "可选的补充输入",
"output": "答案文本"
}
]
- 提示词会自动按“系统/用户/助手”模板拼接,且训练时对提示词部分不计损失。
开始训练 基础训练(保存 LoRA 适配器)
python train_lora.py \
--do_train \
--model_path /path/to/Qwen2.5-7B-Instruct \
--dataset_json /path/to/dataset.json \
--output_dir ./output_lora_checkpoints \
--adapter_dir ./final_lora_output
断点续训
- 自动从最近 checkpoint 恢复:添加
--resume_auto - 指定路径恢复:
--resume_from_checkpoint ./output_lora_checkpoints/checkpoint-XXXX
合并为全量模型
python train_lora.py \
--do_train --merge_and_save \
--merged_dir ./merged_model
- 训练完成后释放显存并执行合并,生成可独立推理的完整权重到
merged_model/。
命令行推理 使用合并模型(如存在则优先)或“底座+Adapter”进行推理,支持流式输出。
python train_lora.py \
--do_infer \
--infer_instruction "某人在交通事故中受到了腹壁穿透创伤,该如何鉴定?" \
--max_new_tokens 1024 \
--top_p 0.9 --temperature 0.7 --do_sample
启动 WebUI
python web_infer.py
- 如
merged_model/存在且非空,则加载合并后的全量模型;否则加载“底座+Adapter”。 - 默认开放地址:
http://0.0.0.0:7860(终端会显示可访问链接)。
使用参考(WebUI)
- 在输入框中直接提问,如“盗窃罪的立案标准是什么?”。
- 侧栏提供示例问题可一键填充。
- 输出为逐字流式,便于观察生成过程。
项目结构
├─ train_lora.py # LoRA 训练、保存、合并、命令行推理
├─ web_infer.py # Gradio WebUI,聊天式流式推理
├─ requirements.txt # 依赖列表
├─ final_lora_output/ # 训练后保存的 LoRA 适配器(目录)
├─ merged_model/ # 合并后的全量模型(目录)
└─ output_lora_checkpoints/ # 训练过程 Checkpoints(目录)
常见问题
- MindSpore/设备:脚本默认
device_target="Ascend"与npu:0放置,确保环境已正确安装并可用。 - Tokenizers 并行:为避免死锁,脚本在导入前禁用并行(
TOKENIZERS_PARALLELISM=false)。 - 序列长度与显存:
--max_seq_length与批大小、梯度累积需结合显存调节。
致谢
- Qwen 系列开源模型
- MindSpore 与 MindNLP 生态
- PEFT/LoRA 相关实现
许可证
- 依据上游模型与数据集许可使用与分发。本仓库示例代码供研究学习使用。