跳到主要内容

SimAI

四组件如何协作达成生产级仿真精度

核心要点

  • 四组件架构:AICB (真实 profiling) + astra-sim-alibabacloud (事件引擎) + SimCCL (集合通信分解) + ns-3-alibabacloud (包级网络)
  • SimCCL: 572 行核心代码,完整实现 Ring / Tree / NVLS / PXN 等 13+ 算法
  • 三种模式:Analytical (秒) / NS-3 Simulation (分钟-小时) / Physical (真实硬件)
  • 生产拓扑:Spectrum-X / AlibabaHPN / DCN+ 预设模板,直接对应真实数据中心
  • 精度:512-1024 GPU 集合通信场景平均误差 1.9%,是 ASTRA-sim 原版 NS-3 (530%) 的根本改善

SimAI 是阿里云基础设施团队开发的全栈 LLM 训练 / 推理仿真平台 (NSDI'25[1])。官方报告与真实集群对齐 98.1% (1.9% 平均误差)。在 ASTRA-sim 基础上扩展,重点强化集合通信建模和网络仿真精度。

GitHub: https://github.com/aliyun/SimAI

四组件架构怎么分工

核心问题:工作负载怎么从真实 GPU 一路流到包级网络?每层加了什么?

AICB (AI Communication Benchmark, 真实 GPU profiling)
↓ 生成 workload 文件 (compute / comm 模式)
astra-sim-alibabacloud (事件驱动仿真引擎)
↓ 集合通信操作 (由 SimCCL 分解为 P2P flows)
SimCCL (集合通信 → P2P 分解, 572 行核心代码)

[三选一网络后端]
├─ Analytical: busbw 公式计算, 秒级, 适合探索
├─ NS-3 (ns-3-alibabacloud): 包级 RoCEv2 / DCQCN, 分钟级, 高精度
└─ Physical (Beta): 真实 RDMA 硬件流量生成

vidur-alibabacloud (SimAI 1.5):推理专用调度层,支持多请求动态 batching 和 Prefill / Decode 分离 — 这是 ASTRA-sim 不具备的推理仿真能力。

SimCCL 怎么把集合通信展开为 P2P

核心问题:SimAI 比 ASTRA-sim 多了哪些算法变体?NVLS / PXN 怎么建模?

SimCCL 核心思路:拦截集合通信操作,生成 P2P send / recv 序列,不做实际数据传输,只模拟通信流模式。每种算法完整展开为逐步的 P2P 原语,仿真引擎据此驱动网络后端。

Ring AllReduce (带宽最优)

两阶段 $N-1$ 步展开,以 4 个 rank 为例:

初始状态: 每个 rank 持有 [A/B/C/D] 中自己的分片

ReduceScatter 阶段 (3 步, 每步每 rank 发送 chunk_size = M/4):
步骤 1: rank0→rank1, rank1→rank2, rank2→rank3, rank3→rank0
步骤 2: rank0→rank1, rank1→rank2, ... (携带上一步 reduce 结果)
步骤 3: 同上
结果: 每个 rank 持有一个完整 reduce 后的分片

AllGather 阶段 (3 步, 广播已 reduce 的分片):
步骤 1-3: 依次将 reduce 结果沿环传播
结果: 每个 rank 持有全部 [A+B+C+D] 的完整结果

总通信量 (每 rank) = $2(N-1)/N \times M$, $N$ 增大时带宽利用率趋近 100%。

Tree AllReduce (延迟最优)

Double Binary Tree 结构,$O(\log N)$ 步,步数少,适合小消息 (延迟主导):

$$\begin{equation} T_{\text{Tree}} \approx 2 \log_2 N \cdot \alpha + \log_2 N \cdot \frac{M}{\beta} \label{eq:sim-simai-tree-ar} \end{equation}$$

$N=8$ 时 Tree 只需 6 步,Ring 需 14 步。

NVSwitch 硬件在交换时完成 in-network reduce, GPU 不参与中间 reduce 步骤:

GPU_0..7 → NVSwitch (硬件 reduce) → 结果广播回所有 GPU

NVLS 总步数 = 2 (vs Ring 的 $2(N-1) = 14$ 步),消除 Ring 的多步开销。H100 DGX (8 GPU) 实测 BusBW 可达 480+ GB/s,超过 Ring 的理论上限 ($450 \times 7/8 \approx 394$ GB/s)。环境变量 AS_NVLS_ENABLE=1 开启。

解决 GPU 向不同 Rail 对端发数据时的带宽瓶颈:

传统路径: GPU-0 → PCIe → CPU → QPI → CPU → PCIe → NIC-1 (带宽受限于 PCIe)
PXN 路径: GPU-0 → NVLink → GPU-1 → PCIe → NIC-1 (绕开 CPU, 带宽 ≈ NVLink)

NCCL 2.12 引入 PXN,实测 AllToAll 性能提升超过 2×。

算法选择逻辑

并行维度操作类型默认算法
TP (节点内)AllReduceNVLS (NVLink-Sharp)
TP (节点间)AllReduceRing
DPAllReduce / ReduceScatterRing
EPAllToAllPairwise (节点间)
PPP2P send / recv无集合算法

@tbl-sim-simai-algo-routing SimCCL 算法选择路由表

SimCCL 共实现 13+ 算法变体,包含 NVLS / PXN / HalvingDoubling 等 ASTRA-sim 原版不具备的算法。

三种网络模式怎么用

核心问题:Analytical / Simulation / Physical 三种模式输入输出和典型用途有什么差别?

Analytical 模式

直接使用 busbw.yaml 配置每种并行维度 × 集合操作的等效带宽

TP:
allreduce: 300 # GB/s, NVLink 节点内
allgather: 280
reducescatter: 280
alltoall: 230
DP:
allgather: 380 # RDMA 跨节点
reducescatter: 380
EP:
allgather: 45 # MoE EP AllGather (跨节点)
alltoall: 80 # MoE 路由 AllToAll

计算公式

$$\begin{equation} T_{\text{comm}} = \frac{M}{\text{bus\_bandwidth}} + \text{latency\_overhead} \label{eq:sim-simai-busbw} \end{equation}$$

busbw 可从 nccl-tests 实测获取,或通过参数自动推算:

-nv [NVLink_bw] -nic [NIC_bw] -n_p_s [NICs_per_switch] -g_p_s [GPUs_per_switch]

执行时间:秒级。适合大规模参数空间扫描 (数百种并行策略 × 拓扑配置组合)。

Simulation 模式 (NS-3 集成)

SimCCL 产出的 P2P 流通过 AstraSimNetwork.cc 接口注入 ns-3-alibabacloud:

  • sim_send() — 生成 NS-3 网络包
  • sim_recv() — 注册回调,包到达后唤醒仿真事件

支持的传输协议:RoCEv2 / TCP

支持的拥塞控制算法:DCQCN / HPCC / HPCC-PINT / TIMELY / DCTCP / Swift

ns-3-alibabacloud 相比 ASTRA-sim 原版 NS-3 后端的核心增强:

维度ASTRA-sim NS-3SimAI ns-3-alibabacloud
CC 算法DCQCN, HPCCDCQCN, HPCC, HPCC-PINT, TIMELY, DCTCP, Swift
QP 建模基础真实 RDMA QP 创建 / 销毁逻辑
NIC 配置统一perIP / perQP 灵活配置
调度基础Max-Min 原则优化
NVSwitch不支持支持节点内 GPU 通信
INT 支持HPCC 基础INT + PINT (头部压缩至 1-2 bytes)
CC 解耦耦合模块化可替换

@tbl-sim-simai-ns3-vs-astra ns-3-alibabacloud 相比 ASTRA-sim NS-3 的增强

执行时间:分钟到小时级。适合发表质量结果。

Physical 模式 (Beta)

直接生成真实 RDMA 流量在实际硬件上运行,适合最终验证,非仿真。

精度怎么从 530% 改到 1.9%

核心问题:SimAI 与 ASTRA-sim 原版精度差距来自哪?主要修了什么?

SimAI NSDI'25 验证数据

指标结果
整体对齐精度平均 98.1% (与真实集群对比)
AllReduce与 AllGather 趋势一致
ReduceScatter与 AllGather 趋势一致
测试规模小规模实验室 → 大规模工业环境 (512–1024 GPU)

@tbl-sim-simai-validation SimAI 精度验证结果

对比参考:ASTRA-sim 原版 NS-3 后端基础规模误差 45.9%,扩展到 512 GPU 时飙升至 530.2%。SimAI 通过 ns-3-alibabacloud 改善到 ~2%。

误差改善的主要来源

  • 真实 QP 逻辑 (发送 / 接收窗口,每 QP 独立速率控制)
  • 完整拥塞控制闭环 (CNP 回传 → 发送端 DCQCN 降速 → 速率恢复)
  • CC 模块解耦,调度遵循 Max-Min 原则

生产拓扑模板有哪些

核心问题:预设拓扑分别对应什么真实集群?NVLink 怎么建模?

预设拓扑 (通过 gen_Topo_Template.py 生成):

拓扑名代表集群特点
Spectrum-XNVIDIA RoCE fabric两层 RoCE 交换;8 NIC / 节点;带宽密集
AlibabaHPN阿里云 HPN 数据中心Rail-optimized;专为 LLM 训练设计
DCN+增强型胖树多层胖树;-asn/-psn 参数控制交换层级

@tbl-sim-simai-topo-template 生产拓扑预设模板

NVLink 建模策略:用单 NVSwitch 节点抽象全部节点内 GPU 互联 (简化但工程实用):

GPU_0..7 → NVSwitch_Node (3600 Gbps 总带宽 × 利用率折扣因子)

跟 ASTRA-sim 差在哪

核心问题:一张表里能看出 SimAI vs ASTRA-sim 各维度的差异吗?

维度ASTRA-simSimAI
网络后端Analytical + NS-3 + GarnetAnalytical + NS-3 + Physical
集合通信抽象层,无 NCCL 细节MockNCCL, Ring / Tree / NVLS / PXN 完整实现
Workload 来源手写或脚本生成AICB 真实 GPU profiling
MoE 支持有限完整 EP + AllToAll 建模
推理仿真不支持SimAI 1.5 支持 Prefill / Decode 分离
NVLink 建模无专门支持NVLS (in-network reduce) + PXN 路由优化
拓扑模板通用参数化Spectrum-X / AlibabaHPN / DCN+ 生产拓扑
精度验证5% (4–16 GPU,仅 AllReduce)1.9% (512–1024 GPU,多种操作)
规模学术原型生产级,多线程加速
局限无异构支持,计算通信重叠不完整同构集群假设,计算通信重叠仍有缺口

@tbl-sim-simai-vs-astra SimAI vs ASTRA-sim 各维度差异

Takeaway

知识点核心结论
四组件架构AICB + astra-sim-alibabacloud + SimCCL + ns-3-alibabacloud
SimCCL572 行核心代码,13+ 算法变体,含 NVLS / PXN
NVLS 步数2 步 vs Ring $2(N-1)$, H100 DGX BusBW 480+ GB/s 超过 Ring 上限
三模式Analytical (秒) / NS-3 (分-小时) / Physical (硬件)
精度 1.9%真实 QP + 完整 CC 闭环 + Max-Min 调度
生产拓扑Spectrum-X / AlibabaHPN / DCN+ 直接对应真实集群

参考资料

  1. Wang et al., SimAI: Unifying Architecture Design and Performance Tuning for Large-Scale LLM Training, NSDI 2025. https://www.usenix.org/conference/nsdi25/presentation/wang-xizheng-simai