Commit 2ccd91d0 authored by liangjing's avatar liangjing
Browse files

update

parent 86602640
# BERT(Bidirectional Encoder Representations from Transformers) # BERT(Bidirectional Encoder Representations from Transformers)
## 模型介绍 ## 论文
一种基于Transformer架构的预训练语言模型,由Google在2018年提出。BERT模型通过大规模的自监督预训练,学习了丰富的语言表示,可以应用于各种自然语言处理任务。
BERT模型的核心是Transformer编码器,它可以对输入的文本数据进行编码,并生成对应的上下文表示。BERT模型使用双向编码器,即同时考虑输入序列的左侧和右侧上下文,可以捕捉更全面的语言表示。在预训练阶段,BERT模型使用了两种不同的预训练任务:Masked Language Model(MLM)和Next Sentence Prediction(NSP)。 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
在MLM任务中,BERT模型会随机将一些单词替换成“[MASK]”标记,然后尝试预测这些标记所对应的单词。在NSP任务中,BERT模型需要判断两个句子是否是连续的。通过这两种任务的预训练,BERT模型可以学习到丰富的语言表示,从而可以应用于各种自然语言处理任务。 * https://arxiv.org/abs/1810.04805
## 模型结构 ## 模型结构
BERT-large是BERT模型的一个更大、更复杂的版本。与BERT-base相比,BERT-large具有更多的层数、更多的参数和更深的网络结构,可以学习更深层次和更复杂的语言表示 BERT模型的核心是Transformer编码器,BERT-large是BERT模型的一个更大、更复杂的版本,其包含24个Transformer编码器,每个编码器有1024个隐藏层,总共包含340M个参数。在预训练阶段,BERT-large使用更多的未标记的文本数据进行预训练,并使用Masked Language Model(MLM)和Next Sentence Prediction(NSP)两个任务来优化模型
BERT-large包含24个Transformer编码器,每个编码器有1024个隐藏层,总共包含340M个参数。在预训练阶段,BERT-large使用更多的未标记的文本数据进行预训练,并使用Masked Language Model(MLM)和Next Sentence Prediction(NSP)两个任务来优化模型。BERT-large的预训练阶段比BERT-base更复杂,并且需要更长的时间来训练。 下图为BERT的模型结构示意图
![figure1](figure1.png)
## 算法原理
BERT用大量的无监督文本通过自监督训练的方式训练,把文本中包含的语言知识(包括:词法、语法、语义等特征)以参数的形式编码到Transformer-encoder layer中,即用了Masked LM及Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
## 目标精度 ## 目标精度
...@@ -22,75 +27,84 @@ BERT-large包含24个Transformer编码器,每个编码器有1024个隐藏层 ...@@ -22,75 +27,84 @@ BERT-large包含24个Transformer编码器,每个编码器有1024个隐藏层
原始代码位置: 原始代码位置:
* https://github.com/mlcommons/training_results_v2.1/tree/main/Baidu/benchmarks/bert/implementations/8_node_64_A100_PaddlePaddle * https://github.com/mlcommons/training_results_v2.1/tree/main/Baidu/benchmarks/bert/implementations/8_node_64_A100_PaddlePaddle
## 环境配置
提供[光源](https://www.sourcefind.cn/#/service-details)拉取的训练的docker镜像:
docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:mlperf_paddle_bert_mpirun
# <Image ID>用上面拉取docker镜像的ID替换
# <Host Path>主机端路径
# <Container Path>容器映射路径
docker run -it --name mlperf_bert --shm-size=32G --device=/dev/kfd --device=/dev/dri/ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v <Host Path>:<Container Path> <Image ID> /bin/bash
镜像版本依赖:
* DTK驱动:dtk21.04
* python: python3.6.8
测试目录:
```
/root/mlperf-paddle_bert.20220919-training-bert/training/bert
```
## 预训练模型
/workspace/bert_data文件夹存放预训练模型如下:
├── /workpalce/bert_data/phase1
└── └──model.ckpt-28252.tf_pickled #预训练模型
## 数据集 ## 数据集
模型训练的数据集来自Wikipedia 2020/01/01,即一种常用的自然语言处理数据集,它包含了维基百科上的文章和对应的摘要(即第一段内容),可用于各种文本相关的任务,例如文本分类、文本摘要、命名实体识别等。 模型训练的数据集来自Wikipedia 2020/01/01,即一种常用的自然语言处理数据集,它包含了维基百科上的文章和对应的摘要(即第一段内容),可用于各种文本相关的任务,例如文本分类、文本摘要、命名实体识别等。
下载+预处理数据可按照下述进行,最终获得的输入数据如下图所示: 下载+预处理数据可按照下述进行,最终获得的输入数据如下图所示:
./input_preprocessing/prepare_data.sh --outputdir /workspace/bert_data ./input_preprocessing/prepare_data.sh --outputdir /workspace/bert_data
python3 models/load_tf_checkpoint.py \
/workspace/bert_data/phase1/model.ckpt-28252 \
/workspace/bert_data/phase1/model.ckpt-28252.tf_pickled
![dataset](dataset.png) ![dataset](dataset.png)
## 训练 对于预训练模型需要基于已下载数据进行如下处理:
### 测试规模 python3 models/load_tf_checkpoint.py \
/workspace/bert_data/phase1/model.ckpt-28252 \
单机8卡进行性能&&精度测试 /workspace/bert_data/phase1/model.ckpt-28252.tf_pickled
### 环境配置
提供[光源](https://www.sourcefind.cn/#/service-details)拉取的训练的docker镜像:
docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:mlperf_paddle_bert_mpirun
python依赖安装(如已经拉取镜像可忽略下述依赖安装步骤):
pip3 install -r requirement.txt
### 预训练模型 可得到/workspace/bert_data文件夹存放预训练模型如下:
/workspace/bert_data文件夹存放预训练模型如下:
├── /workpalce/bert_data/phase1 ├── /workpalce/bert_data/phase1
└── └──model.ckpt-28252.tf_pickled #预训练模型 └── └──model.ckpt-28252.tf_pickled #预训练模型
### 训练 ## 训练
训练命令:
### 单机多卡
单机8卡进行性能&&精度测试
bash run_8gpu.sh bash run_8gpu.sh
#不同环境的配置及数据的存放路径会有不同,请根据实际情况进行调整run_benchmark_8gpu.sh脚本中的如下内容: #不同环境的配置及数据的存放路径会有不同,请根据实际情况进行调整run_benchmark_8gpu.sh脚本中的如下内容:
BASE_DATA_DIR=${BASE_DATA_DIR:-"/public/DL_DATA/mlperf/bert"} //调整为具体的数据的路径 BASE_DATA_DIR=${BASE_DATA_DIR:-"/public/DL_DATA/mlperf/bert"} //调整为具体的数据的路径
### 测试规模 ### result
线上资源进行双节点八卡规模性能&&精度测试
### 环境配置 采用上述输入数据,加速卡采用Z100L * 8,可最终达到官方收敛要求,即达到目标精度0.72 Mask-LM accuracy;
需要采用提供的环境,已经打包,可通过网盘下载,下载链接如下:
链接:https://pan.baidu.com/s/1YI4SPDEzb4F5_oJaEuhWEw?pwd=a9xx | 卡数 | 类型 | 进程数 | 达到精度 |
提取码:a9xx | ---- | -------- | ------ | --------------------- |
| 8 | 混合精度 | 8 | 0.72 Mask-LM accuracy |
### 预训练模型 ## 应用场景
/workspace/bert_data文件夹存放预训练模型如下:
├── /workpalce/bert_data/phase1 ### 算法类别
└── └──model.ckpt-28252.tf_pickled #预训练模型
### 训练 自然语言处理
训练命令:
step1. 将获取的环境tar包解压至适宜位置,并按照位置信息&&平台信息对env.sh进行修改 ### 热点应用行业
step2. 依照平台信息对run_sbatch.sh作业提交脚本进行修改
step3. 执行命令 sbatch run_sbatch.sh
#不同环境的配置及数据的存放路径会有不同,请根据实际情况进行调整run_benchmark.sh脚本中的如下内容:
BASE_DATA_DIR=${BASE_DATA_DIR:-"/public/DL_DATA/mlperf/bert"} //调整为具体的数据的路径
## 测试结果 互联网、广告
采用上述输入数据,加速卡采用Z100L * 8 && 线上Z100 * 8,可最终达到官方收敛要求;
## 源码仓库及问题反馈 ## 源码仓库及问题反馈
* https://developer.hpccube.com/codes/modelzoo/mlperf_bert-large * https://developer.hpccube.com/codes/modelzoo/mlperf_bert-large
## 参考 ## 参考
......
# 模型编码
modelCode=115
# 模型名称 # 模型名称
modelName=MLPerf_BERT_Paddle modelName=mlperf_bert_paddle
# 模型描述 # 模型描述
modelDescription=BERT是一种基于Transformer架构的预训练语言模型 modelDescription=BERT是一种基于Transformer架构的预训练语言模型
# 应用场景(多个标签以英文逗号分割) # 应用场景
appScenario=训练,NLP appScenario=训练,NLP
# 框架类型(多个标签以英文逗号分割) # 框架类型
frameType=Paddle frameType=Paddle
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment