Skip to main content

A tool for monitoring model checkpoints and sending notifications

Project description

auto_model_monitor

监视模型训练时生成的权重文件,符合条件时发送QQ邮件通知。

使用场景

当你希望在模型训练过程中,当某个指标(例如验证集上的损失或准确率)低于/高于预设阈值时收到邮件通知。这有助于你及时了解模型的性能表现,以便进行必要的调整。

如何使用

安装依赖

pip install auto_model_monitor

获取QQ授权码

为了给QQ邮箱发送邮件,你需要使用授权码而不是密码。你可以在QQ邮箱的设置中找到它。

https://service.mail.qq.com/detail/0/75

QQ授权码

示例代码

上述配置后,你就可以使用代码了。

基础使用

测试代码在tests/basic_test.py

from auto_model_monitor import ModelMonitor, MonitorConfig, CustomParser

# 自定义解析器(TODO: 替换为你的自定义解析器')
parser = CustomParser(pattern=r'val_loss_([0-9.]+)_')

# 配置参数
config = MonitorConfig(
    watch_dir='./quicktest/logs',     # 监控的文件夹路径
    threshold=0.004,                  # 阈值
    sender='aaaa@qq.com',       # 发送邮箱
    receiver='aaaa@qq.com',     # 接收邮箱
    auth_code='xxxx',                 # 邮箱授权码(TODO: 替换为你的授权码')
    check_interval=5,                 # 检查间隔 (秒)
    log_dir='model_monitor_logs',     # 日志文件夹路径
    comparison_mode='lower',          # 比较模式
    parser=parser                     # 使用自定义解析器
)

# 初始化并启动监控器
monitor = ModelMonitor(config)
monitor.start_monitoring()

注意: 你需要修改解析器,以及你自己的邮箱授权码。

当你的模型权重文件中的分数低于或高于阈值时,你将收到邮件通知。例如:

图2

自定义使用1

测试代码在tests/custom_test1.py

你可以自定义邮件的主题和内容模板。例如:

from auto_model_monitor import ModelMonitor, MonitorConfig, CustomParser
# 自定义解析器
parser = CustomParser(pattern=r'val_loss_([0-9.]+)_')
# 自定义主题和内容模板
subject_template = "🔥 重要通知:{filename} 分数{condition}阈值!"

content_template = """
📊 模型更新详情 📊

- 文件名:{filename}
- 当前分数:{score:.6f}
- 阈值:{threshold:.6f}
- 状态:分数{condition}阈值,建议查看!

⏰ 检测时间:{timestamp}
"""

config = MonitorConfig(
    watch_dir='./quicktest/logs',             # 监控的文件夹路径
    threshold=0.004,                          # 阈值
    sender='2109695291@qq.com',               # 发送邮箱
    receiver='2109695291@qq.com',             # 接收邮箱
    auth_code='XXXX',                         # 邮箱授权码
    check_interval=10,                        # 检查间隔 (秒)
    log_dir='model_monitor_logs',             # 日志文件夹路径
    comparison_mode='lower',                  # 比较模式
    parser=parser,                            # 使用自定义解析器
    email_subject_template=subject_template,  # 设置主题模板
    email_content_template=content_template   # 设置内容模板
)
monitor = ModelMonitor(config)
monitor.start_monitoring()

收到的邮件内容如下所示:

自定义使用图1

自定义使用2

测试代码在tests/custom_test2.py

你可以自定义邮件的内容生成器。例如:

from auto_model_monitor import ModelMonitor, MonitorConfig, CustomParser
from datetime import datetime 
from typing import Tuple, List 

def custom_notification_generator(score: float, filename: str) -> Tuple[str, List[str]]:
    """根据分数和文件名生成自定义通知内容"""
    # 根据分数级别设置不同的优先级图标
    if score < 0.003:
        priority = "🔥🔥🔥 紧急"
        emoji = "🚀"
    elif score < 0.004:
        priority = "🚨 重要"
        emoji = "💡"
    else:
        priority = "ℹ️ 信息"
        emoji = "📌"

    # 主题
    subject = f"{priority}: {filename} 分数更新至 {score:.6f}"

    # 详细内容
    contents = [
        f"{emoji} 模型性能突破通知 {emoji}",
        "",
        f"文件名: {filename}",
        f"当前分数: {score:.6f}",
        f"阈值: 0.004",
        f"检测时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
        "",
        "📈 性能分析:",
        f"- 比阈值提升: {(0.004 - score) / 0.004 }",
        f"- 推荐操作: 考虑部署到测试环境",
        "",
        "此为自动通知,请勿回复。"
    ]

    return subject, contents
# 自定义解析器
parser = CustomParser(pattern=r'val_loss_([0-9.]+)_')

config = MonitorConfig(
    watch_dir='./quicktest/logs',                           # 监控的文件夹路径
    threshold=0.004,                                        # 阈值
    sender='2109695291@qq.com',                             # 发送邮箱
    receiver='2109695291@qq.com',                           # 接收邮箱
    auth_code='XXXX',                                       # 邮箱授权码
    check_interval=10,                                      # 检查间隔 (秒)
    log_dir='model_monitor_logs',                           # 日志文件夹路径
    comparison_mode='lower',                                # 比较模式
    parser=parser,                                          # 使用自定义解析器
    email_content_generator=custom_notification_generator   # 设置自定义通知生成器
)
monitor = ModelMonitor(config)
monitor.start_monitoring()

收到的邮件内容如下所示:

自定义使用图2

开发日志

2025-07-04 更新:

  • 最初版本发布。

2025-07-05 更新:

  • 代码重构。如果你需要重构前的代码,在tests/quicktest中查看。
  • 代码打包,上传PyPI。
  • 由于model_monitor这个名字已经被占用,改为auto_model_monitor
  • 发布v0.2.0版本。

PyPI库版本

v0.1.0

  • 基础版本

v0.1.1

  • 代码重构

v0.1.2

  • 完善README.md

v0.2.0

  • 添加自定义主题和内容,方便用户自定义邮件内容

v0.2.1

  • 修复PyPI图片无法显示问题

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auto_model_monitor-0.2.1.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

auto_model_monitor-0.2.1-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file auto_model_monitor-0.2.1.tar.gz.

File metadata

  • Download URL: auto_model_monitor-0.2.1.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for auto_model_monitor-0.2.1.tar.gz
Algorithm Hash digest
SHA256 f016cea39cdc384b22abdeb3d1e660c36d036ae02141727764fd35faa8f4b325
MD5 3825f30406f56e815bd859d78e7da5a5
BLAKE2b-256 6032f1da88f237ec7e659fcdefbd89d9b5366693cbe8bd4d21f45472b623adf2

See more details on using hashes here.

File details

Details for the file auto_model_monitor-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for auto_model_monitor-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b827a5c571be75749452030773237007f8df9e82ad5a2d083e25406d1a1c6e23
MD5 60bc255724ed890a4db6d4e09c6f29bf
BLAKE2b-256 fdd0e4429ae8e0b17c53ded8fb0adceadceba7c4da8658f79f0006a5b4d00a3c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page