SimAI Architecture
先给结论
SimAI 是阿里云开源的大规模 AI 集群性能仿真器。它关注的不是模型输出是否正确,而是:给定模型、并行策略、集合通信算法和网络拓扑,一次迭代大约要多久,时间花在计算还是通信,换卡、换网或换并行配置后会怎样。
它确实是仿真,但属于混合建模:
- 训练结构由 AICB 模拟框架调用并生成工作负载,不搬真实激活值,也不计算 loss。
- 计算时间主要来自真机 profiling、算子时间库或同架构外推,不做 GPU 指令级/周期级模拟。
- 集合通信由 NCCL-like 模型拆成点到点流量。
- 网络时间可以用快速的带宽解析模型,也可以交给 ns-3 做包与队列级离散事件仿真。
- 整体时间由事件依赖的关键路径得出,而不是把几个峰值带宽公式简单相加。
| 问题 | 核验结论 |
|---|---|
| 是仿真吗 | 是,准确说是“画像/外推 + 行为模拟 + 离散事件”的混合性能仿真 |
| 会真正训练模型吗 | 不会;目标是时间、流量和利用率,不是张量数值、loss 或收敛 |
| 解析模式是什么 | 用有效总线带宽和固定延迟近似通信,快,但看不到交换机排队等细节 |
| Simulation 模式是什么 | 把通信流交给 ns-3,模拟包、链路与网络事件,更慢但更细 |
| 论文精度如何 | 选定 A100/H100、模型和规模内,端到端偏差小于 3.9%,平均对齐度 98.1% |
| 支持 Ascend 吗 | 固定版本公开树没有 torch_npu、CANN、HCCL 或 Ascend 设备模型 |
项目与论文
SimAI 仓库把系统拆成多个可替换组件。论文中的名字和当前目录并不完全一致,理解时可以用下面的映射:
| 论文概念 | 当前公开实现 | 责任 |
|---|---|---|
| SimAI-WG | AICB | 生成训练工作负载,记录计算和通信操作 |
| SimAI-CP | AIOB/算子时间与工作负载字段 | 测量或估算计算核耗时 |
| SimAI-CM | SimCCL/MockNccl | 把集合通信算法和拓扑展开成 P2P 流 |
| Execution Engine | astra-sim-alibabacloud |
解析工作负载,调度计算、通信和完成事件 |
| Packet Network | ns-3-alibabacloud |
对链路、包、队列和网络完成进行离散事件模拟 |
| Inference Simulator | vidur-alibabacloud |
论文后新增的多请求推理调度与执行时间模型 |
论文全名是 SimAI: Unifying Architecture Design and Performance Tuning for Large-Scale Large Language Model Training with Scalability and Precision,发表于 USENIX NSDI 2025。它的中心问题是:传统解析模型太粗,包级仿真又太慢;如何在上千 GPU 规模保持可扩展性,同时保留集合通信和网络拓扑对性能的影响。
论文的主要内容可归纳为四点:
- 工作负载生成。 截获或模拟 Megatron-LM 等框架的训练结构,把计算时间、通信类型、通信域和字节数写成可回放记录。
- 计算预测。 优先使用真机核函数画像;缺硬件时再基于计算能力与内存带宽做外推。
- 通信预测。 不把 AllReduce 当成一个不可分的公式,而是结合 NCCL 算法、协议和拓扑拆成 P2P 流,再模拟网络完成。
- 可扩展执行。 用无锁多线程事件执行加速大规模仿真;论文报告相对单线程最高 23 倍加速,并比带锁多线程方案再快 15%。
仓库后来继续演进:1.5 加入多请求推理、DeepSeek/Qwen MoE 和 Vidur 调度,1.6 又增加推理显存预算、decode 线性插值与 PD 分离内存预算。这些是论文之后的工程能力,不能直接继承论文的训练精度数字。
架构与对象
论文 Figure 1 给出系统总图:输入模型、框架、xCCL 参数和拓扑后,工作负载生成器构造操作序列;执行引擎一边查询计算模型,一边调用通信与网络模型,最终输出端到端指标。
对初学者来说,最容易混淆的是“配置、张量、操作、事件和网络包”。SimAI 真正沿主路径传递的是元数据与时间事件,而不是训练张量的数值:
| 对象 | 物理表示 | 生产者 → 消费者 | 结束条件 |
|---|---|---|---|
| 模型与并行配置 | 参数和拓扑文本 | 用户 → AICB | 工作负载生成完成 |
| 层记录 | 计算时间、通信类型、通信组、字节数 | AICB → 执行引擎 | 对应层事件完成 |
| 集合通信请求 | 类型、rank 组、负载大小 | Layer → SimCCL | 所有组成流完成 |
| P2P 流 | 源、目的、字节数、通道/协议元数据 | SimCCL → 网络后端 | 发送与接收完成回调触发 |
| 计算/网络事件 | 时间戳、回调、依赖关系 | 调度器 → 事件队列 | 事件出队并执行 |
| 结果指标 | 迭代时间、通信时间、计数器 | 执行引擎 → 分析者 | 仿真结束后持久化 |
建模方式
工作负载不是训练数据
AICB 的 SimAI workload generator会写入并行配置和逐操作记录。它“跑”的是模型结构和通信语义,不是训练数据。可以把它理解成剧院彩排:演员走位、灯光切换和换景时刻都保留,但不用真的演完整剧情。
下面是与源码对象对应的语义伪代码,不是项目公开 API:
1 | def build_workload(model, parallel, compute_profile): |
工作负载文本可以在 CPU 上生成;但 AICB 当前物理回放路径的 初始化和 workload applier明确使用 CUDA/NCCL。这也是 Ascend 不能“改一个设备名就能跑”的第一处证据。
计算时间来自画像
对计算操作,最可靠的输入是在目标机器上测得的核函数或算子组合时间。论文的 SimAI-CP 还讨论了缺少目标 GPU 时的跨硬件外推:在计算受限区参考 FLOPS,在内存受限区参考带宽,再乘已知硬件的时间。
设:
T_known是已知硬件上测得的操作时间。P_known、P_new是已知/目标硬件的有效计算吞吐。B_known、B_new是已知/目标硬件的有效内存带宽。T_new是目标硬件预测时间。
从物理量直觉出发,若工作量不变,计算受限时间应随有效吞吐的倒数变化:
$$
T_{new} \approx T_{known}\frac{P_{known}}{P_{new}}
$$
内存受限时同理:
$$
T_{new} \approx T_{known}\frac{B_{known}}{B_{new}}
$$
通信是两级模型
集合通信首先经过 SimCCL/MockNccl。它根据算法和拓扑把一次 AllReduce、AllGather、AllToAll 等请求拆成多个 P2P 流。随后有两条执行路径:
- Analytical。 使用经标定的有效总线带宽与延迟,快速估计完成时间。概念上可以写成
T_comm = L_fixed + S / B_bus,其中S是字节数,B_bus是有效带宽而非产品峰值,L_fixed是启动/短消息项。源码中的 Analytical path还包含短消息经验分支,因此它是校准模型,不是纯理论公式。 - Simulation。 将流交给 ns-3 frontend,由离散事件网络模型处理发送、接收、链路和回调。它能观察拥塞和拓扑影响,但运行更慢,也更依赖正确的交换机、队列和链路参数。
完整事件循环可以抽象为:
1 | def run_simulation(workload, topology, mode, compute_model, collective_model): |
这里最重要的不是代码语法,而是完成条件:集合通信只有在其组成流全部完成后才能解除下游依赖;层对象和流对象也必须保留到回调结束。解析模式与 ns-3 模式改变的是网络事件如何计算,不改变上层工作负载语义。
Physical 与推理模式
README 还列出 beta 的 Physical mode。它用 CPU/RDMA 生成 NCCL-like 物理流量,适合在真实网络上压流或验证通信行为;它仍不是在加速卡上执行完整训练计算。
当前推理模块基于 Vidur 的请求级离散事件调度,加入多请求、MoE 模型、PD 分离和显存预算。其思路与训练仿真相通,但对象从“训练层和一次迭代”变成“请求、prefill/decode batch、KV Cache 和调度事件”。因此评估它要用在线吞吐、TTFT、TPOT、显存预算与请求分布,不能拿论文训练 Figure 9 直接背书。
精度到底怎么样
论文在两个各 128 台主机、每台 8 GPU 的集群上验证,规模最高 1024 GPU:
- A100 集群使用主机内 600 GB/s NVLink 和 4 张 ConnectX-6 网卡,每张双 100 Gbps。
- H100 集群使用主机内 900 GB/s NVLink 和 8 张 ConnectX-7 网卡,每张双 200 Gbps。
- 模型覆盖 GPT-3 13B、LLaMA 65B 和 GPT-3 175B,规模为 128、512、1024 GPU 的选定组合。
论文报告的关键数字如下:
| 层级 | 结果 | 应如何理解 |
|---|---|---|
| 主机内集合通信 | SimAI 平均偏差 A100 3.9%、H100 2.3% | NCCL 行为模型显著优于把集合通信粗化成带宽公式 |
| 直接测量的计算模型 | 总计算偏差 0.5%-3.1% | 同类硬件、正确 kernel 画像是高精度基础 |
| 跨硬件 CP-Model | 偏差约 13%-15% | 外推明显弱于直接测量 |
| 端到端训练 | 所测配置均小于 3.9% | 是 Figure 9 测试矩阵内的上界,不是全局 SLA |
| 平均对齐度 | 98.1% | 是论文汇总指标,不应简写成“普遍误差 1.9%” |
当前推理模块还有更直接的源码边界:memory_planner.py 的 TODO 明确写到,DeepSeek/Qwen3 的 KV Cache 序列长度当前硬编码为 1,会显著低估单请求 KV 占用,MLA 在 TP 下如何切分也待核验。它不否定训练论文,但说明“v1.6 已支持显存建模”不等于“推理显存预测已经完成同等级验证”。
Ascend 支持审计
当前公开版:不支持
对固定版本做源码审计后,没有发现 Ascend、CANN、HCCL 或 torch_npu 实现。相反,证据明确指向 NVIDIA 栈:
- 公共
GPUType枚举只有 A100、A800、H100、H800、H20 等 NVIDIA 型号。 - AICB 的物理执行路径初始化
torch.cuda与 NCCL。 - Mock collective 接口直接以
MockNccl命名并建模 NCCL-like 行为。 - 当前推理计算预测依赖 Hopper/Blackwell 侧的 DeepGEMM、FlashMLA 等实现。
代码和论文里出现的 NPU 是 ASTRA-Sim 沿用的通用神经网络加速器术语,类似把 GPU/NPU/TPU 都统称为 accelerator。它不代表 Huawei Ascend 产品适配。
哪些部分可以复用
不是所有代码都要推倒重来。工作负载文本、事件队列、依赖调度、统计输出,以及很大一部分 ns-3 网络执行框架,本质上是 CPU 侧和设备无关的。真正需要重做或校准的是“设备行为注入点”:
- 计算画像层。 用 Ascend PyTorch 的
torch_npu/CANN 在目标 910B、910C 等 SoC 上测量算子或层时间,键至少包含 SoC、CANN/驱动、dtype、shape、并行度和算子实现。 - 工作负载层。 让 AICB 能使用 HCCL backend 或导入真实 Ascend trace;同时保留 TP/PP/EP/CP、字节数和同步点语义。
- 集合通信层。 实现 SimHCCL。官方 HCCL 算法说明包含 Mesh、Ring、Recursive Halving-Doubling、Pairwise、Pipeline 等选择;其 rank 映射、分片、并发流和拓扑条件不能照搬 NCCL。
- 拓扑层。 表达 HCCS、PCIe、RoCE、Scale-Up/Scale-Out 链路、交换层次、有效带宽和拥塞参数。
- 验证层。 在同一个模型、batch、精度、并行计划、HCCL 配置、拓扑和统计窗口下,对比真机与仿真,分别报告计算、集合通信和端到端误差。
可以把 Ascend 适配的最小接口写成:
1 | def calibrate_ascend(simulator, ascend_cluster, workload): |
如何选择模式
如果只是做早期架构空间搜索,可以先用 Analytical mode 快速筛掉明显差的 TP/PP/EP、链路带宽和拓扑组合;进入候选收敛阶段,再用 ns-3 Simulation mode 检查拥塞、流竞争和拓扑敏感性。最后必须用少量真机测量闭环校准。
一个务实流程是:
- 固定问题。 明确是在比较硬件、网络、并行策略还是调度器,避免一次改多个变量。
- 生成工作负载。 先检查每层计算、通信类型、rank 组和字节数是否符合框架语义。
- 跑解析基线。 用小规模真机点标定
T_compute、B_bus和短消息项。 - 跑包级候选。 只对对拥塞敏感的少量候选启用 ns-3。
- 分层验证。 先核计算,再核集合通信,最后核端到端;不要只看一个总时间“碰巧接近”。
- 记录适用域。 把版本、硬件、模型、精度、拓扑和统计窗口与误差数字一起保存。
仓库 README 给出了 Analytical 和 Simulation 的 Docker/脚本入口;实际使用时应从固定提交的说明开始,而不是从论文图猜配置。Physical mode 是 beta,推理模块又有独立依赖和参数,两者都应单独验证。
总结
SimAI 的价值不在“用一个公式替代千卡集群”,而在把大模型系统拆成可校准的五类对象:框架工作负载、计算时间、集合通信行为、网络事件和依赖关键路径。解析模式负责速度,ns-3 模式负责网络细节,少量真机 profiling 负责把模型锚定到现实。
论文在所测 NVIDIA 训练配置中给出了很强的结果:端到端偏差小于 3.9%,平均对齐度 98.1%。但这组数字有清晰边界,不能覆盖论文后的推理模块,更不能覆盖尚未实现的 Ascend 后端。
对 Ascend,正确结论不是“完全不能用”,而是:通用事件执行骨架有复用价值,设备相关的计算画像、HCCL 行为和拓扑模型尚缺,精度必须从零校准。 在完成这三层适配和真机对照之前,任何具体 Ascend 误差数字都只是猜测。