Năm
2026
Vai trò
Toàn hệ thống — kiến trúc phân tán, client, service suy luận, tối ưu runtime, triển khai
Công nghệ
- Python
- YOLOv8
- ONNX Runtime
- FastAPI
- Flask
- OpenCV
- SQLite
- Docker
- Modal
Suy luận phân tán
Phát hiện rác phòng học
Hệ thống thị giác máy tính tách làm hai phần qua mạng: client giữ trạng thái lo phần camera và dashboard, còn một service FastAPI không trạng thái chạy YOLOv8 trên GPU.
- Tách một ứng dụng chạy trong một tiến trình thành hai phần: client giữ trạng thái và service suy luận không trạng thái chạy trên GPU, nối với nhau bằng một hợp đồng HTTP duy nhất có xác thực.
- Giảm tải cho mạng và GPU bằng cách thu nhỏ frame về 640 px rồi quy đổi lại toạ độ trả về, đồng thời chỉ suy luận trên các frame lấy mẫu và dùng lại kết quả đã cache cho các frame ở giữa.
- Thêm cơ chế tự chạy model tại chỗ khi service từ xa không phản hồi, và một API trạng thái cho biết mỗi request do backend nào xử lý và mất bao lâu.
- Xuất model sang ONNX nửa độ chính xác, nạp model ngay khi khởi động, và triển khai cùng một ứng dụng FastAPI lên GPU notebook, Docker image và GPU serverless.

- Định dạng model
- 3
- PyTorch, ONNX, TensorRT
- Bề ngang gửi lên
- 640 px
- Nơi triển khai
- 3
Bài toán
Phiên bản đầu làm mọi thứ trong một tiến trình: đọc camera, chạy model, phục vụ dashboard và ghi database. Model cần GPU, trong khi các phần còn lại cần đặt gần camera.
Tách theo trạng thái
Client giữ mọi thứ có trạng thái: luồng camera, video có đánh dấu, lưu trữ tại chỗ và API trạng thái. Service suy luận chỉ giữ model và không lưu gì giữa các request, nên có thể di chuyển, nhân bản hay build lại mà client không hề hay biết. Nguồn video được chọn bằng cấu hình, có thể là thiết bị tại chỗ hoặc luồng video qua mạng, và tự kết nối lại khi mất tín hiệu.
Thiết kế đường truyền
Frame được thu nhỏ về một chiều ngang cố định trước khi gửi đi, và kết quả nhận diện được quy đổi lại để khung đánh dấu khớp với video độ phân giải gốc. Model chỉ suy luận trên các frame lấy mẫu chứ không chạy mọi frame, nên video vẫn giữ tốc độ khung hình trong khi mạng và GPU chỉ gánh một phần tải.
Hỏng một cách có kiểm soát
Khi gọi service từ xa thất bại, client tự chạy model tại chỗ, nên hệ thống vẫn hoạt động dù mất GPU. Mỗi lần gọi từ xa đều được đo thời gian và báo kèm backend đã xử lý. Cảnh báo chỉ phát khi trạng thái thay đổi và có giới hạn tần suất, còn dữ liệu được ghi theo chu kỳ thời gian thay vì ghi mỗi frame.
Chạy rẻ hơn, chạy ở đâu cũng được
Model chạy dưới dạng ONNX nửa độ chính xác, và định dạng (PyTorch, ONNX hay TensorRT) được chọn lúc nạp model. Model được nạp ngay khi khởi động nên không request nào phải chịu khởi động nguội, và endpoint kiểm tra sức khoẻ báo đúng file model đang chạy. Cùng một ứng dụng chạy được trên GPU notebook qua tunnel, dưới dạng Docker image, và dưới dạng hàm GPU serverless.