Qwen3-4B-Thinking保姆级教程:vLLM服务健康检查脚本编写与自动化

1. 前言:为什么需要健康检查

当你使用vLLM部署了Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill文本生成模型后,确保服务稳定运行是首要任务。想象一下,半夜三点你的模型服务突然崩溃,而你毫不知情,直到第二天早上客户投诉才发现问题——这种场景谁都不想经历。

本文将手把手教你编写一个简单但强大的健康检查脚本,并实现自动化监控。即使你是刚接触Linux和Python的新手,也能轻松掌握这套方案。

2. 环境准备与基础检查

2.1 确认vLLM服务状态

首先,我们需要确认模型服务是否正常运行。最简单的方法是检查日志文件:

tail -n 50 /root/workspace/llm.log

如果看到类似下面的输出,说明服务运行正常:

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started server process [1234]

2.2 测试模型API响应

我们可以用curl命令测试API是否可用:

curl -X POST "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
-d '{"prompt": "你好", "max_tokens": 50}'

如果返回类似下面的JSON响应,说明API工作正常:

{
  "choices": [
    {
      "text": "你好!我是Qwen3-4B-Thinking模型,很高兴为你服务。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ]
}

3. 编写健康检查脚本

3.1 基础检查脚本

创建一个名为health_check.py的文件:

#!/usr/bin/env python3
import requests
import logging
import subprocess

# 配置日志
logging.basicConfig(
    filename='/var/log/llm_health.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

def check_service_running():
    try:
        # 检查进程是否存在
        result = subprocess.run(['pgrep', '-f', 'vllm'], capture_output=True, text=True)
        if result.returncode != 0:
            logging.error("vLLM服务进程未找到")
            return False
        
        # 检查API响应
        response = requests.post(
            "http://localhost:8000/v1/completions",
            json={"prompt": "健康检查", "max_tokens": 5},
            timeout=10
        )
        if response.status_code != 200:
            logging.error(f"API响应异常,状态码:{response.status_code}")
            return False
        
        logging.info("服务健康检查通过")
        return True
        
    except Exception as e:
        logging.error(f"健康检查异常:{str(e)}")
        return False

if __name__ == "__main__":
    if check_service_running():
        print("服务运行正常")
        exit(0)
    else:
        print("服务异常")
        exit(1)

3.2 脚本功能说明

这个脚本做了三件事:

  1. 检查vLLM进程是否在运行
  2. 发送一个简单的API请求测试响应
  3. 记录检查结果到日志文件

你可以通过以下命令测试脚本:

chmod +x health_check.py
./health_check.py

4. 实现自动化监控

4.1 使用cron定时执行

编辑cron任务:

crontab -e

添加以下内容,表示每5分钟检查一次:

*/5 * * * * /usr/bin/python3 /path/to/health_check.py >> /var/log/llm_cron.log 2>&1

4.2 添加自动重启功能

修改health_check.py,在check_service_running函数最后添加:

if not check_service_running():
    logging.warning("尝试重启服务...")
    try:
        subprocess.run(['/path/to/restart_script.sh'], check=True)
        logging.info("服务重启命令已执行")
    except subprocess.CalledProcessError as e:
        logging.error(f"重启失败:{e}")

你需要创建一个简单的重启脚本restart_script.sh

#!/bin/bash
pkill -f vllm
cd /root/workspace
nohup python3 -m vllm.entrypoints.api_server --model Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill > llm.log 2>&1 &

记得给脚本执行权限:

chmod +x restart_script.sh

5. 进阶监控方案

5.1 添加性能指标监控

我们可以扩展脚本,监控一些关键指标:

def check_performance():
    try:
        # 检查GPU使用情况
        gpu_info = subprocess.run(['nvidia-smi', '--query-gpu=utilization.gpu,memory.used', '--format=csv'], 
                                capture_output=True, text=True)
        logging.info(f"GPU使用情况:\n{gpu_info.stdout}")
        
        # 检查API响应时间
        start_time = time.time()
        requests.post("http://localhost:8000/v1/completions", 
                     json={"prompt": "性能测试", "max_tokens": 5},
                     timeout=10)
        response_time = (time.time() - start_time) * 1000  # 毫秒
        logging.info(f"API响应时间: {response_time:.2f}ms")
        
        if response_time > 1000:  # 超过1秒视为警告
            logging.warning("API响应时间过长")
            
    except Exception as e:
        logging.error(f"性能监控异常: {str(e)}")

5.2 设置报警通知

你可以集成邮件或Slack通知,当服务异常时发送警报:

def send_alert(message):
    try:
        # 示例:使用curl发送Slack通知
        webhook_url = "https://hooks.slack.com/services/YOUR/WEBHOOK"
        payload = {"text": f"⚠️ Qwen3-4B-Thinking服务异常: {message}"}
        requests.post(webhook_url, json=payload, timeout=5)
    except Exception as e:
        logging.error(f"发送警报失败: {str(e)}")

然后在主检查逻辑中调用:

if not check_service_running():
    send_alert("服务不可用,正在尝试重启")

6. 总结与最佳实践

通过本教程,你已经学会了:

  1. 如何编写基础的vLLM服务健康检查脚本
  2. 使用cron实现定时监控
  3. 添加自动重启功能
  4. 进阶的性能监控和报警设置

最佳实践建议

  • 日志文件定期轮转,避免占用过多磁盘空间
  • 报警不要太频繁,避免"警报疲劳"
  • 关键指标设置基线,方便识别异常
  • 定期测试你的监控系统,确保它能真正发挥作用

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐