机器阅读理解(MRC,Machine Reading Comprehension)是大模型重要的 NLP 任务,分为抽取式阅读理解与生成式阅读理解两大类:抽取式从原文段落中定位答案起止片段;生成式基于上下文自由生成回答,广泛应用于智能问答、知识库检索、文档助手、RAG 检索增强等业务场景。

阅读理解场景训练面临诸多挑战:输入上下文长、样本序列参差不齐、文档‑问题配对数据预处理复杂;长文本注意力带来巨大显存开销;多文档多跳推理场景计算量大;分布式微调时精度容易漂移;同时需要兼顾 EM、F1 等任务指标与训练吞吐性能。

昇思 MindSpore 结合 MindFormers 套件、昇腾 CANN、MindCluster 集群能力,面向阅读理解场景提供完整解决方案,覆盖数据预处理、基座模型微调、长序列优化、分布式训练、评测、故障稳训全链路,支持 BERT、RoBERTa、Qwen、Llama、盘古等主流基座模型在昇腾 NPU 上高效完成阅读理解任务训练与微调。

一、阅读理解场景业务与技术痛点

业务场景

  1. 抽取式阅读理解:CMRC2018、SQuAD,输入上下文 + 问题,输出原文片段答案,用于知识库问答、文档抽取;

  2. 生成式阅读理解:长文档问答、多跳阅读理解、RAG 场景,输入超长参考文档集合 + 问题,模型自由生成答案;

  3. 多文档多跳阅读理解:需要跨多个段落检索线索、推理得到最终答案,代表数据集 HotpotQA。

核心技术痛点

  1. 长序列显存压力大:上下文文档长,Attention 计算复杂度随序列长度平方增长,显存占用暴涨,单卡难以跑通长文档样本;

  2. 样本长度参差不齐:不同文档长度差异大,padding 补零带来大量无效计算,训练效率低;

  3. 精度约束严苛:阅读理解依赖细粒度语义定位,对数值稳定性敏感,混合精度、量化策略容易造成 EM/F1 指标下降;

  4. 分布式微调易精度漂移:多卡训练下 loss 震荡、F1 指标不收敛;

  5. 数据链路复杂:需要做文档切分、样本构造、负样本采样、答案位置标注,预处理链路长;

  6. 大规模集群长稳训练:千卡规模训练,偶发硬件静默错误、IO 瓶颈,需要断点容错保障。

二、昇思阅读理解整体方案架构

整套方案分为四层,从数据层、框架层、算子硬件层、集群稳训层协同优化:

层级

核心组件

能力说明

数据预处理层

MindFormers 数据工具集

阅读理解样本构建、文档切分、Packing 样本压缩、数据集格式转换、负样本构造,支持 CMRC2018/SQuAD/HotpotQA 等数据集

模型训练层

MindSpore + MindFormers

支持抽取式 Span‑Head、生成式 SFT 微调;自动并行、重计算、Ring‑Attention 长序列并行;LoRA / 全参数微调双模式;内置 EM/F1 评测逻辑

算子 & 硬件加速层

CANN、ATB、CATLASS

优化长序列注意力算子、混合精度数值保护;矩阵乘高性能算子;Sliding‑Window‑Attention 滑动窗口注意力优化长文本训练开销

集群稳训层

MindCluster(MindIO)

异步 Checkpoint ACP、临终断点 TTP、TIS 静默数据校验;保障大文档阅读理解长稳训练,减少故障回滚损失

训练两种主流模式:

  1. 抽取式微调:基座增加 Span 预测头,预测答案 start/end 位置;

  2. 生成式 SFT 微调:构造【文档】+【问题】+【答案】对话样本,做有监督微调,适配 RAG 场景。

三、关键能力详解

3.1 阅读理解专用数据处理工具

MindFormers 内置阅读理解数据流水线,支持:

  1. 标准数据集解析:CMRC2018、SQuAD、DRCD、HotpotQA,自动解析 context、question、answer、answer_position;

  2. 文档滑动切分:超长文档按窗口滑动切分,生成多段上下文样本,解决超长文档超限;

  3. Dataset Packing 样本打包:将多个短样本拼接填充到同一个序列,减少 padding 无效 token,显著提升训练吞吐,降低算力浪费;

  4. 多跳阅读理解负样本采样:构造干扰文档负样本,增强模型区分干扰信息能力。

示例预处理配置片段:

train_dataset:
  type: MrcDataset
  dataset_path: ./cmrc2018/train.json
  packing: True       # 开启样本Packing优化
  max_seq_len: 4096
  doc_stride: 256     # 文档滑动切分步长

3.2 长序列训练优化

阅读理解经常遇到 4k/8k 甚至更长上下文,昇思提供多套优化手段组合使用:

  1. Ring‑Attention 长序列并行:将长序列注意力计算拆分到多张 NPU,降低单卡激活显存开销,支持 8k‑64k 超长上下文训练;

  2. 选择性重计算:对 Attention 层开启重计算,大幅降低中间激活显存占用,可在相同硬件下支持更长序列输入;

  3. SWA 滑动窗口注意力:部分层使用滑动窗口注意力,降低长文本 Attention 计算量,兼顾效果与性能,适合长文档问答场景。

3.3 两种微调范式支持

范式 1:抽取式阅读理解微调(Span 预测)

适合传统机器阅读理解,在预训练模型输出之上增加两个线性头,预测答案在上下文的起始、结束位置,loss 采用 start、end 位置交叉熵损失,评测指标为 EM(完全匹配)、F1 得分。

# MindFormers伪代码示意
model = AutoModel.from_pretrained("roberta-base")
mrc_head = MrcSpanHead(hidden_size=768)
net = MrcModel(model, mrc_head)
loss = mrc_loss(start_logits, end_logits, start_pos, end_pos)
范式 2:生成式阅读理解 SFT 微调

面向 RAG、长文档问答,构造对话格式样本,直接做自回归 SFT 微调,输出自由文本答案。支持全参数微调、LoRA 微调,LoRA 模式显存开销低,适合大基座阅读理解适配。

3.4 分布式训练与精度保障

  1. 自动并行:串行阅读理解训练脚本,打开自动并行即可实现数据并行、模型并行、流水线并行,不用手动编写通信逻辑,支持千卡集群训练;

  2. 数值稳定性保护:阅读理解位置预测对数值敏感,MindSpore 提供混合精度 loss‑scale 动态保护,防止 FP16 下梯度下溢,避免 EM/F1 指标掉点;

  3. TIS 校验一致性检查:大规模集群训练,开启 TIS 张量签名校验,防止静默数据错误带来 loss 抖动、指标异常,保证训练链路一致性;

  4. 内置 MRC 评测组件:训练中可周期性执行 EM、F1 指标评估,实时监控阅读理解任务效果。

3.5 集群长稳训练保障(MindIO)

阅读理解数据集单样本序列长,Checkpoint 体积更大,保存断点 IO 开销高。对接 MindCluster MindIO 组件:

  • ACP 异步 Checkpoint,消除保存断点的同步 IO 阻塞;

  • TTP 临终断点,故障崩溃尽量保存最新 step 训练状态,减少长文档训练回滚步数;

  • 故障局部修复,单节点故障不销毁整个训练任务。

四、快速上手:阅读理解训练关键配置示例

环境准备

# 安装依赖
pip install mindspore mindformers

训练脚本核心片段(抽取式 MRC)

from mindformers import Trainer, AutoModel, AutoConfig
from mindformers.dataset import MrcDataset

# 1.加载基座模型
config = AutoConfig.from_pretrained("roberta-base")
config.max_seq_len = 4096
model = AutoModel.from_config(config)

# 2.阅读理解数据集
train_dataset = MrcDataset(
    dataset_path="./cmrc2018/train.json",
    max_seq_len=4096,
    doc_stride=256,
    packing=True
)

# 3.训练器启动
trainer = Trainer(
    task="machine_reading_comprehension",
    model=model,
    train_dataset=train_dataset,
    run_mode="finetune",
    use_parallel=True,          # 开启自动并行
    recompute=True,             # 开启重计算节省显存
)
trainer.train()

分布式启动命令,使用 msrun 拉起多卡训练

msrun --worker_num=8 --local_worker_num=8 python run_mrc_train.py

五、适用场景与约束

推荐场景

  1. 中文抽取式阅读理解,CMRC2018、Dureader 等数据集微调;

  2. RAG 系统配套长文档生成式阅读理解 SFT 微调;

  3. 多文档多跳问答模型训练;

  4. 千卡集群长时阅读理解任务训练。

约束说明

  1. Ring‑Attention、重计算会带来一定计算开销,训练吞吐量会有所下降,是显存换序列长度的取舍;

  2. Packing 样本会改变样本边界,评测阶段需关闭 Packing,保证评测指标正确性;

  3. 生成式阅读理解训练,超长上下文会显著增加显存消耗,优先使用 LoRA 微调降低资源门槛。

六、开发调优注意事项

  1. 训练集开启 Packing,验证 / 测试集禁止 Packing:Packing 改变样本拼接逻辑,会干扰 EM/F1 评测计算,只用于训练提速;

  2. 序列长度与 doc_stride 调优:文档滑动步长 doc_stride 不宜过小,否则样本量爆炸;不宜过大,会截断答案片段;

  3. 混合精度调参:阅读理解 Span 预测对数值敏感,若出现 F1 不收敛,适当调大 loss‑scale,或开启部分层 FP32 保护;

  4. 长序列优先开启重计算,显存不足再启用 Ring‑Attention 多卡序列并行;

  5. 大规模集群训练务必检查 TIS 三层校验行为一致性,规避静默数据错误导致指标随机抖动;

  6. 使用 MindIO 做长稳训练,MemFS 内存池配置需要评估 Checkpoint 大小,防止 OOM,异步断点不能替代周期性保存的正式 Checkpoint。

七、配套资源

  1. MindFormers 示例工程:examples/machine_reading_comprehension,提供 CMRC2018 完整可运行样例;

  2. 数据集资源:CMRC2018、DRCD、SQuAD、HotpotQA 公开阅读理解数据集;

  3. MindSpore 长序列文档:Ring‑Attention、重计算用户指南;

  4. MindCluster 文档:MindIO ACP/TTP 部署配置;

  5. 评测脚本:内置 MRC 评测工具,输出 EM、F1、样本级错误分析。

八、总结

昇思面向阅读理解场景的大模型训练解决方案,完整覆盖抽取式、生成式、多跳阅读理解任务。通过高效阅读理解数据流水线、长序列显存优化、全 / LoRA 双模式微调、自动并行分布式能力、MindCluster 集群稳训组件,解决长上下文显存、样本效率、精度漂移、集群长稳训练几大痛点。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐