跳转至

performance.py — 性能指标工具

文件路径: verl/utils/profiler/performance.py

文件概述

提供计时、显存日志和分布式 timing 归约工具。是性能分析的基础设施层。

核心功能

1. 计时器

@contextmanager
def simple_timer(name, timing_raw):
    """基础计时器"""
    with Timer(name=name, logger=None) as timer:
        yield
    timing_raw[name] = timing_raw.get(name, 0) + timer.last

@contextmanager
def marked_timer(name, timing_raw, color=None, ...):
    """带硬件标记的计时器(fallback 版本,无标记)"""
    yield from _timer(name, timing_raw)

2. 显存日志

class GPUMemoryLogger(DecoratorLoggerBase):
    """装饰器:在函数前后打印 GPU 显存使用"""
    @GPUMemoryLogger(role="actor")
    def update_actor(self, batch):
        ...

3. 分布式 Timing 归约

def reduce_timing(timing_raw, reduce_op=ReduceOp.AVG):
    """跨所有 rank 归约 timing 信息(求平均/最大等)"""

def gather_timing(timing_raw):
    """收集所有 rank 的 timing 信息"""

def topk_reduce_ratio_min_max(timing, k=10):
    """计算 top-k 百分位的尾部延迟比例"""

核心函数列表

函数 说明
simple_timer() 基础计时
marked_timer() 带标记的计时
log_gpu_memory_usage() 显存日志
GPUMemoryLogger 显存日志装饰器
reduce_timing() 分布式 timing 归约
gather_timing() 收集所有 rank timing

与其他模块的关系

  • 被训练循环中广泛使用来记录各阶段耗时
  • _timer 被 nvtx_profile.py 和 mstx_profile.py 的 marked_timer 调用

小结

性能分析的基础工具集,提供计时和显存监控能力。