0%

Profiling 驱动优化的标准动作

Profiling 驱动优化的标准动作

一句话定位:不凭感觉优化。这套六步动作在 Spark 与 GPU 上完全同构,是我最强的可迁移叙事——工具会换,动作不换。

1. 六步标准动作

1 采集基线

先建立可复现的量化基线(固定输入与环境、区分预热、报 P50/P99,见 5.4)。没有基线就无法证明收益。

2 定位 Top 耗时算子 / Stage

用工具按耗时排序找热点:GPU 侧用 PyTorch Profiler 算子排序 + Nsight 时间线(5.1/5.2),大数据侧用 Spark UI 的 Stage/Task 分布。必须先判定瓶颈类别(数据供给 / 调度同步 / 通信 / 计算,见 3.3),否则方向就错了。

3 提出假设与预期收益

明确写下:”我认为瓶颈是 X,做 Y 之后,指标 Z 应改善约 N%。”

  • 预估收益要基于占比(Amdahl 定律):占比 10% 的算子优化到 0,整体最多快 10%;
  • 这一步能过滤掉大量”看起来很酷但收益极小”的优化。

4 单变量验证

一次只改一个变量,改完立刻复测。多变量同时改会导致无法归因(哪项起了作用、哪项起了反作用都不知道)。

5 前后对比数据留档

记录改动内容、配置差异、前后指标(含 P99 与稳定性)、结论。留档的意义:

  • 避免重复踩坑与反复回退;
  • 形成可对外复述的证据链(面试与汇报都靠这个)。

6 沉淀为工具 / 模板

把一次性的排查过程固化成脚本、看板、检查清单或对比表模板(如 4.7 的四维选型表)。一次优化 → 一份可复用资产,这是平台化思维的体现。

2. 为什么这是最强的可迁移叙事

同一套动作在两个领域的实例化:

步骤 Spark 场景 GPU 场景
采集基线 固定数据量与集群配置跑基准作业 固定输入分布与环境测吞吐/延迟
定位热点 Spark UI 看 Stage/Task 耗时与 Shuffle 量 Nsight 看 Kernel 时间线与空隙
提假设 “倾斜 key 导致长尾,加盐后 Stage 时间降 X%” “数据供给不足导致锯齿,调 workers 后利用率升 X%”
单变量验证 只改分区数/只开 AQE 只改 num_workers / 只开 FlashAttention
留档 前后 Stage 耗时对比 前后 P50/P99 与利用率对比
沉淀 倾斜探测脚本、调优清单 Profiling 模板、选型对比表

结论话术:我迁移的不是框架 API,而是”先量化、再定位、再单变量验证”的工程方法论——这正是性能优化岗位真正需要的能力。

参考:NVIDIA《GPU Performance Analysis and Optimization》博客系列