当开发者在 Daft DataFrame 中尝试集成大模型能力(如图像理解、视频摘要、文本生成),首要问题并非“能不能调”,而是“以何种方式、在什么约束下、由谁来承载推理任务”。EMR Serverless Spark 并非提供一个通用大模型 SDK 或 HTTP 封装层,它将大模型调用重构为数据流水线中的可声明、可编排、可计量的计算算子——即 AI Function。这种设计不追求覆盖所有开源模型或任意推理框架,而是聚焦于在分布式湖仓场景中,保障多模态数据处理与模型推理的协同可靠性、资源可控性与运维可观测性。
Daft 与大模型的耦合机制:从 UDF 到 AI Function 的演进
Daft 本身支持通过 Python UDF(User-Defined Function)注入自定义逻辑,包括加载 transformers 或调用 REST API。但该路径在生产级多模态批处理中面临三重瓶颈:资源不可控(GPU 显存/并发未声明)、错误不可恢复(单帧失败导致整 Batch 中断)、结果不可结构化(返回 JSON 字符串需二次解析)。EMR Serverless Spark 引入的 AI Function 是对这一模式的工程收敛:它要求用户显式声明输入 Schema、输出 Schema、目标模型(如百炼上的 Qwen-VL)、GPU 资源规格(如 gpu:1)、batch size 及重试策略。系统据此完成自动资源调度、失败隔离、结果列式反序列化,并将输出直接映射为 DataFrame 新列。
例如,对一批视频路径执行视觉理解:
from daft import col
import emrspark.ai as ai
df = daft.read_parquet("oss://bucket/videos.parquet")
# 声明 AI Function:输入为 video_path,输出为 caption 和 confidence
labeled_df = df.with_column(
"caption",
ai.llm_vision(
col("video_path"),
model="qwen-vl-plus",
gpu="gpu:1",
batch_size=4
)
)
该表达式不会在 Driver 端加载模型,也不会触发任意 HTTP 请求;而是在 Ray Worker 上按需拉起隔离容器,绑定指定 GPU,批量解码视频帧并调用百炼服务,最终将结构化结果回填至列中。
产品能力差异:为什么不是所有“能跑模型”的平台都适合 Daft 场景?
| 维度 | EMR Serverless Spark + Daft | 通用 Serverless 函数(如 FC) | 自建 Ray 集群 | PySpark + 外部 API 调用 |
|---|---|---|---|---|
| 数据亲和性 | 原生支持视频/图像/音频列式加载与惰性解码,帧级切片自动分发 | 需手动下载→解码→上传,无列式优化 | 需自行实现 Arrow 兼容与内存管理 | DataFrame 分区后转为 Pandas,序列化开销高 |
| 资源声明粒度 | 支持 per-UDF 级 GPU/CPU/内存声明,与 batch size 联动调优 | 按函数实例统一配置,无法区分推理与预处理负载 | 依赖手动 YAML 配置,缺乏运行时弹性 | 无资源声明能力,全靠 Driver 分配 |
| 失败语义 | 单 Batch 内部分失败自动跳过,不影响整体作业;支持重试与死信队列 | 实例级失败即丢弃整个请求 | 需自行实现 checkpoint 与状态恢复 | 容易因单条记录异常中断全分区 |
| 可观测性 | 内置指标:GPU 利用率、Batch 处理延迟、API 调用成功率、显存 Spill 次数 | 仅函数执行时长与错误码 | 依赖 Prometheus 自行埋点 | 无内置模型层监控 |
| 部署一致性 | 同一套 DataFrame 代码可在本地 native runner 与集群无缝切换 | 本地模拟成本高,环境差异大 | 集群配置复杂,版本升级风险高 | 本地调试可行,但集群行为难以复现 |
关键差异在于:EMR Serverless Spark 不把大模型当作“外部服务”,而是作为数据处理流水线中一个具备确定性输入输出、资源契约与容错语义的原生算子。这决定了它适用于 TB 级多模态数据的规模化标注、清洗与向量化,而非低延迟交互式问答或小样本实验。
选型决策树:什么条件下应选用 EMR Serverless Spark?
- ✅ 应选用:已构建 OSS/HDFS 数据湖,需对百万级视频/图像批量执行统一打标(如“是否含人脸”“动作类别”);要求结果写入 Delta Lake 并与下游特征工程 SQL 衔接;团队使用 Python 生态但缺乏 GPU 运维能力。
- ⚠️ 需评估:实时性要求 <500ms 端到端延迟;模型需定制 CUDA kernel 或私有 ONNX 模型;输入数据为流式 Kafka Topic 且需 sub-second 响应。
- ❌ 应规避:仅需单张图调用一次 Qwen-VL 做演示;模型权重需频繁热更新(当前 AI Function 绑定百炼模型 ID,更新需重启作业);预算受限且日均处理量 <10GB。
实践收敛点:三个不可妥协的前提
- 数据必须落盘于对象存储:AI Function 当前仅支持 OSS、OSS-HDFS、NAS 等挂载路径,不支持本地文件系统或临时内存数据。
- 模型必须接入百炼平台:Daft 的 AI Function 底层调用百炼 REST API,暂不支持直连 HuggingFace Inference Endpoints 或自建 vLLM 服务(需封装为百炼兼容接口)。
- Schema 必须提前定义:输出字段类型(如
str,float,list[str])需在调用前明确,动态 JSON 解析需通过后续.apply()补充,不可作为 AI Function 直接返回结构。
Daft 在 EMR Serverless Spark 中的价值,正在于将大模型从“黑盒 API”还原为“可编程数据算子”——它不降低技术门槛,但显著抬高了生产级多模态数据工程的下限。
参考文献
- 《阿里云 EMR Daft AI Function:用 DataFrame 表达式搞定大模型调用与多模态向量化》 https://mp.weixin.qq.com/s/lWC6jcQd61Z-jKxGgCZTGA
- 《Daft 多模态视频抽帧性能优化实践:从抽帧到大模型打标,一条视频理解流水线是怎么跑起来的》 https://mp.weixin.qq.com/s/KmJpVc7mvczMEvfsSRBWbA
- 《Daft AI Function:用 DataFrame 表达式搞定大模型调用与多模态向量化》 https://developer.aliyun.com/article/1770403
- 《Daft 多模态视频抽帧性能优化实践:从抽帧到大模型打标,一条视频理解流水线是怎么跑起来的》 https://developer.aliyun.com/article/1770396
- 《从 Common Crawl 到可训练语料:用 EMR Serverless Daft 构建清洗、模型标注与向量化管线》 https://mp.weixin.qq.com/s/zmbjEAdaRAHaAvJPxn3OTA
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/the-ai-center
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/document_detail/3000928.html
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/ai-center-14/
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/the-ai-center-beta/
- 《EMR Serverless Spark 多模态数据处理快速入门:视频抽帧、去黑边与大模型打标-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/getting-started/multimodal-data-processing-quick-start