
Apache Spark 的声明式接口让 GPU 加速插件可以透明并行化行式操作,但用户自定义函数(UDF)打破了这层抽象。UDF 内部是系统无法推理的任意代码,执行时 GPU 必须把列式数据转成行式、回退到 CPU 逐行计算,再转回列式格式,既产生往返传输开销,也放弃了本可获得的 GPU 算力。
NVIDIA 为此发布 cuDF skills for Apache Spark——一套面向编码智能体的技能包,把 UDF 重写拆成测试、转换、基准测试、优化四个环节,每个环节都定义了必须交付的证据(可执行测试、输出比对、性能测量),通过后才进入下一阶段。技能包同时提供包含测试与基准框架、输出校验例程和构建配置的项目模板,让智能体把精力放在 UDF 本身。
重写有三条路径。最简单的是把 UDF 替换为等价的 Spark SQL 表达式,让函数进入 Spark 表达式树,由 cuDF 插件在查询规划阶段替换为 GPU 实现;当 SQL 原语不够用时,可实现 RapidsUDF 接口的 evaluateColumnar 方法,直接对 GPU 列向量运算;对于无法用现有 cuDF 操作组合的复杂逻辑,还可通过 JNI 调用自定义 CUDA 内核。
实际效果来自一家大型消费科技公司的生产验证:该团队用这套工作流把 30 多个生产数据管道中的 UDF 转换为 GPU 实现,在保持原有 CPU 行为一致的同时消除了回退开销。其中一个 UDF 影响超过 3000 个作业,在 6000 亿行的负载上,算子耗时从 274.55 小时降到 12.78 小时,约为 22 倍加速。
相比人工重写,智能体工作流的价值在于迭代速度:它可以检索不熟悉的列式 API、生成候选实现,再由可执行测试和性能数据判定每次改动是否可接受。NVIDIA 表示,这让重写周期从数天乃至数周缩短到小时级,同时不牺牲正确性。
技能包已在 GitHub 的 NVIDIA/cudf-spark 仓库开放,可通过 npx skills add NVIDIA/cudf-spark --skill '*' 安装。配合 NVIDIA cuDF plugin for Apache Spark 的入门指南,即可在现有 Spark 管道中启用 GPU 加速。
WeChat
Profile