2. 物理代理模型推理计算图剖析
物理代理模型(Physics-Informed Surrogate Model)的推理过程并不是一次简单的“网络前向”。它是一条由多个异构阶段串联而成的计算图:输入预处理负责把工程物理量整理成张量,特征编码把几何、边界条件与工况映射到隐空间,核心网络完成主要浮点运算,物理约束后处理把网络输出投影回可行域,输出解码再把张量还原为工程师可读的场量或标量。性能优化的第一步不是改代码,而是把这条链路拆开,看清每个阶段的算子构成、数据形状、访存特征与耗时占比,才能判断瓶颈究竟在算力、带宽还是调度。
全链路计算图的五个阶段
以一个典型的二维稳态热传导代理模型为例:输入为几何边界点坐标、材料导热系数分布、边界温度与热流条件,输出为网格节点温度场。推理链路可拆为:
- 输入预处理:坐标归一化、边界条件编码、网格采样与张量拼装。此阶段以标量运算和内存搬运为主,算子碎片化,容易产生大量小 kernel 与主机—设备同步。
- 特征编码:多层感知或卷积编码器把几何与物理条件映射为高维特征。计算密度中等,但存在较多逐元素激活与归一化。
- 核心网络前向:主干网络(如 U-Net、傅里叶神经算子或 Transformer 块)承担绝大部分矩阵乘与卷积,是 FLOPs 的主要来源。
- 物理约束后处理:施加边界条件硬约束、残差修正或守恒投影,通常包含稀疏矩阵运算与迭代求解,访存不规则。
- 输出解码:反归一化、场量重组、插值到目标网格并写回结果,多为带宽受限的逐元素操作。
下图给出该链路的计算图结构,标注了各阶段的主要算子类型、数据形状变化与典型瓶颈属性,便于对照实际 profile 结果定位问题。
用 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 命中率低,则应检查稀疏格式是否与访问模式匹配,而不是盲目增加迭代次数。
从计算图到可执行的定位清单
为了让定位过程可复现,可以把上述方法固化为一张检查表:先按阶段记录耗时与占比,再对 Top 阶段记录算子类型、算术强度、SM 利用率、DRAM 吞吐与 kernel 数量,最后对照“算力/带宽/调度/同步/不规则访存”五类判据给出结论与候选优化手段。这样每次优化前后都能用同一套口径对比,避免“改了很多但说不清收益来自哪里”。
| 阶段 | 示例耗时 | 主要算子 | 判据信号 | 候选手段 |
|---|---|---|---|---|
| 输入预处理 | 6 ms | 归一化、拼装 | kernel 多且短 | 算子融合、异步拷贝 |
| 特征编码 | 5 ms | 卷积、激活 | 逐元素占比高 | 融合激活、降精度 |
| 核心前向 | 22 ms | 矩阵乘、卷积 | DRAM 吞吐高 | epilogue 融合、张量并行 |
| 物理约束 | 7 ms | 稀疏求解、投影 | L2 命中率低 | 稀疏格式优化、裁剪迭代 |
| 输出解码 | 2 ms | 反归一化、插值 | 带宽受限 | 向量化写回、减少中间量 |
需要强调的是,上表中的耗时与信号均为教学示例,实际数值必须由目标硬件、批大小、精度模式与输入规模共同决定。真正可迁移的是拆图顺序与判据映射:先把链路拆成五个可独立观测的阶段,再用时间线与硬件计数器把“慢”归因到具体算子与访存模式,最后才选择优化手段。这样,后续无论是做算子融合、精度量化还是并行切分,都能清楚知道自己在优化哪一段计算图、预期收益来自哪一类瓶颈。