Daft 如何为多模态工作负载重新设计数据管道:完整架构与性能分析

多模态AI应用的爆发暴露了传统数据处理基础设施的关键缺陷。当Spark和Ray Data处理图像解码、音频转录和视频帧提取时,它们僵硬的架构崩溃了。内存不可预测地膨胀,GPU周期在I/O瓶颈期间空闲,集群效率大幅下降。Daft代表了一种对分布式数据系统应如何应对异构计算需求的根本性重新思考。

多模态数据处理有何不同?

传统的数据管道引擎是为SQL聚合和表连接设计的。多模态工作负载则在完全不同的维度上运作:

内存膨胀:一张JPEG图片解压后膨胀20倍。一段2小时的视频解码后变成数千帧,每帧占用数兆字节。数据管道必须预料到这些爆炸式增长并动态管理。

碎片化的计算需求:处理链条要求同时饱和CPU、GPU和网络。单个工作负载包括下载、解码、重采样、特征提取、归一化、推理和分类——这些操作在不同阶段对硬件的压力不同。

规模需求:近期生产工作负载规模惊人:Common Voice 17包含113,800个音频文件;Common Crawl存储10,000个PDF;ImageNet涵盖803,580张图片;Hollywood2包含1,000个视频。数据管道基础设施必须在所有这些任务中无缝扩展。

Daft的流式架构:打破瓶颈

Daft从根本上重构了数据在分布式系统中的流动方式。其Swordfish流式执行引擎将数据视为永远在运动中,而非静态存储在内存中的批次。

连续流模型:对于包含100,000张图片的分区,前1,000张立即进入GPU推理,而下一批进行下载或解码。没有任何中间物化点阻塞管道。系统在所有处理阶段保持持续运动。

智能背压:当GPU推理成为瓶颈时,上游操作自动节流。这种有界内存的方法防止了竞争系统常见的内存无限膨胀。

自适应分区:像url_download和image_decode等内存密集型操作会实时自动调整批次大小。系统牺牲粒度级别的并行性,以实现可预测的内存开销和持续的吞吐。

通过Flotilla的分布式协调:每个集群节点运行一个Swordfish工作器,使流式模型可以水平扩展而不破坏架构。无论是处理本地TB级数据还是跨集群PB级数据,效率原则都一致。

此外,Daft的数据管道还提供专为多模态操作设计的原生能力:图像编码/解码/裁剪/调整大小原语,文本和图像嵌入层,LLM集成,分词,余弦相似度操作,URL处理,以及视频转帧等,全部作为一等表达存在,而非依赖外部Python函数。

Ray Data的方法:通用性中的权衡

Ray Data建立在Ray的分布式Python框架之上,暴露底层抽象。用户通过map_batches函数,将操作应用于PyArrow批次或pandas DataFrame。

在顺序操作中,Ray Data会将它们融合成单个任务——这对多模态工作负载来说是个反效果。如果不仔细手动调优块大小,内存消耗会不可预测地激增。用户可以通过将逻辑封装在类中,在Ray的对象存储中物化中间结果,但这会带来序列化开销和内存复制。由于Ray的对象存储默认只占用系统可用内存的30%,因此激进的磁盘溢出变得不可避免。

这种数据管道的灵活性以牺牲可预测性和效率为代价。

性能表现:数字说话

在相同基础设施(8台AWS g6.xlarge实例(每台配备NVIDIA L4 GPU、4个vCPU、16GB内存、100GB EBS))上的基准测试显示出鲜明差异:

工作负载 Daft Ray Data Spark
音频转录 (113,800个文件) 6分22秒 29分20秒 (4.6倍慢) 25分46秒 (4.0倍慢)
文档嵌入 (10,000个PDF) 1分54秒 14分32秒 (7.6倍慢) 8分4秒 (4.2倍慢)
图像分类 (803,580张图片) 4分23秒 23分30秒 (5.4倍慢) 45分7秒 (10.3倍慢)
视频目标检测 (1,000个视频) 11分46秒 25分54秒 (2.2倍慢) 3小时36分钟 (18.4倍慢)

Daft在音频管道中比其他方案快4.6到29倍。文档处理加速4.2到7.6倍。图像分类表现出5.4到10.3倍的提升。视频工作负载差距最大:Daft在11分46秒内完成,而Spark需要3小时36分钟——相差18.4倍。

为什么性能差距如此悬殊?

原生多模态操作 vs 外部UDF:Daft将图像解码、嵌入推理和视频帧提取作为优化的内部表达实现。Ray Data则强制用户编写调用Pillow、NumPy、Hugging Face等库的Python UDF。每个库维护自己的数据格式,造成不必要的数据移动和序列化开销。

流式内存模型 vs 物化:Daft从云存储异步流式传输数据,经由CPU到GPU内存再返回输出。没有任何分区会完全物化到中间缓冲区。Ray Data的操作融合会导致内存峰值,除非用户手动优化块大小,而这些变通方案又引入序列化惩罚。

资源饱和策略:Daft在单一Swordfish工作器中管理所有处理流程,统一资源调度。下载、CPU预处理、GPU推理和结果上传在同一执行环境中流动,保持CPU、GPU和网络的持续饱和。而Ray Data默认为I/O密集型操作保留专用CPU核心,导致计算核心未充分利用。实现最佳资源分配需要手动调节CPU的分数。

哪个系统适合哪种场景?

Daft的优势

  • 处理多模态数据集 (图像、视频、音频、文档、嵌入)
  • 重视可靠性和可预测性能,无需调优
  • 构建复杂的数据管道变换,包括连接、过滤和聚合
  • 团队熟悉DataFrame/SQL语义

Ray Data的价值

  • 需要深度集成Ray生态系统 (Ray Train用于分布式训练,Ray Serve用于模型部署)
  • 细粒度的每个操作CPU/GPU分配控制,能带来更高的灵活性,但也增加复杂性

生产验证

Essential AI的规模测试:Tim Romanski团队利用Daft对来自Common Crawl的236亿网页文档(含24万亿tokens)进行了分类,达到每秒32,000请求的规模。他评价:“我们将Daft推到极限,经过实战检验。如果用Spark复现,必须配置JVM、管理classpath、排查大量问题。Daft的执行时间明显更短,从本地开发到集群扩展几乎无需架构变动。”

CloudKitchens的基础设施重建:该团队围绕“DREAM堆栈”(Daft、Ray、Poetry、Argo、Metaflow)重构了整个ML平台。在评估中发现Ray Data存在数据框架/ETL支持不完整和性能不足的问题。他们选择用Daft补充Ray的计算层,特别指出:“Daft通过提供全面的DataFrame API弥补了Ray Data的不足”,“在测试中实现了比Spark更快的执行速度,且资源消耗更少”。

ByteDance的大规模验证:在对128万张ImageNet样本进行图像分类时,ByteDance工程师观察到Daft的吞吐量比Ray Data快约20%。他们的技术分析强调:“出色的执行性能和资源效率”,以及“对大规模图像数据流的无缝处理”。

展望未来

数据管道领域正经历结构性变革。多模态工作负载暴露出传统分析架构在异构计算压力下的局限。Daft的设计理念——持续流式、原生多模态操作、自适应资源管理和统一集群执行——不仅是渐进式优化,更是范式重置。处理图像、音频、文档和视频的组织发现,围绕这些原则重新架构,能带来2到7倍的性能提升,同时无需牺牲可靠性或深厚的基础设施专业知识。

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate App
社群列表
简体中文
  • بالعربية
  • Português (Brasil)
  • 简体中文
  • English
  • Español
  • Français (Afrique)
  • Bahasa Indonesia
  • 日本語
  • Português (Portugal)
  • Русский
  • 繁體中文
  • Українська
  • Tiếng Việt