XLM使用示例--Supervised NMT

应用facebook 的XLM做机器翻译的示例,此为过程记录:

1.clone XLM源码

  •  git clone https://github.com/facebookresearch/XLM.git
    

2. 处理数据数据

  • cd 到XLM目录,查看处理数据源码文件,梳理语料处理步骤,由于自有语料都是双边语料,所以直接看get-data-para.sh文件,源码提供双边语料下载和处理,由于下载较慢,可跳过下载步骤,直接将自有的双边语料处理成相应格式、对应文件名放入data/para文件夹进行后续处理步骤
  • 因采用预训练模型,所以先加载vocab及BPE的code文件, 新版本把BPE和binarize步骤从get-data-para.sh文件中去掉了,这里可以参照get-data-nmt.sh文件处理
  •  wget https://dl.fbaipublicfiles.com/XLM/codes_enfr
     wget https://dl.fbaipublicfiles.com/XLM/vocab_enfr
    
  • 这里自己重行写了平行语料处理脚本,只需要tokenize、BPE、Binarize这几个步骤就可以

问题1:先克隆到windows下再上传linux服务器,执行shell脚本会报权限错误,chmod +x shell脚本后会提示脚本内‘\r’问题,是windows上的换行符和linux上不一致,可以安装转换插件将换行符转化,但没再继续解决,直接在linux上克隆下来XLM源码,就不会发生上述问题。
问题2:重写处理脚本是遇到cat > 执行完处理步骤输出到原文件(名称同处理前相同)把文件内容清空,但没有写入到文件中的问题,重新命名输出文件才解决
问题3:TypeError: Class advice impossible in Python3. Use the @implementer class decorator instead. 找到/***/site-packages/apex/interfaces.py文件将implements改为implementer,包括import中的

(未完待续…)
数据准备好了(过程很艰辛,处理过程中断了一次,重新启动数据没有续接上,导致出来的平行语料数量不一致,检查不仔细,结果一层层回溯检查,重新生成文件,浪费不少时间,直接从源头向下检查就好了。)
模型启动命令(多GPU、平行语料):

import NGPU=2
CUDA_VISIBLE_DEVICES=‘6,7’ python -m torch.distributed.launch --nproc_per_node=$NGPU train.py --exp_name supMT_enfr --dump_path ./dumped_enfr/ --reload_model ‘mlm_tlm_xnli15_1024.pth,mlm_tlm_xnli15_1024.pth’ --data_path ./data/processed/en-fr/ --lgs ‘ar-bg-de-el-en-es-fr-hi-ru-sw-th-tr-ur-vi-zh’ --mt_steps ‘en-fr’ --bt_steps ‘en-fr-en,fr-en-fr’ --encoder_only false --emb_dim 1024 --n_layers 12 --n_heads 8 --dropout 0.1 --attention_dropout 0.1 --gelu_activation true --tokens_per_batch 400 --batch_size 16 --bptt 256 --max_vocab=95000 --optimizer adam_inverse_sqrt,beta1=0.9,beta2=0.98,lr=0.0001 --epoch_size 114620466 --eval_bleu true --stopping_criterion ‘valid_en-fr_mt_bleu,10’ --validation_metrics ‘valid_en-fr_mt_bleu’

问题1:结果总是超出显存,不断调小tokens_per_batch 参数,从2000调整到400依然不行
问题2:RuntimeError: cuda runtime error (38) : no CUDA-capable device is detected at /pytorch/aten/src/THC/THCGeneral.cpp:50,
CUDA_VISIBLE_DEVICES=‘6,7’,加上这个语句就会报上面错误CUDA_VISIBLE_DEVICES=6,7,去掉引号就可以了,
这次训练不知道怎么了,参数上加引号的,都把引号算作参数中的字符从而出现报错,所以吧命令中的引号都去掉了,才顺利执行
超出显存这个问题是绕不过了
《未完待续…》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值