Chạy mô hình AI trên VPS GPU: từ máy trống tới chạy được

Bài này đi một mạch từ máy GPU vừa đặt xong tới lúc chạy được một mô hình ngôn ngữ và gọi được nó từ ứng dụng. Trước khi làm theo, máy phải đã nhận GPU: xem bài Cài trình điều khiển và bộ công cụ để chạy việc trên GPU.

Kiểm nhanh một lệnh, ra bảng là đi tiếp được:

nvidia-smi

1. Chọn mô hình vừa bộ nhớ GPU

Đây là quyết định đầu tiên và là chỗ hay vấp nhất. Mô hình không vừa bộ nhớ GPU thì không chạy được, dù CPU và RAM có dư bao nhiêu.

Cách ước lượng nhanh dung lượng bộ nhớ GPU một mô hình cần:

Cách lượng tử hoá Bộ nhớ cần, xấp xỉ
Không lượng tử (16 bit) số tỷ tham số × 2 GB
8 bit số tỷ tham số × 1 GB
4 bit số tỷ tham số × 0,6 GB

Ví dụ một mô hình 7 tỷ tham số: khoảng 14 GB nếu để nguyên, khoảng 4 GB nếu lượng tử 4 bit.

Cộng thêm khoảng 1 tới 2 GB cho phần ngữ cảnh và phần đệm khi chạy. Nếu con số ra sát mức bộ nhớ của card thì chọn mô hình nhỏ hơn một bậc, vì chạy sát mức sẽ gặp lỗi hết bộ nhớ ngay khi có nhiều yêu cầu cùng lúc.

Xem bộ nhớ card đang có:

nvidia-smi --query-gpu=name,memory.total --format=csv

2. Cách nhanh nhất để có kết quả: Ollama

Nếu quý Khách hàng chỉ cần chạy một mô hình ngôn ngữ và gọi nó từ ứng dụng, đây là đường ngắn nhất. Không phải dựng môi trường Python, không phải lo phiên bản thư viện.

curl -fsSL https://ollama.com/install.sh -o cai-ollama.sh
less cai-ollama.sh          # doc qua truoc khi chay
sudo sh cai-ollama.sh

Kiểm Ollama có thấy GPU không:

ollama --version
nvidia-smi          # chay song song o mot cua so khac khi tai mo hinh

Tải và chạy thử một mô hình:

ollama run qwen2.5:7b

Lần đầu sẽ tải mô hình về, mất một lúc tuỳ đường truyền. Sau đó hiện dấu nhắc để gõ thử. Gõ /bye để thoát.

Kiểm xem nó có thật sự chạy trên GPU không. Mở một cửa sổ thứ hai trong lúc mô hình đang trả lời:

nvidia-smi

Cột Memory-Usage phải tăng và GPU-Util phải nhảy lên. Nếu bộ nhớ GPU gần như không đổi mà CPU thì đầy, nghĩa là mô hình đang chạy trên CPU, và tốc độ sẽ chậm hơn nhiều lần. Xem mục 6.

3. Gọi từ ứng dụng

Ollama mở sẵn một cổng dịch vụ ở localhost:11434. Gọi thử:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Viet mot cau gioi thieu ngan ve dich vu luu tru dam may",
  "stream": false
}'

🔴 Mặc định cổng này chỉ nghe ở máy nội bộ, và nên giữ nguyên như vậy. Nếu mở ra Internet thì bất kỳ ai cũng gọi được, tức là dùng GPU mà quý Khách hàng đang trả tiền. Cần gọi từ máy khác thì đi qua một lớp có xác thực, hoặc qua đường hầm riêng, đừng mở thẳng cổng ra ngoài.

4. Khi cần tự chủ hơn: dùng container

Hợp khi quý Khách hàng cần đúng phiên bản thư viện, hoặc chạy mã tự viết chứ không chỉ gọi mô hình có sẵn.

# Cai Docker va phan noi Docker voi GPU (xem bai Cai trinh dieu khien, muc 3)
sudo docker run --rm --gpus all ubuntu nvidia-smi

Ra đúng bảng nvidia-smi bên trong container nghĩa là đường nối đã thông. Từ đây kéo về container đã dựng sẵn cho công việc của mình.

Ưu điểm so với cài thẳng lên máy: phiên bản thư viện nằm trong container, nên nâng cấp hệ điều hành không làm hỏng môi trường, và chuyển sang máy khác chỉ việc chạy lại cùng một lệnh.

5. Dữ liệu và mô hình để ở đâu

Mô hình chiếm nhiều dung lượng, và ổ đĩa máy GPU thường không rộng.

Thứ Nên để ở đâu
Mô hình đang dùng Ổ đĩa của máy, để nạp nhanh
Mô hình đã thử nhưng không dùng Xoá đi, tải lại khi cần
Dữ liệu huấn luyện, dữ liệu gốc Kho tách biệt, chép phần đang dùng về máy khi chạy
Kết quả đã xong Đẩy ra kho tách biệt ngay sau mỗi đợt

Xem các mô hình đang chiếm chỗ và xoá bớt:

ollama list
ollama rm ten-mo-hinh

Để dữ liệu gốc ở kho tách biệt có một ích lợi thường bị bỏ qua: khi không chạy việc, quý Khách hàng huỷ máy GPU được mà không mất gì. Xem chuyên mục Object Storage để biết cách nối kho vào máy.

6. Mô hình chạy trên CPU thay vì GPU

Hiện tượng: trả lời rất chậm, nvidia-smi thấy bộ nhớ GPU gần như không dùng, trong khi CPU đầy.

Nguyên nhân theo thứ tự hay gặp:

a. Mô hình không vừa bộ nhớ GPU. Phần mềm tự chuyển sang CPU thay vì báo lỗi. Đây là nguyên nhân phổ biến nhất. Chọn bản lượng tử nhỏ hơn, hoặc mô hình ít tham số hơn.

b. Trình điều khiển chưa sẵn sàng. Chạy nvidia-smi, không ra bảng thì xử lý lớp đó trước.

c. Bộ nhớ GPU đang bị tiến trình cũ giữ. Xem cột Processes trong nvidia-smi, kết thúc tiến trình không còn dùng.

d. Container chạy thiếu --gpus all. Thiếu cờ này thì container không nhìn thấy GPU nào.

7. Giữ việc chạy khi mất kết nối

Việc chạy trong phiên SSH sẽ chết theo phiên khi đường truyền ngắt. Với một đợt huấn luyện vài giờ, đó là mất trắng.

sudo apt install -y tmux
tmux new -s ai
# chay viec o day
# nhan Ctrl+B roi D de roi phien ma viec van chay

Quay lại:

tmux attach -t ai

8. Theo dõi trong lúc chạy

watch -n 2 nvidia-smi

Nhìn hai cột:

  • Memory-Usage gần đầy mà GPU-Util thấp: GPU đang chờ dữ liệu, nút cổ chai nằm ở khâu đọc đĩa hoặc chuẩn bị dữ liệu, không phải ở GPU.
  • Cả hai đều cao: GPU đang chạy hết sức, muốn nhanh hơn thì cần card mạnh hơn hoặc tối ưu lại.

9. Việc nên làm thành thói quen

Thói quen Vì sao
Ghi lại tên card, phiên bản trình điều khiển, phiên bản thư viện Mọi tài liệu và mọi bên hỗ trợ đều hỏi ba thứ này
Chạy việc dài trong tmux Mất kết nối không làm mất việc
Đẩy kết quả ra kho ngoài sau mỗi đợt Máy GPU không phải chỗ giữ dữ liệu lâu dài
Tắt máy khi không dùng, nếu thuê theo giờ Máy bật mà không chạy gì vẫn tính tiền
Không mở cổng mô hình ra Internet Người khác dùng GPU quý Khách hàng đang trả tiền

10. Khi cần hỗ trợ

Lỗi về trình điều khiển, GPU không nhận, máy chậm bất thường: xem bài GPU không nhận hoặc chạy chậm.

Cần tư vấn chọn cấu hình phù hợp với mô hình định chạy, hãy nêu rõ tên mô hình và số tham số khi liên hệ đội ngũ kinh doanh Cloudzone, hoặc nhắn qua ô chat trên trang chủ. Đó là hai thông tin quyết định dung lượng bộ nhớ GPU cần có.

Hướng dẫn này có ích cho bạn?

Cần đặt dịch vụ? Xem cấu hình và giá tại bảng giá Cloudzone - đặt gói trực tuyến, nhận dịch vụ ngay sau thanh toán. Cần tư vấn, mở khung chat ở góc phải màn hình.

Hướng dẫn liên quan