
Đổi OpenAI sang model mở: 2 dòng code và bài kiểm VRAM
Endpoint OpenAI-compatible giúp đổi sang model mở chỉ bằng base_url và api_key. Kèm cách tính VRAM trước khi quyết định chạy local.
Hóa đơn OpenAI tháng này tăng gấp đôi mà bạn chưa đổi một dòng code nào. Sếp hỏi có cách nào rẻ hơn mà không phải viết lại service đang chạy.
Câu trả lời thường là hai dòng config — cộng một bài kiểm tra VRAM trước khi bạn nghĩ tới chuyện chạy local.
Hai dòng đó nằm ở đâu
OpenAI SDK không quan tâm server phía bên kia là của ai. Nếu endpoint nói cùng một giao thức, bạn chỉ cần đổi base_url và api_key. Một bài hướng dẫn của Runcrate mô tả đúng cách này: bài viết cho biết endpoint OpenAI-compatible của họ phục vụ 223 model sau một địa chỉ duy nhất, gồm các họ open-weight như DeepSeek, Qwen, Llama, Kimi, GLM và gpt-oss.
Ví dụ minh hoạ (không phải code production):
client = OpenAI(
base_url="https://api.runcrate.ai/v1",
api_key=os.environ["RUNCRATE_API_KEY"],
)
Nếu code của bạn đang gọi OpenAI() không tham số, theo bài viết bạn không cần sửa code: cả SDK Python và Node đều đọc OPENAI_BASE_URL và OPENAI_API_KEY từ environment. Đây là lý do nên để base URL, key và tên model trong env var ngay từ đầu — đổi nhà cung cấp trở thành thay đổi cấu hình, không phải thay đổi code.
Đọc giá bằng code, đừng đọc bằng trang pricing
models.list() trả về giá per-token của từng model. Bài viết cho biết lệnh này in ra 160 model text trong lần chạy ngày 2026-10-21, với mức giá sau cho mỗi 1 triệu token:
| Model | Input | Output |
|---|---|---|
| openai/gpt-oss-120b | $0.037 | $0.17 |
| meta-llama/Llama-3.3-70B-Instruct-Turbo | $0.10 | $0.32 |
| deepseek-ai/DeepSeek-V3.2 | $0.26 | $0.38 |
| Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo | $0.30 | $1.00 |
| moonshotai/Kimi-K2.5 | $0.49 | $2.50 |
Chính bài viết cũng nhắc giá thay đổi theo thời gian, nên hãy đọc từ endpoint thay vì chép lại con số.
Cái gì giữ nguyên, cái gì gãy
Theo bài viết, streaming, tool call và JSON mode chạy với SDK gốc không sửa gì: một tool get_weather(city) trả về finish_reason="tool_calls" với arguments {"city":"Paris"} — đúng shape mà vòng lặp tool hiện tại của bạn đã xử lý. Model loại reasoning đặt phần suy luận vào field reasoning_content riêng, nên app vẫn đọc content như cũ.
Hai thứ gãy: tên model cũ không tồn tại (gpt-4o trả 404 model_not_found), và catalog hiện không có model embedding — giữ nguyên phần embedding ở chỗ cũ.
Trước khi nghĩ tới local: model có vừa máy không
Endpoint rẻ hơn vẫn là tiền thuê. Nếu bạn định chạy local, kiểm tra bộ nhớ trước khi tải hàng chục GB weight về. Vramwise, một công cụ đọc config.json trực tiếp từ Hugging Face, công bố ví dụ Qwen3-8B trên RTX 4090 24 GB ở context 8K: BF16 chiếm 18,6 GB trên 24 GB khả dụng ở tốc độ ước tính 29–46 tok/s, còn Q4_K_M chỉ 7,17 GB ở 82–131 tok/s. Nhà phát triển công cụ tự ghi rõ đây là ước lượng, không phải đo thực tế, dựa trên 50–80% trần băng thông bộ nhớ cho một người dùng.
Con số đó là lập luận quen thuộc cho quantization: cùng một card, hạ xuống 4-bit vừa giải phóng hơn một nửa bộ nhớ vừa tăng throughput. Hãy tự chạy lại với model và context của bạn — đừng lấy bảng của người khác làm kế hoạch mua máy.
Làm gì tuần này
- Đưa base URL, API key và tên model ra env var, nếu chúng còn hardcode.
- Chạy thử một endpoint OpenAI-compatible trên nhánh staging với chính prompt của bạn — tool call và JSON mode phụ thuộc từng model, phải test mới biết.
- Tính VRAM cho model bạn định chạy local trước khi duyệt ngân sách GPU.
Không spam, hủy đăng ký bất kỳ lúc nào.
Bài viết liên quan

Pipeline RAG từ PDF: chunk kèm số trang và cổng kiểm
20 thg 10, 2026
Chạy Beam 501B: tự host GPU hay gọi qua AI Gateway?
16 thg 10, 2026