LLM 预训练集群仿真器
大模型预训练集群仿真建模 · 当前模块:显存建模(Memory Modeling)— 输入实时计算,无需刷新
单个完整 DP 域卡数 MAX(FSDP×CP, EP×EFSDP×CP)
—
总模型权重 FP32(全集群)
—
FP32 模型权重
单卡模型权重 FP32
—
单卡总显存
—
💾 显存明细
🌐 集群维度显存 全集群合计
集群静态显存(权重+梯度+优化器)
—
集群总显存需求(静态 + 动态激活)
—
🖥 单卡维度显存 单卡口径(含预取 / 临时梯度)
单卡总显存(七项合计)
—
📡 通信耗时对比
⚡ EP Alltoall 通信域 = EP
总接受数据
—
seq × Hidden × 2B × topk / 1024² / 通信域 × (通信域−1)
每份数据
—
总接受数据 / (通信域 − 1)
算法带宽
—
总流量/瓶颈耗时 × 带宽利用率
通信耗时
—
总接受数据(GiB) / 算法带宽
瓶颈层(耗时最大)
—
🔄 FSDP Allgather/RS 通信域 = FSDP
总接受数据
—
单层Attn(B) × 10⁹ × dtype / 1024² / 通信域 × (通信域−1)
每份数据
—
总接受数据 / (通信域 − 1)
算法带宽
—
总流量/瓶颈耗时 × 带宽利用率
通信耗时
—
总接受数据(GiB) / 算法带宽
瓶颈层(耗时最大)
—
🔄 EFSDP Allgather/RS 通信域 = EFSDP
总接受数据
—
单层MoE(B)/EP × 10⁹ × dtype / 1024² / 通信域 × (通信域−1)
每份数据
—
总接受数据 / (通信域 − 1)
算法带宽
—
总流量/瓶颈耗时 × 带宽利用率
通信耗时
—
总接受数据(GiB) / 算法带宽
瓶颈层(耗时最大)
—
📐 查看全部计算公式(当前版本)
约定:参数量单位 B(十亿参数),FP32 换算系数 GiB/B = 4 × 10⁹ / 1024³ ≈ 3.7253
(即 B × 10⁹ × 4 / 1024³ = GiB);动态激活输入单位即 GiB,无需换算。公式逐条对应需求文档 v0.1。
单个完整 DP 域卡数 = MAX(FSDP × CP, EP × EFSDP × CP)
总模型权重 FP32 (GiB) = (单层 Attention 参数量 + 单个专家参数量 × 专家数量) × 层数 × (4×10⁹/1024³)
总模型梯度 FP32 (GiB) = 总模型权重 FP32 (GiB)
总优化器 2×FP32 (GiB) = 总模型权重 FP32 (GiB) × 2(集群口径不随 SwapOptimizer 变化)
总静态显存 (GiB) = 权重 + 梯度 + 优化器
总动态激活 (GiB) = 单层动态激活 / CP × 层数
单卡模型权重 FP32 (GiB) = (单层 Attention 参数量 / FSDP + ((单个专家参数量 × 专家数量) / (EP × EFSDP))) × 层数 × (4×10⁹/1024³)
单卡模型梯度 FP32 (GiB) = 单卡模型权重 FP32 (GiB)
单卡优化器 2×FP32 (GiB) = 单卡模型权重 FP32 (GiB) × 2;SwapOptimizer=True 时 = 0(优化器交换至 Host,不占显存)
单卡动态激活 (GiB) = Recompute ? 总动态激活 / 层数 : 总动态激活
单层预取权重 BF16 (GiB) = (单层 Attention 参数量 + 单个专家参数量 × (专家数量/EP)) × (2×10⁹/1024³)
单层临时梯度 FP32 (GiB) = 单层预取权重 BF16 (GiB) × 2
Layer Input (GiB) = SwapActivation=True ? 0 : 序列长度 × hidden size × 层数 × 2(BF16 字节)/ 1024³
单卡总显存 (GiB) = 权重 + 梯度 + 优化器 + 动态激活 + Layer Input + 预取权重 + 临时梯度
EP Alltoall(均衡):
通信域 = EP
总接受数据 (MB) = 序列长度 × Hidden Size × 2(BF16) × TopK / 1024² / 通信域 × (通信域 − 1)
每份数据 (MB) = 总接受数据 / (通信域 − 1)
总流量 = 通信域 − 1
机内流量 = MIN(总流量, 机内大小 − 1)
超节点内流量 = MAX(MIN(通信域, 超节点大小) − 机内大小, 0)
超节点间流量 = MAX(通信域 − 超节点大小, 0)
各层占比 = 各层流量 / 总流量
算法带宽 (GiB/s) = 总流量 / MAX(机内流量/机内带宽 + 超节点内流量/超节点带宽, 超节点间流量/超节点间带宽) × 带宽利用率(默认 0.8)
通信耗时 = 总接受数据(GiB) / 算法带宽;瓶颈层 = 耗时最大的层级
FSDP Allgather / ReduceScatter(分层):
通信域 = FSDP
总接受数据 (MB) = 单层 Attention 参数量 × 10⁹ × dtype 字节 / 1024² / 通信域 × (通信域 − 1)
每份数据 (MB) = 总接受数据 / (通信域 − 1)
总流量 = 通信域 − 1
机内流量 = 总流量 − 超节点内流量 − 超节点间流量
超节点内流量 = MAX(MIN(通信域, 超节点大小) / 机内大小 − 1, 0) × (超节点间流量 + 1)
超节点间流量 = MAX(通信域 / 超节点大小 − 1, 0)
各层占比 = 各层流量 / 总流量
算法带宽 (GiB/s) = 总流量 / MAX(机内流量/机内带宽 + 超节点内流量/超节点带宽, 超节点间流量/超节点间带宽) × 带宽利用率(默认 0.8)
通信耗时 = 总接受数据(GiB) / 算法带宽;瓶颈层 = 耗时最大的层级
EFSDP Allgather / ReduceScatter(分层):
通信域 = EFSDP
总接受数据 (MB) = 单层 MoE 参数量 / EP × 10⁹ × dtype 字节 / 1024² / 通信域 × (通信域 − 1)
(单层 MoE 参数量 = 单个专家参数量 × 专家数量;÷EP:EP 子域内只含 1/EP 的专家权重)
每份数据 (MB) = 总接受数据 / (通信域 − 1)
总流量 = 通信域 − 1
有效层级大小:超节点 = MAX(超节点大小/EP, 1),机内 = MAX(机内大小/EP, 1)
机内流量 = 总流量 − 超节点内流量 − 超节点间流量
超节点内流量 = MAX(MIN(通信域, 有效超节点) / 有效机内 − 1, 0) × (超节点间流量 + 1)
超节点间流量 = MAX(通信域 / 有效超节点 − 1, 0)
各层占比 = 各层流量 / 总流量
算法带宽 (GiB/s) = 总流量 / MAX(机内流量/机内带宽 + 超节点内流量/超节点带宽, 超节点间流量/超节点间带宽) × 带宽利用率(默认 0.8)
通信耗时 = 总接受数据(GiB) / 算法带宽;瓶颈层 = 耗时最大的层级