SiameseUIE开源大模型部署教程:GPU显存监控告警与自动服务重启配置
·
SiameseUIE开源大模型部署教程:GPU显存监控告警与自动服务重启配置
1. 引言:为什么需要GPU监控和自动重启
当你部署了强大的SiameseUIE中文信息抽取模型后,可能会遇到一个常见问题:长时间运行后GPU显存逐渐被占用,最终导致服务崩溃。这种情况在持续处理大量文本数据时尤其常见。
手动监控和重启不仅效率低下,还可能因为未能及时发现故障而导致业务中断。本文将手把手教你如何为SiameseUIE模型配置完整的GPU显存监控、告警和自动重启系统,让你的AI服务更加稳定可靠。
2. 环境准备与基础配置
2.1 检查当前环境
在开始配置之前,我们先确认一下基础环境:
# 检查GPU状态
nvidia-smi
# 检查Python环境
python --version
# 检查必要的Python包
pip list | grep -E "gpustat|supervisor"
2.2 安装必要的监控工具
# 安装gpustat用于GPU监控
pip install gpustat
# 安装supervisor用于进程管理(如果尚未安装)
apt-get update && apt-get install -y supervisor
3. GPU显存监控脚本编写
3.1 创建监控脚本
在 /opt/siamese-uie/ 目录下创建监控脚本:
mkdir -p /opt/siamese-uie/monitor
nano /opt/siamese-uie/monitor/gpu_monitor.py
3.2 监控脚本内容
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
import json
import smtplib
import time
from email.mime.text import MIMEText
# 配置参数
GPU_MEMORY_THRESHOLD = 90 # 显存使用率阈值(%)
CHECK_INTERVAL = 60 # 检查间隔(秒)
MAX_RESTART_ATTEMPTS = 3 # 最大重启尝试次数
def get_gpu_memory_usage():
"""获取GPU显存使用情况"""
try:
result = subprocess.run(['gpustat', '--json'],
capture_output=True, text=True, timeout=10)
gpu_data = json.loads(result.stdout)
memory_usage = []
for gpu in gpu_data['gpus']:
memory_used = gpu['memory.used']
memory_total = gpu['memory.total']
usage_percent = (memory_used / memory_total) * 100
memory_usage.append(usage_percent)
return memory_usage
except Exception as e:
print(f"获取GPU信息失败: {e}")
return []
def check_service_status():
"""检查SiameseUIE服务状态"""
try:
result = subprocess.run(['supervisorctl', 'status', 'siamese-uie'],
capture_output=True, text=True, timeout=10)
return 'RUNNING' in result.stdout
except Exception as e:
print(f"检查服务状态失败: {e}")
return False
def restart_service():
"""重启SiameseUIE服务"""
try:
result = subprocess.run(['supervisorctl', 'restart', 'siamese-uie'],
capture_output=True, text=True, timeout=30)
return 'started' in result.stdout or 'restarted' in result.stdout
except Exception as e:
print(f"重启服务失败: {e}")
return False
def send_alert(message):
"""发送告警通知(示例代码,需要配置实际邮箱)"""
print(f"告警: {message}")
# 实际使用时可以配置邮件、钉钉、微信等告警方式
# 这里仅作示例,需要根据实际情况配置
def main():
restart_attempts = 0
while True:
try:
# 获取GPU显存使用情况
memory_usage = get_gpu_memory_usage()
if memory_usage:
max_usage = max(memory_usage)
print(f"当前GPU最大显存使用率: {max_usage:.1f}%")
# 检查是否超过阈值
if max_usage > GPU_MEMORY_THRESHOLD:
print("显存使用超过阈值,检查服务状态...")
# 检查服务是否还在运行
if check_service_status():
print("服务仍在运行,但显存占用过高")
send_alert(f"SiameseUIE服务显存占用过高: {max_usage:.1f}%")
else:
print("服务已停止,尝试重启...")
if restart_attempts < MAX_RESTART_ATTEMPTS:
if restart_service():
print("服务重启成功")
restart_attempts = 0
else:
restart_attempts += 1
print(f"服务重启失败,尝试次数: {restart_attempts}")
send_alert(f"SiameseUIE服务重启失败,尝试次数: {restart_attempts}")
else:
send_alert("SiameseUIE服务多次重启失败,需要人工干预")
else:
print("无法获取GPU信息,跳过本次检查")
except Exception as e:
print(f"监控程序异常: {e}")
# 等待下一次检查
time.sleep(CHECK_INTERVAL)
if __name__ == "__main__":
main()
3.3 设置脚本权限
chmod +x /opt/siamese-uie/monitor/gpu_monitor.py
4. Supervisor配置监控服务
4.1 创建监控服务配置文件
nano /etc/supervisor/conf.d/siamese-uie-monitor.conf
4.2 监控服务配置内容
[program:siamese-uie-monitor]
command=python3 /opt/siamese-uie/monitor/gpu_monitor.py
directory=/opt/siamese-uie
autostart=true
autorestart=true
startretries=3
stopwaitsecs=30
user=root
redirect_stderr=true
stdout_logfile=/var/log/siamese-uie-monitor.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
environment=PYTHONUNBUFFERED="1"
4.3 重新加载Supervisor配置
# 重新加载配置
supervisorctl reread
supervisorctl update
# 启动监控服务
supervisorctl start siamese-uie-monitor
# 查看监控服务状态
supervisorctl status siamese-uie-monitor
5. 高级监控与告警配置
5.1 配置邮件告警(可选)
如果你需要邮件告警功能,可以修改监控脚本中的 send_alert 函数:
def send_alert(message):
"""发送邮件告警"""
try:
# 配置发件人信息
sender = 'your_email@example.com'
receiver = 'admin@example.com'
password = 'your_email_password'
# 创建邮件内容
msg = MIMEText(f'SiameseUIE监控告警:\n\n{message}\n\n时间: {time.strftime("%Y-%m-%d %H:%M:%S")}')
msg['Subject'] = 'SiameseUIE服务告警'
msg['From'] = sender
msg['To'] = receiver
# 发送邮件
with smtplib.SMTP_SSL('smtp.example.com', 465) as server:
server.login(sender, password)
server.sendmail(sender, [receiver], msg.as_string())
print("告警邮件发送成功")
except Exception as e:
print(f"发送告警邮件失败: {e}")
5.2 添加详细日志记录
创建日志记录功能,便于后续排查问题:
def setup_logging():
"""配置日志记录"""
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('gpu_monitor')
logger.setLevel(logging.INFO)
# 文件日志处理器
file_handler = RotatingFileHandler(
'/var/log/siamese-uie-monitor.log',
maxBytes=10*1024*1024, # 10MB
backupCount=5
)
# 控制台日志处理器
console_handler = logging.StreamHandler()
# 日志格式
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
# 在main函数开始处添加
logger = setup_logging()
6. 测试监控系统
6.1 手动测试监控功能
# 手动运行监控脚本测试
python3 /opt/siamese-uie/monitor/gpu_monitor.py
# 查看监控日志
tail -f /var/log/siamese-uie-monitor.log
# 测试服务重启功能
supervisorctl restart siamese-uie
6.2 模拟高显存占用测试
为了测试监控系统是否正常工作,可以创建一个临时脚本模拟高显存占用:
# 创建测试脚本
nano /tmp/test_gpu_memory.py
import torch
import time
# 分配大量GPU显存
tensors = []
try:
for i in range(10):
# 每次分配100MB显存
tensor = torch.randn(25000000, device='cuda') # 约100MB
tensors.append(tensor)
print(f"已分配 {(i+1)*100}MB 显存")
time.sleep(2)
except RuntimeError as e:
print(f"显存分配失败: {e}")
finally:
# 清理显存
del tensors
torch.cuda.empty_cache()
7. 日常维护与故障排查
7.1 常用监控命令
# 查看GPU状态
nvidia-smi
gpustat -i
# 查看服务状态
supervisorctl status siamese-uie
supervisorctl status siamese-uie-monitor
# 查看监控日志
tail -f /var/log/siamese-uie-monitor.log
# 查看应用日志
tail -f /root/workspace/siamese-uie.log
7.2 常见问题解决
问题1:监控脚本无法获取GPU信息
# 检查gpustat安装
pip install --upgrade gpustat
# 检查GPU驱动
nvidia-smi
问题2:监控服务无法启动
# 检查配置文件语法
supervisorctl reread
# 查看详细错误信息
supervisorctl tail siamese-uie-monitor
问题3:频繁误报警
# 调整显存阈值
# 修改 /opt/siamese-uie/monitor/gpu_monitor.py 中的 GPU_MEMORY_THRESHOLD
8. 总结
通过本教程,你已经为SiameseUIE模型搭建了一套完整的GPU显存监控和自动重启系统。这个系统能够:
- 实时监控GPU显存使用情况,预防因显存耗尽导致的服务崩溃
- 自动检测服务状态,在服务异常时及时重启
- 发送告警通知,让你第一时间了解系统状态
- 记录详细日志,便于后续排查和分析问题
这套监控系统不仅适用于SiameseUIE模型,也可以稍作修改后用于其他GPU加速的AI服务。定期检查监控日志,根据实际使用情况调整阈值参数,能够让你的AI服务更加稳定可靠。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)