Convolutional_Seq2Seq的环境搭建及训练

 上次分享了FaceBook最近提出的Convolution Seq2Seq模型的一些理论知识,今天跟大家分享一下实际操作经验,

    主要包括三个方面内容:1、安装Torch平台,2、配置fairseq环境,3、模型测试与训练。

    实验支持:Mac Os/Ubuntu 12+/Centos 7系统都可以,最好拥有GPU支持,安装好CUDA。

    台主的实验环境:Centos 7 + Tesla M40 GPU + CUDA_8.0


1、安装Torch平台

    FaceBook开源的模型是基于Torch平台,采用Lua实现的,估计是考虑代码运行效率问题吧。因此,需要安装最新的Torch 7平台。

    如果已经安装了Torch,可以使用:luarocks install torch升级至最新版本,主要是后面安装最新的nn库需要。

    Torch具体安装参考官网Tutorial:http://torch.ch/docs/getting-started.html#_,下面简单罗列一下:


#下载并安装

git clone https://github.com/torch/distro.git ~/torch --recursive

cd ~/torch; bash install-deps;

./install.sh


#配置环境变量

# On Linux with bash

source ~/.bashrc

# On Linux with zsh

source ~/.zshrc

# On OSX or in Linux with none of the above.

source ~/.profile


#测试是否安装正确

th> torch.Tensor{1,2,3}

 1

 2

 3

#执行正确,则安装成功

#torch的所有依赖都在~/torch文件下,如果想要删除torch执行

rm -rf ~/torch


#安装torch中的包

$ luarocks install nn

2、配置fairseq环境

    运行fairseq模型需要安装 NVIDIA GPU和NCCL。

    1)、安装NCCL,github安装地址:https://github.com/NVIDIA/nccl

可以把NCCL的包拷贝到torch包下面,

$ git clone https://github.com/NVIDIA/nccl.git


#建库并测试

$ cd nccl

$ make CUDA_HOME= test

注意:遇到nccl安装失败


Compiling src/libwrap.cu                      > /search/odin/data/liuqi/fairseq/nccl/build/obj/libwrap.o
nvcc fatal   : Value 'gnu++0x' is not defined for option 'std'
make: *** [/search/odin/data/liuqi/fairseq/nccl/build/obj/libwrap.o] \u9519\u8bef 1

参考解决:https://github.com/NVIDIA/nccl/issues/60



$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./build/lib

$ ./build/test/single/all_reduce_test

Error: must specify at least data size in bytes!


$ ./build/test/single/all_reduce_test 10000000


# Using devices

#   Device  0 ->  0 [0x0a] GeForce GTX TITAN X

#   Device  1 ->  1 [0x09] GeForce GTX TITAN X

#   Device  2 ->  2 [0x06] GeForce GTX TITAN X

#   Device  3 ->  3 [0x05] GeForce GTX TITAN X


#安装NCCL

$ make PREFIX= install

最好选择~/torch,安装在其他地方,在配置fairseq时,似乎会出现THTBC版本不匹配问题。

#添加lib路径到LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:~/torch/nccl/lib


    2)、安装最新版的nn:

luarocks install nn


可能报错:Error installing nn

原因是Torch 版本太老,升级torch:

luarocks install torch

安装nn:luarocks install nn

okay!



    3)、配置fairseq环境:

luarocks make rocks/fairseq-scm-1.rockspec


注意CPU安装下面版本:luarocks make rocks/fairseq-cpu-scm-1.rockspec

可能会出现问题:Error generating /tmp/luarocks_tbc-scm-1-3148/TemporalConvolutionTBC/build/lib/CMakeFiles/THTBC.dir//./THTBC_generated_init_cuda.cu.o

原因是THTBC冲突,fairseq中Mac Os的依赖,Linux中不存在,参考解决:http://blog.csdn.net/lqfarmer/article/details/71603425

3、模型测试与训练

     1)、拷贝训练好的模型:wmt14.en-fr.fconv-cuda/,测试

#GPU版本:

$ curl https://s3.amazonaws.com/fairseq/models/wmt14.en-fr.fconv-cuda.tar.bz2 | tar xvjf -

#CPU版本:Alternatively, use a CPU-based model:

$ curl https://s3.amazonaws.com/fairseq/models/wmt14.en-fr.fconv-float.tar.bz2 | tar xvjf -

#运行模型,查看结果:

$ fairseq generate-lines -path wmt14.en-fr.fconv-cuda/model.th7 -sourcedict wmt14.en-fr.fconv-cuda/dict.en.th7 \

    -targetdict wmt14.en-fr.fconv-cuda/dict.fr.th7 -beam 5

| [target] Dictionary: 44666 types

| [source] Dictionary: 44409 types

> Why is it rare to discover new marine mam@@ mal species ?

SWhy is it rare to discover new marine mam@@ mal species ?

OWhy is it rare to discover new marine mam@@ mal species ?

H-0.068684287369251Pourquoi est-il rare de découvrir de nouvelles espèces de mammifères marins ?

A1 1 4 4 6 6 7 11 9 9 9 12 13


    2)、训练自己的模型:

#准备数据:

$ cd data/

$ bash prepare-iwslt14.sh

$ cd ..

$ TEXT=data/iwslt14.tokenized.de-en

$ fairseq preprocess -sourcelang de -targetlang en \

 -trainpref $TEXT/train -validpref $TEXT/valid -testpref $TEXT/test \

 -thresholdsrc 3 -thresholdtgt 3 -destdir data-bin/iwslt14.tokenized.de-en

  

#训练模型,facebook放出了多个版本的seq2seq模型,并给出了例子:

# Standard bi-directional LSTM model

$ mkdir -p trainings/blstm

$ fairseq train -sourcelang de -targetlang en -datadir data-bin/iwslt14.tokenized.de-en \

 -model blstm -nhid 512 -dropout 0.2 -dropout_hid 0 -optim adam -lr 0.0003125 -savedir trainings/blstm


# Fully convolutional sequence-to-sequence model

$ mkdir -p trainings/fconv

$ fairseq train -sourcelang de -targetlang en -datadir data-bin/iwslt14.tokenized.de-en \

 -model fconv -nenclayer 4 -nlayer 3 -dropout 0.2 -optim nag -lr 0.25 -clip 0.1 \

 -momentum 0.99 -timeavg -bptt 0 -savedir trainings/fconv


# Convolutional encoder, LSTM decoder

$ mkdir -p trainings/convenc

$ fairseq train -sourcelang de -targetlang en -datadir data-bin/iwslt14.tokenized.de-en \

 -model conv -nenclayer 6 -dropout 0.2 -dropout_hid 0 -savedir trainings/convenc

 

执行程序过程中,代码会自动查找可以使用的GPU,如果不想占用太多GPU,可以使用:CUDA_VISIBLE_DEVICES=”GPU ID”指定想要使用的GPU,参考http://acceleware.com/blog/cudavisibledevices-masking-gpus。

F


    基本环境搭建和初步的使用到这里就差不多了,对网络结构感兴趣的朋友可以去钻研下源码,欢迎互相交流。

    更多的使用方法,参考FaceBook github地址:https://github.com/facebookresearch/fairseq




扫描下方二维码可以订阅哦!



你可能感兴趣的:(深度学习,深度学习实战,深度学习模型汇总,深度学习与机器翻译)