1. 程式人生 > >Ubuntu 16.04.04 + Python3.6 + Anaconda + CUDA 9.1 + PyTorch + OpenNMT搭建機器翻譯模型

Ubuntu 16.04.04 + Python3.6 + Anaconda + CUDA 9.1 + PyTorch + OpenNMT搭建機器翻譯模型

最近在學習一些一起NLP方面的東西,首先當然要把環境搭起來了,踩坑無數,經過三天的不懈奮戰,終於把環境搭起來了,網上這方面的資料都比較散亂,很多都是很舊的,為了跟上AI浪潮,特此寫一篇詳細的部落格。如果讀者按照此方法來操作遇到什麼問題,可以在評論區留言,博主一定在第一時間答覆。

      各元件版本:

        -    Ubuntu 16.04.04 Desktop

        -    Anaconda 3-5.1.0

        -    GeoForce 1070 (ZOTAC)

        -    CUDA 9.1

        -    Python 3.6

        -    PyTorch 

        -    OpenNMT-py

  1. 關於系統,最初我掛PT種子的時候不小心手賤直接把Ubuntu系統給刪掉了,我說我硬碟500G的容量哪去了,哪去了,結果死活打不開系統,我也是服了,剛開始重灌的時候用的是之前的版本,Ubuntu 16.04.01 Desktop,但是插上獨顯之後裝好的系統吸納卡驅動有問題,解析度感人,網絡卡驅動也有問題,連不上網,道行不夠,索性換了最新的 Ubuntu 16.04.04,本著更新修復BUG的想法,沒想到直接就裝好了,特別輕鬆。所以我這的配置用的全部是都是最新版(強迫症)。

 2.  安裝Python 3.6

$ sudo add-apt-repository ppa:jonathonf/python-3.6
$ sudo apt-get update
$ sudo apt-get install python3.6

這樣系統中就有 Python 2.7、Python 3.5、Python3.6同時存在,莫方,後面用Anaconda時非常方便,可以定義多個環境。現在講Python 3.6設為預設Python3環境

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
$ sudo update-alternatives --config python3
$ python3 -V 

發現現在是Python3.6的環境就沒有問題,但是這樣會導致終端打不開,ctrl + alt + t快捷鍵失靈,用如下命令解決

$ python3 -V 

這是 ctrl + alt + t不能開啟終端了,甚至用圖示的方法也不能開啟,解決方案如下

$ cd /usr/lib/python3/dist-packages/gi/ 
$ sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so 
$ sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so  

安裝如下依賴,否則在後面的Anaconda中會報No Module named gdbm:

$ sudo apt-get install python3.6-gdbm

至此,Python 3.6算是裝好了。

2.安裝Anaconda

下載安裝包run檔案,我是在北郵人上下載的,當然也可以去官網下載:

$ cd ~/Download
$ bash Anaconda3-5.1.0-Linux-x86_64.sh 

中途會讓你選擇安裝路徑,直接yes選擇預設路徑即可,後面的安裝也類似,中途會有安裝VS Code的選項,根據你的需求選擇,我反正是選了yes:

$ source ~/.bashrc

給conda換源以加速其下載包的速度:

$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
$ conda config --set show_channel_urls yes

3.安裝Nvidia-driver

這部分本來是最坑的了,但是踩了這麼多的坑,相信按照如下方式來,沒什麼問題,親測兩次:

3.1 解除安裝舊驅動(就算沒有驅動也可以執行,如果有舊驅動一定要執行):

$ sudo apt-get autoremove --purge nvidia-*

3.2 禁用nouveau,新增黑名單

$ cd /lib/modules/4.13.0-38-generic/kernel/drivers/gpu/drm/nouveau
$ sudo cp nouveau.ko nouveau.ko.org
$ cd /etc/modprobe.d
$ sudo vim blacklist-nouveau.conf

沒有 vim 的話需要安裝,在檔案中寫入:

 blacklist nouveau
 options nouveau modeset=0
:wq    # 儲存

3.2.3 重新生成 kernel initramfs:

$ sudo update-initramfs -u
$ sudo reboot

3.3 關閉x-server

上面重啟之後,解析度會變得感人,不用急,馬上就可以使用nvidia的驅動了,先按ctrl + alt + f1進入text mode:

$ sudo service lightdm stop 或者  sudo lightdm stop  
$ sudo init 3

3.4 安裝nvidia驅動

$ cd ~/Downloads
$ sudo chmod a+x NVIDIA-Linux-x86_64-390.48.run
$ sudo sh ./NVIDIA-Linux-x86_64-390.48.run -no-x-check -no-nouveau-check -no-opengl-files
$ sudo reboot

這是在進入系統就會發現解析度正常了,ctrl + alt + t 啟動終端:

$ nvidia-smi

出現如下介面就是驅動安裝成功了!

4 安裝CUDA9.1

下載連結:

$ sudo chmod a+x cuda
$ sudo sh cuda_9.1.85_387.26_linux.run

中間會有一些選項,因為driver我們已經裝過了,所以選擇n就可以,我沒有試過直接在這裡驅動和cuda一步到位,如果要這麼裝,應該也不能少上面裝driver的步驟,我的選擇如下:

匯入環境變數:

$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc
$ nvcc -V

能看見版本資訊,就說嘛安裝成功了。

CUDA測試:

$ cd NVIDIA_CUDA-9.1_Samples
$ sudo make   # 等十分鐘左右
$ cd bin/x86_64/linux/release
$ sudo ./deviceQuery

如上Result為PASS。

5. 安裝PyTorch

如果上面安裝都沒有問題的話,這裡只需要一條命令即可,速度慢可以檢查上面Anaconda換源有沒有問題:

$ conda install pytorch torchvision cuda91 -c pytorch

6. 安裝OpenNMT

$ cd ~/Downloads
$ git clone https://github.com/OpenNMT/OpenNMT-py.git

裝好以後執行:

pip3 install -r requirements.txt

準備資料:

python preprocess.py -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo

訓練模型:

$ python train.py -data data/demo -save_model demo-model -gpuid 0

此時可以通過nvidia-smi監控到gpu已經跑起來了

至此,整個安裝部署過程已經全部完後了,有問題的讀者可以留言,最後happy一下,看看訓練出來的翻譯效果,由於語料庫太小,模型的翻譯效果自然不忍直視。

在使用1,720,000語句再次訓練後: