福州交通建设集团官方网站,手机兼职平台app排行榜前十名,珠海网站建设怎样,山东感染地图Chandra OCR部署教程#xff1a;vLLM健康检查脚本编写#xff0c;GPU显存/请求延迟监控 1. 开篇#xff1a;为什么需要健康检查#xff1f; 当你把Chandra OCR模型部署到生产环境后#xff0c;可能会遇到这样的问题#xff1a;服务运行一段时间后响应变慢#xff0c;或…Chandra OCR部署教程vLLM健康检查脚本编写GPU显存/请求延迟监控1. 开篇为什么需要健康检查当你把Chandra OCR模型部署到生产环境后可能会遇到这样的问题服务运行一段时间后响应变慢或者突然崩溃。这时候就需要一个健康检查系统来实时监控服务状态确保OCR服务稳定运行。今天我要分享的是如何为基于vLLM的Chandra OCR服务编写健康检查脚本实时监控GPU显存使用情况和请求延迟让你随时掌握服务状态。2. 环境准备与vLLM部署2.1 安装vLLM和Chandra OCR首先确保你的环境已经准备好# 安装vLLM pip install vllm # 安装Chandra OCR pip install chandra-ocr # 安装监控相关的库 pip install psutil gpustat requests2.2 启动vLLM服务使用vLLM部署Chandra OCR服务# 启动vLLM服务 python -m vllm.entrypoints.openai.api_server \ --model datalab/chandra-ocr \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.8 \ --port 8000这个命令会启动一个OCR服务监听8000端口。--gpu-memory-utilization 0.8表示使用80%的GPU显存这样可以留出一些显存给健康检查和其他系统进程。3. 健康检查脚本编写3.1 基础监控功能我们来编写一个完整的健康检查脚本#!/usr/bin/env python3 Chandra OCR vLLM健康检查脚本 监控GPU显存、请求延迟和服务状态 import time import requests import json import subprocess import psutil from datetime import datetime class ChandraHealthChecker: def __init__(self, api_urlhttp://localhost:8000): self.api_url api_url self.headers { Content-Type: application/json } def check_gpu_memory(self): 检查GPU显存使用情况 try: result subprocess.run([ nvidia-smi, --query-gpumemory.used,memory.total, --formatcsv,noheader,nounits ], capture_outputTrue, textTrue) if result.returncode 0: gpu_info result.stdout.strip().split(,) used_memory int(gpu_info[0]) total_memory int(gpu_info[1]) memory_usage (used_memory / total_memory) * 100 return { used_memory_mb: used_memory, total_memory_mb: total_memory, memory_usage_percent: round(memory_usage, 2), status: normal if memory_usage 90 else warning } except Exception as e: return {error: str(e), status: error} def check_request_latency(self): 检查请求延迟 test_image_url https://example.com/sample-receipt.jpg # 替换为测试图片 payload { model: chandra-ocr, messages: [ { role: user, content: f请识别这张图片中的文字{test_image_url} } ], max_tokens: 1000 } start_time time.time() try: response requests.post( f{self.api_url}/v1/chat/completions, headersself.headers, jsonpayload, timeout30 ) end_time time.time() latency_ms (end_time - start_time) * 1000 return { latency_ms: round(latency_ms, 2), status_code: response.status_code, status: normal if latency_ms 5000 else warning } except requests.exceptions.Timeout: return {error: 请求超时, status: error} except Exception as e: return {error: str(e), status: error} def check_service_status(self): 检查服务状态 try: response requests.get(f{self.api_url}/health, timeout5) return { status: running if response.status_code 200 else stopped, status_code: response.status_code } except: return {status: stopped, status_code: 0} def run_comprehensive_check(self): 运行全面健康检查 timestamp datetime.now().isoformat() gpu_status self.check_gpu_memory() latency_status self.check_request_latency() service_status self.check_service_status() return { timestamp: timestamp, gpu_status: gpu_status, latency_status: latency_status, service_status: service_status, overall_status: healthy if all( status.get(status) in [normal, running] for status in [gpu_status, latency_status, service_status] ) else unhealthy } # 使用示例 if __name__ __main__: checker ChandraHealthChecker() result checker.run_comprehensive_check() print(json.dumps(result, indent2, ensure_asciiFalse))3.2 实时监控脚本创建一个实时监控脚本定期检查服务状态#!/usr/bin/env python3 实时监控脚本每30秒检查一次服务状态 import time import json from chandra_health_checker import ChandraHealthChecker def monitor_service(interval30): 持续监控服务状态 checker ChandraHealthChecker() print(开始监控Chandra OCR服务...) print(按CtrlC停止监控) try: while True: result checker.run_comprehensive_check() # 打印简要状态 status result[overall_status] gpu_usage result[gpu_status].get(memory_usage_percent, N/A) latency result[latency_status].get(latency_ms, N/A) print(f[{result[timestamp]}] 状态: {status} | GPU使用: {gpu_usage}% | 延迟: {latency}ms) # 如果状态异常记录详细信息 if status unhealthy: with open(service_alert.log, a) as f: f.write(json.dumps(result, indent2) \n) print( 服务异常已记录到日志) time.sleep(interval) except KeyboardInterrupt: print(\n监控已停止) if __name__ __main__: monitor_service(interval30)4. 高级监控功能4.1 历史数据记录与分析让我们添加数据记录功能便于后续分析import csv import os from datetime import datetime class HealthMonitorWithHistory: def __init__(self, csv_filehealth_history.csv): self.csv_file csv_file self.checker ChandraHealthChecker() self._init_csv() def _init_csv(self): 初始化CSV文件 if not os.path.exists(self.csv_file): with open(self.csv_file, w, newline) as f: writer csv.writer(f) writer.writerow([ timestamp, gpu_used_mb, gpu_total_mb, gpu_usage_percent, latency_ms, service_status, overall_status ]) def record_health_data(self): 记录健康数据到CSV result self.checker.run_comprehensive_check() with open(self.csv_file, a, newline) as f: writer csv.writer(f) writer.writerow([ result[timestamp], result[gpu_status].get(used_memory_mb, ), result[gpu_status].get(total_memory_mb, ), result[gpu_status].get(memory_usage_percent, ), result[latency_status].get(latency_ms, ), result[service_status].get(status, ), result[overall_status] ]) return result # 使用示例 monitor HealthMonitorWithHistory() monitor.record_health_data()4.2 告警系统添加邮件告警功能import smtplib from email.mime.text import MIMEText class AlertSystem: def __init__(self, smtp_server, smtp_port, username, password): self.smtp_server smtp_server self.smtp_port smtp_port self.username username self.password password def send_alert(self, recipient, subject, message): 发送告警邮件 msg MIMEText(message) msg[Subject] subject msg[From] self.username msg[To] recipient try: with smtplib.SMTP(self.smtp_server, self.smtp_port) as server: server.starttls() server.login(self.username, self.password) server.send_message(msg) print(f告警邮件已发送至 {recipient}) except Exception as e: print(f发送邮件失败: {e}) # 集成到健康检查中 def check_and_alert(): checker ChandraHealthChecker() alert_system AlertSystem( smtp_serversmtp.example.com, smtp_port587, usernameyour_emailexample.com, passwordyour_password ) result checker.run_comprehensive_check() if result[overall_status] unhealthy: message f Chandra OCR服务异常告警 时间: {result[timestamp]} GPU状态: {result[gpu_status]} 延迟状态: {result[latency_status]} 服务状态: {result[service_status]} alert_system.send_alert( recipientadminexample.com, subject Chandra OCR服务异常, messagemessage )5. 部署与使用建议5.1 生产环境部署对于生产环境建议使用系统服务来运行监控脚本# 创建系统服务文件 sudo nano /etc/systemd/system/chandra-monitor.service服务文件内容[Unit] DescriptionChandra OCR Health Monitor Afternetwork.target [Service] Typesimple Userubuntu WorkingDirectory/path/to/your/script ExecStart/usr/bin/python3 /path/to/your/script/monitor_service.py Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用并启动服务sudo systemctl enable chandra-monitor sudo systemctl start chandra-monitor5.2 监控指标解读GPU显存使用率正常应低于90%超过90%可能需要优化模型加载或增加GPU内存请求延迟单页OCR通常在1-5秒内完成超过10秒可能需要检查硬件或优化配置服务状态应该是running如果是stopped需要重启服务6. 总结通过这个健康检查系统你可以实时监控GPU显存使用情况避免内存溢出测量请求延迟确保用户体验自动告警及时发现和处理问题历史数据分析优化服务性能这个系统特别适合需要长时间运行Chandra OCR服务的场景比如批量处理文档、构建知识库系统等。记得根据你的实际环境调整监控阈值和告警规则。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。