Mô hình ML đầu tiên với GPU trên EZYCLOUDX

EZC Team
Cập nhật: 7 tháng 8, 2025

Thiết Lập Môi Trường Huấn Luyện Deep Learning trên GPU với WSL 2 cho Windows 10: Hướng Dẫn Toàn Diện

Huấn luyện mô hình Deep Learning (DL) đòi hỏi tài nguyên tính toán mạnh mẽ, và GPU là một lựa chọn hàng đầu. Với Windows Subsystem for Linux 2 (WSL 2), người dùng Windows 10 có thể tận dụng sức mạnh của GPU NVIDIA cho các tác vụ DL trong một môi trường Linux gần như nguyên bản. Bài viết này sẽ hướng dẫn chi tiết các bước để thiết lập môi trường và huấn luyện một mô hình cơ bản.


Chuẩn Bị Quan Trọng Trước Khi Bắt Đầu

Trước khi đi vào cài đặt, hãy đảm bảo hệ thống của bạn đáp ứng các yêu cầu sau:

  • Windows 10: Phiên bản 21H2 trở lên (build 19044 trở lên) hoặc Windows 11. WSL 2 cần được kích hoạt.
  • NVIDIA GPU: Một card đồ họa NVIDIA tương thích CUDA (kiến trúc Kepler trở lên).
  • NVIDIA Driver cho Windows: Cài đặt driver GeForce Game Ready hoặc NVIDIA RTX Enterprise mới nhất từ trang chủ NVIDIA. Driver này phải hỗ trợ WSL 2.
  • WSL 2 và Phân Phối Linux: Đã cài đặt WSL 2 và một bản phân phối Linux (ví dụ: Ubuntu 20.04 LTS hoặc Ubuntu 22.04 LTS) từ Microsoft Store.

1. Cài Đặt và Cấu Hình WSL 2 cho GPU

Bước 1: Đảm bảo WSL 2 đã được cài đặt và là phiên bản mặc định

Mở PowerShell với quyền Administrator và chạy:

wsl --set-default-version 2

Nếu bạn chưa cài đặt WSL, hãy làm theo hướng dẫn chính thức của Microsoft.

Bước 2: Cài đặt NVIDIA Driver hỗ trợ CUDA trên WSL

Đây là bước quan trọng. Driver NVIDIA trên Windows sẽ giao tiếp với nhân Linux của WSL 2.

Truy cập trang tải driver của NVIDIA. Chọn dòng sản phẩm, model GPU của bạn và hệ điều hành Windows. Tải về và cài đặt phiên bản driver mới nhất hỗ trợ WSL.

Bước 3: Cập nhật Kernel Linux trong WSL (Nếu cần)

Mở bản phân phối Linux trong WSL (ví dụ: Ubuntu) và chạy:

sudo apt update
sudo apt full-upgrade -y

Chạy wsl --update từ PowerShell nếu cần thiết. Để khởi động lại WSL, chạy wsl --shutdown (từ PowerShell), sau đó mở lại Ubuntu.


2. Thiết Lập Môi Trường Deep Learning Trong WSL

Sau khi cấu hình WSL và driver, chúng ta sẽ cài đặt các công cụ cần thiết bên trong môi trường Linux của WSL.

Bước 1: Cài đặt NVIDIA CUDA Toolkit cho WSL

Bạn không cần cài đặt CUDA Toolkit đầy đủ trên Windows cho WSL. Thay vào đó, bạn sẽ cài đặt các thư viện CUDA cần thiết bên trong WSL thông qua trình quản lý gói của bản phân phối Linux. Mở terminal của Ubuntu trong WSL:

  • Đối với PyTorch (khuyến nghị cách này vì PyTorch thường đóng gói CUDA/cuDNN): Thông thường, khi bạn cài đặt PyTorch qua pip hoặc conda với phiên bản hỗ trợ GPU, nó sẽ tự động cài đặt các thư viện CUDA và cuDNN tương thích.

  • Đối với TensorFlow (hoặc nếu muốn cài đặt CUDA Toolkit một cách tường minh): Làm theo hướng dẫn chính thức của NVIDIA cho việc cài đặt CUDA Toolkit trên Ubuntu bên trong WSL. Ví dụ, đối với CUDA 11.x hoặc 12.x (luôn kiểm tra phiên bản mới nhất và tương thích với driver/framework của bạn):

    # Gỡ cài đặt các phiên bản cũ nếu có
    sudo apt-key del 7fa2af80
    sudo apt-get purge --auto-remove cuda* cublas* nvidia* libnvidia*
    sudo rm /etc/apt/sources.list.d/cuda*
    sudo rm /etc/apt/sources.list.d/nvidia*
    
    # Thêm kho lưu trữ NVIDIA CUDA
    # Truy cập: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local
    # Chọn phiên bản Ubuntu và tải file .pin và .deb tương ứng.
    # Ví dụ cho Ubuntu 22.04 và CUDA 12.x (cập nhật link và tên file nếu cần)
    wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
    sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
    sudo dpkg -i cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
    sudo cp /var/cuda-repo-wsl-ubuntu-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda-toolkit-12-4 # Hoặc phiên bản bạn đã chọn
    

    Lưu ý: Phiên bản CUDA Toolkit trong WSL nên phù hợp với phiên bản driver NVIDIA đã cài trên Windows.

    Kiểm tra cài đặt CUDA (sau khi cài đặt toolkit):

    nvcc --version
    

    Bạn cũng sẽ cần thiết lập biến môi trường:

    echo 'export PATH=/usr/local/cuda/bin\$\{PATH:+:\$\{PATH\}\}' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64\$\{LD_LIBRARY_PATH:+:\$\{LD_LIBRARY_PATH\}\}' >> ~/.bashrc
    source ~/.bashrc
    

Bước 2: Cài đặt cuDNN

NVIDIA cuDNN là thư viện tăng tốc cho các hàm tính toán DL.

Đăng ký tài khoản NVIDIA Developer Program (miễn phí). Tải về cuDNN SDK (chọn phiên bản tương thích với CUDA Toolkit đã cài đặt và cho Linux x86_64). https://developer.nvidia.com/rdp/cudnn-download

Giải nén và sao chép các file vào thư mục CUDA Toolkit:

# Ví dụ, nếu bạn tải về cudnn-linux-x86_64-X.Y.Z.A_cudaC.D-archive.tar.xz
# Hãy thay thế X.Y.Z.A và C.D bằng phiên bản cụ thể bạn tải về.
# Ví dụ: tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
tar -xvf <tên-file-cudnn.tar.xz>
cd <thư-mục-cudnn-đã-giải-nén>
sudo cp include/cudnn*.h /usr/local/cuda/include
sudo cp lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
cd ..
rm -rf <thư-mục-cudnn-đã-giải-nén>* <tên-file-cudnn.tar.xz>

Bước 3: Thiết lập môi trường Python (Miniconda/Anaconda)

Sử dụng Conda giúp quản lý thư viện và môi trường dễ dàng hơn.

# Tải Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda
rm Miniconda3-latest-Linux-x86_64.sh

# Thêm Conda vào PATH
echo 'export PATH="$HOME/miniconda/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# Tạo và kích hoạt môi trường mới
conda create -n myenv_gpu python=3.9 -y # Hoặc python=3.10, 3.11 tùy framework
conda activate myenv_gpu

Bước 4: Cài đặt Framework Deep Learning (TensorFlow hoặc PyTorch)

  • Đối với TensorFlow:

    # Đảm bảo pip, wheel, setuptools được cập nhật trong môi trường conda
    pip install --upgrade pip wheel setuptools
    
    # Cài đặt TensorFlow với GPU support
    # TensorFlow thường yêu cầu phiên bản CUDA và cuDNN cụ thể.
    # Kiểm tra trang cài đặt chính thức của TensorFlow để biết phiên bản tương thích.
    # Cách đơn giản nhất là để TensorFlow tự cài các thư viện CUDA cần thiết (nếu có hỗ trợ)
    pip install tensorflow[and-cuda]
    
    # Kiểm tra cài đặt TensorFlow và GPU
    python -c "import tensorflow as tf; print('TensorFlow version:', tf.__version__); print('Num GPUs Available: ', len(tf.config.list_physical_devices('GPU')))"
    

    Nếu Num GPUs Available > 0, TensorFlow đã nhận diện được GPU.

  • Đối với PyTorch: Truy cập trang chủ PyTorch (pytorch.org) và chọn các tùy chọn phù hợp (PyTorch Build, OS: Linux, Package: Conda hoặc Pip, Language: Python, Compute Platform: CUDA phiên bản phù hợp).

    Ví dụ, lệnh cài đặt qua Pip có thể như sau (luôn kiểm tra lệnh mới nhất trên trang chủ):

    # Ví dụ cho CUDA 12.1 (kiểm tra phiên bản CUDA bạn đã cài hoặc muốn PyTorch sử dụng)
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
    
    # Kiểm tra cài đặt PyTorch và GPU
    python -c "import torch; print('PyTorch version:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda if torch.cuda.is_available() else 'N/A'); print('cuDNN version:', torch.backends.cudnn.version() if torch.cuda.is_available() else 'N/A'); print('Device name:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'No GPU')"
    

    Nếu CUDA availableTrue, PyTorch đã sẵn sàng với GPU.


3. Huấn Luyện một Mô Hình Cơ Bản để Kiểm Tra

Dưới đây là một ví dụ đơn giản sử dụng PyTorch để kiểm tra xem GPU có hoạt động không.

import torch
import torch.nn as nn
import torch.optim as optim

# Kiểm tra xem GPU có sẵn không và chọn device tương ứng
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Sử dụng device: {device}")

# Định nghĩa một mô hình đơn giản
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.linear1 = nn.Linear(10, 5) # Đầu vào 10 features, đầu ra 5 features
        self.relu = nn.ReLU()
        self.linear2 = nn.Linear(5, 1)  # Đầu ra 1 feature

    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)
        return x

# Khởi tạo mô hình và chuyển sang GPU (nếu có)
model = SimpleModel().to(device)
if torch.cuda.is_available():
    print("Mô hình đã được chuyển sang:", next(model.parameters()).device)

# Dữ liệu giả lập
inputs = torch.randn(64, 10).to(device) # 64 mẫu, 10 features mỗi mẫu
labels = torch.randn(64, 1).to(device)  # 64 nhãn

# Hàm loss và optimizer
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# Vòng lặp training đơn giản
print("Bắt đầu training đơn giản...")
for epoch in range(5): # Chạy 5 epochs
    # Forward pass
    outputs = model(inputs)
    loss = criterion(outputs, labels)

    # Backward pass và tối ưu
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    print(f'Epoch [{epoch+1}/5], Loss: {loss.item():.4f}')

print("Hoàn thành training đơn giản!")

# Để kiểm tra mức sử dụng GPU, bạn có thể mở một terminal WSL khác và chạy:
# watch -n 0.5 nvidia-smi
# Hoặc từ PowerShell: nvidia-smi

4. Một Số Vấn Đề Thường Gặp và Mẹo

  • Lỗi nvidia-smi không chạy trong WSL: Đảm bảo driver NVIDIA trên Windows đã được cài đặt đúng cách và hỗ trợ WSL. Thử khởi động lại máy tính.
  • WSL không nhận GPU: Chạy wsl --update trong PowerShell. Đảm bảo bản phân phối Linux của bạn là WSL 2 (wsl -l -v trong PowerShell).
  • Phiên bản CUDA/cuDNN không tương thích: Đây là lỗi phổ biến. Luôn kiểm tra tài liệu của framework (TensorFlow/PyTorch) để biết các phiên bản CUDA/cuDNN được hỗ trợ. Cân nhắc để framework tự quản lý (ví dụ, cài PyTorch qua conda/pip với gói CUDA đi kèm).
  • Thiếu bộ nhớ GPU (Out of Memory): Giảm batch_size, sử dụng mixed precision training, hoặc gradient accumulation.
  • Sử dụng Docker với GPU trong WSL: Cài đặt NVIDIA Container Toolkit. Đảm bảo Docker Desktop được cấu hình để sử dụng WSL 2 backend và có tùy chọn "Enable GPU compute" được kích hoạt cho bản phân phối Linux của bạn.

Kết Luận

Thiết lập môi trường Deep Learning với GPU trên WSL 2 mang lại sự linh hoạt của Linux và sức mạnh của GPU NVIDIA cho người dùng Windows. Mặc dù quá trình cài đặt có thể có một vài bước phức tạp, việc tuân thủ các hướng dẫn và kiểm tra kỹ lưỡng từng bước sẽ giúp bạn xây dựng một môi trường ổn định và hiệu quả. Với môi trường này, bạn đã sẵn sàng để khám phá và phát triển các mô hình Deep Learning mạnh mẽ.