多机训练资源利用率监控

梦里水乡 +0/-0 0 0 正常 2025-12-24T07:01:19 资源监控 · 分布式训练

多机训练资源利用率监控

在分布式训练中,监控多机训练的资源利用率是优化性能的关键环节。本文将介绍如何通过Horovod和PyTorch Distributed两种框架来实现资源监控,并提供可复现的配置示例。

监控指标体系

主要关注以下指标:

  • GPU利用率(Utilization)
  • GPU内存使用率(Memory Usage)
  • 网络带宽利用率
  • CPU使用率
  • 内存使用率

Horovod配置案例

import horovod.torch as hvd
import torch
import torch.nn as nn
import time

# 初始化Horovod
hvd.init()
rank = hvd.rank()
size = hvd.size()

# 设置GPU设备
torch.cuda.set_device(rank)

# 监控函数
def monitor_resources():
    import subprocess
    import psutil
    
    # 获取GPU信息
    gpu_info = subprocess.run(['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total', '--format=csv'],
                           capture_output=True, text=True)
    print(f"GPU Info: {gpu_info.stdout}")
    
    # 获取系统信息
    cpu_percent = psutil.cpu_percent(interval=1)
    memory_percent = psutil.virtual_memory().percent
    print(f"CPU: {cpu_percent}%, Memory: {memory_percent}%")

# 训练循环中加入监控
for epoch in range(10):
    monitor_resources()
    # 训练逻辑...

PyTorch Distributed配置案例

import torch.distributed as dist
import torch.nn as nn
import os
import psutil
import subprocess

def setup_distributed():
    rank = int(os.environ['RANK'])
    world_size = int(os.environ['WORLD_SIZE'])
    dist.init_process_group(backend='nccl', rank=rank, world_size=world_size)
    return rank, world_size

# 资源监控装饰器
import functools

def monitor_wrapper(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # 训前监控
        if dist.get_rank() == 0:
            print(f"Process {dist.get_rank()} - Before training")
            monitor_resources()
        
        result = func(*args, **kwargs)
        
        # 训后监控
        if dist.get_rank() == 0:
            print(f"Process {dist.get_rank()} - After training")
            monitor_resources()
        
        return result
    return wrapper

@monitor_wrapper
def train_step(model, data):
    # 训练逻辑
    pass

实时监控脚本

# 创建监控脚本 monitoring.sh
#!/bin/bash
while true; do
  echo "$(date):"
  nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv -l 1
  echo "---"
  sleep 5
done

通过上述配置,可以有效监控多机训练中的资源使用情况,为性能调优提供数据支撑。

推广
广告位招租

讨论

0/2000
Judy356
Judy356 · 2026-01-08T10:24:58
Horovod监控方案看似简单,但实际部署时容易忽略网络带宽瓶颈,建议加个流量抓包工具辅助分析,别光看GPU利用率。
代码与诗歌
代码与诗歌 · 2026-01-08T10:24:58
PyTorch分布式训练资源监控别只盯着CPU和内存,GPU的显存泄漏问题更隐蔽,得结合nvidia-smi定期巡检,不然模型跑着跑着就崩了。