CANN/cannbot-skills Mosaic内存分析指南
2026/7/5 18:22:10 网站建设 项目流程

Mosaic 内存分析工具使用指南

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

Mosaic 是 Meta 开源的 PyTorch 内存快照后处理分析工具。

安装

# Mosaic 未发布到 PyPI;建议锁定到已验证的 commit/tag(如 ...mosaic.git@<commit>), # 避免拉到上游默认分支不可复现的最新代码。 pip install git+https://github.com/facebookresearch/mosaic.git

CLI 命令速查

1. 峰值内存栈追踪 —mosaic_get_memory_usage_peak

分析峰值内存时刻的所有分配及其调用栈,定位具体哪些操作导致了内存峰值

mosaic_get_memory_usage_peak --snapshot <snapshot.pickle>

输出内容:

  • Total Peak Dynamic Memory Usage:运行时动态分配的峰值内存
  • Total Static Memory Usage:快照开始前已存在的基线内存
  • Total Overall Peak Memory Usage:Dynamic + Static
  • 每个分配的完整调用栈及大小

解读要点

  • 观察 Top 几个分配的栈追踪,识别是来自 optimizer(adam.py)、backward(autograd)还是 forward 的激活
  • 对比 baseline 和问题版本的调用次数差异(如 optimizer 追踪了更多 tensor)

2. 分类内存 Profile —mosaic_get_memory_profile

按类别(activation、gradient、optimizer、parameter)生成内存使用可视化 HTML:

# 标准分类 profile mosaic_get_memory_profile --snapshot <snapshot.pickle> \ --out-path profile.html \ --profile categories # 保持分配顺序(便于看内存随时间变化) mosaic_get_memory_profile --snapshot <snapshot.pickle> \ --out-path profile_ordered.html \ --profile categories \ --preserve-allocation-order # 自定义正则匹配(追踪特定模式) mosaic_get_memory_profile --snapshot <snapshot.pickle> \ --out-path profile_custom.html \ --profile custom \ --custom-profile '{"hccl": "hccl", "moe_expert": "expert"}'

分类说明

类别含义
Activation前向传播保存用于反向的中间张量
Gradient反向传播计算的梯度
Optimizer StateAdam/SGD 的动量和方差缓冲
Parameter模型权重

3. 常用对比分析流程

# 1. 生成两个场景的 snapshot(如开启 AC 前后) # 2. 分别生成分类 profile mosaic_get_memory_profile --snapshot baseline.pickle \ --out-path baseline_profile.html --profile categories mosaic_get_memory_profile --snapshot with_ac.pickle \ --out-path ac_profile.html --profile categories # 3. 分别查看峰值 mosaic_get_memory_usage_peak --snapshot baseline.pickle mosaic_get_memory_usage_peak --snapshot with_ac.pickle

Python API

当需要编程集成或在脚本中自动化分析时,使用 Mosaic Python API:

from mosaic.libmosaic.analyzer.memory_abstract import MemoryAbstract # 加载并分析 memory_abstract = MemoryAbstract(memory_snapshot_file="snapshot.pickle") memory_abstract.load_memory_snapshot() # 分析峰值内存 memory_abstract.memory_snapshot.analyze_memory_snapshot(opt="memory_peak") # 获取结果 dynamic_peak = memory_abstract.memory_snapshot.dynamic_memory_peak static_memory = memory_abstract.memory_snapshot.static_memory overall_peak = dynamic_peak + static_memory print(f"动态峰值: {dynamic_peak / 1024**3:.3f} GiB") print(f"静态内存: {static_memory / 1024**3:.3f} GiB") print(f"总峰值: {overall_peak / 1024**3:.3f} GiB")

适用场景

场景推荐工具
快速定位峰值内存来源mosaic_get_memory_usage_peak
可视化各类别内存占比mosaic_get_memory_profile --profile categories
追踪特定操作(如 HCCL)的内存mosaic_get_memory_profile --profile custom
对比优化前后效果两次 profile + 对比 HTML
CI/CD 内存回归检测Python API + 阈值断言

[!NOTE] Mosaic 目前对 CUDA/GPU snapshot 支持最完善。对于 NPU snapshot,基本的 segments/blocks 分析可正常工作,但部分可视化功能可能需要适配。如遇到兼容问题,可使用本 skill 自带的analyze_snapshot.py脚本作为替代。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询