Chuyển đến nội dung chính

Cài đặt deep learning environment trong Ubuntu 14.04 với GPU support

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:

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:
  1. 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
  2. Download driver (NVIDIA kernel):                                                 cd ~
    wget http://us.download.nvidia.com/XFree86/Linux-x86_64/367.57/NVIDIA-Linux-x86_64-367.57.run
  3. Cài các gói liên quan (dependencies):                                               sudo apt-get install build-essential gcc-multilib dkms
  4. 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 nouveau
    blacklist lbm-nouveau
    options nouveau modeset=0
    alias nouveau off
    alias lbm-nouveau off
    Save 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
  5. Tắt X server: sudo service lightdm stop
  6. 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.
  7. 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/environments
    sudo –i gedit /etc/environment
    Thay đổ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 PATH
    source /etc/environment 
  8. 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.tgz
    Cuối cùng gõ sudo ldconfig
    Cà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

Bài đăng phổ biến từ blog này

Chọn ngành học đại học

Với những bạn có năng khiếu, đam mê về cái gì đó từ nhỏ thì không cần phải nói tới, cứ đấu tranh để học ngành mình yêu thích thôi. Đừng tìm lí do để chối bỏ nó, chỉ khi nào đam mê đó không đủ lớn thì bạn mới dễ dàng tìm lí do để chọn một con đường khác thôi. Trong bài này mình muốn tập trung vào những bạn không biết mình thích gì, không biết chọn ngành gì cho tương lai. Mình cũng từng ở trong hoàn cảnh này 11 năm trước đây, và mình cũng từng đi làm, chán, rồi đi học, rồi chuyển ngành, cộng với những kiến thức mình tích luỹ được, hy vọng sẽ có ích cho mấy bạn lúc đang sôi sục vì thi đại học, chọn ngành, chọn trường này. Thứ nhất là phải tỉnh táo, đừng để những ngành hot lôi kéo bạn. Thời mình mới tốt nghiệp cấp 3 thì IT đang hot, ai cũng muốn học IT vì báo nói ngành này lương cao, đang thời thượng. Đi học mới biết nó đang thời thượng mà là thời thượng ở nước ngoài, ở những nơi kinh tế khá ổn định, và họ đang đầu tư mạnh vào phát triển công nghệ. Đó là thời Bill Gate dần leo lên

SỨC MẠNH CỦA THÓI QUEN TỐT

Dạo trước mình thường hay bỏ bê bản thân, bỏ bê theo kiểu nuông chiều. Mình nghĩ là mình lên lab stress, mệt mỏi lắm rồi nên mình kệ, mở tủ thấy gì mặc nấy, buổi sáng dậy ăn tạm miếng bánh xong cuống cuồng cào cái đầu, quơ cái mặt, đúng nghĩa là quơ vì lấy nước tạt tạt quơ quơ, còn k buồn lấy sữa rửa mặt, vớ cái túi (mà ngày nào cũng đựng từng ấy thứ như ngày nào) rồi chạy. Mình nghĩ đấy là nuông chiều, thương yêu bản thân mình (vì mình ứ care mấy đứa nhìn mình, mình xấu đau con mắt tụi nó chứ mình có thấy đâu mà sợ). Xong bẵng đi một thời gian mình bắt đầu thấy mệt mỏi, chán chường thật sự. Nhìn bản thân nhếch nhác, chồng con nhếch nhác, nhà cửa nhếch nhác, công việc nhếch nhác. Mình stress nặng. Mình đi gặp bác sĩ. Bác sĩ nhấn mạnh là phải tập thể dục thường xuyên, phải giữ daily routine (đại loại là thời gian biểu cố định hằng ngày) TỐT. Tra các thể loại sách báo, google, chúng nó cũng bảo yêu bản thân đi, tập thể dục đi, chăm chút cho bản thân đi. Vầng, em nghe. Thế là đi

Study abroad, 2 years in Korea

I have been in Korea for 2 years, experienced both lab life and a housewife life ;). In this blog, I almost focus on the study in Korea and only adjust a few things living here. Deciding to study in Korea, you must face many different things, i.e., culture, language, lifestyle and even thought. As other North Asian countries, Korea had had a long time being almost closed about culture, language. Korean thinks they are the highest and noble nation in the world, they don't want their children getting married to foreigner, they believe that their language is the smartest language in the world (?!?, I don't very understand the meaning of the most intelligent language). That's a reason why you cannot live well in Korea when you can't speak Korean, not many Korean can speak English. Being thinking that they are better than the rest of the world makes them not to accept us (foreigners) into their " 우리" circle if we don't speak Korean and don't appreciate