Tới nội dung chính
Tất cả dự án

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.
Giải thích cho
Đị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.