AI Automation

Chạy Stable Diffusion sinh ảnh AI trên VPS cấu hình cao

Bạn vừa thuê một VPS GPU cấu hình cao để chạy Stable Diffusion, nhưng mọi thứ không đơn giản như cài lên máy tính cá nhân. Không có màn hình, không có GPU vật lý hiển thị trực tiếp, và nếu không cấu hình đúng, bạn sẽ lãng phí tài nguyên hoặc gặp lỗi ngay từ bước kiểm tra CUDA. Bài viết này đi thẳng vào quy trình cài đặt và chạy Stable Diffusion WebUI (Automatic1111) trên VPS Linux, kèm các bước tối ưu VRAM và quản lý model thực chiến. Môi trường áp dụng: Ubuntu 24.04 LTS, GPU NVIDIA với driver và CUDA đã cài sẵn.

Tóm tắt nhanh

  • Stable Diffusion WebUI chạy tốt trên VPS GPU với 8-16GB VRAM, dùng được cả gói VPS cấu hình cao có GPU NVIDIA.
  • Cài qua Python venv + git clone là cách nhanh nhất, kiểm tra CUDA bằng nvidia-smi trước khi cài bất cứ thứ gì.
  • Thêm flag --medvram hoặc --lowvram để chạy trên GPU có VRAM hạn chế, giảm đến 40% bộ nhớ sử dụng.
  • Dùng xformers--opt-split-attention giúp tăng tốc sinh ảnh 20-30% trên hầu hết GPU NVIDIA.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 LTS (hoặc Debian 12) có GPU NVIDIA, tối thiểu 8GB VRAM cho SD 1.5, 12GB+ cho SDXL.
  • Quyền sudo hoặc tài khoản root.
  • Driver NVIDIA và CUDA đã cài sẵn. Kiểm tra bằng lệnh nvidia-smi.
  • Tối thiểu 50GB dung lượng ổ cứng trống cho model và file tạm.
  • Hiểu cơ bản về Python venv và dòng lệnh Linux.

Nếu VPS của bạn chưa có sẵn driver NVIDIA, hãy tự cài trước. Trên Ubuntu 24.04, bạn có thể dùng lệnh sudo apt install nvidia-driver-535 (hoặc bản mới hơn) và khởi động lại. Mọi hướng dẫn bên dưới giả định GPU driver đã hoạt động, vì nvidia-smi phải hiển thị thông tin GPU trước tiên.

Vì sao nên chạy Stable Diffusion trên VPS thay vì máy cá nhân

Máy cá nhân có GPU mạnh vẫn là lựa chọn tốt, nhưng không phải ai cũng có card 12GB+ VRAM. VPS GPU cho phép bạn thuê tài nguyên đúng lúc cần, không lo nhiệt độ, không lo điện, và có thể chạy nhiều phiên bản model cùng lúc. Với nhóm làm việc từ xa, một VPS Linux GPU dùng chung còn giúp mọi thành viên truy cập cùng một môi trường thống nhất, dễ quản lý model tập trung.

Một ưu điểm khác ít người nhắc: VPS có IPv4 riêng ổn định giúp bạn truy cập WebUI từ bất kỳ đâu qua SSH tunnel mà không lộ IP nhà riêng. Kết hợp với reverse proxy Nginx, bạn có thể đưa API sinh ảnh vào pipeline tự động của team.

Bước 1 - Chuẩn bị môi trường và kiểm tra GPU

Trước khi cài đặt bất cứ thứ gì, hãy xác nhận GPU hoạt động đúng. Chạy lệnh sau:

nvidia-smi

Output mong đợi sẽ hiển thị tên GPU, dung lượng VRAM, driver version và CUDA version. Nếu nhận được lỗi "NVIDIA-SMI has failed", driver chưa được cài đúng, dừng lại và xử lý trước.

Tiếp theo, cập nhật hệ thống và cài các gói cần thiết:

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-venv python3-pip git wget curl

Python version mặc định trên Ubuntu 24.04 là 3.12, đủ tốt cho Stable Diffusion WebUI hiện tại. Không cần cài Python riêng từ nguồn khác trừ khi bạn gặp lỗi tương thích cụ thể.

Bước 2 - Cài đặt Stable Diffusion WebUI (Automatic1111)

WebUI của Automatic1111 vẫn là lựa chọn phổ biến nhất vì cộng đồng lớn, nhiều extension và tài liệu phong phú. Cài đặt bằng git clone vào thư mục riêng:

cd /opt
sudo git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
sudo chown -R $USER:$USER stable-diffusion-webui
cd stable-diffusion-webui

Sử dụng /opt để tách ứng dụng khỏi thư mục home, thuận tiện cho việc quản lý và backup. Lệnh chown giúp user hiện tại có quyền ghi vào thư mục mà không cần sudo mỗi lần chạy.

Bây giờ tạo Python virtual environment và cài dependencies:

python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

Lưu ý: chỉ định --index-url với cu121 (CUDA 12.1) để tải bản PyTorch có hỗ trợ GPU. Nếu không, pip sẽ cài bản CPU-only và Stable Diffusion chạy cực chậm. Kiểm tra PyTorch đã nhận GPU chưa:

python -c "import torch; print(torch.cuda.is_available())"

Output mong đợi là True. Nếu ra False, kiểm tra lại CUDA driver và bản PyTorch đã cài.

Bước 3 - Tải model và chạy lần đầu

Model Stable Diffusion được lưu dạng file .safetensors. Đặt chúng vào thư mục models/Stable-diffusion/:

mkdir -p models/Stable-diffusion
cd models/Stable-diffusion
wget -O v1-5-pruned.safetensors https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors

File này khoảng 4GB, tùy tốc độ mạng của VPS mà mất vài phút đến vài chục phút. Nếu bạn dùng VPS Linux có băng thông trong nước tốt, việc tải model từ HuggingFace vẫn phụ thuộc vào đường quốc tế, nên kiên nhẫn chờ.

Quay lại thư mục chính và chạy WebUI lần đầu:

cd /opt/stable-diffusion-webui
./webui.sh --listen --xformers

Flag --listen cho phép truy cập từ IP ngoài (kết hợp firewall chặn port để an toàn), --xformers kích hoạt tối ưu attention, giảm VRAM và tăng tốc. Lần chạy đầu sẽ mất 5-10 phút để cài thêm dependencies. Khi thấy dòng Running on local URL: http://0.0.0.0:7860 nghĩa là đã sẵn sàng.

Để truy cập từ máy cá nhân an toàn, dùng SSH tunnel thay vì mở port trực tiếp:

ssh -L 7860:localhost:7860 user@your-vps-ip

Sau đó mở http://localhost:7860 trên trình duyệt máy bạn. Cách này tránh lộ WebUI ra Internet và không cần cấu hình thêm firewall.

Bước 4 - Tối ưu VRAM và tốc độ sinh ảnh

GPU 8GB VRAM chạy SD 1.5 thoải mái, nhưng SDXL sẽ cần tối ưu. Thêm các flag sau vào lệnh khởi động:

./webui.sh --listen --xformers --medvram --opt-split-attention

--medvram giảm sử dụng VRAM bằng cách tách model qua lại giữa GPU và RAM, hy sinh một chút tốc độ để đổi lấy khả năng chạy model lớn hơn. --opt-split-attention tối ưu thuật toán attention, hiệu quả trên hầu hết GPU NVIDIA.

Nếu VRAM dưới 6GB, dùng --lowvram thay cho --medvram. Với VPS có GPU 16GB VRAM trở lên, bạn có thể chạy không cần flag giảm VRAM, nhưng vẫn nên giữ --xformers để tăng tốc.

Một mẹo thực tế: đặt biến môi trường PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 trước khi chạy để giảm phân mảnh VRAM:

export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
./webui.sh --listen --xformers --medvram

Bước 5 - Chạy WebUI như service systemd

Chạy bằng tay mỗi lần khởi động là bất tiện. Tạo systemd service để WebUI tự động chạy nền và khởi động cùng VPS:

sudo nano /etc/systemd/system/stable-diffusion.service

Nội dung file:

[Unit]
Description=Stable Diffusion WebUI
After=network.target

[Service]
User=your-username
WorkingDirectory=/opt/stable-diffusion-webui
Environment="PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128"
ExecStart=/opt/stable-diffusion-webui/venv/bin/python launch.py --listen --xformers --medvram
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Kích hoạt và khởi động service:

sudo systemctl daemon-reload
sudo systemctl enable stable-diffusion.service
sudo systemctl start stable-diffusion.service

Kiểm tra trạng thái và log:

sudo systemctl status stable-diffusion.service
journalctl -u stable-diffusion.service -f

Với service systemd, WebUI tự khởi động lại nếu crash và chạy nền không cần giữ phiên SSH. Đây là cách vận hành chuẩn cho máy chủ riêng hoặc VPS dùng lâu dài.

Bước 6 - Cài ControlNet và extension hữu ích

ControlNet là extension quan trọng nhất cho người dùng nghiêm túc, cho phép kiểm soát bố cục, pose và depth. Cài từ tab Extensions trong WebUI, hoặc dùng lệnh:

cd /opt/stable-diffusion-webui/extensions
git clone https://github.com/Mikubill/sd-webui-controlnet.git
cd /opt/stable-diffusion-webui
source venv/bin/activate
pip install -r extensions/sd-webui-controlnet/requirements.txt

Sau đó tải model ControlNet tương ứng (như control_v11p_sd15_openpose.pth cho SD 1.5) vào thư mục models/ControlNet/. Khởi động lại WebUI để extension được nạp.

Một extension đáng cài nữa là sd-webui-depth-lib để tạo depth map, hoặc a1111-sd-webui-tagcomplete giúp gợi ý tag khi gõ prompt. Tránh cài quá nhiều extension cùng lúc vì mỗi cái đều ngốn thêm VRAM và RAM khi nạp.

Đừng quên cấu hình firewall chặn port 7860 từ ngoài nếu bạn không dùng SSH tunnel. Lệnh đơn giản với VPS Linux dùng ufw:

sudo ufw allow ssh
sudo ufw enable

Port 7860 không được mở, chỉ SSH mới vào được. Truy cập qua tunnel như đã hướng dẫn ở Bước 3.

Xử lý lỗi thường gặp

Lỗi "CUDA out of memory"

Đây là lỗi phổ biến nhất khi chạy SDXL trên GPU 8GB. Giải pháp: dùng flag --medvram hoặc --lowvram, giảm kích thước ảnh xuống 768x768, và tắt bớt extension không dùng. Kiểm tra VRAM đang dùng bằng nvidia-smi trong lúc sinh ảnh.

WebUI bị treo hoặc không phản hồi

Thường do hết RAM hoặc process bị kill. Kiểm tra bằng free -hdmesg | tail để xem có OOM killer không. Nếu VPS có RAM thấp, thêm --medvram để giảm tải, hoặc tăng swap theo sudo fallocate -l 8G /swapfile.

Lỗi "No module named 'torch'" khi chạy launch.py

Thiếu activate virtual environment hoặc pip cài sai chỗ. Chạy lại: source venv/bin/activate rồi pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121. Lưu ý dùng đúng phiên bản CUDA của driver.

Câu hỏi thường gặp

VPS GPU cần cấu hình bao nhiêu để chạy Stable Diffusion?

Với SD 1.5, GPU 8GB VRAM là đủ thoải mái. SDXL cần tối thiểu 12GB VRAM nếu muốn chạy mượt không giảm chất lượng, 8GB vẫn chạy được nếu dùng flag --medvram. RAM hệ thống nên từ 16GB trở lên vì model được nạp qua RAM trung gian.

Chạy Stable Diffusion trên VPS có hợp pháp không?

Hoàn toàn hợp pháp. Stable Diffusion là mô hình mã nguồn mở phát hành theo giấy phép CreativeML Open RAIL-M. Bạn có toàn quyền sử dụng cho mục đích thương mại với điều kiện không dùng để tạo nội dung vi phạm pháp luật hoặc gây hại.

Automatic1111 hay ComfyUI nên chọn cái nào?

Automatic1111 dễ dùng hơn cho người mới, có nhiều extension và giao diện trực quan. ComfyUI mạnh hơn cho workflow phức tạp, tiết kiệm VRAM hơn nhờ cơ chế graph-based. Nếu bạn chủ yếu sinh ảnh đơn giản, chọn Automatic1111. Nếu làm pipeline phức tạp nhiều bước, học ComfyUI.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.