Tích hợp hệ thống giám sát Prometheus cho mô hình Qwen3-0.6B-FP8
- Tại sao cần giám sát dịch vụ mô hình AI?
Hãy tưởng tượng bạn vừa triển khai một dịch vụ trò chuyện AI và mọi thứ hoạt động tốt. Tuy nhiên, một ngày nọ, người dùng phàn nàn rằng "dịch vụ phản hồi chậm" hoặc tệ hơn là "không phản hồi". Khi kiểm tra máy chủ, bạn phát hiện bộ nhớ GPU đã đầy hoặc hàng đợi yêu cầu bị ùn tắc.
Chính vì vậy, chúng ta cần có hệ thống giám sát để không chỉ xử lý sự cố khi xảy ra mà còn giúp dự đoán và ngăn chặn các vấn đề tiềm ẩn trước khi chúng ảnh hưởng đến trải nghiệm của người dùng.
- Giới thiệu về mô hình Qwen3-0.6B-FP8
Trước khi bắt đầu xây dựng hệ thống giám sát, chúng ta cần hiểu rõ những đặc điểm chính của mô hình này.
2.1 Các đặc điểm chính
Qwen3-0.6B-FP8 có một số đặc điểm nổi bật sau:
- Thiết kế nhẹ nhàng: Chỉ với 0.6 tỷ tham số và sau khi lượng hóa FP8, nó sử dụng khoảng 2GB bộ nhớ GPU, phù hợp để chạy trên card đồ họa cấp thấp.
- Chế độ suy luận độc đáo: Có khả năng hiển thị quá trình suy luận trước khi đưa ra kết quả cuối cùng. Điều này có thể ảnh hưởng đến thời gian phản hồi.
- Cơ chế tải lười: Mô hình chỉ được tải vào bộ nhớ GPU khi có yêu cầu đầu tiên.
- Kiến trúc hai dịch vụ: Cung cấp cả API FastAPI (cổng 8000) và giao diện Gradio (cổng 7860).
2.2 Các chỉ số cần giám sát
Dựa trên các đặc điểm trên, chúng ta sẽ tập trung vào các loại chỉ số sau:
-
Chỉ số hiệu suất: Thời gian phản hồi, tốc độ xử lý, khả năng xử lý đồng thời.
-
Chỉ số tài nguyên: Sử dụng bộ nhớ GPU, hiệu suất GPU, tiêu thụ bộ nhớ hệ thống.
-
Chỉ số kinh doanh: Tỷ lệ yêu cầu thành công, lỗi, tần suất sử dụng chế độ suy luận chi tiết.
-
Sức khỏe dịch vụ: Trạng thái API, thời gian khởi động dịch vụ, trạng thái tải mô hình.
-
Thiết kế giải pháp giám sát với Prometheus
Prometheus là một hệ thống giám sát nguồn mở phổ biến, rất phù hợp với kiến trúc vi dịch vụ. Dưới đây là cách tôi thiết kế hệ thống giám sát cho Qwen3-0.6B-FP8.
3.1 Kiến trúc tổng thể
Yêu cầu từ người dùng → Dịch vụ Qwen3 → Điểm phơi bày chỉ số → Prometheus thu thập → Grafana hiển thị → Thông báo cảnh báo
Hệ thống sẽ tự động phơi bày các chỉ số mà Prometheus sẽ định kỳ thu thập dữ liệu.
3.2 Các chỉ số cụ thể cần giám sát
Tôi đã xác định các chỉ số quan trọng như sau:
Liên quan đến thời gian phản hồi
qwen_request_duration: Thời gian xử lý yêu cầu tổng thể.qwen_thinking_time: Thời gian suy luận trong chế độ chi tiết.qwen_first_token_delay: Độ trễ tạo token đầu tiên.
Liên quan đến tốc độ xử lý
qwen_total_requests: Tổng số yêu cầu.qwen_generated_tokens: Tổng số token được tạo.qwen_requests_per_second: Số yêu cầu mỗi giây.
Liên quan đến tài nguyên
qwen_gpu_memory: Bộ nhớ GPU đang sử dụng.qwen_gpu_utilization: Hiệu suất sử dụng GPU.qwen_system_memory: Bộ nhớ hệ thống đang sử dụng.
Liên quan đến chất lượng dịch vụ
qwen_success_requests: Số yêu cầu thành công.qwen_error_requests: Số yêu cầu lỗi (theo loại lỗi).qwen_thinking_mode_usage: Số lần sử dụng chế độ suy luận chi tiết.
- Thực thi tích hợp giám sát
4.1 Bước 1: Thêm phơi bày chỉ số vào dịch vụ Qwen3
Sử dụng thư viện prometheus_client trong Python để thêm chức năng phơi bày chỉ số vào dịch vụ.
# monitoring.py - Định nghĩa và phơi bày chỉ số
from prometheus_client import Counter, Histogram, Gauge, start_http_server
import time
from functools import wraps
# Khởi tạo chỉ số
REQUEST_TIME = Histogram('qwen_request_processing_seconds', 'Thời gian xử lý yêu cầu')
TOTAL_REQUESTS = Counter('qwen_total_requests', 'Tổng số yêu cầu')
GPU_MEMORY = Gauge('qwen_gpu_memory_bytes', 'Bộ nhớ GPU', ['device'])
# Trang trí hàm để theo dõi thời gian thực thi
def track_request(endpoint):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
try:
result = func(*args, **kwargs)
return result
finally:
duration = time.time() - start_time
REQUEST_TIME.observe(duration)
TOTAL_REQUESTS.inc()
return wrapper
return decorator
# Khởi động server chỉ số
def start_monitoring(port=8001):
start_http_server(port)
print(f"Server chỉ số đã khởi động tại cổng {port}")
4.2 Bước 2: Tích hợp vào ứng dụng FastAPI
Thêm mã giám sát vào ứng dụng FastAPI.
# app.py - Ứng dụng FastAPI đã chỉnh sửa
from fastapi import FastAPI, Request
from monitoring import track_request, GPU_MEMORY
import torch
app = FastAPI(title="Qwen3-0.6B-FP8 với Giám sát")
# Cập nhật chỉ số GPU
def update_gpu_metrics():
if torch.cuda.is_available():
for i in range(torch.cuda.device_count()):
memory = torch.cuda.memory_allocated(i)
GPU_MEMORY.labels(device=str(i)).set(memory)
@app.post("/chat")
@track_request("chat")
async def chat(request: Request, data: dict):
update_gpu_metrics()
# Xử lý yêu cầu chat...
return {"response": "Xin chào!"}
@app.get("/metrics")
async def metrics():
pass
4.3 Bước 3: Tạo cấu hình Prometheus
Tạo file cấu hình Prometheus để chỉ định nơi lấy dữ liệu.
# prometheus.yml
scrape_configs:
- job_name: 'qwen-service'
static_configs:
- targets: ['localhost:8001']
4.4 Bước 4: Triển khai bằng Docker Compose
Tạo file docker-compose.yml để triển khai toàn bộ hệ thống.
# docker-compose.yml
services:
qwen:
image: qwen-image:latest
ports:
- "8000:8000"
- "8001:8001"
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
- Cấu hình bảng điều khiển Grafana
Sử dụng Grafana để trực quan hóa dữ liệu giám sát.
5.1 Các bảng điều khiển chính
- Tình trạng dịch vụ
- Chỉ số hiệu suất
- Sử dụng tài nguyên
- Chỉ số kinh doanh
- Cấu hình quy tắc cảnh báo
Cấu hình các quy tắc cảnh báo trong Prometheus để nhận thông báo kịp thời.
# alerts.yml
groups:
- name: qwen-alerts
rules:
- alert: HighErrorRate
expr: sum(rate(qwen_total_requests{status="error"}[5m])) / sum(rate(qwen_total_requests[5m])) > 0.05
for: 2m
labels:
severity: warning
annotations:
summary: "Tỷ lệ lỗi cao"
- Phân tích và tối ưu hóa dữ liệu giám sát
7.1 Ví dụ: Phát hiện rò rỉ bộ nhớ GPU
Giải pháp:
def clear_memory():
if torch.cuda.is_available():
torch.cuda.empty_cache()
# Thêm nhiệm vụ dọn dẹp định kỳ
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.add_job(clear_memory, 'interval', minutes=30)
scheduler.start()
- Kết luận
Việc tích hợp hệ thống giám sát Prometheus giúp cải thiện đáng kể khả năng quản lý và tối ưu hóa dịch vụ AI của bạn.