Linux được biết như một hệ điều hành có ưu thế khi chạy
computation như deep learning và mình chọn Ubuntu 14.04 vì nghe nói version Trusty
Tah này ổn định và tương thích với các packages như Keras, Tensorflow, Theano
khi chạy deep learning, và thực sự là mình không quen với linux nên mình chọn version
đã có nhiều hướng dẫn chi tiết.
Tình hình là sau khi vật vã install/uninstall cả 2 tuần và
thậm chí install lại Linux 2 lần (sau 2 lần vật vã tương tự với Win 10), mình tìm
được link hướng dẫn ở dưới và đi đến lịch
trình cài như sau:
- Tắt (disable) SecureBoot trong UEFI BIOS (ASUS motherboard). Thực ra nếu không disable SecureBoot thì khi install, CUDA sẽ prompt để tắt nhưng sẽ rấất dễ bị lỗi sau khi reboot mình không biết disable SecureBoot hay nhập password kiểu gì (mình bị lỗi này nên bỏ chạy, tắt trước luôn cho chắc kkk).
- Install NVIDIA Driver and CUDA trong Ubuntu 14.04, theo hướng dẫn từng bước trong link sau: https://gist.github.com/wangruohui/df039f0dc434d6486f5d4d098aa52d07
- Install OpenCV with CUDA support theo link http://www.pyimagesearch.com/2016/07/11/compiling-opencv-with-cuda-support/
- Install Keras: http://www.pyimagesearch.com/2016/07/18/installing-keras-for-deep-learning/
Disable SecureBoot trong UEFI BIOS
Secure Boot thường được mặc định
enable trong ASUS motherboard với UEFI BIOS, tuy nhiên NVIDIA Driver không
support khi Secure Boot enable nên cần phải disable nó thì NVIDIA Driver mới cài
được mà không có lỗi gì .Các bước để disable SecureBoot như trong link này:
Mình tóm tắt lại như sau:
- Cắm USB
- Khởi động lại máy để vào BIOS bằng cách bấm nút DEL hoặc nút khác theo hướng dẫn trên màn hình khởi động.
- Vào Advanced Mode -> Boot -> Secure Boot
- Chọn đúng loại OS và vào Key Management
- Chọn “Save Secure Boot Keys” và bấm Enter để save keys, sau đó màn hình hiện ra prompt hỏi lưu vào đâu thì chọn USB để lưu lại (mình nghĩ là lưu vào ổ cứng cũng được). Sau khi save thì trong USB sẽ có 4 keys là PK, KEK, DB, và DBX.
- Bấm xuống PK key, Enter và chọn Delete PK (Platform Key) để disable Secure Boot (chú ý: không delete các keys khác). Sau khi delete PK, back ra ngoài màn hình Secure Boot sẽ thấy SB đã disabled.
- Lưu và khởi động lại máy (F10).
- Nếu lỡ chưa disable Secure Boot trước
khi install thì có thể sẽ bị lỗi login loop (nhập password login nhưng không thể
login mà lại bị quay trở lại màn hình login, cứ như vậy). Để login vào được, cần
phải vào terminal mode (Ctrl+Alt+F1) để xóa nvidia và broadcom packages bằng lệnh
sau:
sudo apt-get purge nvidia-*
sudo apt-get purge bcmwl-kernel-source
sau đó
khởi động và login lại.
Install NVIDIA Driver and CUDA
Khi install NVIDIA Driver mình gặp vô số
lỗi, k thể nhớ hết nổi, đặc biệt là khi install bằng apt-get, m nghĩ là vì các
xung đột khi CUDA tạo các repository và vì install thiếu kernel nào đó. Mình làm
theo rất nhiều link hướng dẫn nhưng đều fail trừ link mình post ở trên. Và đặc
biệt là CUDA sẽ không install khi X server (giao diện GUI của linux) đang chạy.
Nên trước khi install phải vào terminal mode (log out khỏi GUI và bấm
Ctrl+Alt+F1), stop desktop manager service (lightdm), bước này cũng có trong hướng
dẫn.
Các bước thực hiện như sau:
- Xóa những bản cài trước nếu có (nhất định phải xóa
nếu đã từng cài): sudo apt-get purge nvidia*
sudo apt-get autoremove
sudo dpkg -P cuda-repo-ubuntu1404
- Download driver (NVIDIA kernel): cd ~
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/367.57/NVIDIA-Linux-x86_64-367.57.run
- Cài các gói liên quan (dependencies): sudo apt-get install build-essential gcc-multilib dkms
- Disable Nouveau kernel
driver: sudo nano /etc/modprobe.d/blacklist-nouveau.confblacklist-nouveau.conf/etc/modprobe.d/
Thêm các dòng sau vào file:blacklist nouveaublacklist lbm-nouveauoptions nouveau modeset=0alias nouveau offalias lbm-nouveau offSave và exit nano (Ctrl+X, yes khi prompt có lưu file không). Sau đó update initial RAM filesystem và reboot:$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf$ sudo update-initramfs -u$ sudo reboot
- Tắt X server: sudo service lightdm stop
- Chạy runfile: cd ~
chmod +x NVIDIA-Linux-x86_64-367.57.run
sudo ./NVIDIA-Linux-x86_64-367.57.run –dkms
Sau khi install thành công, không có lỗi gì, nhập lệnh nvidia-smi để kiểm tra chắc chắn hê thống đã support CUDA.
- Install CUDA Driver: Install CUDA gồm có 3 files, 1 NVIDIA driver installer (bản cũ, theo mình
hiểu là như kiểu bản gốc), 1 CUDA installer thiệt, và 1 CUDA samples installer.
Lệnh cài như sau:
cd ~
wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
chmod +x cuda_7.5.18_linux.run
./cuda_7.5.18_linux.run --extract=$HOME
sudo ./cuda-linux64-rel-7.5.18-19867135.run
sudo bash -c "echo /usr/local/cuda/lib64/ > /etc/ld.so.conf.d/cuda.conf"
sudo ldconfig
Sau đó append đường dẫn /usr/local/cuda/bin vào system file /etc/environmentssudo –i gedit /etc/environmentThay đổi đường dẫn PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
thành
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"
Lưu và thoát editor.Reload PATHsource /etc/environment - Install cuDN: Tải cuDNN về từ https://developer.nvidia.com/cudnn
(phải tạo account trên nvidia). Chọn cuDNN v5.1 for CUDA 7.5 -> Chọn cuDNN
v5.1 Library for Linux. Copy tgz file vào /usr/local, extract ra , xóa tgz file
nếu muốn.$ tar -zxf cudnn-7.5-linux-x64-v5.0-ga.tgzCuối cùng gõ sudo ldconfigCài xong CUDA và cuDNN.
Install OpenCV với CUDA support
Mình muốn install
một deep learning environment với CUDA support và có OpenCV, Keras với Theano
backend (Keras là thư viện bậc cao hơn với ứng dụng xây dựng convolutional neural
network (CNN) tiện hơn nhưng nó cần sự hỗ trợ từ Theano hoặc Tensorflow, thư viện
bậc thấp hơn). Sau vài tuần install/uninstall thì mình đi đến kết luận là nên cài
mọi thứ trong virtual environment của python. Nếu có bị lỗi j thì kill cái
environement luôn cho khỏe, chứ install 1 hồi không nhớ là đã install cái gì để
mà uninstall nữa. Mình đã từng phải re-install
cả OS chỉ vì lỗi package này đè lên package khác, k biết đường nào mà gỡ :P. Ngoài
ra nếu muốn làm việc với nhiều projects vơi các yêu cầu version khác nhau của cùng
một package thì virtual env là tiện nhất, vì nếu install package globally thì
không thể nào install các version khác nhau của cùng một package được.
Installation
procedure theo như link tham khảo mình đã post. Tóm tắt lại như sau:
Install các
gói prerequisite cần thiết và python 2.7
$ sudo
apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo
apt-get install libgtk2.0-dev
$ sudo
apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo
apt-get install libatlas-base-dev gfortran
$ sudo
apt-get install libhdf5-serial-dev
$ sudo
apt-get install python2.7-dev
Install pip
và virtual env
$ wget
https://bootstrap.pypa.io/get-pip.py
$ sudo
python get-pip.py
$ sudo
pip install virtualenv virtualenvwrapper
$ sudo
rm -rf get-pip.py ~/.cache/pip
Edit file bash
để chạy virtualenvwrapper mỗi lần thực thi, nếu không thì mỗi lần làm bạn phải
chạy lại lệnh để tạo virtual env
nano ~/.bashrc
Thêm dòng sau vào cuối file, exit and save file
(Ctrl + X, sau đó chọn yes khi được hỏi để save)
#
virtualenv and virtualenvwrapper
export
WORKON_HOME=$HOME/.virtualenvs
source
/usr/local/bin/virtualenvwrapper.sh
Load
lại file bash, tạo virtual env tên cv, và install numpy vô environment cv này
$ source
~/.bashrc
$ mkvirtualenv
cv
$ pip
install numpy
Tạo directory
để chứa source của OpenCV.
$ sudo
mkdir opencv_compile
$ sudo
chown -R ubuntu opencv_compile
$ cd
opencv_compile
Download và
unzip
$ wget
-O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ wget
-O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$ unzip
opencv.zip
$ unzip
opencv_contrib.zip
Dùng cmake để
cấu hình build, enable CUDA và fast math
$ cd
opencv-3.1.0
$ mkdir
build
$ cd
build
$ cmake
-D CMAKE_BUILD_TYPE=RELEASE \
-D
CMAKE_INSTALL_PREFIX=/usr/local \
-D
WITH_CUDA=ON \
-D
ENABLE_FAST_MATH=1 \
-D
CUDA_FAST_MATH=1 \
-D
WITH_CUBLAS=1 \
-D
INSTALL_PYTHON_EXAMPLES=ON \
-D
OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.1.0/modules \
-D
BUILD_EXAMPLES=ON ..
Sau
khi chạy cmake, kiểm tra phần NVIDIA CUDA (xem hình trong link tham khảo), CUFFT,
CUBLAS, fast math phải được enable rồi.
Compile
và install OpenCV sau khi cmake chạy không có lỗi gì
$ make
–j4 #4 là số core CPU, thay đổi nếu cần
thiết
$ sudo
make install
$ sudo
ldconfig
Lưu ý install
OpenCV khi vẫn đang ở trong virtual environment. Sau khi install xong không có
lỗi gì thì kiểm tra trong ~/.virtualenvs/cv/lib/python2.7/site-packages/usr/local/lib/python2.7/site-packages
$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
|
Để check cv2
thì vào python để import và check version của cv2 (nếu không đang ở trong virtial
env cv thì gõ workon cv để chuyển vào cv)
$ python
>>>
import cv2
>>>
cv2.__version__
Cài xong
OpenCV.
Install Keras
Lưu ý: vẫn đang
ở trong virtual env cv khi install keras (nếu không đang ở trong cv thì “workon
cv” để chuyển vào cv).
Cài các gói
mà keras phụ thuộc
$ pip
install numpy scipy
$ pip
install scikit-learn
$ pip
install pillow
$ pip
install h5py
Kể cả
Theano. Theano thì cài bản bleeding-edge theo link hướng dẫn ở dới. Install
Theano bằng pip khi sử dụng rất dễ bị lỗi
$ pip install --upgrade --no-deps git+git:github.com/Theano/Theano.git
Install Keras
$ pip install keras
Sau khi install xong import keras để keras tự tạo
file keras.json (sẽ bị lỗi nếu chưa cài tensorflow trong cv)
$ python
>>>
import keras
>>>
quit()
Sửa file keras.json
trong ~/.keras/để
chuyển backend sang Theano nếu bị lỗi khi import.
{
"image_dim_ordering":
"tf",
"epsilon":
1e-07,
"floatx":
"float32",
"backend":
"tensorflow"
}
Chuyển tensorflow
thành theano cho “backend”, thông số "image_dim_ordering"
thành “th”. Tuy nhiên Khi chạy Keras với Tensorflow
backend, ở một số version của Tensorflow, thông số “image_dim_ordering” phải
set là “th” chứ không phải là “tf” , mình chạy với Tf v0.12.0.ocr1, set “image_dim_ordering:
tf” trong file ~/.keras/keras.json mà bị lỗi “Keras MaxPooling2D gives
ValueError: Negative dimension size caused by subtracting 2 from 1 for
'MaxPool_x' “. (Link tham khảo: https://github.com/fchollet/keras/issues/3945)
Ngoài ra, một số version Keras khi chạy với Tensorflow
(install Tensorflow rất đơn giản, chỉ bằng lệnh pip install tensorflow) còn bị
lỗi ‘module’ object has no attribute ‘control_flow_ops’ khi running_model_from_json
(chạy model từ file json). Lỗi này đã từng được raised bên Tensorflow nhưng Tf
không fixed mà để để chờ Keras fix thì phải, túm lợi là không bên nào fix. Khi
gặp lỗi này thì mình work around bằng cách set tf.python.control_flow_ops sau
khi import tensorflow
import tensorflow as tf
tf.python.control_flow_ops = tf
Để chạy GPU support cho Keras với Theano
backend thì cần set (hoặc tạo mới) file .theanorc ở home với nội dung:
Tensorflow thì không cần.
Xong xuôi, vô python, import keras không có lỗi
gì là done, viết và chạy deep learning thôi ^^.
Monitoring GPU usage:
Sudo pip install
glances[gpu]
Để lauch
glances và check GPU:
Sudo glances
Terminal sẽ
hiện ra như sau:
https://github.com/Theano/Theano/wiki/Converting-to-the-new-gpu-back-end(gpuarray)
Nhận xét
Đăng nhận xét