1. 程式人生 > >Convolutional_Seq2Seq的環境搭建及訓練

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=<cuda install path> 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 dir> install

<install dir>最好選擇~/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 [email protected]@ mal species ?

SWhy is it rare to discover new marine [email protected]@ mal species ?

OWhy is it rare to discover new marine [email protected]@ 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

掃描下方二維碼可以訂閱哦!