NarratoAI/webui/utils/performance.py

52 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# import psutil
import os
from loguru import logger
class PerformanceMonitor:
@staticmethod
def monitor_memory():
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
logger.debug(f"Memory usage: {memory_info.rss / 1024 / 1024:.2f} MB")
# 延迟导入torch并检查CUDA
try:
import torch
if torch.cuda.is_available():
gpu_memory = torch.cuda.memory_allocated() / 1024 / 1024
logger.debug(f"GPU Memory usage: {gpu_memory:.2f} MB")
except (ImportError, RuntimeError) as e:
# 无法导入torch或触发CUDA相关错误时静默处理
logger.debug(f"无法获取GPU内存信息: {e}")
@staticmethod
def cleanup_resources():
# 延迟导入torch并清理CUDA
try:
import torch
if torch.cuda.is_available():
torch.cuda.empty_cache()
logger.debug("CUDA缓存已清理")
except (ImportError, RuntimeError) as e:
# 无法导入torch或触发CUDA相关错误时静默处理
logger.debug(f"无法清理CUDA资源: {e}")
import gc
gc.collect()
# 仅报告进程内存不尝试获取GPU内存
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
logger.debug(f"Memory usage after cleanup: {memory_info.rss / 1024 / 1024:.2f} MB")
def monitor_performance(func):
"""性能监控装饰器"""
def wrapper(*args, **kwargs):
try:
PerformanceMonitor.monitor_memory()
result = func(*args, **kwargs)
return result
finally:
PerformanceMonitor.cleanup_resources()
return wrapper