Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm thiết lập môi trường cho dự án deep learning. Nhìn qua, mọi thứ có vẻ khá phức tạp, nhưng thực ra thì không. Sau khi hoàn tất các bước, chúng ta sẽ có 1 máy chủ tinh gọn chạy Ubuntu 17.10, với CUDA 9.0, cuDNN 7.0.5, Python 3, TensorFlow-GPU và Jupyter Notebook sẵn sàng để train các models AI.

1, Hardware

Đây là cấu hình cho 1 dự án nhỏ, kinh phí thấp:

  • Intel(R) Core(TM) i5–7600 CPU @ 3.50GHz
  • 240 GB hard drive (SSD)
  • 8 GB RAM (DDR4)
  • nVidia GP106 [GeForce GTX 1060 6GB]

Tất nhiên, còn phải thêm case, nguồn, bàn phím, chuột và màn hình. Tổng chi phí vào khoảng $1500.

2, OS & platform

Trên máy này, chúng ta sẽ cài đặt:

Ổ cứng SSD 240GB chia ra 3 phần:

  • 4 GB cho swap
  • 80 GB mounted vào /storage để chứa dữ liệu
  • Phần còn lại / dành cho hệ điều hành

Sau khi hệ điều hành đã sẵn sàng, chúng ta đăng nhập root và chạy các lệnh sau để cài đặt một số công cụ hữu ích:

sudo apt update  
sudo apt install — no-install-recommends -y \  
  software-properties-common build-essential \  
  make curl wget \  
  ccze inetutils-tools \  
  python-minimal git nginx htop vim

Các tiện ích khá quen thuộc, ngoại trừ ccze hơi lạ? Tuy nhiên nó có tác dụng làm cho logs từ journalctl hiển thị với các màu sắc khác nhau.

Cuối cùng chúng ta chmod /storage cho tất cả users.

sudo chmod 0777 /storage

3. Python and Pip

Chúng ta sẽ chỉ làm việc với Python 3, tuy vậy, một số packages hệ thống vẫn yêu cầu Python 2. Do vậy chúng ta chạy thêm lệnh python-minimal là được.

Các lệnh sau build Python v3.6.4 từ source:

export PYTHON_VERSION=3.6.4  
export PYTHON_DOWNLOAD_URL=[https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz](https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz)sudo apt install --no-install-recommends -y libssl-dev libreadline-dev libbz2-dev libsqlite3-devwget "$PYTHON_DOWNLOAD_URL" -O python.tar.tgz  
tar -zxvf python.tar.tgz  
cd Python-$PYTHON_VERSION  
./configure --enable-optimizations --enable-loadable-sqlite-extensions  
make  
sudo make installpip3 install --upgrade pip

libbz2-dev, libsqlite3-dev được yêu cầu bởi Jupyter và TensorBoard về sau.

Lúc này trên hệ thống đã có python3pip3. Có thể thêm các alias sau vào ~/.bash_aliases hoặc ~/.bash_profile cho tiên.

alias python=python3  
alias pip=pip3

Lưu ý, quy tắc chung là:

  • ~/.bash_profile được kích hoạt 1 lần khi bạn login (GUI or SSH)
  • ~/.bash_aliases được kích hoạt mỗi lần bạn mở terminal (window và tab)

Tuy nhiên, quy tắc này có thể bị thay đổi trong ~/.bashrc, ~/.profile, hoặc /etc/bash.bashrc...

4. NVIDIA driver

Có 2 phiên bản driver cho card đồ họa NVIDIA : Nouveau driver and Nvidia driver. Cái thứ nhất là open source. Cái thứ 2 do NVIDIA cung cấp.

Thông thường, Nvidia driver là mặc định. Trên Ubuntu 17.10, đó là nvidia-384. Chúng ta kiểm tra với lệnh:

cat /proc/driver/nvidia/version

Nếu nó không có sẵn, hãy cài đặt. Từ giao diện, chọn Drivers Management. Nó sẽ được tải xuống và cài đặt 1 cách tự động.

Cũng có thể cài đặt Nvidia driver từ terminal. Trong trường hợp này, Nouveau driver nên được đưa vào blacklist:

sudo nano /etc/modprobe.d/blacklist.conf

Copy & paste các dòng sau vào file và lưu lại:

blacklist vga16fb  
blacklist nouveau  
blacklist rivafb  
blacklist nvidiafb  
blacklist rivatv

Xong đâu đó, chạy các lệnh sau:

sudo add-apt-repository ppa:graphics-drivers/ppa  
sudo apt update  
sudo apt install nvidia-384 nvidia-384-dev

Kiểm tra lại bằng lệnh nvidia-smi , nếu thành công, bạn sẽ thấy thông số card đồ họa hiện ra trên màn hình.

5. CUDA v9.0

TensorFlow vừa ra mắt phiên bản v1.7 được built với CUDA 9.0, do vậy, trừ khi bạn muốn build TensorFlow từ source, không nên cài CUDA v9.1 để tránh vấn đề tương thích.

Để linh hoạt, nên cài pip modules vào virtual environments, và sử dụng TensorFlow từ PyPI. Cũng với lý do trên, tôi cho rằng không cần dùng đến Anaconda.

CUDA v9.0 yêu cầu GCC 6, trong khi phiên bản GCC có sẵn trong Ubuntu 17.10 là GCC 7.2. Do vậy, chúng ta phải cài GCC 6 và tạo symlinks như sau:

sudo apt install gcc-6 g++-6  
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda/bin/gcc  
sudo ln -s /usr/bin/g++-6 /usr/local/cuda/bin/g++

Bây giờ lệnh gcc sẽ chạy như gcc-6, hãy kiểm tra lại:

gcc -v

Tiếp theo, chúng ta tắt x-server, tải và cài đặt CUDA 9:

sudo service lightdm stop  
wget [https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run](https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run)  
mv cuda_9.0.176_384.81_linux-run cuda_9.0.176_384.81_linux.run  
chmod +x cuda_9.0.176_384.81_linux.run  
sudo ./cuda_9.0.176_384.81_linux.run --override --dkms -s

Trong khi chạy, chương trình sẽ hỏi một số câu hỏi:

  • You are attempting to install on an unsupported configuration. Do you wish to continue? (y)
  • Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? (n)
  • Install the CUDA 9.0 Toolkit? (y)
  • Enter Toolkit Location ([default location])
  • Do you want to install a symbolic link at /usr/local/cuda? (y)
  • Install the CUDA 9.0 Samples? (y)
  • Enter CUDA Samples Location ([default location])

Nếu không có lỗi, tiến trình sẽ kết thúc sau ít phút.

Theo NVIDIA’s docs, chúng ta cũng cần thêm các paths sau vào ~/.bash_aliases:

$ export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}$ export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Cuối cùng, reboot và đăng nhập lại.

6. cuDNN v7.0.5 for CUDA 9.0

CUDA 9.0 chỉ chạy với cuDNN tương ứng, bạn có thể tải xuống ở đây sau khi đăng ký tham gia NVIDIA Developer Program.

Chọn đúng file từ danh sách:

Tải xuống và chạy các lệnh sau:

tar -xzvf cudnn-9.0-linux-x64-v7.tgz  
sudo cp cuda/include/cudnn.h /usr/local/cuda/include  
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64  
sudo chmod a+r /usr/local/cuda/include/cudnn.h  
/usr/local/cuda/lib64/libcudnn*

Về cơ bản, như vậy là xong.

Bây giờ chúng ta sẽ nói một chút về workspace.

7. Setup project environment

Từ vào dự án, quy trình, và team, bạn có thể lựa chọn cách tổ chức vùng làm việc phù hợp.

Trong dự án của chúng tôi, sau khi hoàn tất các bước trên, chúng tôi cấp cho mỗi thành viên dự án một tài khoản đăng nhập vào máy với quyền regular user.

Lưu ý rằng các paths ở bước 5 cần phải áp dụng được cho tất cả users. Đơn giản là mỗi người tự copy file ~/.bash_aliases về $HOME của mình.

Dữ liệu dùng chung như datasets, checkpoints, weights... lưu trữ ở /storage.

Thành viên dự án login bằng ssh và tự setup virtual environment, ví dụ:

python3 -m venv computer-vision  
source computer-vision/bin/activate  
(computer-vision) pip install tensorflow-gpu jupyter  
(computer-vision) jupyter notebook --port 7777

Với quyền regular user, họ có thể làm mọi thứ liên quan đến preprocessing và training, nhưng không thể cài đặt hoặc thay đổi cấu hình hệ thống. Điều đó giữ cho máy chủ ổn định hơn.

Trong khi sử dụng GPU, nvidia-smi là một lệnh hữu ích. Chúng ta có thể kiểm tra real-time stats với:

watch -d -n 1.0 nvidia-smi

Kết luận

Như vậy, chúng ta đã có một môi trường devs đủ tốt để bắt đầu các công việc liên quan đến deep learning.

Ngoài ra cũng có vài chỗ miễn phí để chạy thử, như Google ColabFloydHub. Hãy dành thời gian tìm hiểu nếu bạn muốn trải nghiệm thêm các dịch vụ training trên cloud.

Enjoy studying.

Bản tiếng Anh: Setup a lightweight environment for deep learning