Có nên tự host model coding không?
Một playbook ra quyết định cho team muốn chạy model lớn nội bộ: khi nào đáng dựng SGLang, khi nào cứ dùng Copilot/API, và bẫy cần né.
Bụi WireCó một câu hỏi mình thấy các team AI ở Việt Nam hay né rất khéo: mình đang cần model chạy local, hay chỉ đang muốn cảm giác kiểm soát?
Nghe hơi phũ, nhưng câu này đáng hỏi trước khi bạn bấm thuê một máy 4×H100, kéo Docker image, xin quyền Hugging Face, rồi thức tới khuya nhìn log inference chạy như thẻ mượn sách bị kẹt ở quầy thủ thư.
Nguồn về SGLang cho thấy một chuyện rất đáng chú ý: chạy một model cỡ Mistral Medium 3.5 128B trên server GPU riêng không còn là trò biểu diễn xa xỉ. Với SGLang, Docker, NVIDIA container runtime và API tương thích OpenAI, bạn có thể dựng endpoint nội bộ để dùng với curl, Python hoặc workflow coding agent.
Nhưng luận điểm của mình không phải là “hãy tự host ngay”. Ngược lại: tự host model lớn là một quyết định vận hành, không phải quyết định theo trend. Sau bài này, mình muốn bạn đổi cách nghĩ từ “tool nào mạnh hơn?” sang “rủi ro nào khiến mình phải sở hữu endpoint?”.

Sơ đồ tóm tắt ý chính của bài viết.
Mục tiêu: chọn quyền kiểm soát nào thật sự đáng tiền
Nếu bạn là tech lead, quyết định ở đây không nằm ở việc SGLang hay vLLM “xịn” hơn. Câu hỏi đúng hơn là:
- Code/context của bạn có nhạy cảm đến mức không muốn gửi ra ngoài không?
- Team có đủ năng lực vận hành GPU server không?
- Latency, throughput và downtime có được đo rõ chưa?
- Workflow coding agent có cần endpoint tương thích OpenAI để thay model linh hoạt không?
Ở chiều ngược lại, GitHub Copilot hay cloud API vẫn có lý do tồn tại rất mạnh: ít phải vận hành, tích hợp IDE tốt, trải nghiệm ổn định cho số đông developer. Nhưng Copilot cũng kéo theo câu hỏi privacy: dữ liệu tương tác gồm prompt, output, code context quanh con trỏ và trạng thái accept/reject suggestion. Với plan cá nhân, interaction data có thể được dùng cho training nếu bạn không opt out; Business và Enterprise có điều khoản khác, loại trừ interaction data khỏi training.
Dịch sang tiếng người: nếu repo của bạn giống phòng lưu trữ tài liệu mật, bạn cần biết mỗi lần mở hồ sơ thì bản photocopy nào rời khỏi phòng.
Checklist trước khi dựng server riêng
Đừng bắt đầu bằng lệnh Docker. Bắt đầu bằng phiếu quyết định này:
| Câu hỏi | Nếu trả lời “có” | Nếu trả lời “không” |
|---|---|---|
| Có dữ liệu nhạy cảm trong code context? | Cân nhắc self-host hoặc policy chặt | Dùng Copilot/API có thể hợp lý hơn |
| Có budget GPU ổn định? | SGLang/vLLM đáng thử | Cloud API giảm gánh vận hành |
| Có người trực inference stack? | Tự host khả thi | Đừng biến dev thành SRE bất đắc dĩ |
| Cần OpenAI-compatible API? | SGLang là lựa chọn đáng kiểm tra | Tool managed có thể đủ |
| Có workload long-context hoặc agent loop nặng? | Serving framework chuyên dụng đáng giá | Local nhỏ/laptop không phù hợp |
Một số thuật ngữ cần chốt nhanh:
- SGLang: framework serving LLM hiệu năng cao, dùng để chạy model lớn qua API.
- OpenAI-compatible API: endpoint bắt chước chuẩn API của OpenAI, giúp tool khác đổi backend dễ hơn.
- tensor parallelism: chia một model lớn qua nhiều GPU để cùng xử lý.
- speculative decoding: kỹ thuật dùng model/phương án dự đoán trước token để cải thiện tốc độ sinh, nhưng không phải lúc nào cũng lời.
- NVIDIA container runtime: lớp giúp Docker container truy cập GPU NVIDIA.
Nếu checklist này chưa qua, bạn chưa cần tutorial triển khai. Bạn cần một cuộc họp ngắn với infra, security và nhóm developer sẽ dùng hệ thống.
Ba lựa chọn thực tế, không phải hai phe tôn giáo
Lựa chọn A: tiếp tục dùng Copilot hoặc cloud coding assistant
Hợp khi team cần năng suất nhanh, ít thao tác infra, không muốn tự giữ endpoint. Với Business/Enterprise, phần privacy có thể dễ quản trị hơn so với từng cá nhân tự cấu hình.
Điểm yếu: bạn phải hiểu rõ dữ liệu nào rời IDE, repo nào cần content exclusions, và policy nào áp dụng cho plan của bạn. Nếu team chỉ “bật lên cho tiện” mà không đọc cấu hình, đó là cách nhanh nhất để biến trợ lý coding thành một kệ sách không ai quản mã phân loại.
Lựa chọn B: tự host model lớn bằng SGLang
Hợp khi bạn cần kiểm soát inference endpoint, muốn chạy model open-weight quy mô lớn, cần phục vụ coding agent nội bộ, hoặc có yêu cầu dữ liệu không rời hạ tầng.
Tradeoff: bạn nhận luôn phần GPU provisioning, Docker, driver, runtime, model access, logs, monitoring, capacity planning. SGLang phù hợp hơn llama.cpp trong bối cảnh này vì đây không phải model GGUF nhỏ chạy laptop; đây là serving multi-GPU cho model dense lớn.
So với vLLM, điểm cần nghĩ không phải “cái nào có feature cơ bản hơn”, vì cả hai đều là serving engine mạnh. Quyết định nên dựa trên workload thật: structured generation, long-context, batch pattern, compatibility với stack hiện tại, và mức quen tay của team.
Lựa chọn C: hybrid — dùng cloud cho mặc định, self-host cho vùng nhạy cảm
Đây thường là phương án ít màu mè nhưng đáng sống nhất. Copilot/API cho việc thường ngày; endpoint local cho repo nhạy cảm, agent chạy trên tài liệu nội bộ, hoặc batch inference cần kiểm soát.
Ví dụ cụ thể: team bạn có 8 developer. Repo frontend public-ish dùng Copilot Business. Repo backend thanh toán và agent đọc tài liệu khách hàng đi qua endpoint SGLang nội bộ. Không phải mọi cuốn sách đều cần khóa trong tủ kính; nhưng hồ sơ mật thì đừng để trên bàn đọc chung.
Chạy thử trong một buổi: bản nháp deployment
Phần này không nhằm biến bạn thành chuyên gia GPU trong 30 phút. Mục tiêu là dựng được khung thử nghiệm đủ để ra quyết định tiếp hay dừng.
Bước 1: chuẩn bị máy GPU và quyền model
Bạn cần một máy multi-GPU đủ lớn cho model mục tiêu. Nguồn hướng dẫn dùng 4×H100 cho Mistral Medium 3.5 128B. Đừng suy diễn rằng cấu hình nhỏ hơn sẽ ổn nếu chưa kiểm chứng memory và parallelism.
Việc cần làm:
- Có quyền truy cập model trên Hugging Face.
- Cài Docker.
- Cài NVIDIA driver và NVIDIA container runtime.
- Kiểm tra container nhìn thấy GPU.
nvidia-smi
Nếu lệnh này còn lỗi, đừng kéo model vội. Sửa nền trước.
Bước 2: chạy SGLang bằng Docker
Mẫu lệnh sẽ phụ thuộc image/tag và model path bạn dùng. Khung tư duy là: mount cache Hugging Face, cấp GPU cho container, bật API server, cấu hình tensor parallelism.
docker run --gpus all --ipc=host --network=host \
-v ~/.cache/huggingface:/root/.cache/huggingface \
sglang-image \
python -m sglang.launch_server \
--model-path mistral-model-path \
--tp 4 \
--host 0.0.0.0 \
--port 30000
Ở đây --tp 4 là tensor parallelism qua 4 GPU. Nếu bạn đổi số GPU, đừng chỉ đổi con số cho đẹp; phải kiểm tra memory, model shard và log khởi động.
Bước 3: kiểm tra endpoint như một API bình thường
Khi server lên, test bằng curl trước khi nối vào agent.
curl http://localhost:30000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistral-medium-3.5",
"messages": [
{"role": "user", "content": "Viết một hàm Python đảo ngược chuỗi."}
]
}'
Nếu curl chưa ổn mà bạn đã cắm vào IDE hoặc coding agent, bạn chỉ đang thêm lớp nhiễu vào lỗi.
Bước 4: nối vào coding workflow
Vì endpoint tương thích OpenAI, bạn có thể cấu hình các tool hỗ trợ custom base URL, ví dụ workflow coding agent nội bộ hoặc OpenCode như nguồn hướng dẫn đề cập.
Điểm cần đo không chỉ là “trả lời được không”, mà là:
- Thời gian phản hồi có chịu được trong IDE không?
- Model có giữ format patch/diff ổn không?
- Có timeout khi agent gọi nhiều bước không?
- Log có đủ để debug prompt, latency, lỗi tool calling không?
Hình dung thế này: bạn không đánh giá thư viện bằng việc “có nhiều sách không”, mà bằng việc tìm đúng sách trong lúc đông người có bị nghẽn ở quầy mượn hay không.
Bẫy hay gặp: tự host xong mới phát hiện mình cần policy
Bẫy đầu tiên là nghĩ self-host tự động giải quyết privacy. Không hẳn. Nếu log prompt chứa secrets, nếu dashboard mở rộng, nếu developer paste dữ liệu khách hàng vào chat nội bộ, bạn vẫn có rủi ro. Tự host chỉ chuyển trách nhiệm về phía bạn.
Bẫy thứ hai là benchmark nhầm. Speculative decoding như EAGLE có thể cải thiện latency trong một số cấu hình, nhưng nguồn cũng đặt nó như phần cần test/so sánh, không phải mặc định bật là thắng. Hãy đo trên prompt thật của team: code completion, refactor, test generation, agent loop.
Bẫy thứ ba là chọn framework theo tiếng vang. SGLang hợp với serving model lớn, long-context, structured generation và multi-GPU. vLLM cũng rất mạnh cho production serving. llama.cpp vẫn tuyệt nếu bạn chạy model nhỏ/quantized trên máy cá nhân. Sai lầm là lấy tiêu chí của laptop áp cho server, hoặc lấy tiêu chí của server áp cho laptop.
Nếu là mình, mình sẽ quyết như sau
Mình sẽ không tự host chỉ vì có tutorial đẹp. Mình sẽ tự host khi có ít nhất hai trong bốn điều kiện:
- Code hoặc tài liệu nội bộ không nên rời hạ tầng.
- Team có workload coding agent đủ nặng để endpoint riêng có ý nghĩa.
- Có người chịu trách nhiệm vận hành GPU và monitoring.
- Cần khả năng đổi model/framework mà không viết lại toàn bộ app.
Nếu chỉ cần autocomplete và chat coding phổ thông, Copilot Business/Enterprise hoặc cloud API có thể là đường ngắn hơn. Nếu có vùng dữ liệu nhạy cảm, hãy dùng hybrid: managed assistant cho việc thường ngày, SGLang endpoint cho phần cần kiểm soát.
Câu hỏi sau bài này không còn là “model local có chạy được không?”. Chạy được rồi. Câu hỏi đúng hơn là: team bạn có thật sự muốn làm thủ thư cho cả phòng đọc inference không?
---
Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng