---
title: 基于应用使能套件的行业模型微调实践-官方技术文章-昇腾社区
description: 目前业界的模型微调实践主要集中在特定任务&#xff0c;行业模型的开发实践较少&#xff0c;一方面由于领域知识复杂、高质量数据稀缺、模型性能难以评估导致开发技术要求高、流程复杂&#xff0c;另一方面行业模型开发完成通常会直接应用该领域&#xff0c;导致开发细节较少公开。 本文以法律行业为背景&#xff0c;介绍利用应用使能套件开发行业模型微调训练的端到端流程&#xff0c;开发的模型在Law
keywords: 基于应用使能,套件的行业模,型微调实践,官方技术文章,昇腾社区,引言,实践任务介绍,资源依赖和评估结果
url: https://www.hiascend.com/developer/techArticles/20250526-2
section: (其他)
---

# 基于应用使能套件的行业模型微调实践-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20250526-2
描述: 目前业界的模型微调实践主要集中在特定任务&#xff0c;行业模型的开发实践较少&#xff0c;一方面由于领域知识复杂、高质量数据稀缺、模型性能难以评估导致开发技术要求高、流程复杂&#xff0c;另一方面行业模型开发完成通常会直接应用该领域&#xff0c;导致开发细节较少公开。 本文以法律行业为背景&#xff0c;介绍利用应用使能套件开发行业模型微调训练的端到端流程&#xff0c;开发的模型在Law
关键词: 基于应用使能,套件的行业模,型微调实践,官方技术文章,昇腾社区,引言,实践任务介绍,资源依赖和评估结果

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

基于应用使能套件的行业模型微调实践

基于应用使能套件的行业模型微调实践

微调应用使能套件

发表于: 2025/05/29

765

3

## 1、引言

目前业界的模型微调实践主要集中在特定任务，行业模型的开发实践较少，一方面由于领域知识复杂、高质量数据稀缺、模型性能难以评估导致开发技术要求高、流程复杂，另一方面行业模型开发完成通常会直接应用该领域，导致开发细节较少公开。

本文以法律行业为背景，介绍利用应用使能套件开发行业模型微调训练的端到端流程，开发的模型在LawBench法律评测数据集上获得了16.57分的提升，能在法律领域具备更高专业性，帮助用户解决法律相关专业问题。

## 2、实践任务介绍

本实践以魔乐社区的law_mini_data法律数据集+Qwen2.5-7B-Instruct模型为例，介绍了数据集构建、二次预训练、微调以及模型评估的全流程，帮助开发者更好地理解端到端行业模型的微调开发流程，同时开发者也可以基于本案例自己手动复现全流程。本教程将包括如下内容：1. 法律领域任务介绍，包括任务说明、指标和数据样例2. 资源依赖和评估结果，包括机器资源、训练数据集、基座模型、训练套件、评估套件和评估结果等3. 实验流程，包含开发环境配置、训练、评估等本实践使用OpenCompass和LawBench评测集来评测模型在法律领域的能力。OpenCompass是一个开源的大模型评测平台，支持多种数据集和模型的评估，已支持昇腾NPU，同时支持LawBench评测。LawBench是一个针对中国法律体系设计的深度学习基准评测平台，旨在全面评估大型语言模型（LLMs）的法律知识、理解和应用能力。该平台精心设计了20个任务，覆盖了从简单的法律知识记忆到复杂的法律知识理解和应用，全方位评估模型的表现，具体的法律任务和指标参考，LawBench数据集-任务列表：https://github.com/open-compass/LawBench/blob/main/README.md [了解详情](https://github.com/open-compass/LawBench/blob/main/README.md)评测数据可参考LawBench/data，每个任务对应一个json文件，数据格式如下（以1-1法条背诵任务为例）：评测数据：https://github.com/open-compass/LawBench/tree/main/data [了解详情](https://github.com/open-compass/LawBench/tree/main/data)

```
{
    "instruction": "回答以下问题，只需直接给出法条内容:下面是一个例子:\n民法商法公司法第六十条的内容是什么？\n答案:一人有限责任公司章程由股东制定。\n请你回答：",
    "question": "民法商法农民专业合作社法第十四条的内容是什么？",
    "answer": "答案:设立农民专业合作社，应当召开由全体设立人参加的设立大会。设立时自愿成为该社成员的人为设立人。,设立大会行使下列职权：,（一）通过本社章程，章程应当由全体设立人一致通过；,（二）选举产生理事长、理事、执行监事或者监事会成员；,（三）审议其他重大事项。"
}
```

## 3、资源依赖和评估结果

3.1 机器资源本实践所需的机器资源为单台昇腾Atlas 900 A2 POD单机八卡

3.2 训练数据集本实践采用的数据集为魔乐社区的law_mini_data数据集，该数据集根据lawbench数据集来源进行构造，并剔除了用于评测的数据。数据共包含预训练与微调两部分，其中：pretrain文件夹存放的law_mini_pretrain_data.json数据集用于领域预训练。finetune文件夹存放的law_mini_finetune_data.json数据集和general_field_mini_finetune_data.json数据集分别用于法律领域微调和通用领域微调。用户可在此处下载该数据集，本实践以数据集保存至/home/law/law_mini_data路径为例。数据集下载地址：https://modelers.cn/datasets/AI-Research/law_mini_data [了解详情](https://modelers.cn/datasets/AI-Research/law_mini_data)3.2.1数据示例与构建方式3.2.1.1预训练数据数据示例如下：

数据构建方式：通过LawRefBook，JEC-QA，DISC-Law-SFT（判决预测，司法摘要，法律考试，法律问答）源数据构建，总数据量大约在170k左右。3.2.1.2法律微调数据数据示例如下：

数据构建方式：针对LawBench每个任务的数据来源构建对应的微调数据集。例如，给定数据集D有10000条数据，假设任务A选取数据集D其中500条进行评估，则微调数据集A'从剩下的9500条中随机抽取一定的样本，仿照任务A的形式构建微调数据。采样方式为：随机抽取2000条数据，不足2000条数据则使用全量数据，共构建32774条领域微调数据。3.2.1.3通用任务微调数据数据示例如下：

数据构建方式：取自BAAI/Infinity-Instruct数据集，由智源研究院发布，包括Infinity-Instruct-7M基础指令数据集和Infinity-Instruct-Gen对话指令数据集，中英文微调数据各选取 32774 条。微调数据中，中文：英文：领域 = 1：1 ：1。

3.3 基座模型Instruct模型相比base模型能够更好地理解和执行复杂的自然语言指令。本实践为了开发出更优秀的行业模型，采用的基座模型为Qwen2.5-7B-Instruct，用户可在魔乐社区下载该模型权重文件，本实践以模型保存到/home/law/Qwen2.5-7B-Instruct路径为例。模型权重下载地址：https://modelers.cn/models/AI-Research/Qwen2.5-7B-Instruct [了解详情](https://modelers.cn/models/AI-Research/Qwen2.5-7B-Instruct)

3.4 训练套件本实践以应用使能套件作为预训练与微调套件，该套件基于Transformers框架和常用的开源技术栈，更好的支持HF格式模型，可以提供简化的训练流程，无需配置复杂的并行化策略，适合快速开发中小型模型的训练和部署，具有良好的易用性，包含了常用的模型预训练、微调、模型合并、推理等功能。套件开源仓地址：https://gitee.com/ascend/openmind [了解详情](https://gitee.com/ascend/openmind)

3.5 评估套件本实践采用的评估套件为OpenCompass，OpenCompass是由上海人工智能实验室研发的大模型评测一站式平台，提供公平、公开、可复现的大模型评测方案，支持70+数据集和20+Huggingface及API模型。当前，OpenCompass已经原生支持昇腾NPU，通过简单的配置，即可在昇腾NPU上使用OpenCompass评测大模型的能力。OpenCompass网址：https://github.com/open-compass/opencompass/tree/main [了解详情](https://github.com/open-compass/opencompass/tree/main)

3.6 评估结果部分评估结果见下表所示，详细评估结果见魔乐社区数据集介绍，表中红色表示相较于基准模型，分数劣化，绿色表示相较于基准模型，分数提升。数据集地址：https://modelers.cn/datasets/AI-Research/law_mini_data [了解详情](https://modelers.cn/datasets/AI-Research/law_mini_data)3.6.1 法律行业能力评估结果

| 法律行业能力评估 |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | ---|
| dataset | metric | mode | 基座模型Qwen2.5-7B-Instruct | 微调1 epoch | 与基座模型差距 | 预训练2epoch后，微调1 epoch | 与基座模型差距 | 预训练后微调与直接微调差距 |
| --------- 0-shot --------- | - | - | - | - | - | - | - | - |
| lawbench-0-shot | naive_average | gen | 52.28 | 65.53 | 13.25 | 70.71 | 18.43 | 5.18 |
| lawbench-1-1-article_recitation-0-shot | score | gen | 23.2 | 31.68 | 8.48 | 88.34 | 65.14 | 56.66 |
| lawbench-1-2-knowledge_question_answering-0-shot | score | gen | 67.6 | 75.4 | 7.8 | 93 | 25.4 | 17.6 |
| lawbench-3-7-criminal_damages_calculation-0-shot | score | gen | 66.8 | 80.8 | 14 | 79.2 | 12.4 | -1.6 |
| lawbench-3-8-consultation-0-shot | score | gen | 22.06 | 19.46 | -2.6 | 20.08 | -1.98 | 0.62 |
| --------- 1-shot --------- | - | - | - | - | - | - | - | - |
| lawbench-1-shot | naive_average | gen | 55.27 | 65.65 | 10.38 | 69.98 | 14.71 | 4.33 |
| lawbench-1-1-article_recitation-1-shot | score | gen | 21.09 | 30.64 | 9.55 | 82.01 | 60.92 | 51.37 |
| lawbench-1-2-knowledge_question_answering-1-shot | score | gen | 67 | 75.4 | 8.4 | 90.6 | 23.6 | 15.2 |
| lawbench-3-7-criminal_damages_calculation-1-shot | score | gen | 69.6 | 79.4 | 9.8 | 77.4 | 7.8 | -2 |
| lawbench-3-8-consultation-1-shot | score | gen | 23.35 | 19.84 | -3.51 | 20.81 | -2.54 | 0.97 |
| 平均值 | - | - | 55.77 | 65.59 | 11.82 | 70.35 | 16.57 | 4.75 |

3.6.2 通用领域评估结果

| dataset | metric | mode | 基座模型Qwen2.5-7B-Instruct | 微调1epoch | 与基座模型差距 | 预训练后微调1 epoch | 与基座模型差距 | 预训练后微调与直接微调差距 |
| --- | --- | --- | --- | --- | --- | --- | --- | ---|
| 平均值 | - | - | 75.66 | 75.90 | 0.24 | 73.99 | -1.67 | -1.91 |

我们发现在法律行业方面，直接进行SFT微调，与进行二次预训练后，再进行SFT微调，均能够获得较高的行业能力提升，相比较而言，进行二次预训练后的SFT微调，能够获得更好的性能提升。而对于通用能力方面，在进行了行业模型的SFT微调后，并没有对通用能力造成显著影响。在120个评估任务中，直接进行SFT微调的模型，评估平均分数增加了0.24，二次预训练后微调的模型，评估平均分数也只下降了1.67。而对于行业能力评估，直接进行SFT微调能够获得11.82的平均分提升，二次预训练后微调，更是获得了16.57的平均分提升。

## 4、实验流程

本实践涉及的实验包含两部分：训练与评估。训练包括：先做二次预训练，再做行业+通用领域的SFT微调。评估包括：LawBench法律领域的大语言模型综合评估；通用领域评估

4.1 开发环境配置关键版本依赖

| 软件 | 版本 |
| --- | ---|
| Python | 3.10 |
| PyTorch | 2.1.0 |
| Transformers | 4.47.1 |
| CANN | 8.1.RC1 |
| 应用使能套件 | 1.1.0 |

4.1.1 CANN环境参考官方指导CANN环境准备：https://www.hiascend.com/document/detail/zh/canncommercial/81RC1/softwareinst/instg/instg_0000.html?Mode=PmIns&InstallType=local&OS=Ubuntu&Software=cannToolKit [了解详情](https://www.hiascend.com/document/detail/zh/canncommercial/81RC1/softwareinst/instg/instg_0000.html?Mode=PmIns&InstallType=local&OS=Ubuntu&Software=cannToolKit)4.1.2 应用使能套件源码安装该步骤会自动安装torch和torch_npu

```
git clone -b 1.1.0 https://gitee.com/ascend/openmind.git
cd openmind
pip install .[pt]
```

4.1.3 OpenCompass安装与环境配置

```
git clone https://github.com/open-compass/opencompass.git
cd opencompass
pip install -e .
```

OpenCompass安装完成后，还需要下载通用领域评估集、LawBench评估集和安装Humaneval及其相关依赖。我们在OpenCompass文件夹执行：（1）准备通用领域评估集

```
wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip
unzip OpenCompassData-core-20240207.zip
```

（2）准备LawBench评估集

```
git clone https://github.com/open-compass/LawBench.git
mkdir ./data/lawbench
cp -r ./LawBench/data/zero_shot ./data/lawbench
cp -r ./LawBench/data/one_shot ./data/lawbench
mkdir ./data/lawbench/eval_assets
cp -r ./LawBench/evaluation/utils/data/* ./data/lawbench/eval_assets
```

（3）安装Humaneval及其相关依赖：

```
git clone https://github.com/open-compass/human-eval.git
pip install -e human-eval
```

（4）pip安装如下依赖包：

```
pip install rouge_chinese==1.0.3 cn2an==0.5.22 ltp==4.2.13 python-Levenshtein==0.21.1 pypinyin==0.49.0 tqdm==4.64.1 timeout_decorator==0.5.0

```

4.1 训练经过实验尝试，我们发现只进行SFT微调在个别行业任务的提升效果一般，所以改进了方法，先进行二次预训练再进行SFT微调，通过二次预训练来丰富7B模型的语言能力，进而再通过微调来提升模型性能。

4.2.1二次预训练（1）在应用使能套件源码目录下新建qwen2.5-pretrain.yaml文件，内容如下：

```
# model_name_or_path请传入本地模型路径
model_name_or_path: /home/law/Qwen2.5-7B-Instruct
# method
stage: pt
do_train: true
finetuning_type: full
template: qwen
# deepspeed配置路径，应用使能套件代码仓下已有
deepspeed: examples/deepspeed/ds_z3_config.json
trust_remote_code: True
# dataset请传入law_mini_pretrain_data.json本地路径
dataset: /home/law/law_mini_data/pretrain/law_mini_pretrain_data.json
cutoff_len: 4096
max_length: 4096
# output
logging_steps: 1
overwrite_output_dir: true
output_dir: saves/Qwen2.5-7B-Instruct-pretrain-epoch1
# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 1
learning_rate: 1.0e-5
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
num_train_epochs: 2
seed: 1234
save_strategy: "epoch"
```

训练参数说明可以参考，应用使能套件训练参数，其中：	model_name_or_path：待微调的模型路径，例如：/home/law/Qwen2.5-7B-Instruct	stage：训练阶段，预训练设置为pt	dataset：数据集路径，例如：/home/law/law_mini_data/pretrain/law_mini_pretrain_data.json	output_dir：模型保存权重路径，例如：saves/Qwen2.5-7B-Instruct-pretrain-epoch1（2） 完成上述配置后，在应用使能套件的源码目录下通过如下命令即可启动二次预训练：

```
openmind-cli train qwen2.5-pretrain.yaml
```

4.2.2 行业+通用域SFT微调（1）在3.1中准备好的law_mini_data数据集文件夹下，新建dataset_info.json文件，并填入如下内容：

```
{
  "law_mini_finetune_data": {
    "file_name": "law_mini_finetune_data.json",
    "local_path": "/home/law/law_mini_data/finetune",
     "columns": {
      "prompt": "instruction",
      "query": "question",
      "response": "answer",
      "system": "system",
      "tools": "tools",
      "history": "history"
    }
  },
   "general_field_mini_finetune_data": {
    "local_path": "/home/law/law_mini_data/finetune",
    "file_name": "general_field_mini_finetune_data.json",
    "formatting": "sharegpt",
    "columns": {
      "messages": "conversations",
      "system": "system",
      "tools": "tools"
    }
  }
}

```

其中local_path传入本地数据集路径，例如：/home/law/law_mini_data/finetune。（2）在应用使能套件的源码目录下新建openmind-cli train qwen2.5-pretrain+sft.yaml文件，文件内容如下：

```
# model_name_or_path请传入本地模型路径
model_name_or_path: saves/Qwen2.5-7B-Instruct-pretrain-epoch1/checkpoint-24380/
# method
stage: sft
do_train: true
finetuning_type: full
template: qwen
# deepspeed配置路径，应用使能套件代码仓下已有
deepspeed: examples/deepspeed/ds_z3_config.json
trust_remote_code: True
#custom_dataset_info请传入步骤(1)中的dataset_info.json的路径 
custom_dataset_info: /home/law/law_mini_data/dataset_info.json
# dataset请传入步骤(1)文件中的数据集名称
dataset: law_mini_finetune_data, general_field_mini_finetune_data
cutoff_len: 4096
max_length: 4096
# output
logging_steps: 1
overwrite_output_dir: true
output_dir: saves/Qwen2.5-7B-Instruct-pretrain_sft
# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 1
learning_rate: 1.0e-6
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
num_train_epochs: 1
seed: 1234
save_strategy: "epoch"

```

其中	model_name_or_path：需改为二次预训练后保存的权重路径，例如：saves/Qwen2.5-7B-Instruct-pretrain-epoch1/checkpoint-24380/	stage：训练阶段，微调设置为sft	cunstom_dataset_info：步骤(1)中自定义数据集配置文件路径，例如：/home/law/law_mini_data/dataset_info.json	dataset：自定义数据集配置文件中数据集名称，例如：law_mini_finetune_data, general_field_mini_finetune_data	output_dir：模型保存权重路径，例如：saves/Qwen2.5-7B-Instruct-pretrain_sft（3）在配置完环境和微调配置文件后，在应用使能套件的源码目录下通过如下命令启动微调训练：

```
openmind-cli train qwen2.5-pretrain+sft.yaml
```

4.3 评估本次实践中，我们使用OpenCompass工具，对大模型的法律领域能力和通用领域能力进行评估。在用户完成4.1.3节中相关的环境配置后，需要通过如下步骤完成OpenCompass评估脚本配置（如下操作均在OpenCompass目录下进行）：

4.3.1 法律行业能力评估（1） 修改examples/eval_qwen_7b_chat_lawbench.py，内容如下：

```
from mmengine.config import read_base
with read_base():
    from opencompass.configs.datasets.lawbench.lawbench_one_shot_gen_002588 import \
        lawbench_datasets as lawbench_one_shot_datasets
    from opencompass.configs.datasets.lawbench.lawbench_zero_shot_gen_002588 import \
        lawbench_datasets as lawbench_zero_shot_datasets
    #from opencompass.configs.models.qwen.hf_qwen_7b_chat import models
    from opencompass.configs.models.qwen.hf_qwen2_7b_instruct_law import models
    from opencompass.configs.summarizers.lawbench import summarizer
datasets = lawbench_zero_shot_datasets + lawbench_one_shot_datasets
for d in datasets:
    d['infer_cfg']['inferencer']['save_every'] = 1

```

（2） 新建opencompass/configs/models/qwen/hf_qwen2_7b_instruct_law.py，内容如下，其中：	path字段需要修改为待评测的模型路径

```
from opencompass.models import HuggingFaceCausalLM
_meta_template = dict(
	round=[
        dict(
            role="SYSTEM",
            prompt="You are a helpful assistant.",
            begin="<|im_start|>system\n",
            end="<|im_end|>\n",
        ),
        dict(role="HUMAN", begin="<|im_start|>user\n", end="<|im_end|>\n"),
        dict(
            role="BOT",
            begin="<|im_start|>assistant\n",
            end="<|im_end|>\n",
            generate=True,
        ),
    ],
    eos_token_id=151645
)
models = [
    dict(
        type=HuggingFaceCausalLM,
        abbr="qwen2_7b_instruct_law",        
        path="/home/law/Qwen2.5-7B-Instruct", #填写待评测的本地权重路径
        tokenizer_kwargs=dict(
            padding_side="left",
            truncation_side="left",
            trust_remote_code=True,
            use_fast=False,
        ),
        meta_template=_meta_template,
        max_seq_len=8192,
        max_out_len=1024,
        batch_size=1,
        batch_padding=True,
        run_cfg=dict(num_gpu=1),
        model_kwargs=dict(
            torch_dtype="torch.float",
            device_map="npu",
        ),
    )

```

（3） 配置完上述文件后，通过如下命令启动评估：

```
python run.py examples/eval_qwen_7b_chat_lawbench.py --debug
```

4.3.2 通用领域评估（1）新建examples/eval_qwen2_7b_instruct_general_field.py，内容如下：

```
from mmengine.config import read_base
with read_base():
    from opencompass.configs.models.qwen.hf_qwen2_7b_instruct_general import models
    from opencompass.configs.datasets.ceval.ceval_gen import ceval_datasets
    from opencompass.configs.datasets.mmlu.mmlu_gen_4d595a import mmlu_datasets
    from opencompass.configs.datasets.gpqa.gpqa_openai_simple_evals_gen_5aeece import gpqa_datasets
    from opencompass.configs.datasets.gsm8k.gsm8k_gen_1d7fe4 import gsm8k_datasets
    from opencompass.configs.datasets.humaneval.humaneval_gen_8e312c import humaneval_datasets
    from opencompass.configs.datasets.mbpp.sanitized_mbpp_mdblock_gen_a447ff import sanitized_mbpp_datasets
    from opencompass.configs.datasets.math.math_0shot_gen_393424 import math_datasets
datasets = ceval_datasets + mmlu_datasets  + gpqa_datasets + \
           gsm8k_datasets + humaneval_datasets + sanitized_mbpp_datasets + math_datasets

```

（2） 新建opencompass/configs/models/qwen/hf_qwen2_7b_instruct_general.py，内容同4.3.1节步骤（2），其中path字段需要修改为待评测的模型路径。（3） 配置完上述文件后，通过如下命令启动评估：

```
python run.py examples/eval_qwen2_7b_instruct_general_field.py --debug
```

	若遇到gpqa数据集自动下载失败问题，可通过手动下载该数据集并上传至data/gpqa路径解决。gpqa数据集下载地址：http://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/gpqa.zip

点赞 3

本页内容

1、引言 [了解详情](https://www.hiascend.com/#id-1)

2、实践任务介绍 [了解详情](https://www.hiascend.com/#id-2)

3、资源依赖和评估结果 [了解详情](https://www.hiascend.com/#id-3)

4、实验流程 [了解详情](https://www.hiascend.com/#id-4)
