vLLM-v0.17.1详细步骤:vLLM服务自动重启与健康检查脚本编写

张开发
2026/4/17 12:30:55 15 分钟阅读

分享文章

vLLM-v0.17.1详细步骤:vLLM服务自动重启与健康检查脚本编写
vLLM-v0.17.1详细步骤vLLM服务自动重启与健康检查脚本编写1. vLLM框架简介vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发现在已经发展成为一个活跃的社区驱动项目。vLLM的核心优势在于其创新的内存管理技术PagedAttention这种技术能够高效地管理注意力机制中的键值对内存。这使得vLLM能够实现业界领先的服务吞吐量支持连续批处理传入请求利用CUDA/HIP图加速模型执行提供多种量化选项(GPTQ、AWQ、INT4、INT8和FP8)2. 为什么需要自动重启与健康检查在实际生产环境中LLM服务可能会因为各种原因意外停止内存泄漏长时间运行可能导致内存耗尽GPU错误硬件不稳定或驱动问题网络中断连接问题导致服务不可用资源竞争多个服务争夺计算资源自动重启机制可以确保服务在意外停止后能够快速恢复而健康检查则能及时发现潜在问题避免服务长时间不可用。3. 环境准备与基础配置3.1 安装vLLM-v0.17.1首先确保你的环境满足以下要求Python 3.8或更高版本CUDA 11.8或更高版本(如果使用NVIDIA GPU)至少16GB内存(具体取决于模型大小)安装命令pip install vllm0.17.13.2 启动基础vLLM服务创建一个简单的启动脚本start_vllm.sh#!/bin/bash python -m vllm.entrypoints.api_server \ --model meta-llama/Llama-2-7b-chat-hf \ --tensor-parallel-size 1 \ --port 8000给脚本添加执行权限chmod x start_vllm.sh4. 自动重启脚本实现4.1 基础重启脚本创建一个restart_vllm.sh脚本#!/bin/bash # 定义服务名称和端口 SERVICE_NAMEvllm_service PORT8000 # 检查服务是否运行 if ! lsof -i :$PORT /dev/null; then echo $(date) - $SERVICE_NAME is not running. Restarting... vllm_monitor.log nohup ./start_vllm.sh vllm.log 21 echo $SERVICE_NAME restarted. else echo $SERVICE_NAME is already running. fi4.2 增强版重启脚本更完善的版本包含错误处理和资源清理#!/bin/bash SERVICE_NAMEvllm_service PORT8000 MAX_RETRIES3 RETRY_DELAY5 # 检查并杀死旧进程 kill_old_process() { PID$(lsof -ti :$PORT) if [ -n $PID ]; then echo Killing old process $PID kill -9 $PID sleep 2 fi } # 启动服务 start_service() { nohup ./start_vllm.sh vllm.log 21 echo $SERVICE_NAME started with PID $! } # 主逻辑 if ! lsof -i :$PORT /dev/null; then echo $(date) - $SERVICE_NAME is not running. Attempting to restart... vllm_monitor.log for ((i1; i$MAX_RETRIES; i)); do kill_old_process start_service sleep $RETRY_DELAY if lsof -i :$PORT /dev/null; then echo Restart successful on attempt $i exit 0 fi done echo Failed to restart after $MAX_RETRIES attempts vllm_monitor.log exit 1 else echo $SERVICE_NAME is running normally. exit 0 fi5. 健康检查机制实现5.1 基础健康检查创建一个health_check.sh脚本#!/bin/bash PORT8000 HEALTH_CHECK_URLhttp://localhost:$PORT/health TIMEOUT5 # 发送健康检查请求 response$(curl -s -o /dev/null -w %{http_code} --max-time $TIMEOUT $HEALTH_CHECK_URL) if [ $response 200 ]; then echo Service is healthy exit 0 else echo Service is unhealthy (HTTP $response) exit 1 fi5.2 综合监控解决方案结合重启和健康检查的完整方案#!/bin/bash SERVICE_NAMEvllm_service PORT8000 HEALTH_CHECK_URLhttp://localhost:$PORT/health MAX_RETRIES3 RETRY_DELAY10 TIMEOUT5 LOG_FILEvllm_monitor.log # 记录日志函数 log() { echo $(date) - $1 $LOG_FILE } # 检查服务端口 check_port() { lsof -i :$PORT /dev/null return $? } # 健康检查 health_check() { local response$(curl -s -o /dev/null -w %{http_code} --max-time $TIMEOUT $HEALTH_CHECK_URL 2/dev/null) [ $response 200 ] } # 重启服务 restart_service() { log Attempting to restart $SERVICE_NAME... # 杀死旧进程 pkill -f python -m vllm.entrypoints.api_server sleep 2 # 启动新进程 nohup ./start_vllm.sh vllm.log 21 local pid$! # 等待启动完成 sleep $RETRY_DELAY if check_port health_check; then log Restart successful (PID $pid) return 0 else log Restart failed return 1 fi } # 主监控逻辑 if check_port; then if health_check; then log $SERVICE_NAME is healthy exit 0 else log $SERVICE_NAME is running but unhealthy restart_service || exit 1 fi else log $SERVICE_NAME is not running restart_service || exit 1 fi6. 自动化部署与定时任务6.1 设置cron定时任务让监控脚本定期执行(每分钟检查一次)(crontab -l 2/dev/null; echo * * * * * /path/to/your/monitor_script.sh) | crontab -6.2 系统服务配置创建systemd服务单元文件/etc/systemd/system/vllm-monitor.service[Unit] DescriptionvLLM Monitoring Service Afternetwork.target [Service] Typesimple Useryour_username ExecStart/path/to/your/monitor_script.sh Restartalways RestartSec60 [Install] WantedBymulti-user.target启用并启动服务sudo systemctl daemon-reload sudo systemctl enable vllm-monitor sudo systemctl start vllm-monitor7. 高级功能与优化建议7.1 资源监控集成在监控脚本中添加资源检查check_resources() { local gpu_usage$(nvidia-smi --query-gpuutilization.gpu --formatcsv,noheader,nounits | awk {print $1}) local mem_usage$(free -m | awk /Mem:/ {print $3/$2 * 100.0}) if (( $(echo $gpu_usage 95 | bc -l) )); then log GPU usage too high: $gpu_usage% return 1 fi if (( $(echo $mem_usage 90 | bc -l) )); then log Memory usage too high: $mem_usage% return 1 fi return 0 }7.2 通知机制添加邮件通知功能send_alert() { local subjectvLLM Service Alert: $1 local body$2\n\nTime: $(date) echo -e $body | mail -s $subject adminexample.com } # 在适当位置调用 send_alert Service Restarted vLLM service was restarted due to failure.7.3 日志轮转配置设置日志轮转防止日志文件过大 创建/etc/logrotate.d/vllm文件/path/to/vllm.log { daily rotate 7 compress missingok notifempty create 644 your_username your_group }8. 总结通过本文介绍的自动重启和健康检查机制你可以确保vLLM服务在生产环境中的高可用性。关键要点包括基础监控定期检查服务端口和健康状态自动恢复在服务失败时自动重启资源管理监控系统资源使用情况通知机制及时告知管理员重要事件日志管理保留足够的日志信息用于故障排查这套方案可以根据实际需求进行扩展例如添加更复杂的负载均衡机制或集成到现有的监控系统中。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章