2. 物理代理模型推理计算图剖析

物理代理模型(Physics-Informed Surrogate Model)的推理过程并不是一次简单的“网络前向”。它是一条由多个异构阶段串联而成的计算图:输入预处理负责把工程物理量整理成张量,特征编码把几何、边界条件与工况映射到隐空间,核心网络完成主要浮点运算,物理约束后处理把网络输出投影回可行域,输出解码再把张量还原为工程师可读的场量或标量。性能优化的第一步不是改代码,而是把这条链路拆开,看清每个阶段的算子构成、数据形状、访存特征与耗时占比,才能判断瓶颈究竟在算力、带宽还是调度。

全链路计算图的五个阶段

以一个典型的二维稳态热传导代理模型为例:输入为几何边界点坐标、材料导热系数分布、边界温度与热流条件,输出为网格节点温度场。推理链路可拆为:

  • 输入预处理:坐标归一化、边界条件编码、网格采样与张量拼装。此阶段以标量运算和内存搬运为主,算子碎片化,容易产生大量小 kernel 与主机—设备同步。
  • 特征编码:多层感知或卷积编码器把几何与物理条件映射为高维特征。计算密度中等,但存在较多逐元素激活与归一化。
  • 核心网络前向:主干网络(如 U-Net、傅里叶神经算子或 Transformer 块)承担绝大部分矩阵乘与卷积,是 FLOPs 的主要来源。
  • 物理约束后处理:施加边界条件硬约束、残差修正或守恒投影,通常包含稀疏矩阵运算与迭代求解,访存不规则。
  • 输出解码:反归一化、场量重组、插值到目标网格并写回结果,多为带宽受限的逐元素操作。

下图给出该链路的计算图结构,标注了各阶段的主要算子类型、数据形状变化与典型瓶颈属性,便于对照实际 profile 结果定位问题。

推理计算图:五阶段串联与瓶颈属性 ① 输入预处理 归一化 / 条件编码 网格采样 / 张量拼装 瓶颈:小 kernel、同步 ② 特征编码 编码器卷积 / 线性层 激活 / 归一化 瓶颈:逐元素算子 ③ 核心网络前向 矩阵乘 / 卷积 / 注意力 残差连接 瓶颈:算力密集 ④ 物理约束后处理 边界硬约束 / 残差修正 守恒投影 / 稀疏求解 瓶颈:访存不规则 ⑤ 输出解码 反归一化 / 场量重组 插值 / 写回 瓶颈:带宽受限 数据形状(示例) [B, N_pts, 4] → [B, C, H, W] → [B, 256, H/8, W/8] → [B, 1, H, W] → [B, N_out, 1] 瓶颈定位判据 • 算力受限:SM 利用率高、Tensor Core 活跃 • 带宽受限:DRAM 吞吐接近峰值、算术强度低 • 调度受限:kernel 数量多、单 kernel 时长极短 • 同步受限:主机—设备拷贝与流同步占比高 • 不规则访存:稀疏算子、gather/scatter 占比高 判据来源:Nsight Systems 时间线 + Nsight Compute 指标 先看阶段耗时占比,再看阶段内算子类型与访存模式 避免只看总耗时,忽略阶段间的串行与等待 阶段—优化手段映射 ① 预处理:算子融合、批量拼装、异步拷贝 ② 编码:融合激活与归一化、降低精度 ③ 主干:张量并行、算子替换、KV 缓存复用 ④ 约束:稀疏格式优化、迭代次数裁剪 ⑤ 解码:向量化写回、减少中间张量

用 profile 数据把“感觉慢”变成“定位准”

拆图之后,需要把每个阶段映射到实际耗时。推荐先用 Nsight Systems 抓取一次完整推理的时间线,观察五个阶段在时间轴上的占比与串行关系;再用 Nsight Compute 对耗时最高的 2~3 个 kernel 采集指标。判断逻辑可以归纳为:若某阶段耗时占比高且其 SM 利用率高、算术强度大,则属于算力受限,优化方向是降低 FLOPs 或提升并行度;若 DRAM 吞吐接近峰值而算术强度低,则属于带宽受限,应优先做算子融合与减少中间张量;若时间线上出现大量短 kernel 与空隙,则属于调度受限,应做图融合或使用 CUDA Graph 捕获整条链路。

以示例参数说明:假设某次推理总耗时 42 ms,其中预处理 6 ms、编码 5 ms、主干 22 ms、物理约束后处理 7 ms、解码 2 ms。主干占比最高,但若 Nsight Compute 显示主干卷积的 SM 利用率仅 35%、DRAM 吞吐已达 80%,则真正瓶颈是带宽而非算力,此时把主干中的逐元素激活与归一化融合进卷积 epilogue,往往比换更大算力卡更有效。反之,若物理约束后处理中的稀疏求解出现大量 gather/scatter 且 L2 命中率低,则应检查稀疏格式是否与访问模式匹配,而不是盲目增加迭代次数。

拆图时建议同时记录每个阶段的输入输出形状、数据类型(FP32/FP16/BF16)与是否发生主机—设备拷贝。形状突变点往往就是隐式重排或额外拷贝发生的位置,也是融合机会最多的地方。

从计算图到可执行的定位清单

为了让定位过程可复现,可以把上述方法固化为一张检查表:先按阶段记录耗时与占比,再对 Top 阶段记录算子类型、算术强度、SM 利用率、DRAM 吞吐与 kernel 数量,最后对照“算力/带宽/调度/同步/不规则访存”五类判据给出结论与候选优化手段。这样每次优化前后都能用同一套口径对比,避免“改了很多但说不清收益来自哪里”。

阶段示例耗时主要算子判据信号候选手段
输入预处理6 ms归一化、拼装kernel 多且短算子融合、异步拷贝
特征编码5 ms卷积、激活逐元素占比高融合激活、降精度
核心前向22 ms矩阵乘、卷积DRAM 吞吐高epilogue 融合、张量并行
物理约束7 ms稀疏求解、投影L2 命中率低稀疏格式优化、裁剪迭代
输出解码2 ms反归一化、插值带宽受限向量化写回、减少中间量

需要强调的是,上表中的耗时与信号均为教学示例,实际数值必须由目标硬件、批大小、精度模式与输入规模共同决定。真正可迁移的是拆图顺序与判据映射:先把链路拆成五个可独立观测的阶段,再用时间线与硬件计数器把“慢”归因到具体算子与访存模式,最后才选择优化手段。这样,后续无论是做算子融合、精度量化还是并行切分,都能清楚知道自己在优化哪一段计算图、预期收益来自哪一类瓶颈。