当前位置: 首页 > news >正文

DASD-4B-Thinking部署教程:Docker镜像内vLLM服务健康检查脚本编写与自动重启

DASD-4B-Thinking部署教程:Docker镜像内vLLM服务健康检查脚本编写与自动重启

1. 项目背景与需求

DASD-4B-Thinking是一个专门针对数学、代码生成和科学推理任务优化的40亿参数语言模型。它通过vLLM框架部署,配合chainlit前端提供交互式体验。但在实际使用中,vLLM服务可能会因为各种原因出现异常退出,影响服务稳定性。

本文将手把手教你编写一个实用的健康检查脚本,实现vLLM服务的自动监控和重启,确保你的DASD-4B-Thinking模型能够7×24小时稳定运行。

为什么需要健康检查?

  • vLLM服务在长时间运行后可能出现内存泄漏或资源耗尽
  • 模型推理过程中可能遇到异常输入导致服务崩溃
  • 系统资源波动可能影响服务稳定性
  • 手动重启服务既麻烦又容易遗漏

2. 环境准备与基础知识

在开始编写脚本之前,我们先了解一些基础知识。

2.1 vLLM服务的基本检查方法

vLLM服务通常通过HTTP端口提供API服务,我们可以通过简单的curl命令检查服务状态:

# 检查vLLM服务是否正常运行 curl -X GET http://localhost:8000/health

正常运行时应该返回类似这样的响应:

{"status":"healthy"}

2.2 日志文件的位置和查看方法

根据提供的部署信息,vLLM服务的日志位于:

/root/workspace/llm.log

我们可以通过以下命令实时查看日志:

tail -f /root/workspace/llm.log

3. 健康检查脚本编写

现在我们来编写一个完整的健康检查脚本,它会定期检查vLLM服务状态,并在发现异常时自动重启。

3.1 基础版本的健康检查脚本

创建一个名为vllm_health_check.sh的文件:

#!/bin/bash # vLLM健康检查脚本 # 作者:基于DASD-4B-Thinking部署需求编写 # 配置参数 VLLM_PORT=8000 CHECK_INTERVAL=60 # 检查间隔(秒) LOG_FILE="/root/workspace/llm.log" HEALTH_CHECK_URL="http://localhost:${VLLM_PORT}/health" # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> /root/workspace/health_check.log } # 检查vLLM服务状态 check_vllm_health() { # 使用curl检查服务健康状态 response=$(curl -s -o /dev/null -w "%{http_code}" -X GET "${HEALTH_CHECK_URL}" --connect-timeout 10) if [ "$response" = "200" ]; then # 进一步检查返回内容 content=$(curl -s -X GET "${HEALTH_CHECK_URL}") if echo "$content" | grep -q "healthy"; then log "vLLM服务运行正常" return 0 else log "vLLM服务返回异常内容: $content" return 1 fi else log "vLLM服务健康检查失败,HTTP状态码: $response" return 1 fi } # 重启vLLM服务 restart_vllm() { log "尝试重启vLLM服务..." # 查找并终止现有的vLLM进程 pkill -f "vllm" sleep 2 # 确保进程已终止 pkill -9 -f "vllm" 2>/dev/null # 这里需要根据你的实际启动命令进行修改 # 示例启动命令(请替换为你的实际启动命令) cd /root/workspace nohup python -m vllm.entrypoints.api_server \ --model /path/to/your/model \ --port 8000 \ --tensor-parallel-size 1 \ >> $LOG_FILE 2>&1 & log "vLLM服务重启命令已执行" } # 主循环 log "vLLM健康检查脚本启动" while true; do if ! check_vllm_health; then log "检测到vLLM服务异常,准备重启..." restart_vllm # 重启后等待一段时间再检查 sleep 30 fi sleep $CHECK_INTERVAL done

3.2 增强版的健康检查脚本

基础版本可以工作,但我们还可以增加更多功能来提高可靠性:

#!/bin/bash # 增强版vLLM健康检查脚本 # 配置参数 VLLM_PORT=8000 CHECK_INTERVAL=60 MAX_RESTART_ATTEMPTS=3 RESTART_COOLDOWN=300 # 重启冷却时间(秒) LOG_FILE="/root/workspace/llm.log" HEALTH_LOG="/root/workspace/health_check.log" # 状态变量 restart_attempts=0 last_restart_time=0 # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $HEALTH_LOG } # 检查系统资源 check_system_resources() { local memory_usage=$(free | awk '/Mem:/ {printf "%.2f", $3/$2 * 100}') local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') log "系统资源使用 - CPU: ${cpu_usage}%, 内存: ${memory_usage}%" # 如果内存使用超过90%,记录警告 if (( $(echo "$memory_usage > 90" | bc -l) )); then log "警告:内存使用率过高 ($memory_usage%)" fi } # 检查vLLM进程是否存在 check_vllm_process() { if pgrep -f "vllm.entrypoints.api_server" > /dev/null; then return 0 else log "vLLM进程不存在" return 1 fi } # 检查服务健康状态 check_vllm_health() { # 首先检查进程是否存在 if ! check_vllm_process; then return 1 fi # 检查HTTP服务 local response=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://localhost:${VLLM_PORT}/health" --connect-timeout 10) if [ "$response" = "200" ]; then local content=$(curl -s -X GET "http://localhost:${VLLM_PORT}/health") if echo "$content" | grep -q "healthy"; then log "vLLM服务运行正常" restart_attempts=0 # 重置重启尝试计数 return 0 else log "vLLM服务返回异常内容: $content" return 1 fi else log "vLLM服务健康检查失败,HTTP状态码: $response" return 1 fi } # 重启vLLM服务 restart_vllm() { local current_time=$(date +%s) # 检查冷却时间 if [ $restart_attempts -ge $MAX_RESTART_ATTEMPTS ]; then if [ $((current_time - last_restart_time)) -lt $RESTART_COOLDOWN ]; then log "已达到最大重启尝试次数,进入冷却时间" return 1 else restart_attempts=0 # 重置计数器 fi fi log "尝试重启vLLM服务 (尝试 $((restart_attempts+1))/$MAX_RESTART_ATTEMPTS)" # 终止现有进程 pkill -f "vllm.entrypoints.api_server" sleep 2 pkill -9 -f "vllm.entrypoints.api_server" 2>/dev/null # 根据你的实际部署调整启动命令 # 示例启动命令 - 请替换为你的实际命令 cd /root/workspace nohup python -m vllm.entrypoints.api_server \ --model /path/to/DASD-4B-Thinking \ --port 8000 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.8 \ >> $LOG_FILE 2>&1 & last_restart_time=$current_time ((restart_attempts++)) log "vLLM服务重启完成" } # 主函数 main() { log "增强版vLLM健康检查脚本启动" while true; do # 检查系统资源 check_system_resources # 检查vLLM服务状态 if ! check_vllm_health; then log "检测到vLLM服务异常" restart_vllm # 重启后多等待一段时间 sleep 60 else sleep $CHECK_INTERVAL fi done } # 异常处理 trap 'log "脚本被中断"; exit 0' INT TERM trap 'log "发生错误"; exit 1' ERR # 启动主函数 main

4. 脚本部署与使用方法

4.1 脚本安装和配置

  1. 创建脚本文件
mkdir -p /root/scripts vim /root/scripts/vllm_health_check.sh

将上面的增强版脚本内容粘贴进去,然后保存退出。

  1. 修改脚本权限
chmod +x /root/scripts/vllm_health_check.sh
  1. 修改启动命令: 找到脚本中的重启部分,将启动命令替换为你实际使用的vLLM启动命令。你可以在llm.log中找到原始的启动命令。

4.2 手动测试脚本

首先手动测试脚本是否正常工作:

# 运行健康检查 /root/scripts/vllm_health_check.sh # 查看健康检查日志 tail -f /root/workspace/health_check.log

4.3 配置系统服务(推荐)

为了确保脚本在系统启动时自动运行,我们可以创建一个systemd服务:

  1. 创建服务文件
vim /etc/systemd/system/vllm-health-check.service
  1. 添加服务配置
[Unit] Description=vLLM Health Check Service After=network.target [Service] Type=simple User=root ExecStart=/bin/bash /root/scripts/vllm_health_check.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
  1. 启用并启动服务
systemctl daemon-reload systemctl enable vllm-health-check.service systemctl start vllm-health-check.service
  1. 检查服务状态
systemctl status vllm-health-check.service journalctl -u vllm-health-check.service -f

5. 高级功能与优化建议

5.1 添加邮件通知功能

当服务多次重启失败时,可以添加邮件通知功能:

# 在脚本中添加邮件通知函数 send_alert() { local subject="vLLM服务异常警报" local body="DASD-4B-Thinking模型服务在$(date)检测到异常,已尝试重启${restart_attempts}次仍未成功。" # 使用mail命令发送邮件(需要配置邮件服务) echo "$body" | mail -s "$subject" your-email@example.com # 或者使用curl调用邮件API # curl -X POST -d "subject=$subject&body=$body" https://your-mail-api.com/send } # 在重启函数中调用 if [ $restart_attempts -ge $MAX_RESTART_ATTEMPTS ]; then send_alert fi

5.2 日志轮转配置

为了避免日志文件过大,可以配置logrotate:

  1. 创建logrotate配置
vim /etc/logrotate.d/vllm-health-check
  1. 添加配置内容
/root/workspace/health_check.log { daily rotate 7 compress missingok notifempty copytruncate }

5.3 性能监控集成

你可以将健康检查脚本与Prometheus等监控系统集成:

# 添加指标输出函数 export_metrics() { local metrics_file="/tmp/vllm_metrics.prom" cat > $metrics_file << EOF # HELP vllm_service_healthy vLLM服务健康状态 # TYPE vllm_service_healthy gauge vllm_service_healthy $(check_vllm_health && echo 1 || echo 0) # HELP vllm_restart_attempts vLLM服务重启次数 # TYPE vllm_restart_attempts counter vllm_restart_attempts $restart_attempts EOF }

6. 常见问题与解决方案

6.1 脚本权限问题

如果遇到权限错误,检查并修复:

# 检查文件权限 ls -la /root/scripts/vllm_health_check.sh # 修改权限 chmod 755 /root/scripts/vllm_health_check.sh chown root:root /root/scripts/vllm_health_check.sh

6.2 服务启动失败排查

如果systemd服务启动失败,检查日志:

journalctl -u vllm-health-check.service -e

6.3 健康检查误报处理

如果健康检查出现误报,可以调整检查参数:

  • 增加--connect-timeout
  • 添加重试机制
  • 调整检查频率

7. 总结

通过本文的教程,你已经学会了如何为DASD-4B-Thinking模型的vLLM服务编写一个完整的健康检查脚本。这个脚本能够:

  1. 定期检查vLLM服务状态
  2. 自动重启异常服务
  3. 限制重启频率防止过度重启
  4. 记录详细日志便于排查问题
  5. 支持系统服务方式运行

实践建议

  • 首次部署时,先手动测试脚本功能
  • 根据你的实际环境调整启动命令和参数
  • 定期检查健康检查日志,优化脚本参数
  • 考虑添加监控告警功能,及时发现问题

现在你的DASD-4B-Thinking模型就有了一个"守护卫士",能够确保服务持续稳定运行,让你可以更专注于模型的应用和优化。


获取更多AI镜像

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

http://www.jsqmd.com/news/553453/

相关文章:

  • FLUX.1-dev零基础入门:5分钟学会用ComfyUI生成高质量AI图片
  • 想发EI会议论文?手把手教你搞定IEEE DLCV 2026投稿全流程(附避坑指南)
  • 3步轻松让老旧Mac电脑升级最新macOS焕发新生
  • 抖音视频资源高效采集与管理全攻略:从工具选型到价值挖掘
  • 终极指南:如何理解VAE变分自编码器原理与实战应用
  • 3个高效方法,让Markdown转视频提升内容创作效率
  • 踩过12个全屋智能项目的坑后,我用OpenClaw+IoT设备实现了真正懂用户的场景化智能控制
  • OpenClaw成本优化方案:GLM-4.7-Flash本地化替代高价API
  • DeerFlow自动化测试:基于Postman的API测试集成
  • 2026年靠谱的柜内灯/线性柜内灯生产商哪家强 - 行业平台推荐
  • YOLOv12模型训练技巧:解决类别不平衡与过拟合问题
  • STM32 GPIO寄存器配置避坑指南:CRL/CRH位操作常见错误解析
  • 3个全方位方案:无水印抖音视频批量获取解决内容管理难题
  • MATLAB环境下一种广义色散模式分解(GDMD),可以用于无损检测、水声等领域中
  • Qwen-Image-2512-SDNQ Web服务API集成:Node.js/Java调用生成图片完整示例
  • Qwen3-Reranker-0.6B保姆级教程:requirements.txt依赖版本兼容性避坑指南
  • 2026年质量好的母婴家具板/直贴家具板/轻奢风家具板/耐磨防划家具板生产厂家推荐几家 - 行业平台推荐
  • 当启动器遭遇“管理员禁止“错误:3个实用解决策略
  • SpringBoot 接口文档自动生成:SpringDoc + OpenAPI 3.0
  • FastAPI + LLM流式响应落地全链路(2024最新生产验证版):异步上下文管理、取消传播、Token级流控与错误恢复机制大揭秘
  • 从零封装Vue版JSMpeg播放器:支持截图/录制/旋转的直播流组件开发指南
  • 2026年知名的衣柜配件挂衣杆/高定挂衣杆/铝合金挂衣杆专业制造厂家推荐 - 行业平台推荐
  • 遥感影像分类准确率总上不去?(PyTorch+Earth Engine+Sklearn融合建模的4层优化策略)
  • 张量形状对齐失效导致300%延迟激增?深度解析stride、contiguous与memory layout的隐性战争
  • OpenClaw技能开发入门:为Qwen3.5-9B定制Excel处理模块
  • 基于PCA-BP神经网络的多元回归预测Matlab代码:特征贡献率可视化与一键出图功能实现
  • GetQzonehistory:你的QQ空间数字记忆守护者终极指南
  • 2026年评价高的线材皮膜剂/冷镦成型皮膜剂实力厂家如何选 - 行业平台推荐
  • Chrome开发者工具高级用法
  • Qwen3-VL-4B Pro升级指南:从轻量版到4B Pro,体验更强的视觉推理能力