TensorCast 使用指南
支持矩阵
核心能力
| 领域 | 支持情况 | 说明 |
|---|---|---|
| 运行时输出 | 支持 | 性能汇总、Chrome trace |
| 设备建模 | 支持 | 互连建模 |
| 设备画像 | 支持 | 自定义 DeviceProfile(用户定义) |
| 性能模型 | 支持 | 经验模型、解析模型 |
模型与优化
| 领域 | 支持情况 | 说明 |
|---|---|---|
| 文本模型(系列) | 支持 | Qwen3、Qwen3-Next、GLM-4、DeepSeek V3、DeepSeek V3.2、ERNIE 4.5、Ling、MiMo v2、MiniMax M2,支持 MoE |
| 视觉-语言模型 | 支持 | Qwen3-VL、GLM-4V、InternVL |
| 视频生成模型(Diffusers DiT) | 支持 | Wan、HunyuanVideo、HunyuanVideo1.5 |
| 自动分片 | 支持 | DP、TP、EP,自动并行策略搜索 |
| 量化(Linear) | 支持 | W8A16/W8A8/W4A8(静态与动态)、FP8、MXFP4 |
| 量化(Attention) | 支持(仅文本) | INT8 |
| 服务仿真 | 支持 | 多实例、多请求端到端服务仿真,输出 TTFT/TPOT/吞吐 |
| 吞吐优化 | 支持 | 在 SLO 约束下自动搜索配置,并支持跨硬件对比表 |
完整模型列表与特性明细请参见《模型支持与特性支持矩阵》。
阅读路径
| 目标 | 推荐章节 |
|---|---|
| 快速跑通 LLM 文本生成仿真 | 快速入门:文本生成 |
| 理解输出中的耗时、调用次数和显存指标 | 结果(文本生成) |
| 运行视频生成模型仿真 | 快速入门:视频生成 |
| 查看或自定义硬件设备画像 | 支持的加速器 |
| 配置 prefill / decode 场景 | 运行 Prefill 与 运行 Decode |
简介
TensorCast 是一个面向 PyTorch 程序的性能仿真与分析框架。它使开发者和研究人员能够在无需访问物理机器的情况下,预测其神经网络模型在特定硬件配置上的性能表现。
从本质上讲,TensorCast 充当"虚拟机"或运行时仿真器。它不会在实际加速器上执行计算,而是拦截 PyTorch 程序的计算图,并在用户定义的 MachineConfig 上仿真其执行过程。该配置指定了目标硬件的特性,例如理论算力(TFLOPS)、内存带宽、缓存层次结构以及互连速度。为了准确估算模型在给定硬件上的最优性能,TensorCast 提供了模型优化流水线,包括自动模型分片、量化以及 FX 图优化,在开展分析前将源程序转换为最优形式。
通过在"虚拟"硬件上运行模型,TensorCast 提供详细的性能洞察,包括:
- 开箱即用的 Huggingface transformer 模型支持。
- 通过简单配置支持多种硬件加速器设备。
- 算子级执行时间:使用可扩展模型进行估算,例如解析 roofline 模型、经验数据或基于机器学习的预测器。
- 内存占用:跟踪总内存分配量和峰值内存分配量。
- 计算特征:分析每个算子的 FLOPs(浮点运算次数)和内存访问量。
- 高级调度仿真:建模复杂执行模式,例如跨多个 stream 的并发计算。
最终输出包括全面的汇总表和详细的 Chrome Trace 文件,便于深入可视化并识别性能瓶颈。
首次使用前,请先参阅《msModeling 安装指南》完成环境搭建与第一次仿真。
概览
快速入门:文本生成
功能说明: 仿真一批 query 的 LLM 推理性能。
命令:
python -m cli.inference.text_generate Qwen/Qwen3-32B --num-queries 2 --query-length 3500 --device TEST_DEVICE
关键参数: --context-length、--decode、--quantize-linear-action、--chrome-trace、--device
输出: 性能汇总表;若设置了 --chrome-trace,还可选输出 Chrome trace 文件。
结果(文本生成)
示例输出(已截断):
Model compilation and execution time: 0.192 s
---------------------------------------------- -------------- ------------ ----------
Name analytic total analytic avg # of Calls
---------------------------------------------- -------------- ------------ ----------
tensor_cast.static_quant_linear.default 884.004ms 1.973ms 448
tensor_cast.attention.default 259.855ms 4.060ms 64
aten.mul.Tensor 198.215ms 237.668us 834
aten._to_copy.default 100.528ms 195.580us 514
tensor_cast.dynamic_quantize_symmetric.default 76.519ms 170.802us 448
...
Total time for analytic: 1.744s
[analytic] Execution time: 1.744174 s
[analytic] TPS/Device: 4013 token/s
Total device memory: 64.000 GB
Model weight size: 31.981 GB
KV cache: 1.719 GB
Model activation size: 0.601 GB
Reserved memory: 0.000 GB
Memory available: 29.699 GB
说明:Model compilation and execution time 是仿真器在宿主机上的运行时间,而非模型在硬件上的真实编译或执行时间。
指标说明:
analytic total:算子估算总耗时。analytic avg:算子每次调用的平均耗时。# of Calls:算子被调用的次数。Total time for analytic:解析算子耗时的总和。TPS/Device:每设备每秒 token 数。Total device memory及其细分项:权重、KV cache 和 activation 的估算内存占用。
快速入门:视频生成
功能说明: 仿真视频生成模型的 diffusion transformer 前向传播。
命令:
python -m cli.inference.video_generate docs/fixtures/hunyuanvideo_mock_model --batch-size 1 --seq-len 16 --height 576 --width 1024 --frame-num 14 --sample-step 25 --device TEST_DEVICE
关键参数: --height、--width、--frame-num、--sample-step、--chrome-trace、--device
输出: 性能汇总表;若设置了 --chrome-trace,还可选输出 Chrome trace 文件。
结果(视频生成)
示例输出(已截断):
Model compilation and execution time: 25.44349410000723s
---------------------------------------------- -------------- ------------ ----------
Name analytic total analytic avg # of Calls
---------------------------------------------- -------------- ------------ ----------
aten.addmm.default 8.546s 1.280ms 6675
tensor_cast.attention.default 7.943s 5.125ms 1550
aten.mul.Tensor 2.597s 126.510us 20525
aten._to_copy.default 2.450s 142.242us 17225
tensor_cast.static_quant_linear.default 2.266s 323.720us 7000
...
Total time for analytic: 29.350s
说明:Model compilation and execution time 是仿真器在宿主机上的运行时间,而非模型在硬件上的真实编译或执行时间。
指标说明:
analytic total:算子估算总耗时。analytic avg:算子每次调用的平均耗时。# of Calls:算子被调用的次数。Total time for analytic:解析算子耗时的总和。
支持的加速器
我们为以下设备配置提供内置支持(定义于 tensor_cast/device.py):
TEST_DEVICEATLAS_800_A2_376T_64GATLAS_800_A2_313T_64GATLAS_800_A2_280T_64GATLAS_800_A2_280T_64G_PCIEATLAS_800_A2_280T_32G_PCIEATLAS_800_A3_752T_128G_DIEATLAS_800_A3_560T_128G_DIE
自定义设备类型
对于其他硬件,可在 tensor_cast/device_profiles 下以 Python 文件形式定义自定义设备配置。TensorCast 会自动加载,之后即可在 CLI 中引用该配置名称。自定义设备指南:device_profiles/README.md
详细用法
按指定 query 长度运行文本生成
我们提供 text_generate.py 命令行接口来仿真文本生成。该脚本支持对一批具有相同输入长度、可选相同 context 长度的 query 进行文本生成仿真。默认提供算子性能分解的表格汇总。也可选择导出 Chrome trace。
其一般用法如下:
usage: text_generate.py [-h]
[--device {TEST_DEVICE,ATLAS_800_A2_376T_64G,ATLAS_800_A2_313T_64G,ATLAS_800_A2_280T_64G,ATLAS_800_A2_280T_64G_PCIE,ATLAS_800_A2_280T_32G_PCIE,ATLAS_800_A3_752T_128G_DIE,ATLAS_800_A3_560T_128G_DIE}]
[--num-devices NUM_DEVICES] [--reserved-memory-gb RESERVED_MEMORY_GB] [--log-level {debug,info,warning,error,critical}] --num-queries NUM_QUERIES --query-length QUERY_LENGTH
[--context-length CONTEXT_LENGTH] [--decode] [--num-mtp-tokens NUM_MTP_TOKENS] [--disable-repetition] [--compile] [--compile-allow-graph-break]
[--quantize-linear-action {DISABLED,W8A16_STATIC,W8A8_STATIC,W4A8_STATIC,W8A16_DYNAMIC,W8A8_DYNAMIC,W4A8_DYNAMIC,FP8,MXFP4}] [--quantize-lmhead] [--mxfp4-group-size MXFP4_GROUP_SIZE]
[--quantize-attention-action {DISABLED,INT8,FP8}] [--graph-log-url GRAPH_LOG_URL] [--dump-input-shapes] [--chrome-trace CHROME_TRACE]
[--num-hidden-layers-override NUM_HIDDEN_LAYERS_OVERRIDE] [--tp-size TP_SIZE] [--dp-size DP_SIZE] [--ep-size EP_SIZE] [--o-proj-tp-size O_PROJ_TP_SIZE]
[--o-proj-dp-size O_PROJ_DP_SIZE] [--mlp-tp-size MLP_TP_SIZE] [--mlp-dp-size MLP_DP_SIZE] [--lmhead-tp-size LMHEAD_TP_SIZE] [--lmhead-dp-size LMHEAD_DP_SIZE]
[--moe-tp-size MOE_TP_SIZE] [--moe-dp-size MOE_DP_SIZE] [--word-embedding-tp {col,row}] [--enable-redundant-experts] [--enable-external-shared-experts] [--host-external-shared-experts]
[--image-batch-size IMAGE_BATCH_SIZE] [--image-height IMAGE_HEIGHT] [--image-width IMAGE_WIDTH] [--remote-source {huggingface,modelscope}]
model_id
Run a simulated LLM inference pass and dump the perf result.
运行 python -m cli.inference.text_generate --help 查看详情。
运行 diffusion 模型的视频生成推理
我们提供 video_generate.py 命令行接口来仿真 diffusion transformer 模型的前向传播与性能。该脚本支持仿真视频生成模型(例如类 Stable Video Diffusion 架构)的推理过程,可配置输入维度、采样步数及并行设置。默认提供详细的算子性能分解表格汇总。也可选择将性能时间线导出为 Chrome Trace 文件。
其一般用法如下:
usage: video_generate.py [-h]
[--device {TEST_DEVICE,ATLAS_800_A2_376T_64G,ATLAS_800_A2_313T_64G,ATLAS_800_A2_280T_64G,ATLAS_800_A2_280T_64G_PCIE,ATLAS_800_A2_280T_32G_PCIE,ATLAS_800_A3_752T_128G_DIE,ATLAS_800_A3_560T_128G_DIE}]
--batch-size BATCH_SIZE --seq-len SEQ_LEN [--chrome-trace CHROME_TRACE] [--height HEIGHT] [--width WIDTH] [--frame-num FRAME_NUM] [--sample-step SAMPLE_STEP]
[--log-level {debug,info,warning,error,critical}] [--dtype {float16,float32,bfloat16}]
[--quantize-linear-action {DISABLED,W8A16_STATIC,W8A8_STATIC,W4A8_STATIC,W8A16_DYNAMIC,W8A8_DYNAMIC,W4A8_DYNAMIC,FP8,MXFP4}] [--use-cfg] [--world-size WORLD_SIZE]
[--ulysses-size ULYSSES_SIZE] [--cfg-parallel] [--dit-cache] [--cache-step-range CACHE_STEP_RANGE] [--cache-step-interval CACHE_STEP_INTERVAL]
[--cache-block-range CACHE_BLOCK_RANGE]
model_id
Run a simulated diffusion transformer forward and dump perf stats.
运行 python -m cli.inference.video_generate --help 查看详情。
进阶说明
External Shared Experts 与 Redundant Experts 实现
以下概述 External Shared Experts 与 Redundant Experts 的实现逻辑。
-
仅 Redundant Experts: 每个设备会额外托管一个 redundant expert。
-
仅 External Shared Experts: 设备按 1:
top_k的比例分配给 external shared experts 与 routing experts。如有需要,使用 redundant experts 对 routing experts 进行填充。 例如,若world_size为 64、top_k为 8、routing experts 数量为 256,则有 8 个设备用于托管 external shared experts。 其余 56 个设备用于分布 256 个 routing experts。32 个设备各托管 5 个 routing experts。24 个设备各托管 4 个 routing experts 和 1 个 redundant expert。 -
同时启用 External Shared Experts 与 Redundant Experts: 分配逻辑与"仅 External Shared Experts"模式相同,另有一项补充:若无需 redundant experts 来填充 routing experts(即 routing experts 在各设备间均匀分布),则每个托管 routing experts 的设备会额外托管一个 redundant expert。
运行 Prefill
要在 A2 上对 Qwen3-32B 运行 prefill,两个请求各 3500 token 输入长度,可运行以下命令:
python -m cli.inference.text_generate Qwen/Qwen3-32B --num-queries 2 --query-length 3500 --context-length 3500 --device TEST_DEVICE
Prefill 模式下不添加 --decode;--query-length 表示新输入长度,--context-length 表示每个请求的 context 长度。
也可使用多种量化方案对线性层进行量化,例如 W8A8 动态量化,并以 4500 token 的 context 作为前缀:
python -m cli.inference.text_generate Qwen/Qwen3-32B --num-queries 2 --query-length 3500 --context-length 4500 --device TEST_DEVICE --quantize-linear-action W8A8_DYNAMIC
运行 Decode
运行 decode 类似,只需调整输入长度和 context 长度。通常输入长度为 1。
python -m cli.inference.text_generate Qwen/Qwen3-32B --num-queries 10 --query-length 1 --context-length 4500 --device TEST_DEVICE --quantize-linear-action W8A8_STATIC
待办列表(Roadmap)
- 模型(规划中,可编译):Kimi-K2、Qwen3-235B、GLM-4.5
- 自动分片:CP、SP
- 量化(Attention):FP8
- 编译器:完善 Qwen3 Dense、DeepSeek 等模型的融合支持