Skip to content

jsfanfanfan/FantasyAnalysis

Repository files navigation

Training-Viewer

FantasyAnalysis 是一个训练过程观测工具,用于在不同硬件平台上分析:

  • 显存占用:参数、梯度、优化器状态、激活的分解与峰值
  • 计算量估计:前向与反向 FLOPs、单步总计算量
  • Roofline 模型:判断算力/带宽瓶颈,并给出理论步时

环境与安装

cd Training-Viewer
pip install -r requirements.txt

使用方法

1. 命令行(CLI)

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
==========================================

2. 在代码中调用

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

3. Web 可视化

在浏览器中交互式查看训练显存分解、Roofline 曲线与理论步时。

启动步骤:

  1. 安装后端依赖(若未安装):pip install flask flask-cors
  2. 在项目根目录启动后端:
    python backend_app.py --local
  3. 另开终端,进入前端并安装依赖、启动开发服务器:
    cd frontend && npm install && npm run dev
  4. 浏览器打开 Vite 提示的地址(通常 http://localhost:5173),在左侧选择/输入模型、硬件与训练配置,点击「更新分析」即可看到显存柱状图与 Roofline 图。

后端 API:POST /get_analysis(传入 model_id, hardware, training_config)、GET /get_avaliable(获取可选模型与硬件列表)。

4. 绘图示例

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.py

硬件平台

hardwares/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 拉取 AutoConfigsource="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

About

This is an training process analysis.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors