⚡ Chọn hạ tầng rẻ: VPS, spot instance, serverless

By Ngọc Vương Trương

Ở Module 1 bạn đã dựng MLflow, DVC và MinIO trên một VPS rẻ, tức là bạn đã có sẵn một chỗ để chạy. Câu hỏi của bài này hẹp hơn: từng khối lượng công việc (train, batch inference, API serving) nên đặt ở đâu để tổng chi phí thấp nhất mà vẫn chạy được? Đặt sai chỗ thì bạn trả tiền cho tài nguyên nhàn rỗi, hoặc trả giá bằng downtime.

Sau bài này bạn sẽ:

  • Đọc được tải thực tế của mình bằng ba con số thay vì cảm tính.
  • Nêu được điểm mạnh và điểm chết người của VPS, spot instance, serverless.
  • Ra quyết định chọn hạ tầng trong khoảng 60 giây bằng một cây quyết định.
  • Tránh ba cạm bẫy khiến hóa đơn tăng gấp đôi mà hiệu năng không tăng.

Ba con số cần đo trước khi nhìn bảng giá

Đừng bắt đầu bằng giá. Bắt đầu bằng tải, vì cùng một mức giá có thể là đắt hoặc rẻ tùy tải.

  1. Request/giây trung bình và đỉnh. Trung bình cho biết bạn cần bao nhiêu tài nguyên nền, đỉnh cho biết bạn có cần autoscale hay không. Một API 5 request/phút và một API 50 request/giây là hai bài toán khác hẳn nhau.
  2. Mức gián đoạn chịu được. Job train chết giữa chừng rồi chạy lại thì không sao. API phục vụ khách hàng chết 2 phút thì có sao. Con số này quyết định spot instance có dùng được hay không.
  3. Thời gian vận hành của bạn. Tự vá OS, tự dựng monitoring, tự xoay credential đều là chi phí, chỉ là nó không nằm trên hóa đơn.

Note: Với capstone của khóa này, tải thường rất nhỏ. Đừng thiết kế hạ tầng cho 100 nghìn người dùng khi bạn có 3 người dùng thử. Hãy thiết kế sao cho thêm tải thì thêm tiền, chứ không phải làm lại từ đầu.

VPS: trả tiền cho sự đơn giản và luôn bật

VPS là một máy ảo chạy 24/7, bạn trả theo tháng dù có dùng hay không. Đổi lại bạn được toàn quyền: cài Docker, chạy MLflow, mở cổng, gắn ổ đĩa.

Phù hợp khi: tải đều và thấp, model nhỏ (dưới vài trăm MB), bạn cần dịch vụ nền luôn sống (MLflow tracking server, MinIO, database metadata), và bạn muốn một hóa đơn cố định dễ dự đoán.

Cạm bẫy: CPU/RAM bị chia sẻ nên hiệu năng không ổn định, muốn scale phải nâng gói hoặc tự dựng thêm, và bạn là người chịu trách nhiệm vá bảo mật. Một điểm rất thực tế: nếu VPS đang chạy MLflow mà còn dư RAM, chi phí biên của việc đặt thêm một model nhỏ lên đó gần như bằng 0.

Spot instance: mua công suất dư với giá bằng một phần ba

Spot instance (hay preemptible VM ở các nhà cung cấp khác) là công suất dư mà nhà cung cấp bán rẻ, thường rẻ hơn on-demand khoảng 60 đến 90 phần trăm. Cái giá phải trả: máy có thể bị thu hồi bất cứ lúc nào, với thời gian báo trước rất ngắn (khoảng 2 phút ở AWS).

Phù hợp khi: job train dài, batch inference trên dữ liệu lớn, các worker xử lý hàng đợi, miễn là công việc có thể chia nhỏ và ghi checkpoint. Không phù hợp khi: serving cần độ trễ thấp mà không có phương án dự phòng.

Nguyên tắc sống còn: checkpoint là điều kiện bắt buộc, không phải tính năng phụ. Ghi trạng thái train ra MinIO hoặc S3 mỗi 10 đến 15 phút. Khi máy bị thu hồi, worker mới đọc checkpoint và chạy tiếp, bạn mất vài phút chứ không mất 4 giờ.

Serverless: trả tiền theo request, im lặng thì không mất tiền

Với serverless (Lambda, Cloud Functions, Cloud Run dạng scale to zero), bạn trả theo số request và GB-giây thời gian chạy. Không có request thì không có hóa đơn, đây là điểm mạnh lớn nhất với các API ít traffic.

Phù hợp khi: lưu lượng thấp hoặc bursty, model nhỏ, thời gian suy luận ngắn, và bạn chấp nhận cold start. Không phù hợp khi: model nặng phải nạp hàng trăm MB mỗi lần khởi động, job chạy dài vượt giới hạn thời gian, hoặc cần GPU.

Cạm bẫy kinh điển: cold start. Một model 800MB có thể mất 10 đến 30 giây để sẵn sàng, đủ để người dùng bỏ đi. Hãy đo thời gian cold start trước khi cam kết, đừng đoán.

Bảng so sánh và cây quyết định 60 giây

Tiêu chí VPS Spot instance Serverless
Cách tính tiền Theo tháng, dùng hay không dùng Theo giây/phút, rẻ hơn on-demand nhiều Theo request và GB-giây
Tải phù hợp Đều, thấp, chạy 24/7 Job dài, chịu gián đoạn Thưa, bursty, khó đoán
Scale Thủ công Thêm worker khi cần Tự động, kể cả về 0
Rủi ro chính Hết RAM, không tự co giãn Bị thu hồi giữa chừng Cold start, giới hạn thời gian
Serving latency thấp Tốt Kém nếu không có dự phòng Kém nếu model lớn
Công sức vận hành Trung bình, bạn vá máy Trung bình, cần logic checkpoint Thấp
flowchart TD
    A["❓ Khối lượng công việc này là gì"] --> B{"Job dài: train<br/>hoặc batch lớn?"}
    B -->|Có| C["⚡ Spot instance<br/>kèm checkpoint ra MinIO"]
    B -->|Không| D{"Có traffic liên tục<br/>hằng phút?"}
    D -->|Có| E["🖥️ VPS<br/>chi phí cố định"]
    D -->|Thưa hoặc bursty| F["☁️ Serverless<br/>trả theo request"]
    E --> G["Kiểm tra lại<br/>RAM còn dư?"]
    G -->|Còn| E
    G -->|Hết| H["Nâng gói hoặc tách<br/>sang spot"]

Vài con số để hình dung:

Spot instance thường rẻ hơn on-demand khoảng _____ phần trăm nhưng có thể bị _____ với báo trước rất ngắn, nên job bắt buộc phải ghi _____ ra storage bền. Serverless có ưu điểm _____ nên không tốn tiền khi không có request, đổi lại là rủi ro _____ với model lớn. VPS phù hợp với tải _____ vì bạn trả tiền theo _____ bất kể có dùng hay không.

Áp thử vào capstone của bạn

Bài tập 1. Model scikit-learn khoảng 50MB, API nội bộ, khoảng 200 request mỗi ngày, ban đêm gần như không ai gọi. Bạn đã có một VPS 4GB đang chạy MLflow. Chọn hạ tầng nào?

Gợi ý đáp án

Đặt model ngay trên VPS sẵn có, đóng gói bằng Docker, vì chi phí biên gần như bằng 0 và độ phức tạp vận hành thấp nhất. Serverless nghe hợp lý về lý thuyết nhưng thêm một nhà cung cấp, thêm cold start, thêm cấu hình, trong khi VPS đã trả tiền rồi. Chỉ tách sang serverless khi cần cô lập hoặc khi traffic tăng tới mức VPS không theo kịp.

Bài tập 2. Mỗi tuần bạn train lại model 2 lần, mỗi lần khoảng 4 giờ, dữ liệu 20GB nằm trên MinIO. Chọn hạ tầng nào và cần chuẩn bị gì?

Gợi ý đáp án

Dùng spot instance, vì job dài, chạy theo lô và chịu được gián đoạn. Chuẩn bị: script train đọc/ghi checkpoint ra MinIO mỗi 10 đến 15 phút, một vòng lặp tự động xin lại spot khi bị thu hồi, và một job dự phòng on-demand cho lần chạy cuối nếu deadline gấp. VPS 4GB không đủ RAM cho 20GB dữ liệu, còn serverless bị giới hạn thời gian chạy.

Những chỗ tôi đã trả giá để học

  • Đừng thuê GPU theo tháng cho 4 giờ train mỗi tuần. Đó là kiểu lãng phí phổ biến nhất. Spot theo giờ gần như luôn rẻ hơn.
  • Luôn có đường lui cho spot. Không có checkpoint thì tiết kiệm 70 phần trăm giá thuê có thể bị xóa sạch bởi một lần bị thu hồi giữa đêm.
  • Đo cold start trước khi chọn serverless. Model trên 500MB thường là dấu hiệu nên dừng lại và cân nhắc VPS.
  • Đừng quên chi phí ẩn: băng thông ra ngoài (egress), IP tĩnh, snapshot ổ đĩa, và thời gian bạn ngồi vá máy. Khoản cuối thường lớn nhất.
  • Quy tắc ngón tay cái: dưới khoảng 1 request/giây và chấp nhận cold start thì serverless thường rẻ nhất; chạy 24/7 với tải đều thì VPS rẻ hơn; job dài trên 30 phút thì spot.
  • Đặt cảnh báo chi phí ngay ngày đầu tiên, không phải khi nhìn thấy hóa đơn bất thường.

Chốt lại và mảnh ghép tiếp theo

Ba điều cần nhớ:

  • Chọn hạ tầng bằng tải thực tế (request/giây, mức gián đoạn chịu được, công sức vận hành), không bằng bảng giá.
  • VPS cho tải đều và dịch vụ nền, spot cho job dài có checkpoint, serverless cho traffic thưa và model nhẹ.
  • Serverless không miễn phí, spot không an toàn nếu thiếu checkpoint, VPS không tự co giãn.

Front: VPS tính tiền theo cách nào? Back: Theo tháng, trả cố định dù có dùng hay không.

Front: Spot instance rẻ hơn on-demand khoảng bao nhiêu? Back: Khoảng 60 đến 90 phần trăm, tùy loại máy và thời điểm.

Front: Rủi ro chính khi dùng spot instance là gì? Back: Máy có thể bị thu hồi với thời gian báo trước rất ngắn, khoảng 2 phút ở AWS.

Front: Loại công việc nào phù hợp với spot instance? Back: Job train dài và batch inference có ghi checkpoint, chịu được gián đoạn.

Front: Ưu điểm lớn nhất của serverless là gì? Back: Scale to zero, không có request thì không phát sinh chi phí chạy.

Front: Serverless tính tiền theo đơn vị nào? Back: Số request và số GB-giây thời gian chạy.

Front: Vì sao serverless hay gặp vấn đề với model lớn? Back: Cold start lâu vì phải nạp lại model mỗi lần khởi động.

Front: Ba con số cần đo trước khi chọn hạ tầng? Back: Request/giây trung bình, request/giây đỉnh, và mức gián đoạn chịu được.

Front: Khi nào VPS là lựa chọn rẻ nhất? Back: Tải đều, chạy 24/7, model nhỏ, không cần tự động co giãn.

Front: Điều gì bắt buộc khi train trên spot instance? Back: Ghi checkpoint định kỳ ra storage bền như MinIO hoặc S3.

Front: Vì sao đặt thêm model nhỏ lên VPS đang chạy MLflow lại rẻ? Back: Chi phí biên gần bằng 0 vì tài nguyên đã được trả tiền.

Front: Những chi phí ẩn thường bị bỏ quên khi tính hạ tầng? Back: Egress băng thông, IP tĩnh, snapshot ổ đĩa và thời gian vận hành.

Front: Quy tắc ngón tay cái cho tải dưới 1 request/giây? Back: Serverless thường rẻ nhất nếu chấp nhận cold start.

Bài sau đi sâu vào phần bạn vừa chọn: làm sao phục vụ model trên hạ tầng đó cho tiết kiệm, từ batch inference, container nhẹ đến autoscale.