看训练性能数据,先确认样本和统计口径
看训练性能数据先确认样本和统计口径本文围绕“性能数据到底该怎么看”整理检查要点。示例仅用于说明方法请以公开、合成或已脱敏输入复跑。1. 先固定讨论边界训练问题应拆成数值正确性、数据供给、显存使用和通信行为四部分。先以小规模、固定输入验证前向和反向结果再观察多进程路径避免把单一监控值当成整体结论。结论应同时附上适用条件和未覆盖项。若数据、依赖或执行路径发生变化应重新运行验证而不是沿用旧记录。2. 按最小闭环验证每次试验都应写清框架版本、设备类型、批量形状、随机种子和启动方式。发生偏差时优先比较中间张量与梯度而不是直接调整并行参数。建议先写出可失败的断言再保存输入摘要、配置与结果摘要。这样既便于定位差异也避免在排障材料中保留不必要的内容。3. 参考实现与图示以下片段保留原有技术结构。运行前请替换为本地的非敏感示例并根据依赖版本核对接口。import torch import torch.nn as nn import time from typing import Dict, Any class PyTorchDistributedPerformanceProfiler: def __init__(self, model: nn.Module, optimizer: torch.optim.Optimizer): self.model model self.optimizer optimizer self.device torch.device(cuda if torch.cuda.is_available() else cpu) def profile_training_step(self, dummy_batch: torch.Tensor, warmup_steps: int 3, active_steps: int 5) - Dict[str, Any]: 使用 PyTorch Profiler 捕获算子与 Memory 瓶颈 criterion nn.CrossEntropyLoss() targets torch.randint(0, 10, (dummy_batch.shape[0],), deviceself.device) # 1. 热身阶段 for _ in range(warmup_steps): self.optimizer.zero_grad() outputs self.model(dummy_batch) loss criterion(outputs, targets) loss.backward() self.optimizer.step() torch.cuda.synchronize() # 2. 启动 Profiler 跟踪 cuda_time_ms 0.0 cpu_time_ms 0.0 with torch.profiler.profile( activities[ torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA, ], record_shapesTrue, profile_memoryTrue, with_stackFalse ) as prof: start_wall_time time.time() for _ in range(active_steps): self.optimizer.zero_grad() outputs self.model(dummy_batch) loss criterion(outputs, targets) loss.backward() self.optimizer.step() torch.cuda.synchronize() total_wall_time (time.time() - start_wall_time) * 1000 / active_steps # 3. 提取 Key Averages 性能统计 key_stats prof.key_averages().table(sort_bycuda_time_total, row_limit5) return { avg_step_wall_time_ms: round(total_wall_time, 2), profiler_summary_table: key_stats } # 模拟网络模型诊断 if __name__ __main__: if torch.cuda.is_available(): net nn.Sequential( nn.Linear(1024, 4096), nn.ReLU(), nn.Linear(4096, 10) ).cuda() opt torch.optim.SGD(net.parameters(), lr0.01) profiler PyTorchDistributedPerformanceProfiler(net, opt) dummy_data torch.randn(128, 1024, devicecuda) report profiler.profile_training_step(dummy_data) print(✅ Step 平均墙上耗时 (ms):, report[avg_step_wall_time_ms]) print(\n Profiler Top CUDA 算子耗时分布 ) print(report[profiler_summary_table]) else: print(未检测到 CUDA跳过 PyTorch Profiler 检查。)4. 复核清单输入是否可公开、合成或完成脱敏。数据版本、依赖版本和运行配置是否可追溯。对比是否使用相同的输入范围与度量定义。失败路径是否有最小复现和可诊断的错误信息。总结“性能数据到底该怎么看”应以清晰的条件和脚本复核。先记录边界再解释结果。