FantasyAnalysis 是一个训练过程观测工具,用于在不同硬件平台上分析:
- 显存占用:参数、梯度、优化器状态、激活的分解与峰值
- 计算量估计:前向与反向 FLOPs、单步总计算量
- Roofline 模型:判断算力/带宽瓶颈,并给出理论步时
cd Training-Viewer
pip install -r requirements.txt在 Training-Viewer 目录下执行:
# 默认 batch=1, seq=1024,A100
python analyze_training_cli.py meta-llama/Llama-2-7b-hf nvidia_A100
# 指定 batch、序列长度
python analyze_training_cli.py meta-llama/Llama-2-7b-hf nvidia_A100 --batchsize 4 --seqlen 2048
# 使用梯度检查点、AdamW,并保存 CSV
python analyze_training_cli.py meta-llama/Llama-2-7b-hf nvidia_H100 --optimizer adamw --gradient-checkpointing --save_csv report.csv输出示例(节选):
========== 训练显存与计算量报告 ==========
硬件: nvidia_A100
batch_size=2, seq_len=1024
参数量: 6.7B
--- 显存 (bytes) ---
参数: xx.xx GB
梯度: xx.xx GB
优化器: xx.xx GB
激活: xx.xx GB
合计: xx.xx GB
--- Roofline ---
算术强度: xxx OPs/byte
瓶颈: memory / compute
理论步时: xx.xx ms
==========================================
from training_analyzer import TrainingAnalyzer
analyzer = TrainingAnalyzer("meta-llama/Llama-2-7b-hf", "nvidia_A100")
results = analyzer.analyze(batchsize=2, seqlen=1024, optimizer="adamw")
analyzer.print_report()
# results 包含: memory, compute, roofline, step_time_seconds, num_params, config在浏览器中交互式查看训练显存分解、Roofline 曲线与理论步时。
启动步骤:
- 安装后端依赖(若未安装):
pip install flask flask-cors - 在项目根目录启动后端:
python backend_app.py --local
- 另开终端,进入前端并安装依赖、启动开发服务器:
cd frontend && npm install && npm run dev
- 浏览器打开 Vite 提示的地址(通常 http://localhost:5173),在左侧选择/输入模型、硬件与训练配置,点击「更新分析」即可看到显存柱状图与 Roofline 图。
后端 API:POST /get_analysis(传入 model_id, hardware, training_config)、GET /get_avaliable(获取可选模型与硬件列表)。
在 examples/ 下提供了两个脚本(需先 cd Training-Viewer 或设置 PYTHONPATH):
plot_roofline_training.py:画出当前训练配置在 Roofline 曲线上的位置(算术强度、瓶颈、理论性能)。plot_memory_hardware.py:对比同一模型在同一 batch/seq 下、在不同 GPU(如 V100/A100/H100)上的峰值显存与理论步时。
cd Training-Viewer
python examples/plot_roofline_training.py
python examples/plot_memory_hardware.pyhardwares/hardware_params.py 中预置了常见平台的带宽与算力,例如:
- NVIDIA: V100, A100 (40G/80G), A800, H100 (SXM/PCIe), A40, L40, RTX 4090/3090, A6000 等
- Intel: 13900K(AVX-512)
- AMD: MI250(典型值,可按实机调整)
如需新增或修改硬件,直接编辑 hardwares/hardware_params.py 中的 hardware_params 字典即可。
- 模型结构:通过
configs/下的模块(如configs/Llama.py)描述层维度与线性层列表。支持从 HuggingFace 拉取AutoConfig(source="huggingface")或从本地model_params/指定(source="DiT"等)。 - 优化器:当前支持
adam/adamw(显存中计入 2×FP32 状态)与sgd(无额外优化器显存)。 - 梯度检查点:
use_gradient_checkpointing=True会按近似方式减少激活显存并增加重算量,用于粗略估计。
- 显存与计算量为基于公式的估计,未接入真实框架(PyTorch/DeepSpeed 等)的实际分配,可用于选型与趋势对比。
- Roofline 给出的步时是理论下界,实际训练会受 kernel 实现、通信、调度等影响。
- 反向与优化器步的计算量采用常见近似(约 2× 前向 FLOPs);若需更细粒度,可在此基础上按层或按算子扩展。
Training-Viewer/
├── README.md
├── requirements.txt
├── analyze_training_cli.py # 命令行入口
├── training_analyzer.py # 训练分析核心
├── roofline_model.py # Roofline 计算
├── utils.py
├── backend_app.py # Web 可视化后端 (Flask)
├── backend_settings.py # 可选模型/硬件列表
├── get_training_analysis.py # 后端分析封装
├── hardwares/
│ ├── __init__.py
│ └── hardware_params.py # 多硬件参数
├── configs/
│ ├── __init__.py
│ ├── Llama.py # Llama 类模型配置
│ └── Qwen.py # Qwen2/Qwen3 配置
├── frontend/ # Web 前端 (Vue 3 + Vite + Chart.js)
│ ├── index.html
│ ├── package.json
│ ├── vite.config.js
│ └── src/
│ ├── main.js
│ ├── App.vue
│ ├── utils.js
│ └── components/
│ ├── Header.vue
│ ├── LeftPannel.vue
│ ├── Dashboard.vue # 显存图 + Roofline 图
│ └── left_controls/
│ └── Config.vue
└── examples/
├── plot_roofline_training.py
└── plot_memory_hardware.py