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 研究员能够以极简的代码,构建出稳定、高效的大规模多模态数据流水线,大幅加速具身智能数据飞轮的迭代速度,为下一代具身智能模型的研发提供坚实的数据基础。

相关推荐
奔跑中的小象4 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南4 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang4 小时前
LangGraph 状态机实战
人工智能
刹那芳华19924 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作4 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门4 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜4 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟4 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦5 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生5 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能