AI image generator tự host: cần máy bao nhiêu?
Tìm hiểu phần cứng thực tế để chạy Stable Diffusion: VPS CPU mất 1–2 phút cho ảnh 512x512, SDXL mất 10–20 phút, kèm lệnh cài ComfyUI và dung lượng disk.
Một AI image generator tự host thực sự cần gì
Một AI image generator tự host gồm một web app và một model file. App là ComfyUI và có thể chạy trên bất kỳ máy Linux nào. Model quyết định phần cứng bạn cần. Một checkpoint thuộc lớp SDXL là một file duy nhất có dung lượng 6.94 GB và cần nằm trong GPU memory. Chỉ riêng yếu tố này đã quyết định toàn bộ ngân sách, vì vậy hãy đọc bảng phân cấp phần cứng bên dưới trước khi thuê máy chủ.
Tóm lại: VPS chỉ dùng CPU vẫn có thể cài và cung cấp phần mềm, đồng thời tạo ảnh 512x512 bằng model Stable Diffusion 1.5 cũ với thời gian khoảng một đến hai phút mỗi ảnh. Cũng máy đó, khi chạy SDXL ở 1024x1024, sẽ mất từ mười đến hai mươi phút cho mỗi ảnh. Đây không phải là lỗi cấu hình. Đó là vấn đề tính toán, và hướng dẫn này sẽ giải thích rõ.
Kích thước model quyết định loại máy
Image generation chạy một vòng lặp khử nhiễu. Một lần render 30 bước chạy bộ khử nhiễu, UNet của SDXL, trên ảnh 30 lần. Mỗi lượt đều đọc toàn bộ weight của UNet. Hai text encoder chạy một lần trước vòng lặp và VAE decode một lần sau vòng lặp, nên chúng không nằm trong chi phí của từng bước. UNet của SDXL ở half precision có 5.14 GB weight. Vì vậy, theo cách tính đơn giản này, một lần render 30 bước phải chuyển khoảng 154 GB weight qua memory trước khi bạn thấy ảnh, chưa tính các tensor trung gian.
GPU có 24 GB video memory (VRAM, phần memory được hàn cạnh graphics chip) đọc dữ liệu với tốc độ hàng trăm gigabyte mỗi giây và chứa toàn bộ 6.9 GB cùng lúc. CPU VPS đọc system RAM với tốc độ hàng chục gigabyte mỗi giây và không có matrix hardware cho các phép tích chập, nên cùng vòng lặp đó chạy chậm hơn từ 1 đến 2 bậc độ lớn. Đây cũng là lập luận về memory bandwidth chi phối text model. Bạn nên đọc phần này cùng với khi nào VPS có GPU thực sự đáng tiền.
Image generation khác text generation ở một điểm quan trọng. Chat model stream token, nên máy chậm vẫn dễ sử dụng vì các từ xuất hiện trong lúc bạn đọc. Ảnh chỉ xuất hiện khi bước cuối cùng hoàn tất. Chậm có nghĩa là phải nhìn chằm chằm vào progress bar.
Cấu hình phần cứng theo từng mức, với số liệu thực tế
Khối bên dưới đưa ra các số liệu điển hình cho một ảnh SDXL ở độ phân giải 1024x1024, 30 steps, Euler sampler, tính đến tháng 7 năm 2026. Hãy xem đây là các mức độ lớn tương đối. Sampler, số steps và độ phân giải bạn dùng sẽ làm các số liệu này thay đổi.
Dữ liệu đằng sau biểu đồ này
[
{
"label": "8 vCPU VPS, no GPU",
"seconds_per_image": 780
},
{
"label": "8GB VRAM GPU",
"seconds_per_image": 32
},
{
"label": "12GB VRAM GPU",
"seconds_per_image": 18
},
{
"label": "24GB VRAM GPU",
"seconds_per_image": 9
}
]Dòng CPU là 780 giây, tương đương khoảng mười ba phút. Card 24 GB mất 9 giây. Đây là khoảng cách hiệu năng mà bạn đang chi tiền để thu hẹp.
Hãy đọc bảng theo cách sau. Dưới 8 GB VRAM, SDXL vẫn chạy được vì ComfyUI quản lý VRAM và RAM hệ thống cùng nhau, đồng thời tự động offload model weights. Tính đến tháng 10 năm 2026, README của dự án đặt mức tối thiểu là 4 GB VRAM và 8 GB RAM hệ thống khi dùng asynchronous weight streaming. Offload làm mất thêm thời gian ở mỗi step, nên card 6 GB thường mất gần một phút cho mỗi ảnh hơn là gần ba mươi giây. Ở mức 8 GB, base model vừa đủ nằm trong VRAM và quá trình render hoạt động ổn định. Ở mức 12 GB, bạn có thể giữ một ControlNet hoặc hai ControlNet cùng checkpoint mà không cần offload. Ở mức 24 GB, bạn có thể chạy SDXL, refiner và upscaling trong cùng một workflow, đồng thời train LoRA adapter mà vẫn còn dư tài nguyên. Việc train không cần nhiều VRAM đến vậy: hướng dẫn train SDXL cho trainer kohya-ss sd-scripts cho biết có thể train LoRA với 8 GB GPU memory, và khuyến nghị 10 GB. Để làm được vậy, hướng dẫn yêu cầu chỉ train U-Net, bật gradient checkpointing, cache output của text encoder và latent, dùng 8-bit optimizer hoặc Adafactor, đồng thời giảm LoRA dim xuống 4 đến 8 trên card 8 GB. Hướng dẫn LoRA cho kohya_ss GUI, vốn bọc các script này, thận trọng hơn: hướng dẫn khuyến nghị dùng GPU có ít nhất 12 GB memory để train LoRA.
VPS dùng CPU có thể làm gì và không thể làm gì
Nó có thể làm được nhiều hơn mọi người nghĩ, nhưng ít hơn những gì marketing quảng bá. Cần xác định rõ giới hạn này.
VPS dùng CPU có thể cài ComfyUI, cung cấp web interface, lưu thư viện model, chạy queue và generate image hoàn toàn không cần GPU. Với Stable Diffusion 1.5 ở độ phân giải 512x512 và 20 steps, thời gian dự kiến là khoảng 60 đến 150 giây cho mỗi image trên 8 vCPU hiện đại với 16 GB RAM. Với batch job chạy qua đêm hoặc image endpoint có lưu lượng thấp đặt sau queue, mức hiệu năng này hoàn toàn dùng được.
VPS dùng CPU không phù hợp cho công việc tương tác. Prompt iteration có thể cần 20 lần render trong một giờ, nhưng nếu mỗi lần mất 13 phút thì bạn chỉ nhận được 4 image. Nó cũng không phù hợp để train. LoRA fine-tuning trên CPU được tính bằng ngày, không phải giờ, nên hãy xem tính năng này là không khả dụng.
Quy tắc về memory khi chỉ dùng CPU khác với quy tắc trên GPU. Weights được load vào system RAM, vì vậy bạn cần dung lượng của model cộng với phần memory cho quá trình xử lý: khoảng 16 GB RAM cho SDXL và khoảng 8 GB cho SD 1.5. Một máy 4 GB sẽ khởi động được ComfyUI, sau đó bị out-of-memory killer dừng giữa lần render đầu tiên. Khi đó process biến mất với Killed trong dmesg và không có Python traceback.
Cài đặt ComfyUI trên máy có GPU
Đây là các lệnh từ upstream. Bắt đầu với bản cài Ubuntu 24.04 sạch và NVIDIA driver đã được cài sẵn. Trước tiên, hãy xác nhận driver vì nếu bỏ qua bước này thì mọi lỗi ở các bước sau đều trông giống nhau.
nvidia-smiLệnh này phải in ra một bảng có card của bạn và phiên bản CUDA. command not found hoặc NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver nghĩa là driver chưa được cài hoặc kernel module không được load sau khi nâng cấp. Hãy sửa lỗi đó trước khi tiếp tục, vì ComfyUI sẽ âm thầm chuyển sang chạy bằng CPU và bạn sẽ đổ lỗi cho phần mềm.
sudo apt update
sudo apt install -y git python3-venv python3-pip wget
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
. venv/bin/activate
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130
pip install -r requirements.txtVirtual environment không phải là tùy chọn. PyTorch kéo theo một dependency tree lớn. Cài đặt nó trên toàn hệ thống của một máy đang chạy các ứng dụng khác là cách làm hỏng ứng dụng kia. Hãy xác nhận PyTorch nhìn thấy card trước khi tiếp tục.
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"True cùng với tên card của bạn nghĩa là stack đang hoạt động. False nghĩa là wheel đã cài không tương thích với driver, thường do CPU-only torch wheel đã có sẵn trong cache. Hãy cài lại bằng index URL ở trên.
Tải model và lập kế hoạch dung lượng đĩa
ComfyUI không kèm weights. Checkpoint nằm trong models/checkpoints, file VAE nằm trong models/vae, còn adapter LoRA nằm trong models/loras.
cd ~/ComfyUI/models/checkpoints
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensorsLuôn ưu tiên .safetensors thay cho .ckpt. File .ckpt là một Python object được pickle, và việc tải file này sẽ thực thi code từ người tạo ra nó. Định dạng safetensors chỉ chứa tensor, nên file độc hại không thể thực thi code.
Dung lượng lưu trữ là chi phí mà nhiều người quên tính. Một checkpoint SDXL base chiếm 6.94 GB. Refiner chiếm thêm 6 GB. Model SDXL ControlNet có dung lượng từ 320 MB với model Canny nhỏ đến 2.5 GB với model đầy đủ ở half precision. Upscaler nhỏ hơn: model Real-ESRGAN x4plus tiêu chuẩn chiếm 67 MB, model anime chiếm 17.9 MB, còn model anime video chiếm 2.5 MB. LoRA có dung lượng từ vài chục megabyte đến 787 MB với các adapter Hyper-SDXL của ByteDance. Người dùng thường tải model base thứ hai và thứ ba chỉ trong một tuần. Hãy dành 100 GB dung lượng đĩa cho một cài đặt hoạt động ổn định, đồng thời theo dõi cả thư mục outputs: file PNG 1024x1024 chiếm 1 đến 2 MB mỗi file, và một batch chạy không giám sát có thể âm thầm làm đầy ổ đĩa nhỏ. Đặt models/ và output/ trên volume có thể mở rộng, đồng thời sao lưu file workflow JSON bằng cách như sao lưu tăng dần được mã hóa lên object storage. Có thể tải lại weights. Các workflow bạn đã tinh chỉnh thì không thể khôi phục dễ dàng.
Chạy ứng dụng và truy cập an toàn
cd ~/ComfyUI
. venv/bin/activate
python main.py --listen 127.0.0.1 --port 8188ComfyUI chạy trên cổng 8188. Trên máy chỉ có CPU, thêm --cpu để buộc sử dụng đường xử lý CPU thay vì lỗi do không tìm thấy thiết bị CUDA.
Bind vào 127.0.0.1, không bind vào 0.0.0.0. ComfyUI hiện đã có tài khoản, nhưng không tài khoản nào trong số đó bảo vệ server của bạn. Mục đăng nhập trong Settings, ở phần User, đăng nhập bạn vào tài khoản Comfy và hoạt động cả với bản cài đặt local: tài liệu của Comfy liệt kê các cách đăng nhập bằng email, Google, GitHub và API key. Tài liệu mô tả tài khoản này là thông tin truy cập các partner node và gói đăng ký Comfy Cloud, không mô tả nó như một cách đặt password để bảo vệ server riêng của bạn. Flag --multi-user chỉ bật storage theo từng user: tính đến tháng 10 năm 2026, server lấy tên user từ header request comfy-user và không kiểm tra password. Bất kỳ ai truy cập được vào cổng này đều có thể xếp hàng job, đọc mọi image bạn đã tạo và, nếu bạn khởi động nó với --enable-manager, cài custom node, tức thực thi mã tùy ý trên server của bạn. Thay vào đó, hãy truy cập qua SSH tunnel từ laptop.
ssh -N -L 8188:127.0.0.1:8188 you@your-serverSau đó mở http://127.0.0.1:8188 trên máy local. Nếu cần truy cập thực sự cho nhiều user, hãy đặt một reverse proxy có authentication ở phía trước và giữ app bind vào localhost. Cách xử lý này cũng áp dụng cho mọi service self-hosted không có authentication và là pattern tiêu chuẩn trong các triển khai Docker Compose trên VPS.
Chạy liên tục bằng systemd
Một render queue dừng khi bạn đóng phiên SSH thì chưa phải là service. Hãy chạy nó bằng user comfy không có quyền login, không chạy bằng user của bạn: custom node là code, và code đó không nên có quyền truy cập vào home directory của bạn. Tạo user rồi chuyển thư mục cài đặt vào home directory của user đó:
sudo useradd --system --create-home --home-dir /home/comfy --shell /usr/sbin/nologin comfy
sudo mv ~/ComfyUI /home/comfy/
sudo chown -R comfy:comfy /home/comfy/ComfyUIVirtual environment vẫn hoạt động sau khi chuyển thư mục, vì unit gọi trực tiếp python của nó. Sau đó tạo /etc/systemd/system/comfyui.service.
[Unit]
Description=ComfyUI
After=network-online.target
[Service]
User=comfy
WorkingDirectory=/home/comfy/ComfyUI
ExecStart=/home/comfy/ComfyUI/venv/bin/python main.py --listen 127.0.0.1 --port 8188
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now comfyui
systemctl status comfyuiactive (running) và một dòng log có nội dung To see the GUI go to: http://127.0.0.1:8188 cho biết service đã chạy. Lưu ý rằng ExecStart gọi trực tiếp interpreter bên trong virtual environment, vì systemd không chạy shell profile của bạn nên activate không bao giờ xảy ra.
Khuyến nghị thực tế theo ngân sách
Nếu muốn thử tạo ảnh và chi phí quan trọng hơn tốc độ, hãy chọn một CPU VPS có 16 GB RAM, chạy SD 1.5 ở 512x512 và chấp nhận mỗi ảnh mất một hoặc hai phút. Đây là điểm bắt đầu thực tế. Chi phí chỉ bằng một phần nhỏ so với các máy có GPU. Bạn cũng có thể dùng máy này để lưu model library và workflow trong khi đánh giá nhu cầu.
Nếu hằng ngày bạn liên tục thử prompt, hãy thuê GPU có ít nhất 12 GB VRAM theo giờ từ một GPU cloud và tắt máy khi dừng. Tạo ảnh thường là tác vụ theo đợt. Để một GPU nhàn rỗi nhưng vẫn bị tính phí hàng tháng là cách phổ biến nhất khiến người dùng chi quá nhiều. Hãy lưu các checkpoint trên block storage giá rẻ rồi mount chúng.
Nếu cung cấp dịch vụ cho người khác hoặc thường xuyên train LoRA adapter, hãy dự trù 24 GB VRAM và một máy được duy trì liên tục. Hướng dẫn SDXL của sd-scripts cho biết có thể train LoRA với 8 GB và khuyến nghị 10 GB khi dùng các thiết lập tiết kiệm memory. Hướng dẫn LoRA của GUI kohya_ss yêu cầu ít nhất 12 GB. Mức 24 GB trong hướng dẫn sd-scripts dành cho fine-tuning SDXL đầy đủ với batch size 1. Vì vậy, card 24 GB đáp ứng được tác vụ LoRA và vẫn cho phép thực hiện fine-tuning. Ở mức này, cùng một máy thường có thể chạy thêm local language model để tận dụng chi phí. Đây là mô hình được mô tả trong tự host LLM với Ollama.
Dù chọn mức nào, hãy đo trên chính máy của bạn trước khi tin vào bất kỳ số liệu công bố nào. Đưa cùng một prompt vào queue 5 lần và đọc số giây mỗi iteration mà ComfyUI in trong console. Con số đó cho biết chính xác máy của bạn đang ở vị trí nào trong các mức hiệu năng.
FAQ
Tôi có thể chạy Stable Diffusion mà không có GPU không?
Có. ComfyUI chạy với python main.py --cpu và tạo ảnh thực mà không cần card đồ họa. Với Stable Diffusion 1.5 ở độ phân giải 512x512 trên 8 vCPU hiện đại, mỗi ảnh thường mất khoảng 60 đến 150 giây; SDXL ở 1024x1024 mất từ mười đến hai mươi phút. Cách này phù hợp với các batch chạy qua đêm và endpoint có lưu lượng thấp. Cách này không phù hợp để lặp prompt, còn việc training thì hoàn toàn không khả thi.
Tôi cần bao nhiêu VRAM cho SDXL?
8 GB đủ để chạy SDXL ở 1024x1024 một cách ổn định. Nếu ít hơn, ComfyUI sẽ tự động offload model weights sang system RAM và vẫn hoạt động. Tính đến tháng 10 năm 2026, README của ComfyUI nêu mức tối thiểu là 4 GB VRAM cộng với 8 GB system RAM; mỗi bước offload đều làm tăng thời gian xử lý. 12 GB cho phép giữ một ControlNet cùng checkpoint trong VRAM, còn 24 GB đủ cho base, refiner và upscaling trong cùng một workflow. Hướng dẫn sd-scripts của kohya-ss cho biết có thể training SDXL LoRA với 8 GB, khuyến nghị 10 GB, nếu dùng các thiết lập tiết kiệm memory của công cụ này; trong khi hướng dẫn LoRA của GUI kohya_ss yêu cầu ít nhất 12 GB. Fine-tuning đầy đủ cho SDXL cần 24 GB ở batch size 1.
Các model cần bao nhiêu dung lượng đĩa?
Chỉ riêng SDXL base checkpoint đã chiếm 6.94 GB, còn refiner cần thêm khoảng 6 GB. Các model SDXL ControlNet có dung lượng từ 320 MB đến 2.5 GB mỗi model khi dùng half precision, LoRA adapter từ vài chục megabyte đến 787 MB, còn upscaler Real-ESRGAN từ 2.5 MB đến 67 MB. Hãy dành 100 GB cho một bản cài đặt đang hoạt động với vài base model, đồng thời theo dõi riêng thư mục output vì mỗi file PNG 1024x1024 thường chiếm 1 đến 2 MB.
Có an toàn không nếu expose ComfyUI trên public Internet?
Không. Đăng nhập tài khoản Comfy trong phần settings của ComfyUI hoạt động từ một bản cài đặt local, nhưng nó cho phép bạn truy cập các partner node và cloud subscription của Comfy; không có nội dung nào trong tài liệu của Comfy trình bày tính năng này như một cơ chế bảo vệ cho server của bạn. Flag --multi-user chỉ tách storage theo từng user mà không kiểm tra password nào. Khi ComfyUI-Manager được bật, interface có thể cài custom node; đây là Python code chạy trên server của bạn, nên một port đang mở đồng nghĩa với khả năng thực thi code từ xa. Hãy bind nó vào 127.0.0.1, truy cập qua SSH tunnel bằng ssh -N -L 8188:127.0.0.1:8188 you@your-server, và đặt một reverse proxy có xác thực ở phía trước nếu có nhiều hơn một người cần truy cập.
Tại sao render của tôi bị kill mà không có thông báo lỗi?
Nếu process biến mất với Killed trong dmesg mà không có Python traceback, đó là Linux out-of-memory killer, không phải bug của ComfyUI. Trên máy chỉ chạy bằng CPU, weights nằm trong system RAM, nên SDXL cần khoảng 16 GB và SD 1.5 cần khoảng 8 GB, chưa tính phần memory phục vụ xử lý. Hãy tăng RAM, thêm swap, hoặc chuyển sang model nhỏ hơn và độ phân giải thấp hơn.