模型推理:BERT的SQuAD任务
一、内容和目标
1. 实验内容
-
本实验主要介绍基于寒武纪 MLU370,使用寒武纪高性能算子,完成同等于 BertForQuestionAnswering 模型所能支持的问答任务。
-
基于寒武纪 MLU370 高性能大算子,您可以读取SQuAD 数据集,对相应的统计结果进行评估。
2. 实验目标
-
掌握使用寒武纪 MLU370 大算子进行模型推理的基本方法。
-
理解 Bert 模型的整体网络结构及其开发调试细节。
二、前置知识
1. 寒武纪软硬件平台介绍
-
硬件:寒武纪 MLU370 AI 计算卡
-
框架:PyTorch 1.6 、CNNL
-
系统环境:寒武纪云平台
三、网络结构
Bert 模型的全称是:BidirectionalEncoder Representations from Transformer,也就是说,Transformer 是组成 Bert 的核心模块,而 Attention 机制又是 Transformer 中最关键的部分。
网络结构如下图所示:
其中:
【Attention】
Attention 的主要作用是把“注意力”放在一部分输入上。它主要涉及到3个概念:Query、Key 和 Value。在增强字的语义表示这个应用场景中,目标字及其上下文的字都有各自的原始 Value,Attention 机制将目标字作为 Query、其上下文的各个字作为Key,并将 Query 与各个 Key 的相似性作为加权系数,把上下文各个字的 Value 融入目标字的原始 Value 中。
【Transformer Encoder】
Transformer Encoder 在 Multi-head Self-Attention 之上又添加了三种关键操作:
1)残差连接(ResidualConnection)
2)Layer Normalization
3)线性转换
【Bert】
组装好TransformerEncoder之后,再把多个 Transformer Encoder一层一层地堆叠起来,Bert 模型就组装完成了。
四、模型推理
模型推理整体流程如下图所示:
STEP 1. 工程准备
-
预训练模型准备:本实验的模型是寒武纪自己训练的模型,并将其放置于
/workspace/model
目录下。 -
搭建环境:
pip install -r requirements.txt
。
STEP 2. 工程运行
-
构造我们提供的 PyBert 对象。
-
allocate 接口完成 Bert 模型在 MLU内存上的分配。
-
get_weights 从文件读取并处理成
example_bert_pre_weights, example_encoder_weights, example_bert_post_weights
。 -
load_weight 接口完成从文件加载模型到MLU上。
-
调用forward 进行推理。
-
调用RawResult对结果进行后处理。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
Modelzoo仓库:https://gitee.com/cambricon/modelzoo