Mục lục bài
Chọn engine phục vụ
Các bước thực hiện
Tiến độ chỉ lưu trên trình duyệt này.
Bước 1: Chạy vLLM với API tương thích OpenAI
Bash --host 127.0.0.1giữ API chỉ nghe trên máy; ra ngoài đi qua reverse proxy ở bước 6.--max-model-lengiới hạn độ dài ngữ cảnh để kiểm soát KV cache.Gọi thử Bước 2: Tensor parallel, lượng tử hoá và LoRA trên vLLM
Bash - Tensor parallel nên dùng trong một node có kết nối GPU nhanh; số GPU phải chia hết cho số attention head của mô hình.
- Mức hỗ trợ từng kiểu lượng tử hoá phụ thuộc thế hệ GPU — kiểm tra bảng tương thích trong tài liệu vLLM.
- Lượng tử hoá có thể ảnh hưởng chất lượng; đánh giá lại bằng bộ câu hỏi nghiệp vụ.
Bước 3: Ollama cho máy nhỏ
Bash Dùng file GGUF tự xuất ở bài fine-tune:
Modelfile Bash Cảnh báo: Ollama import GGUF có thể không tự nhận đúng chat template của mô hình đã fine-tune. Nếu câu trả lời lạ, khai báo
TEMPLATEtrong Modelfile theo tài liệu Ollama.Bước 4: llama.cpp server
Bash -ngl 99đẩy tối đa số lớp lên GPU; bỏ tham số này để chạy thuần CPU. API tương thích OpenAI tại/v1/chat/completions.Bước 5: Giao diện chat nội bộ với Open WebUI
Chạy vLLM và Open WebUI trong cùng mạng Docker: vLLM không mở cổng ra máy chủ, chỉ Open WebUI truy cập được.
compose.yaml Bash Mẹo: Tài khoản đăng ký đầu tiên trên Open WebUI trở thành quản trị viên — tạo ngay sau khi khởi động, rồi tắt tự đăng ký hoặc chuyển sang đăng nhập SSO (OIDC) trong phần cài đặt.
Bước 6: Reverse proxy, HTTPS và tường lửa
/etc/caddy/Caddyfile Bash - Khối
llm-apigiả định vLLM nghe tại127.0.0.1:8000như bước 1. Nếu chạy vLLM trong compose ở bước 5 và cần mở API cho ứng dụng khác, thêmports: ["127.0.0.1:8000:8000"]cho servicevllm. tls internaldùng CA nội bộ của Caddy — cần cài chứng chỉ gốc lên máy người dùng, hoặc dùng chứng chỉ của doanh nghiệp.- Cổng Docker publish ra
0.0.0.0có thể vượt qua quy tắc ufw. Luôn bind127.0.0.1:như trong compose ở trên. - Mỗi ứng dụng gọi API dùng key riêng qua tầng gateway khi cần thu hồi độc lập; vLLM chỉ hỗ trợ một nhóm key tĩnh.
- Ghi log truy cập ở reverse proxy; không log nội dung prompt nếu chứa dữ liệu nhạy cảm.
- Khối
Bước 7: Đo tải trước khi mở cho người dùng
Đo trên chính phần cứng, mô hình và độ dài prompt giống thực tế. Các chỉ số cần xem: thời gian ra token đầu (TTFT), thời gian mỗi token sau đó, thông lượng và tỷ lệ lỗi khi tăng số yêu cầu đồng thời.
Bash vLLM cũng xuất số liệu Prometheus tại
/metrics— nối vào hệ giám sát theo bài giám sát & vận hành.
Kiểm tra thành công
- Người dùng mở
https://chat.congty.local, đăng nhập và chat được. - Gọi API không có key bị từ chối; từ ngoài dải IP cho phép bị chặn.
- Có kết quả đo tải ở mức đồng thời dự kiến, lưu lại làm mốc.
Lỗi thường gặp & cách sửa
vLLM báo không đủ bộ nhớ cho KV cache khi khởi động
Nguyên nhân thường gặp: --max-model-len quá lớn so với VRAM còn lại sau khi nạp trọng số.
Giảm --max-model-len, tăng --gpu-memory-utilization (nếu GPU không chạy việc khác), dùng bản lượng tử hoá hoặc thêm GPU với tensor parallel.
Open WebUI không thấy mô hình
Nguyên nhân thường gặp: Sai OPENAI_API_BASE_URL, sai key, hoặc vLLM chưa nạp xong mô hình.
Tải mô hình từ Hugging Face bị 401/403
Nguyên nhân thường gặp: Mô hình yêu cầu chấp nhận giấy phép hoặc token không có quyền.
Chấp nhận điều khoản trên trang mô hình bằng tài khoản của token, đặt HF_TOKEN trong .env. Máy không ra Internet: tải mô hình ở máy khác rồi chép vào volume cache.
Câu trả lời bị cắt ngang
Nguyên nhân thường gặp: max_tokens phía client quá nhỏ hoặc chạm giới hạn --max-model-len.
Tăng max_tokens trong yêu cầu, rút gọn prompt/ngữ cảnh RAG, hoặc tăng --max-model-len nếu VRAM cho phép.
Bước tiếp theo
Từ máy chủ, mô hình, giao diện đến SSO và giám sát.
Nguồn chính chủ
Lệnh, tên gói và tham số thay đổi theo phiên bản. Trước khi chạy trên máy thật, hãy kiểm tra phiên bản mới nhất tại trang chính chủ:
- vLLM — Documentation
- SGLang — Documentation
- Text Generation Inference — Hugging Face
- Ollama — Documentation
- llama.cpp server — GitHub
- Open WebUI — Documentation
- Caddy — Documentation
Giới hạn của bài
- Bài không đưa số token/giây hay số người dùng một GPU phục vụ được — chạy bước 7 trên hệ thống của bạn để có số thật.
- Tag
latest/maintrong compose chỉ để minh hoạ; môi trường sản xuất phải ghim phiên bản. - Bài không đề cập Kubernetes, autoscaling, cân bằng tải nhiều máy phục vụ.
Kỹ sư HQG khảo sát, lên cấu hình, lắp đặt và bàn giao hạ tầng AI chạy được thật.