PAI模型训练和评估

ODPS数据准备

首先可以下载 训练集评估集,其中 train.csv , dev.csv 是用\t 分隔的 .csv 文件。
我们定义这五个字段为 label,sid1,sid2,sent1,sent2
我们对各数据创建表,并将相应的数据上传到 ODPS 上:

  1. drop table if exists modelzoo_example_train;
  2. create table modelzoo_example_train(label STRING, sid1 STRING, sid2 STRING, sent1 STRING,sent2 STRING);
  3. tunnel upload train.tsv modelzoo_example_train -fd '\t';
  4. drop table if exists modelzoo_example_dev;
  5. create table modelzoo_example_dev(label STRING, sid1 STRING, sid2 STRING, sent1 STRING,sent2 STRING);
  6. tunnel upload dev.tsv modelzoo_example_dev -fd '\t';

模型训练

配置一些环境参数:

export train_table=odps://${project_name}/tables/your_train_table_name
export dev_table=odps://${project_name}/tables/your_dev_table_name
export saved_model_dir=oss://path/to/your_model/
export oss_bucket_name=your_bucket_name
export access_key_id=your_access_id
export access_key_secret=your_access_key_secret
export host=your_host

模型训练的PAI命令如下:

pai -name easytexminer
 -project algo_platform_dev
 -Dmode=train
 -DinputTable=${train_table},${dev_table}
 -DfirstSequence=sent1
 -DsecondSequence=sent2
 -DlabelName=label
 -DlabelEnumerateValues=0,1
 -DsequenceLength=64
 -DappName=text_classify
 -DcheckpointDir=${saved_model_dir}
 -DlearningRate=3e-5
 -DnumEpochs=3
 -DsaveCheckpointSteps=50
 -DbatchSize=32
 -DworkerCount=1
 -DworkerGPU=1
 -DuserDefinedParameters=' pretrain_model_name_or_path=bert-base-uncased'
 -Dbuckets="oss://${oss_bucket_name}?access_key_id=${access_key_id}&access_key_secret=${access_key_secret}&host=${host}";

也可以用pytorch180直接跑,示例如下:
可以本地把代码打包:

# tar your package to submit local code to odps
cur_path=/home/admin/workspace/EasyNLP/
cd ${cur_path}
rm -rf entryFile.tar.gz
tar -zcvf entryFile.tar.gz  ./easynlp/ ./examples/self_defined_examples/ ./requirements.txt

跑pytorch180:

command="
pai -name pytorch180
-project algo_public
-Dscript=file://${cur_path}entryFile.tar.gz
-DentryFile=examples/self_defined_examples/main.py
-Dcluster='{\"worker\":{\"gpu\":100,\"cpu\":100,\"memory\":10000}}'
-Dtables=${train_table},${dev_table}
-Dpython='3.6'
-DenableDockerFusion=false
-DuserDefinedParameters='--mode=train \
      --worker_gpu=1 \
      --input_schema=label:str:1,sid1:str:1,sid2:str:1,sent1:str:1,sent2:str:1 \
      --first_sequence=sent1 \
      --label_name=label \
      --label_enumerate_values=0,1 \
      --user_defined_parameters=\' pretrain_model_name_or_path=bert-small-uncased\' \
      --learning_rate=3e-5 \
      --random_seed=42 \
      --epoch_num=3  \
      --logging_steps=100 \
      --save_checkpoint_steps=50 \
      --sequence_length=128 \
      --micro_batch_size=32 \
      --app_name=text_classify \
      --checkpoint_dir=oss://easytransfer-new/104239/tmp_examples_2 \
      --buckets=\'oss://easytransfer-new?${id_and_secret_and_host}\'
'
"

echo "${command}"
${odpscmd} --config="${config}" -e "${command}"