我没用什么工具,自己迭代下来一套流程,至今还是很方便的。
想法超简单,就是给每个实验创建一个「箱子」,把所有相关的尽可能存进去,评估的时候再从箱子里把模型结构、文件拿出来,这样就能保证实验结果好找、好复现。
具体操作起来就会有很多箱子,存成这个样子:
我的主目录 /bert_base(每个结构上的大变动都单独变成大箱子) /2021080801(具体的实验,用日期+编号或者参数设置命名都可以) /202108080X /sentence_bert /20210809X
在启动每个小任务时,具体流程是:
做NLP的同学基本现在都是bert,直接把我的自动化脚本贴出来:
这个是train.sh,启动命令是 sh train.sh gpu_id modelname
gpu=$1 model_name=$2 pretrained_model=/home/pretrained_model data_dir=/home/data # 检查输入的实验模型名称是否为空 if [ ! "$model_name" ]; then echo "modelname is none" exit 1 fi # 创建实验文件夹 if [ ! -d "$model_name" ]; then mkdir $model_name fi # 检查实验是否已存在 if [ -n "`find $model_name -maxdepth 1 -name '*.bin'`" ]; then echo "model exists" exit 1 fi # 备份实验代码 cp main.py $model_name/ cp prepro.py $model_name/ cp model.py $model_name/ cp train.sh $model_name/ echo "use gpu: $gpu" export CUDA_VISIBLE_DEVICES=$gpu; nohup python -u main.py --model_type=bert --data_dir=$data_dir --input_train_file=train.tsv --input_eval_file=$data_dir/dev.txt --output_eval_file=$model_name/dev_eval.txt --model_name_or_path=$pretrained_model --task_name=cls --output_dir=$model_name --max_seq_length=20 --do_train --do_eval --evaluate_during_training --per_gpu_train_batch_size=512 --per_gpu_eval_batch_size=512 --learning_rate=2e-5 --weight_decay=0.01 --warmup_steps=10000 --num_train_epochs=2 --logging_steps=5000 --save_steps=5000 --ouput_path=$model_name --do_lower_case --fp16 > $model_name/log.txt 2>&1 & # 保存log echo "$model_name/log.txt"
这个是eval.sh,启动命令是 sh eval.sh gpu_id modelname
gpu=$1 model_name=$2 data_dir=/home/data # 检查输入的实验模型名称是否为空 if [ ! "$model_name" ]; then echo "modelname is none" exit 1 fi # 检查实验模型是否存在 if [ ! -d "$model_name" ]; then echo "$model_name do not exist" exit 1 fi # 把训练时的模型文件拷贝出来(防止现在代码有变动) cp $model_name/main.py ./ cp $model_name/prepro.py ./ cp $model_name/model.py ./ echo "use gpu: $gpu" export CUDA_VISIBLE_DEVICES=$gpu; python main.py --model_type=bert --do_eval --input_eval_file=$data_dir/test.tsv --output_eval_file=$model_name/test_eval.txt --data_dir=$data_dir --model_name_or_path=$model_name --task_name=cls --output_dir=$model_name --max_seq_length=20 --per_gpu_eval_batch_size=512 --ouput_path=$model_name --fp16
如果要更大批量的预测训练,再用shell把这些脚本包一下就好了,shell太香