Trong vòng đời sản xuất của mô hình Machine Learning, việc chỉ theo dõi độ chính xác (accuracy) hay F1-score trên tập test là chưa đủ. Các thay đổi về phân phối dữ liệu (data drift), độ trễ suy luận (latency), tỷ lệ lỗi (error rate) hay sử dụng tài nguyên (CPU/GPU/RAM) đều ảnh hưởng trực tiếp đến trải nghiệm người dùng và chi phí vận hành. Bài viết này chia sẻ quy trình xây dựng một hệ thống giám sát toàn diện, tự động hóa và dễ mở rộng bằng Prometheus để thu thập metrics và Grafana để trực quan hóa. 1. Lý do cần giám sát liên tục - Phát hiện sớm data drift và concept drift trước khi mô hình suy giảm nghiêm trọng. - Theo dõi latency p50, p95, p99 để đảm bảo SLA thời gian thực. - Cảnh báo khi error rate vượt ngưỡng cho phép (ví dụ > 1%). - Quan sát sử dụng GPU/CPU để tối ưu chi phí scaling. 2. Kiến trúc hệ thống đề xuất - **Model Serving**: FastAPI/TorchServe/TensorFlow Serving container hóa, expose endpoint `/metrics` theo định dạng Prometheus. - **Exporter**: Viết custom exporter (Python `prometheus_client`) ghi nhận: request_count, request_latency_seconds, prediction_distribution, drift_score (tính bằng KS-test hoặc PSI), gpu_memory_used, cpu_percent. - **Prometheus Server**: Scrape mỗi 15s từ các replica serving. Cấu hình `relabel_configs` để gán label `model_version`, `environment`. - **Alertmanager**: Định nghĩa rule groups: `HighLatency`, `HighErrorRate`, `DriftDetected`, `ResourceSaturation`. Gửi cảnh báo qua Slack, PagerDuty hoặc email. - **Grafana Dashboards**: Tạo dashboard theo từng mô hình, bao gồm panel: Request Rate, Latency Heatmap, Prediction Histogram, Drift Trend, Resource Utilization. Sử dụng variables để lọc theo `model_version`, `region`. 3. Các bước triển khai thực tế - **Bước 1**: Thêm middleware vào serving code để ghi metrics mỗi request. - **Bước 2**: Build Docker image cài `prometheus_client`, push lên registry. - **Bước 3**: Deploy lên Kubernetes với `ServiceMonitor` (Prometheus Operator) để tự động discover endpoints. - **Bước 4**: Tạo `PrometheusRule` cho các alert quan trọng. - **Bước 5**: Import dashboard JSON vào Grafana, cấu hình datasource Prometheus. - **Bước 6**: Thiết lập quy trình retraining tự động khi drift alert kích hoạt (tích hợp với CI/CD đã có). 4. Lời khuyên áp dụng ngay - Luôn version hóa metrics: thêm label `model_version` để so sánh hiệu suất giữa các phiên bản. - Sử dụng histogram buckets phù hợp với latency mong đợi (ví dụ 0.01, 0.05, 0.1, 0.2, 0.5, 1 giây). - Tính drift score offline hàng ngày, push lên Prometheus như một gauge để Grafana vẽ xu hướng dài hạn. - Giới hạn cardinality: tránh label có giá trị không giới hạn (như `request_id`). - Test alert rule trên môi trường staging trước khi bật production. Với thiết lập này, đội ngũ MLOps có cái nhìn realtime, lịch sử và cảnh báo chủ động, giúp duy trì chất lượng mô hình và kiểm soát chi phí hạ tầng một cách hiệu quả.