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
掃描下方二維碼可以訂閱哦!