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:
- Ubuntu 17.10 “Artful Aardvark” 58MB
- Xubuntu minimal
Ổ 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ó python3
và pip3
. 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 Colab và FloydHub. 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