首页 > 其他分享 >监控大模型训练

监控大模型训练

时间:2024-03-13 09:00:22浏览次数:22  
标签:训练 模型 SMTP 监控 memory msg 邮箱 EMAIL

监控大模型训练

大模型训练时间久,而且过程中容易出现各种各样的问题而中断,中断之后不及时续练的话对GPU资源是很大的浪费,但是我们又不能一直盯着程序。所以本文将介绍如何编写一个监控程序来监控大模型的训练,以方便我们在大模型训练出现异常时及时通知给我们。

监控的方式有很多,这里介绍两个方式。

根据log文件大小变化监控训练是否进行

linux nohup指令详解中,我们提到了使用Linux的nohup命令来运行训练脚本,该命令会创建一个日志文件,大模型在训练的过程中会不断输出内容,因此该日志文件的大小是随时在变化的。因此,我们可以通过隔一段时间判断该日志文件的大小是否变化来判断大模型的训练是否出现异常。如果大模型训练出现异常,我们需要通过一种常用的通讯方式来告知自己,这里选择使用邮箱(也可以使用短信、QQ/微信通知等方式)。

核心代码如下:

import os
import time
import smtplib
from email.mime.text import MIMEText

# 配置邮箱信息
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 587
EMAIL_USERNAME = '作为SMTP服务器的QQ邮箱'
EMAIL_PASSWORD = '你的QQ邮箱SMTP服务的密钥'
EMAIL_FROM = '作为SMTP服务器的QQ邮箱'
EMAIL_TO = '你接收通知邮件的QQ邮箱'
EMAIL_SUBJECT = '大模型训练终止提醒'

# 监测的文件路径
FILE_PATH = '/...../nohup.out'


def send_email(message):
    msg = MIMEText(message)
    msg['From'] = EMAIL_FROM
    msg['To'] = EMAIL_TO
    msg['Subject'] = EMAIL_SUBJECT

    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()
        server.login(EMAIL_USERNAME, EMAIL_PASSWORD)
        server.sendmail(from_addr=EMAIL_FROM, to_addrs=[EMAIL_TO], msg=msg.as_string())


def monitor_file():
    # 获取初始文件大小
    initial_size = os.path.getsize(FILE_PATH)

    while True:
        # 等待10分钟
        time.sleep(600)

        # 获取当前文件大小
        current_size = os.path.getsize(FILE_PATH)

        if current_size == initial_size:
            # 文件大小没有变化,发送警告邮件
            message = '日志文件在十分钟内没有发生变化,大模型训练可能已终止!'
            send_email(message)
        else:
            # 文件大小发生变化,更新初始文件大小
            print(f'log changed: {current_size-initial_size}')
            initial_size = current_size
            

if __name__ == '__main__':
    monitor_file()

根据GPU显存占用率监控训练是否进行

训练大模型时,GPU的显存占用率一般都比较高,所以我们也可以通过GPU显存的占用率来判断大模型的训练是否出现异常。这里我们同样使用邮箱来通知自己。

核心代码如下:

import subprocess
import smtplib
from email.mime.text import MIMEText
import time

def get_gpu_memory_usage():
    output = subprocess.check_output(['nvidia-smi', '--query-gpu=memory.used', '--format=csv,nounits,noheader'])
    memory_used = [int(x) for x in output.decode().strip().split('\n')]
    return memory_used

# 配置邮箱信息
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 587
EMAIL_USERNAME = '作为SMTP服务器的QQ邮箱'
EMAIL_PASSWORD = '你的QQ邮箱SMTP服务的密钥'
EMAIL_FROM = '作为SMTP服务器的QQ邮箱'
EMAIL_TO = '你接收通知邮件的QQ邮箱'
EMAIL_SUBJECT = '大模型训练终止提醒'


def send_email(message):
    msg = MIMEText(message)
    msg['From'] = EMAIL_FROM
    msg['To'] = EMAIL_TO
    msg['Subject'] = EMAIL_SUBJECT

    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()
        server.login(EMAIL_USERNAME, EMAIL_PASSWORD)
        server.sendmail(from_addr=EMAIL_FROM, to_addrs=[EMAIL_TO], msg=msg.as_string())

def main():
    while True:
        memory_used_list = get_gpu_memory_usage()
        # memory_total是你服务器总的显存量,此处使用的服务器有8张40G的A100,因此总显存量为40960*8
        memory_total = 40960 * 8
        memory_used = 0
        for memory in memory_used_list:
            memory_used += memory
        memory_usage_percent = (memory_used / memory_total) * 100

        if memory_usage_percent < 10:
            subject = '服务器显存占用率过低警告'
            body = f'显存占用率为 {memory_usage_percent}%,低于10%。请检查服务器。'
            send_email(subject, body)
        else:
            print(f'GPU Memory %: {memory_usage_percent}')

        time.sleep(600)  # 等待10分钟(600秒)

if __name__ == '__main__':
    main()

我们可以使用linux nohup指令详解中介绍的nohup命令运行这两个程序中的一个,以监控大模型的训练是否正常进行。

标签:训练,模型,SMTP,监控,memory,msg,邮箱,EMAIL
From: https://www.cnblogs.com/yourenbo/p/18069771

相关文章

  • 自然语言处理(NLP)—— 生成式模型和判别式模型
            生成式模型和判别式模型是机器学习领域两大类模型,它们在自然语言处理、计算机视觉等领域都有广泛的应用。理解这两类模型的区别对于选择正确的模型来解决特定问题非常重要。1.生成式模型(GenerativeModels)        生成式模型旨在学习数据的联合......
  • 小白Windows下通过Ollama部署使用本地模型
    安装环境运行环境为windowsR9000P2021拯救者笔记本AMDR7-5800H32G内存NVIDIARTX3070LaptopGPU安装主程序Ollama下载exe,直接下一步下一步没有设置可以更改windows默认安装路径:C:\Users\wbigo\AppData\Local\Programs\Ollama\安装后会自动将该路径加入环境变量双......
  • 代码随想录算法训练营day21 | leetcode 530. 二叉搜索树的最小绝对差、501. 二叉搜索
    目录题目链接:530.二叉搜索树的最小绝对差-简单题目链接:501.二叉搜索树中的众数-简单题目链接:236.二叉树的最近公共祖先-中等题目链接:530.二叉搜索树的最小绝对差-简单题目描述:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,......
  • 20240311 大模型快讯
    //社区生态//零一万物自研全导航图向量数据库。零一万物宣布推出基于全导航图的新型向量数据库笛卡尔(Descartes),已包揽权威榜单ANN-Benchmarks6项数据集评测第一名。//语言大模型//清华发布大模型长文本理解方法InfLLM。InfLLM在没有引入额外训练的情况下,利用一个外部......
  • 认知战壳吉桔:十大思维利器——构建高效个人思维模型的必备工具
    认知战壳吉桔:十大思维利器——构建高效个人思维模型的必备工具关键词:认知战、认知域、认知战研究中心、认知战争、认知战战术、认知战战略、认知域作战研究、认知作战、认知控制、战略思想、CognitiveWarfare、CognitiveDomain、CognitiveControl内容摘要:第一性原理:第一......
  • MaxEnt模型在R语言中的参数调优:物种分布模拟的优化策略
    在生态学研究中,物种分布模拟是一项至关重要的任务。它有助于我们理解物种与环境之间的复杂关系,预测物种在气候变化或人类活动影响下的潜在分布变化。近年来,随着计算机技术的不断发展,基于机器学习的物种分布模拟方法逐渐成为研究热点。其中,MaxEnt模型作为一种广泛应用的物种......
  • Claude3、GPT-4 、Gemini、Sora:五大模型的技术特点与功能
    【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认......
  • R语言扩展包与MaxEnt模型的集成:实现高效的物种分布模拟
    在生态学研究中,物种分布模拟是一项至关重要的任务。它有助于我们理解物种与环境之间的复杂关系,预测物种在气候变化或人类活动影响下的潜在分布变化。近年来,随着计算机技术的不断发展,基于机器学习的物种分布模拟方法逐渐成为研究热点。其中,MaxEnt模型作为一种广泛应用的物种......
  • 使用 PMML 实现模型融合及优化技巧
    在机器学习的生产环境中,我们经常需要将多个模型的预测结果进行融合,以便提高预测的准确性。这个过程通常涉及到多个模型子分的简单逻辑回归融合。虽然离线训练时我们可以直接使用sklearn的逻辑回归进行训练和调参,但在生产环境中,模型的上线往往需要使用PMML(PredictiveModelMarkup......
  • 代码随想录算法训练营第四十三天 | 474.一和零,● 494. 目标和 ,1049. 最后一块石头的
     1049.最后一块石头的重量II 已解答中等 相关标签相关企业 提示 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,......