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語句再次訓練後: