提交 d594e88b 编写于 作者: 0 0YuanZhang0 提交者: pkpk

fix_dmtk_cpu_and_readme (#3041)

上级 56055e7f
#!/bin/sh
export CE_MODE_X=ce
export FLAGS_eager_delete_tensor_gb=0.0
#!/bin/bash
export FLAGS_sync_nccl_allreduce=0
export FLAGS_eager_delete_tensor_gb=1.0
export CUDA_VISIBLE_DEVICES=0
pretrain_model_path="data/saved_models/matching_pretrained"
if [ ! -d ${pretrain_model_path} ]
then
mkdir ${pretrain_model_path}
fi
python -u main.py \
--do_train True \
--use_cuda \
--save_path model_files_tmp/matching_pretrained \
--train_path data/unlabel_data/train.ids \
--val_path data/unlabel_data/val.ids \
--print_step 3 \
--num_scan_data 3 | python _ce.py
--do_train=true \
--use_cuda=true \
--loss_type="CLS" \
--max_seq_len=50 \
--save_model_path="data/saved_models/matching_pretrained" \
--save_param="params" \
--training_file="data/input/data/unlabel_data/train.ids" \
--epoch=20 \
--print_step=1 \
--save_step=400 \
--batch_size=256 \
--hidden_size=256 \
--emb_size=256 \
--vocab_size=484016 \
--learning_rate=0.001 \
--sample_pro=0.1 \
--enable_ce="store_true" | python _ce.py
export CUDA_VISIBLE_DEVICES=0,1,2,3
save_model_path="data/saved_models/human_finetuned"
if [ ! -d ${save_model_path} ]
then
mkdir ${save_model_path}
fi
python -u main.py \
--do_train True \
--use_cuda \
--save_path model_files_tmp/matching_pretrained \
--train_path data/unlabel_data/train.ids \
--val_path data/unlabel_data/val.ids \
--print_step 3 \
--num_scan_data 3 | python _ce.py
--do_train=true \
--use_cuda=true \
--loss_type="L2" \
--max_seq_len=50 \
--init_from_pretrain_model="data/saved_models/matching_pretrained" \
--save_model_path="data/saved_models/human_finetuned" \
--save_param="params" \
--training_file="data/input/data/label_data/human/train.ids" \
--epoch=50 \
--print_step=1 \
--save_step=400 \
--batch_size=256 \
--hidden_size=256 \
--emb_size=256 \
--vocab_size=484016 \
--learning_rate=0.001 \
--sample_pro=0.1 \
--enable_ce="store_true" | python _ce.py
......@@ -7,7 +7,7 @@ save_steps: 10
num_scan_data: ""
word_emb_init: ""
init_model: ""
use_cuda: ""
use_cuda: True
batch_size: 256
hidden_size: 256
emb_size: 256
......@@ -26,4 +26,4 @@ vocab_path: ""
max_seq_len: 128
random_seed: 110
do_save_inference_model: False
enable_ce: "store_true"
enable_ce: ""
......@@ -16,9 +16,6 @@ fi
TRAIN_TYPE=$1
TASK_TYPE=$2
typeset -l TRAIN_TYPE
typeset -l TASK_TYPE
candi_train_type=("matching" "seq2seq_naive" "seq2seq_att" "keywords" "human")
candi_task_type=("train" "predict" "evaluate" "inference")
......@@ -43,6 +40,7 @@ PYTHON_PATH="python"
#train pretrain model
if [ ! "$CUDA_VISIBLE_DEVICES" ]
then
export CPU_NUM=1
use_cuda=false
else
use_cuda=true
......
#!/bin/bash
train_atis_slot(){
train_atis_slot(){
if [ ! -d "./data/saved_models/atis_slot" ]; then
mkdir "./data/saved_models/atis_slot"
fi
python -u train.py \
--task_name atis_slot \
--use_cuda true \
--do_train true \
--do_val true \
--do_test true \
--epoch 2 \
--batch_size 32 \
--data_dir ./data/atis/atis_slot \
--bert_config_path ./uncased_L-12_H-768_A-12/bert_config.json \
--vocab_path ./uncased_L-12_H-768_A-12/vocab.txt \
--init_pretraining_params ./uncased_L-12_H-768_A-12/params \
--checkpoints ./output/atis_slot \
--save_steps 100 \
--learning_rate 2e-5 \
--weight_decay 0.01 \
--max_seq_len 128 \
--skip_steps 10 \
--validation_steps 1000000 \
--num_iteration_per_drop_scope 10 \
--use_fp16 false \
--enable_ce
--task_name=atis_slot \
--use_cuda=true \
--do_train=true \
--in_tokens=false \
--epoch=2 \
--batch_size=32 \
--data_dir=./data/input/data/atis/atis_slot \
--bert_config_path=./data/pretrain_model/uncased_L-12_H-768_A-12/bert_config.json \
--vocab_path=./data/pretrain_model/uncased_L-12_H-768_A-12/vocab.txt \
--init_from_pretrain_model=./data/pretrain_model/uncased_L-12_H-768_A-12/params \
--save_model_path=./data/saved_models/atis_slot \
--save_param="params" \
--save_steps=100 \
--learning_rate=2e-5 \
--weight_decay=0.01 \
--max_seq_len=128 \
--print_steps=10 \
--use_fp16=false \
--enable_ce=store_true
}
train_mrda(){
train_atis_intent(){
if [ ! -d "./data/saved_models/atis_intent" ]; then
mkdir "./data/saved_models/atis_intent"
fi
python -u train.py \
--task_name mrda \
--use_cuda true \
--do_train true \
--do_val true \
--do_test true \
--epoch 2 \
--batch_size 4096 \
--data_dir ./data/mrda \
--bert_config_path ./uncased_L-12_H-768_A-12/bert_config.json \
--vocab_path ./uncased_L-12_H-768_A-12/vocab.txt \
--init_pretraining_params ./uncased_L-12_H-768_A-12/params \
--checkpoints ./output/mrda \
--save_steps 500 \
--learning_rate 2e-5 \
--weight_decay 0.01 \
--max_seq_len 128 \
--skip_steps 200 \
--validation_steps 1000000 \
--num_iteration_per_drop_scope 10 \
--use_fp16 false \
--enable_ce
--task_name=atis_intent \
--use_cuda=true \
--do_train=true \
--in_tokens=true \
--epoch=2 \
--batch_size=4096 \
--data_dir=./data/input/data/atis/atis_intent \
--bert_config_path=./data/pretrain_model/uncased_L-12_H-768_A-12/bert_config.json \
--vocab_path=./data/pretrain_model/uncased_L-12_H-768_A-12/vocab.txt \
--init_from_pretrain_model=./data/pretrain_model/uncased_L-12_H-768_A-12/params \
--save_model_path=./data/saved_models/atis_intent \
--save_param="params" \
--save_steps=100 \
--learning_rate=2e-5 \
--weight_decay=0.01 \
--max_seq_len=128 \
--print_steps=10 \
--use_fp16=false \
--enable_ce=store_true
}
# FIXME(zjl): this model would fail when GC is enabled,
......@@ -63,5 +65,4 @@ sleep 20
cudaid=${single:=0}
export CUDA_VISIBLE_DEVICES=$cudaid
train_atis_slot | python _ce.py
train_atis_intent | python _ce.py
......@@ -20,7 +20,7 @@
- cudnn >= 7.0
- PaddlePaddle >= 1.3.1,请参考[安装指南](http://www.paddlepaddle.org/#quick-start)进行安装, 由于模块内模型基于bert做finetuning, 训练速度较慢, 建议用户安装GPU版本PaddlePaddle进行训练。
   注意:使用Windows GPU环境的用户,需要将示例代码中的[fluid.ParallelExecutor](http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#parallelexecutor)替换为[fluid.Executor](http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#executor)
  注意:使用Windows GPU环境的用户,需要将示例代码中的[fluid.ParallelExecutor](http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#parallelexecutor)替换为[fluid.Executor](http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#executor)
####   b、安装代码
    克隆代码库到本地
......@@ -31,7 +31,7 @@ cd models/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding
```
### 任务简介
     本模块内共包含6个任务,内容如下:
    本模块内共包含6个任务,内容如下:
```
udc: 使用Ubuntu Corpus V1公开数据集,实现对话匹配任务;
......@@ -41,6 +41,7 @@ atis_intent: 使用微软提供的公开数据集(Airline Travel Information Sys
mrda: 使用公开数据集Meeting Recorder Dialogue Act,实现DA识别任务;
swda:使用公开数据集Switchboard Dialogue Act Corpus,实现DA识别任务;
```
### 数据准备
    数据集说明:
......@@ -52,44 +53,51 @@ MRDA: Meeting Recorder Dialogue Act;
SWDA:Switchboard Dialogue Act Corpus;
```
     数据集、相关模型下载:
    数据集、相关模型下载:
```
cd dgu && sh prepare_data_and_model.sh
cd dgu && bash prepare_data_and_model.sh
```
     下载的数据集中已提供了训练集,测试集和验证集,用户如果需要重新生成某任务数据集的训练数据,可执行:
    下载的数据集中已提供了训练集,测试集和验证集,用户如果需要重新生成某任务数据集的训练数据,可执行:
```
cd dgu/scripts && sh run_build_data.sh task_name
cd dgu/scripts && bash run_build_data.sh task_name
参数说明:
task_name: udc, swda, mrda, atis, dstc2, 选择5个数据集选项中用户需要生成的数据名
```
### 单机训练
####      方式一: 推荐直接使用模块内脚本训练
####     方式一: 推荐直接使用模块内脚本训练
```
sh run.sh task_name task_type
bash run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
训练示例: sh run.sh atis_intent train
训练示例: bash run.sh atis_intent train
```
     方式一如果为CPU训练:
    方式一如果为CPU训练:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
     方式一如果为GPU训练:
    方式一如果为GPU训练:
```
请将run.sh内参数设置为:
1、如果为单卡训练(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
2、如果为多卡训练(用户指定空闲的多张卡):
export CUDA_VISIBLE_DEVICES=0,1,2,3
```
####      方式二: 执行训练相关的代码:
####     方式二: 执行训练相关的代码:
```
export FLAGS_sync_nccl_allreduce=0
......@@ -109,6 +117,10 @@ fi
TASK_NAME="atis_intent" #指定训练的任务名称
BERT_BASE_PATH="data/pretrain_model/uncased_L-12_H-768_A-12"
if [ ! -d "./data/saved_models/${TASK_NAME}" ]; then
mkdir "./data/saved_models/${TASK_NAME}"
fi
python -u main.py \
--task_name=${TASK_NAME} \
--use_cuda=${use_cuda} \
......@@ -130,32 +142,40 @@ python -u main.py \
--print_steps=10 \
--use_fp16 false
```
注:采用方式二时,模型训练过程可参考run.sh内相关任务的参数设置
### 模型预测
####      方式一: 推荐直接使用模块内脚本预测
####     方式一: 推荐直接使用模块内脚本预测
```
sh run.sh task_name task_type
bash run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
预测示例: sh run.sh atis_intent predict
预测示例: bash run.sh atis_intent predict
```
     方式一如果为CPU预测:
    方式一如果为CPU预测:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
     方式一如果为GPU预测:
    方式一如果为GPU预测:
```
请将run.sh内参数设置为:
支持单卡预测(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
```
注:预测时,如采用方式一,用户可通过修改run.sh中init_from_params参数来指定自己训练好的需要预测的模型,目前代码中默认为加载官方已经训练好的模型;
####      方式二: 执行预测相关的代码:
####     方式二: 执行预测相关的代码:
```
export FLAGS_sync_nccl_allreduce=0
export FLAGS_eager_delete_tensor_gb=1 #开启显存优化
......@@ -191,7 +211,8 @@ python -u main.py \
注:采用方式二时,模型预测过程可参考run.sh内具体任务的参数设置
### 模型评估
     模块中6个任务,各任务支持计算的评估指标内容如下:
    模块中6个任务,各任务支持计算的评估指标内容如下:
```
udc: 使用R1@10、R2@10、R5@10三个指标评估匹配任务的效果;
atis_slot: 使用F1指标来评估序列标注任务;
......@@ -200,7 +221,8 @@ atis_intent: 使用acc指标来评估分类结果;
mrda: 使用acc指标来评估DA任务分类结果;
swda:使用acc指标来评估DA任务分类结果;
```
     效果上,6个任务公开数据集评测效果如下表所示:
    效果上,6个任务公开数据集评测效果如下表所示:
| task_name | udc | udc | udc | atis_slot | dstc2 | atis_intent | swda | mrda |
| :------ | :------ | :------ | :------ | :------| :------ | :------ | :------ | :------ |
......@@ -211,19 +233,20 @@ swda:使用acc指标来评估DA任务分类结果;
| SOTA | 76.70% | 87.40% | 96.90% | 96.89% | 74.50% | 98.32% | 81.30% | 91.70% |
| DGU | 82.03% | 90.59% | 97.73% | 97.14% | 91.23% | 97.76% | 80.37% | 91.53% |
####      方式一: 推荐直接使用模块内脚本评估
####     方式一: 推荐直接使用模块内脚本评估
```
sh run.sh task_name task_type
bash run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
评估示例: sh run.sh atis_intent evaluate
评估示例: bash run.sh atis_intent evaluate
```
注:评估计算ground_truth和predict_label之间的打分,默认CPU计算即可;
####      方式二: 执行评估相关的代码:
####     方式二: 执行评估相关的代码:
```
TASK_NAME="atis_intent" #指定预测的任务名称
......@@ -237,28 +260,34 @@ python -u main.py \
```
### 模型推断
####      方式一: 推荐直接使用模块内脚本保存inference model
####     方式一: 推荐直接使用模块内脚本保存inference model
```
sh run.sh task_name task_type
bash run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
保存模型示例: sh run.sh atis_intent inference
保存模型示例: bash run.sh atis_intent inference
```
     方式一如果为CPU执行inference model过程:
    方式一如果为CPU执行inference model过程:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
     方式一如果为GPU执行inference model过程:
    方式一如果为GPU执行inference model过程:
```
请将run.sh内参数设置为:
1、单卡模型推断(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
```
####      方式二: 执行inference model相关的代码:
####     方式二: 执行inference model相关的代码:
```
TASK_NAME="atis_intent" #指定预测的任务名称
BERT_BASE_PATH="./data/pretrain_model/uncased_L-12_H-768_A-12"
......@@ -282,7 +311,7 @@ python -u main.py \
```
### 预训练模型
     支持PaddlePaddle官方提供的BERT及ERNIE相关模型作为预训练模型
    支持PaddlePaddle官方提供的BERT及ERNIE相关模型作为预训练模型
| Model | Layers | Hidden size | Heads |Parameters |
| :------| :------: | :------: |:------: |:------: |
......@@ -294,9 +323,9 @@ python -u main.py \
### 服务部署
     模块内提供已训练好6个对话任务的inference_model模型,用户可根据自身业务情况进行下载使用。
    模块内提供已训练好6个对话任务的inference_model模型,用户可根据自身业务情况进行下载使用。
#### 服务器部署
     请参考PaddlePaddle官方提供的[服务器端部署](https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/advanced_usage/deploy/inference/index_cn.html)文档进行部署上线。
    请参考PaddlePaddle官方提供的[服务器端部署](https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/advanced_usage/deploy/inference/index_cn.html)文档进行部署上线。
## 3、进阶使用
......@@ -361,6 +390,7 @@ python -u main.py \
## 作者
zhangxiyuan01@baidu.com
zhouxiangyang@baidu.com
## 如何贡献代码
......
......@@ -27,4 +27,4 @@ use_cuda: True
task_name: ""
in_tokens: False
do_save_inference_model: False
enable_ce: "store_true"
enable_ce: ""
......@@ -6,6 +6,7 @@ export FLAGS_eager_delete_tensor_gb=1
export CUDA_VISIBLE_DEVICES=0
if [ ! "$CUDA_VISIBLE_DEVICES" ]
then
export CPU_NUM=1
use_cuda=false
else
use_cuda=true
......@@ -14,9 +15,6 @@ fi
TASK_NAME=$1
TASK_TYPE=$2
typeset -l TASK_NAME
typeset -l TASK_TYPE
BERT_BASE_PATH="./data/pretrain_model/uncased_L-12_H-768_A-12"
INPUT_PATH="./data/input/data/${TASK_NAME}"
SAVE_MODEL_PATH="./data/saved_models/${TASK_NAME}"
......@@ -64,7 +62,7 @@ then
print_steps=10
batch_size=4096
in_tokens=true
epoch=1
epoch=20
learning_rate=2e-5
INPUT_PATH="./data/input/data/atis/${TASK_NAME}"
elif [ "${TASK_NAME}" = "atis_slot" ]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册