EMR Serverless Daft 如何简化多模态数据处理:视频抽帧、清洗、标注全流程与具身智能实践

引言:具身智能时代的数据工程挑战

在大模型跨界多模态的浪潮下,具身智能(Embodied AI)正成为人工智能的下一个前沿高地。与传统 AI 依赖互联网静态图文不同,具身智能的训练高度依赖来自真实物理世界的多模态感知数据------包括第一人称视角(Egocentric)视频、深度传感器数据、力反馈信号等。

以训练一个能理解厨房操作的机器人为例,我们需要采集数千小时的人类佩戴摄像头拍摄的操作视频。解码后,这些数据将产生数亿张图像帧。然而,原始数据中充斥着大量"噪音":静止画面、模糊镜头、无效空帧。如何从海量冗余中高效提取高质量训练样本,已成为制约具身智能发展的核心瓶颈。

为了解决这一行业痛点,阿里云EMR Serverless Spark引入了 Ray 分布式计算框架,并深度集成了专为多模态 AI 工作负载设计的高性能数据引擎------ Daft。本文将深入解析如何利用这套组合拳,构建从视频抽帧、清洗到标注的全自动化流水线。

Daft:为 AI 多模态而生的高性能数据引擎

1.1 为什么需要 Daft?

Daft 是一款专为 AI 时代多模态数据处理而设计的分布式 DataFrame 引擎。在大模型驱动的智能应用浪潮中,企业需要处理的数据早已不止于结构化表格------视频、图像、音频、Embedding 等非结构化数据正成为 AI 工作负载的核心燃料。Daft 正是为此而生。

在大模型驱动的智能应用中,数据早已超越结构化表格。视频、图像、音频、Embedding等非结构化数据成为了 AI 的核心燃料。传统数据处理引擎在处理这些复杂类型时往往力不从心,而 Daft 正是为此而生:

  • 多模态原生支持:Daft 从底层类型系统将ImageVideoAudioTensor视为"一等公民",天然理解其物理布局并进行针对性优化。

  • 极简开发体验:开发者只需一行表达式,即可在分布式集群上完成视频解码、帧提取、图像变换,无需关心底层的分片调度。

  • "数据处理即 AI 推理":通过 UDF 机制,Daft 允许将通义千问等大模型的推理能力直接嵌入 DataFrame 流水线。图像理解、视频描述生成等 AI 任务与数据清洗无缝衔接,将原本割裂的多套系统收敛为一条统一的 Python Pipeline。

1.2 架构优势

  • Rust 核心 + Arrow 列式内存:Daft 以 Python API 暴露数据处理能力,底层由 Rust 执行引擎支撑,并利用 Apache Arrow 生态的列式内存表示,降低序列化与数据交换开销。

  • 面向 AI/多模态负载的执行优化:Daft 采用惰性求值,执行前会进行规则优化和代价优化,例如谓词/投影下推、Join 重排等。面向 UDF、模型推理、下载、解码等高开销环节,Daft 通过 Source、UDF 和 AI Functions 等机制进行任务化执行,并支持批处理、并发控制和自适应背压。

  • CPU 与 GPU 资源调度能力:常规数据处理主要由本地执行引擎或分布式 runner 执行;对模型推理等 GPU 任务,可通过 AI Functions 或 UDF 声明 GPU 资源、batch size 与并发度,在吞吐、显存和延迟之间做调优。

  • 从单机到集群扩展:同一套 DataFrame/SQL API 可在本地 native runner 上运行,也可通过 Ray 扩展到分布式集群,适合从开发环境平滑迁移到大规模处理场景。

EMR Serverless 集成 Daft 引擎的价值

阿里云 EMR Serverless Spark 在其 Serverless 架构中深度集成了 Ray 分布式计算框架,并内置了 Daft 引擎,为用户提供了一套开箱即用的多模态数据处理基础设施与引擎。

  1. 极致的弹性与免运维

    依托 EMR Serverless 架构,用户无需关心底层集群的搭建、扩缩容和节点维护。只需聚焦于业务逻辑开发,按需使用、按量计费,真正实现了多模态数据处理基础设施的"零运维",大幅降低 TCO。

  2. 内置多模态算子,AI 与数据无缝融合

    EMR Serverless Spark 在 Daft 引擎中内置了丰富的多模态 AI 函数,支持图片、视频、音频、文本等数据的直接处理。同时,与阿里云百炼平台上的大语言模型(如 Qwen 系列)无缝集成,让数据清洗、特征提取与 AI 标注可以在同一流水线中高效完成,加速 AI 应用落地。

  3. 统一的数据湖体验,打通存储孤岛

    EMR Serverless Spark 提供了与阿里云 OSS、OSS-HDFS 等对象存储的深度集成,并支持无缝挂载 NAS 和 CPFS 高性能文件系统,满足模型训练与推理阶段对海量非结构化数据的高吞吐读写需求,实现结构化与非结构化数据的统一访问与管理。

  4. 稳定性提升

    Daft基于Ray的架构天然支持异构资源,EMR Serverless Daft在异构节点的任务调度时细粒度控制,避免关键节点(如 Header)负载过高,解决部分算子因为依赖配置而非实际资源引起的作业 Hang 住现场。实施对内存的监管,针对核心算子基于运行时内存使用情况支持 Spill 机制,解决大数据量规模下算子运行稳定性问题。

  5. 可观测性提升

    Dashboard 以及细粒度的 Metrics 是分析和优化作业的核心参考之一。EMR Serverless Daft 提供了全托管的 Daft Dashboard,保证云上作业信息随时可查;同时基于在 Spark 的丰富经验拓展多项算子和 UDF(包括 AI Function)等运行时指标信息,全面提升作业的可观测性。

  6. 融入 OpenLake 生态,释放数据要素价值

    作为阿里云 OpenLake 多模态解决方案的关键组件,EMR Serverless Daft 全面支持 Data Lake Formation(DLF)与 Apache Paimon。依托 DLF 对湖上元数据的统一管理,借助 Paimon 的 Blob、Vector 等多模态原生能力,进一步发挥 Daft 引擎在"结构化+多模态"混合处理场景中的独特优势,助力企业构建统一的智能数据底座。

具身智能实践:

从原始视频到高质量训练数据的全流程流水线

3.1 场景背景

训练具身智能模型理解和复现人类日常操作动作时,研发人员通常会让真实人类佩戴头戴式摄像头(Head-mounted Camera),在厨房等真实生活场景中执行烹饪、切菜、翻炒等操作,采集大量第一人称视角(Egocentric)的原始视频。

如下图所示,这类视频记录了人类在厨房中翻炒食材的完整过程,是训练 VLA(视觉-语言-动作)模型的宝贵数据来源。

这些视频中包含大量无价值的冗余帧------例如操作间隙的静止画面、模糊镜头,或镜头朝向地面/天花板时拍摄到的无效内容。我们需要一个高效的自动化流水线,从海量视频中抽取关键帧,并利用多模态大模型对图片进行智能筛选,最终只保留包含有效烹饪操作内容(例如"锅具"或"食材处理")的高质量图片帧,用于后续的模型训练。

3.2 流水线架构

整个流程分为五个核心步骤,实现了从原始视频到高质量数据集的端到端自动化转化:

步骤 1:分布式视频读取与高效抽帧

利用 Daft 的流式优化能力,直接在 OSS 上进行分布式读取和解码,避免本地下载开销。

python 复制代码
import daft
from daft import col

# 流式读取 OSS 视频,仅提取关键帧,每2秒采样一次
df = daft.read_video_frames(
    path="oss://<your-bucket>/cooking_videos/*.mp4",
    image_height=480,
    image_width=640,
    is_key_frame=True,           # 只取关键帧,减少冗余
    sample_interval_seconds=2.0, # 采样频率
    max_frames_per_video=100,    # 限制单视频最大帧数
    io_config=io_config,
)

步骤 2:图像编码与批量写入 OSS

抽取的原始视频帧是未经压缩的张量,直接存储成本极高。Daft 提供了 encode_image 函数,可将帧数据即时编码为 JPEG 格式。随后,通过 FrameUploader 批量 UDF 将图片写入 OSS,并获取每张图片的 OSS 路径:

python 复制代码
from daft.functions import encode_image
from daft.emr.functions import emr_udf

# 1. 编码为 JPEG
df = df.with_column("jpeg_bytes", encode_image(col("data"), "JPEG"))

# 2. 批量上传至 OSS (并发控制最大化 I/O 吞吐)
df = df.with_column(
    "oss_path",
    emr_udf(
        FrameUploader,
        construct_args={"output_base": output_base},
        concurrency=4,
        batch_size=32,
    )(col("path"), col("frame_index"), col("jpeg_bytes")),
)

FrameUploader 内部使用 Daft 内置的 io_put 接口写入 OSS,无需引入额外的 oss2 SDK,并且通过 concurrency 参数控制并发写入数量,最大化网络 I/O 吞吐量。

步骤 3:集成多模态大模型进行智能筛选

这是最关键的一步。利用ai_query函数,让 Qwen-VL 大模型直接通过签名 URL 读取 OSS 图片进行推理,无需将图片数据拉回计算节点再转发给模型网关,极大地节省了带宽并降低了延迟:

python 复制代码
from daft.emr.functions import ai_query
from daft import lit

# 调用 Qwen-VL 进行视觉判断
df = df.with_column(
    "llm_result",
    ai_query(
        prompt=lit("判断这张图片是否包含有效的烹饪操作画面(如锅具、食材处理、手部操作等)。如果包含请只回复KEEP,不包含请只回复DROP,不要输出其他内容"),
        data=col("oss_path"),      # 传入 OSS 路径,模型服务端直接拉取
        model="qwen-vl-plus",
        concurrency=32,            # 32并发,充分利用模型吞吐
        batch_size=32,
        options={"enable_thinking": False},
    ),
)

通过配置 max_concurrency=32,流水线将启动 32 个并发的 UDF 实例,充分利用模型服务的吞吐能力,大幅缩短整体处理时间。

步骤 4:结果解析与冗余数据自动清理

解析 LLM 返回的结果,保留标记为 "KEEP" 的图片,物理删除标记为 "DROP" 的无效数据。

makefile 复制代码
from daft.functions import get as struct_get

df = df.with_column("llm_content", struct_get(col("llm_result"), "content"))
df = df.with_column("keep", col("llm_content").upper().contains("KEEP"))

# 物化结果,统计保留与删除数量
df = df.collect()
result_dict = df.to_pydict()
total = len(result_dict["keep"])
kept = sum(1 for k in result_dict["keep"] if k)
dropped = total - kept

# 删除 LLM 判定为 DROP 的帧
if dropped > 0:
    df_drop = df.where(col("keep") != True).select("oss_path")
    df_drop = df_drop.with_column(
        "deleted",
        emr_udf(OSSDeleter, concurrency=4, batch_size=32)(col("oss_path")),
    )
    df_drop.collect()

3.3 流程总结

通过这四个步骤,我们构建了一个端到端、全自动的具身智能数据处理流水线。整个流程的数据流向如下表所示:

|----------|-----------------|------------------------|---------------------|
| 步骤 | 输入 | 操作 | 输出 |
| 视频读取与抽帧 | OSS 上的原始 MP4 视频 | read_video_frames按间隔采样 | 解码后的图像帧张量 |
| 图像编码 | 图像帧张量 | encode_image压缩为 JPEG | JPEG 字节流 |
| 写入 OSS | JPEG 字节流 | FrameUploaderUDF 批量上传 | OSS 图片路径(oss://...) |
| LLM 智能筛选 | OSS 图片路径 | ai_query调用 Qwen 视觉大模型 | KEEP/DROP 标注结果 |
| 数据清理 | DROP 标注的 OSS 路径 | OSSDeleterUDF 批量删除 | 清洗后的高质量图片集 |

原始的第一人称视角烹饪视频输入,高质量、经过大模型标注和清洗的训练图片集输出。整个过程无需人工干预,且能够随着 Ray 集群的弹性伸缩轻松应对 PB 级的数据规模。

EMR Serverless Ray & Daft 产品架构与生态能力

4.1 灵活的运行模式

Daft 作为新一代多模态 DataFrame 框架,向下无缝对接弹性计算资源,向上提供统一的数据处理 API。在底座层面,Ray 引擎实现了 CPU 与 GPU 队列组的混合调度,并全面接入 Kerberos 与 Ranger,为企业级应用提供坚实的安全隔离保障。

针对不同阶段的业务需求,平台提供了三种灵活的运行模式:

  1. Local Mode(本地模式):该模式在单 Pod 容器内直接执行,零启动开销。其按需计费、用完即释放的特性,是轻量级代码调试与单机验证的理想选择。

  2. On Ray - Ephemeral(临时集群模式):专为大规模 CPU&GPU 批处理设计。系统在任务提交时自动拉起临时 Ray 集群,任务完成后自动销毁,用户仅需指定计算规格,实现基础设施的完全免运维和任务之间的完全隔离。

  3. On Ray - Persistent(常驻集群模式):主要面向 CPU&GPU 多模态数据处理,深度学习推理及生产环境。该模式支持将任务路由至常驻 Ray 集群,实现计算资源的长期复用,并通过统一的 Dashboard 提供完善的作业监控。

4.2 100+ 开箱即用算子

在业务落地过程中,非结构化数据的预处理往往是工程链路上最耗时的环节。为此,EMR Serverless Spark 平台在 Daft 框架内深度沉淀了 100 余个开箱即用的多模态处理算子,全面覆盖视频、文本/文档、图片及音频四大核心场景。

在视频与图片处理方面,算子库涵盖了从基础的切片、抽帧、格式转换,到高阶的视频理解、人脸模糊及 OCR 识别;在文本与文档领域,不仅提供标准化的切分与去重功能,更针对 RAG(检索增强生成)场景内置了 PDF 智能解析与向量化提取能力;同时,音频处理也实现了从格式互转到多语种识别的全链路覆盖。

企业无需投入高昂的算法研发成本,也无需自行拼凑开源组件,即可快速构建高可用、企业级的多模态数据清洗与转换流水线,显著缩短 AI 业务的上线周期。

4.3 API 封装释放大模型生产力

为了进一步降低分布式数据处理的门槛,Daft 算子在设计上被划分为两类:负责传统数据过滤与聚合的基础算子,以及深度集成百炼等大模型服务的 AI 算子。

以"视觉理解(VisionUnderstanding)"算子为例,在传统的开发模式下,开发者需要自行处理模型加载、网络请求及分布式并发控制。而在 EMR Serverless 平台中,用户仅需通过数行极简代码,即可从 OSS 读取多模态数据,并调用 AI 算子完成复杂的推理任务。

这种设计的价值在于:

  • 开箱即用:免除繁琐的模型部署。

  • 极简 API:数行代码完成复杂推理。

  • 分布式透明化:底层由 Ray 自动接管并发调度与批处理加速。

适用场景

这套技术栈适合以下几类典型场景:

  • 具身智能行为数据集构建

从佩戴摄像头采集的第一人称视角原始视频中,自动完成抽帧、质量过滤、目标识别标注,构建 VLA(视觉-语言-动作)模型训练所需的高质量图文对数据集。

  • 视频内容理解与特征提取

对监控视频、工业检测视频等进行批量帧级分析,提取关键事件帧,用于下游的模型训练或业务分析。

  • 大规模多模态数据清洗与标注

对互联网爬取的图文、视频数据进行去重、质量评估、内容分类,为多模态大模型的预训练提供高质量数据源。

结语

阿里云 EMR Serverless Spark 引入 Ray 分布式计算框架与 Daft 高性能数据引擎,为用户提供了一套开箱即用、免运维且极致高效的多模态数据处理基础设施。正如我们在具身智能视频抽帧与 LLM 筛选实践中所展示的,Daft on Ray 打破了传统批处理引擎在内存管理和异构资源调度上的瓶颈,让数据工程师和 AI 研究员能够以极简的代码,构建出稳定、高效的大规模多模态数据流水线,大幅加速具身智能数据飞轮的迭代速度,为下一代具身智能模型的研发提供坚实的数据基础。

相关推荐
ZZH_AI项目交付1 小时前
端侧大模型跑进 iPhone XR:我为什么没把它做成聊天助手
人工智能·app·ai编程
Alluxio1 小时前
Alluxio + Anyscale Ray框架,实现跨区域训练数据读取速度20倍提升
人工智能·分布式·机器学习·缓存·ai
智讯天下1 小时前
垂类数据基础设施:骨码智元GOMAX LAB如何重塑AI后训练数据供给体系
大数据·人工智能
橘子星2 小时前
从零理解流式输出 —— 一个 Vue + DeepSeek 的前端实战
前端·javascript·人工智能
疯狂学习GIS2 小时前
AI Agent 操作 QGIS 实测:Codex 与 Claude Code 能自己出图吗
人工智能·ai·大模型·gis·agent·qgis·codex
塔能物联运维2 小时前
液冷数据中心市场突破900亿元,两相液冷成AI算力散热新方向
大数据·人工智能
Sirius Wu2 小时前
OpenClaw Cron安全约束完整详解
人工智能·安全·aigc
GOWIN革文品牌咨询2 小时前
受众、内容、形式、渠道:B2B营销四象限的结构模型
大数据·人工智能
Z-D-K2 小时前
考验AI的“自我“-AI对《红楼梦》后40回的改写(39)
人工智能·ai·aigc·交互·agi