第4章 · 执行流与内存


第4章 · 执行流与内存

章节摘要:ORT 通过 SEQUENTIAL/PARALLEL 执行模式、Arena 内存池与 intra/inter 线程控制推理并发。显存碎片与 CPU 超线程争用是 P99 抖动的常见根因。

本章要解决的问题

图优化决定了"怎么算更快",执行流与内存决定"算的时候资源怎么分"。三个问题在这一章集中出现:第一,execution_mode 选 SEQUENTIAL 还是 PARALLEL,选错反而变慢;第二,模型理论占用 2GB 显存,ORT 实际占 2.8GB,碎片与过度预分配怎么治;第三,线程配置从网上抄来 intra=16, inter=16,在 GPU 场景或边缘设备上反而把 P99 拉爆。三个问题的共同点是:资源维度的调优必须绑定 EP 与硬件,不能跨场景照搬。

先说结论

  1. 选择 execution_mode 的场景
  2. 解释 Arena 如何降低分配开销
  3. 配置 intra_op 与 inter_op 线程数

执行流总览

资源维度 控制项 生效场景
算子间调度 execution_mode 全 EP
算子内并行 intra_op_num_threads CPU EP
算子间并行 inter_op_num_threads PARALLEL 模式
中间张量复用 Arena / mem_pattern 静态 shape
显存预分配 arena_extend_strategy CUDA/CPU Arena

子章节

节 主题 核心问题 关键产出
4.1 顺序与并行推理模式 PARALLEL 反而变慢怎么办 mode 选择决策表
4.2 Arena 内存池与复用 显存占用超理论值 内存治理清单
4.3 线程与 SessionOptions P99 抖动与 CPU 争用 线程配置矩阵

4.1 顺序与并行推理模式

算子间并行 vs 算子内并行。

4.2 Arena 内存池与复用

BFC/Arena、显存碎片与 enable_mem_pattern。

4.3 线程与 SessionOptions

intra_op_num_threads、inter_op_num_threads 调优。

调试原则

资源类问题一律"先量后调":先用 Profile 确认是算子间串行瓶颈、内存分配瓶颈还是线程争用,再改对应配置。改完必须对比 P50 与 P99 两组指标——平均延迟改善但尾延迟恶化,说明资源被极端抢占,不是有效优化。

前置与后续

  • 前置:第2章分区(决定边界拷贝,影响内存规划)、第3章 EP(决定 Arena 的 device 归属)
  • 后续:第5章量化(INT8 降带宽但更依赖内存规划)、第6章 Profiling(验证调优效果)

内存与线程的总纲

本章三个主题可以压缩成一句话:算力资源(GPU/CPU 核)怎么并发、内存资源(显存/堆)怎么复用。两张表把本章的决策浓缩:

内存治理三问:张量能复用吗(Arena)、生命周期能预知吗(mem_pattern)、扩容怎么定(arena_extend_strategy)。线程治理三问:GPU 主导吗(intra/inter 归 1)、CPU 有几个物理核(intra 绑核数)、有没有可并行分支(inter 从 1 起步)。

症状 第一怀疑 第二怀疑
显存超理论值 mem_pattern 未开 Arena 碎片
首次 run 卡顿 mem_pattern 首次规划 conv algo 搜索
P99 抖动 线程争用 分区边界拷贝
OOM 扩容策略 并发 Session 数

资源维度的调试纪律

资源调优最容易"改完不知道有没有用",因为测量本身有噪声。三条纪律:第一,用 P50 与 P99 双指标,只看均值会掩盖抖动;第二,每次只改一个变量,改完跑同一份 benchmark;第三,把配置写入策略文件而不是散落在代码里,方便回归对比。第6章会把这些纪律落成可复用的 Profile 流程。

动手实验清单

  1. 同一模型分别用 SEQUENTIAL 与 PARALLEL 跑,对比 P50/P99
  2. 开启 enable_mem_pattern 前后对比显存占用(nvidia-smi 或 memory_allocated)
  3. 在 8 核 CPU 上对比 intra=1/4/8 的吞吐曲线
  4. 用 Profile 确认一个"PARALLEL 更慢"案例的真实瓶颈是调度还是同步
  5. 把一组调优参数写成 policy 字典,用 metadata_props 写进模型
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U