已开启
udf-chain-physical-fusion #52
udf-chain-physical-fusion #52
已开启
3stone创建于 7月24日
3stone
3stone成员
7月24日

1. UDF 链物理融合

1.1 优化点名称

UDF 链物理融合(Compatible Python UDF Project Chain Fusion)。

1.2 背景与收益原理

逻辑计划拆分 UDF 后,连续 UDF 表达式可能形成多个相邻 UDFProject。每个节点都会引入独立的物理算子边界,可能产生额外的:

  • Ray actor/task 调度;
  • 中间 MicroPartition 创建与传递;
  • passthrough 列投影;
  • 节点级 metrics 和状态管理;
  • 中间结果物化或序列化。

当父子 UDF 的并发、资源、批大小、错误处理等属性兼容时,可以把父 UDF 对子 UDF 输出列的引用替换为嵌套表达式,并生成单个物理 UDF 节点。这样保留表达式语义,同时移除一个调度和中间物化边界。

1.3 实现方式、分支与提交

分支:codex/ai-de-udf-chain-fusion

提交:

  • 4825f1e26fuse-compatible-Python-UDF-project-chains
  • 71d11206dpreserve-fused-UDF-properties-during-plan-rebuild

主要实现:

  • 新增优化规则 fuse_udf_projects.rs
  • SplitUDFs 和 projection pushdown 后识别相邻 UDFProject
  • 要求父子节点没有 passthrough 列,并且除诊断名称外的 UDFProperties 完全一致。
  • 使用 replace_columns_with_expressions 将子 UDF 表达式代入父 UDF。
  • 通过 try_new_fused 创建单个融合节点,并在计划 rebuild 时保留 concurrency、resource request、batch size 和错误处理属性。

结构性 smoke 测试中,两个串联 UDF 的物理节点数量由 2 个降为 1 个,输出结果保持一致。

1.4 测试结果

Pipeline 基线中位数 优化后中位数 优化效果 加速比
pipeline_pdf_full_min 12.076 s 11.591 s +4.01% 1.042x
pipeline_text_fineweb_full_min 9.381 s 9.180 s +2.14% 1.022x
pipeline_text_vectorize_full_min 17.093 s 17.335 s -1.42% 0.986x
pipeline_image_full_min 12.031 s 11.498 s +4.43% 1.046x
pipeline_video_full_min 12.391 s 11.895 s +4.01% 1.042x
五条中位数之和 62.972 s 61.499 s +2.34% 1.024x

结论:新 base 上 4 条 pipeline 提升 2.14%~4.43%,文本向量化回退 1.42%,五条汇总提升 2.34%。这是本轮唯一取得净收益的优化;建议优先继续验证,但需定位向量化路径没有获得融合收益或发生回退的原因。

likedislike
合并受阻
3stone3stone成员
7月24日 修改了pull request 的描述