Model Serving
Model serving lưu trữ một model đã huấn luyện phía sau API mạng để ứng dụng gửi đầu vào và nhận lại dự đoán, với batching, khả năng mở rộng và kiểm tra trạng thái.
Phục vụ model là việc lưu trữ một model machine learning đã huấn luyện phía sau endpoint mạng, thường là HTTP hoặc gRPC, để ứng dụng gửi đầu vào và nhận dự đoán. Hệ thống phục vụ tải trọng số một lần, giữ chúng trong bộ nhớ trên CPU hoặc GPU, tiếp nhận nhiều yêu cầu đồng thời, gom yêu cầu thành batch, tăng hoặc giảm số replica khi lưu lượng thay đổi, thay phiên bản model và báo cáo tình trạng hệ thống. Google phát hành mã nguồn mở TensorFlow Serving vào tháng 2 năm 2016 để chạy model TensorFlow trong production; hiện nay, phục vụ model là nửa runtime của vận hành machine learning (MLOps), nằm giữa đóng gói model và giám sát các dự đoán.
Cách hệ thống phục vụ xử lý yêu cầu#
Mỗi yêu cầu đi qua bước xác thực, tiền xử lý như giải mã và đổi kích thước ảnh, hàng đợi, chính model và hậu xử lý thành định dạng phản hồi như JSON. Hầu hết quyết định phục vụ được đưa ra tại hàng đợi. Batch động giữ các yêu cầu trong vài mili giây để bộ tăng tốc xử lý nhiều đầu vào trong một lượt lan truyền tiến, qua đó tăng thông lượng với mức đánh đổi nhỏ về độ trễ suy luận. Khi hàng đợi đầy, máy chủ từ chối yêu cầu mới bằng HTTP 429 để client giảm tốc độ gửi.
Các nhóm vận hành dịch vụ theo dõi các phân vị độ trễ như p95 và p99, thông lượng tính bằng số yêu cầu mỗi giây, mức sử dụng bộ tăng tốc, tỷ lệ lỗi và thời gian khởi động nguội—khoảng trễ trước khi replica vừa tăng từ 0 có thể phản hồi. Phiên bản được triển khai dần: bản phát hành canary gửi một phần nhỏ lưu lượng đến model mới; triển khai shadow gửi bản sao yêu cầu trực tiếp đến model đó nhưng không trả về kết quả của model.
Ứng dụng FastAPI này tải YOLO26 một lần khi khởi động và trả về các phát hiện dưới dạng JSON. TestClient của FastAPI gửi một yêu cầu qua toàn bộ ngăn xếp HTTP trong cùng tiến trình, nên ví dụ chạy được mà không cần khởi động máy chủ:
from fastapi import FastAPI
from fastapi.testclient import TestClient
from ultralytics import YOLO
app = FastAPI()
model = YOLO("yolo26n.pt") # # tải trọng số một lần, khi máy chủ khởi động
@app.get("/predict")
async def predict(url: str):
"""Detect objects in the image at `url` and return them as JSON."""
results = model(url)
return results[0].summary()
client = TestClient(app)
response = client.get("/predict", params={"url": "https://ultralytics.com/images/bus.jpg"})
print(response.status_code, response.json()[0])Đầu ra hiển thị trạng thái 200 và phát hiện đầu tiên dưới dạng từ điển gồm tên lớp, độ tin cậy và tọa độ bounding box; đây là cấu trúc summary() tạo ra cho mọi đối tượng được phát hiện. Vì handler là async def, FastAPI chạy handler trong một event loop duy nhất, nên model dùng chung không bao giờ xử lý đồng thời hai yêu cầu. Máy chủ cần xử lý song song sẽ chạy nhiều tiến trình worker, mỗi tiến trình tải model riêng.
Mô hình phục vụ và phần mềm#
Cách phục vụ model phụ thuộc vào thời điểm cần kết quả, từ suy luận thời gian thực trên luồng camera đến các tác vụ chạy qua đêm:
- Phục vụ trực tuyến: Mỗi yêu cầu nhận được kết quả trong khi bên gọi chờ, qua REST hoặc gRPC, như trong ứng dụng hướng đến người dùng và luồng camera trực tiếp.
- Phục vụ theo batch: Một tác vụ theo lịch chấm điểm dataset lớn ngoại tuyến, chẳng hạn chạy hàng đêm trên lượng ảnh của một ngày, và ưu tiên thông lượng hơn độ trễ.
- Streaming: Kết quả được đẩy liên tục khi khung hình video hoặc số liệu cảm biến đến.
- AI biên: Model chạy ngay trên thiết bị, thường sau khi được export sang định dạng tối ưu hóa, không cần truyền dữ liệu qua mạng.
Phần mềm phục vụ đa dụng bao gồm NVIDIA Dynamo-Triton, trước đây là Triton Inference Server, cùng TensorFlow Serving, Ray Serve, BentoML và KServe trên Kubernetes. TorchServe của PyTorch hiện chỉ được bảo trì ở mức hạn chế và không có kế hoạch cập nhật thêm. Các máy chủ LLM như vLLM, SGLang và TensorRT-LLM bổ sung batch liên tục và quản lý KV cache dạng phân trang để tạo token tuần tự. Hầu hết các hệ thống này chạy trong container, nhờ đó model, runtime và dependency được đóng gói thành một image.
Phục vụ model, triển khai và inference engine#
Phục vụ model gắn chặt với một số thuật ngữ liên quan. Triển khai model là quy trình rộng hơn để đưa model vào production, bao gồm đóng gói, hạ tầng và triển khai theo giai đoạn; phục vụ là phần xử lý yêu cầu khi model đã hoạt động. Inference engine như TensorRT, ONNX Runtime hoặc OpenVINO thực thi các phép tính của model; hệ thống phục vụ bọc một hoặc nhiều engine bằng lớp mạng, hàng đợi và khả năng mở rộng.
Ultralytics Platform phục vụ model YOLO thông qua endpoint chuyên dụng; mỗi endpoint là một dịch vụ dành riêng cho một tenant tại một trong 42 khu vực, với các route /predict, /health và /docs được tạo tự động. Gói mặc định tự giảm quy mô về 0 khi nhàn rỗi và có thể mất khoảng một phút để khởi động; khi thay model, URL endpoint vẫn giữ nguyên trong khi model trước tiếp tục phục vụ cho đến khi model mới sẵn sàng.










