模型训练:BERT的SQuAD任务

模型训练:BERT的SQuAD任务

本实验主要介绍基于MLU370系列 AI 处理器与寒武纪 PyTorch 框架的 BERT(基于 Transformers v4.0.1)训练方法。
难易程度: 中级|实验人次:1516

一、内容和目标

 

1. 实验内容

本实验主要介绍基于寒武纪 MLU370 (简称 MLU ) AI 处理器与寒武纪 PyTorch 框架的 BERT(基于 Transformers v4.0.1)训练方法。在官方源码的基础上,进行简单移植和修改,使用MLU370 加速训练 BERT 算法模型,并介绍基于 MLU370 的混合精度训练方法。后续章节将会详细介绍移植过程。

 

2. 实验目标

  1. 掌握使用寒武纪 MLU370 和 PyTorch 框架进行混合精度训练的基本方法。
  2. 理解 BERT 模型的整体网络结构及其适配流程。

 

二、前置知识

 

1. 寒武纪软硬件平台介绍

  • 硬件:寒武纪 MLU370 AI 加速卡

  • 框架:PyTorch 1.6

 

2. 寒武纪 PyTorch 框架

为⽀持寒武纪 MLU 加速卡,寒武纪定制了开源⼈⼯智能编程框架PyTorch(以下简称 Cambricon PyTorch)。

Cambricon PyTorch 借助 PyTorch ⾃⾝提供的设备扩展接⼝将 MLU 后端库中所包含的算⼦操作动态注册到 PyTorch 中,MLU 后端库可处理 MLU 上的张量和 AI 算⼦的运算。Cambricon PyTorch 会基于 CNNL 库在 MLU 后端实现⼀些常⽤AI 算⼦,并完成⼀些数据拷⻉。

Cambricon PyTorch 兼容原⽣ PyTorch 的 Python 编程接⼝和原⽣ PyTorch ⽹络模型,⽀持以在线逐层⽅式进⾏训练和推理。⽹络可以从模型⽂件中读取,对于训练任务,⽀持 float32,float16等混合精度。获取更多有关Cambricon PyTorch资料,请参考寒武纪官网文档PyTorch相关内容。

 

三、网络结构

BERT 的全称为 Bidirectional Encoder Representation from Transformers,是一个预训练的语言表征模型, BERT 的每一层由一个Encoder 单元构成。根据 Encoder 集成多少分为两种:

  • 在比较大的BERT模型中,即BERT_large,有24层Encoder,每层中有16个Attention,词向量的维度是1024。

  • 在比较小的BERT模型中,即BERT_base,有12层Encoder,每层有12个Attention,词向量维度是768。

BERT可以有效改进许多自然语言处理任务,包括自然语言分类,文本匹配,命名实体识别和SQuAD 问答等任务。本文主要介绍基于 BERT_base 的 SQuAD 问答任务,以下是其训练框架结构:  

 

其中:     

  • input 表示输入 Encoder之前的各embedding融合,包含position embedding,segment embedding和token embedding。

  • Encoder TransformerEncoder部分,每个Encoder单元由一个multi-head-Attention + Layer Normalization + feedforword + Layer Normalization 叠加产生。

 

四、模型训练

下图为模型训练的四个步骤:

 

1.【工程准备】:安装依赖环境,下载源码、数据集和模型等

2.【移植修改】:为便于用户移植和修改,本次实验通过patch方式将适配后的训练代码应用于源码,使得能够在寒武纪 MLU 上实现训练

3.【训练】:本文提供了2种训练方式:

  • From pretrained training:基于预训练模型进行训练

  • Resume Training:在上次训练基础上继续训练

4.【精度验证】:提供脚本测试训练的精度

 

五、相关链接

实验代码仓库:https://gitee.com/cambricon/practices

Modelzoo仓库:https://gitee.com/cambricon/modelzoo

申 请 试 用