引言
阿里云瑶池旗下的云原生数据仓库AnalyticDB MySQL版(以下简称ADB)诞生于高性能实时数仓时代,实现了PB级结构化数据的高效处理和分析。在前几年,为拥抱大数据的浪潮,ADB从传统数仓拓展到数据湖仓,支持Paimon/Iceberg/Delta Lake/Hudi湖格式,为开放的数据湖提供数据库级别的性能、可靠性和管理能力,从而更好地服务以SQL为核心的大规模数据处理和BI分析,奠定了坚实的湖仓一体基础。
近年来随着AI应用的爆发,用户对数据存储、数据管理和数据开发需求也更加多样化,比如非结构化数据的原生存储和处理、ML/模型微调/推理的开发工作流搭建等,传统的数据湖仓已无法满足诉求,主要面临以下痛点:
- 非结构化和向量数据处理困难:针对非结构化数据,采取数据和元数据分离存储方式,存在数据一致性问题,使用时需要先读路径,再读原始文件,带来二次I/O开销;针对向量,无法直接进行高效的向量近似性检索,依赖外部向量库。
- 数据读写存在I/O瓶颈:在ML场景下,需要快速小批量的随机访问,传统数据湖仓擅长全量扫描/大批量顺序读,适合JOIN等聚合操作,在ML场景下带来严重的读I/O放大和延迟。
- 异构资源调度低效:AI开发工作流中的任务,通常同时使用CPU和GPU资源,传统数据湖仓无法协调全链路中异构资源的调度,导致资源利用率低。
- Python生态割裂:传统数据湖仓以SQL/Dataframe API为主,非原生Python支持。比如DataFrame传递给PyTorch DataLoader时,数据需跨越JVM和Python两个技术生态,带来额外的序列化/反序列化开销。
- 多模态数据管理复杂:结构化数据、图片等非结构化数据以及向量数据,分散存储,管理复杂,难以关联访问。
基于AI发展趋势及上述痛点,ADB从数据湖仓逐步演进到AI数据湖仓,构建了以ADB Ray/Spark+Lance为核心的AI流水线,采用AI原生的Lance存储格式,基于Apache Arrow,Lance数据可直接被PyTorch/TF读写,无需数据拷贝;并深度集成Ray与Spark两大开源计算引擎,提供从数据处理到分布式模型ML/微调、再到推理的产品方案,打破AI与BI的壁垒,实现从数据到智能的最短路径。
ADB AI数据湖仓解决方案
ADB Ray + Lance:构建从数据到模型的AI流水线
ADB存储层通过引入AI原生的Lance数据格式,并结合上层托管的ADB Ray和ADB Spark计算引擎,将多模数据ETL与ML一体化,更高效地构建和优化AI流水线。
▶︎ ADB Ray介绍:
Ray是一款专为AI与高性能计算设计的开源分布式计算框架,以简洁API抽象分布式调度,仅需几行代码,即可将单机任务扩展至千节点集群。内置Ray Tune、Ray Train、Ray Serve等模块,无缝兼容TensorFlow/PyTorch生态。具备覆盖AI开发全链路、异构资源灵活调度等特点,适合多模态处理、搜索推荐、金融风控、图计算等业务场景。
ADB Ray是AnalyticDB MySQL推出的全托管Ray服务,基于开源Ray的丰富生态,对Ray内核和服务能力进行了全栈增强。开发者的应用无需关注集群运维,即可快速获得ADB Ray带来的性价比优化,同时无缝的和ADB湖仓打通,构建Data + AI一体化架构。
▶︎ Lance on ADB湖存储介绍:
Lance是一种针对多模态数据专门优化的开源存储格式,专为混合存储大规模非结构化数据(如图片、视频、嵌入向量)和结构化数据(如元数据、标签)设计。旨在解决Parquet等传统格式在处理多模态数据时的性能瓶颈。Lance核心目标是为AI应用提供高效的数据存储和处理能力,尤其适合需要处理大量图片、文本和嵌入向量的场景。具备高性能随机点查、向量搜索、零拷贝schema演进和丰富的生态集成等特点。
Lance on ADB湖存储,指的是将Lance集成在ADB湖存储中,除了托管存储以外,还旨在提供持续优化的面向AI场景的数据处理与应用解决方案。
- Data+AI Zero ETL:ADB湖存储通过APS(ADB Pipeline Service,ADB内置管道服务),自动感知增量数据文件,比如针对新增视频文件可自动完成截帧,并调用百炼或外部服务完成截帧图片的描述生成和图文向量构建。用户也可自定义算子开发;同时内置数据格式转换服务,可将已有图片/文本/音视频等多模数据一键转为Lance格式等,无需手动编写复杂的ETL逻辑,快速构建AI数据处理管道。
- ADB Ray/Spark+Lance深度融合:借助Lance数据格式,打破以Python为核心的AI开发(Ray)与以SQL为核心的数据工程(Spark)之间的壁垒,数据工程师可以用Spark进行大规模的ETL和特征工程,将AI就绪的数据写入Lance;AI科学家可以用Ray,通过零拷贝的方式直接在同一份数据上进行后续的ML和向量检索等。
- 未来可期,迈向零运维多模数据湖:延续前面所讲的数据湖底座能力,ADB也正在构建基于Lance的文件入湖、元数据服务和自动化Compation等,让多模数据易发现、易管理和易使用。
实践应用介绍
最后介绍ADB Ray+Lance的部分案例场景和方案。
▶︎ 图文混存
方案:多模态场景中图文混存是常见场景,即将图片与相关的文本描述、标签、ID等元数据存储在一起,形成统一的多模态数据集。通过ADB Spark实现对图片和文本数据的处理与合并,最后将包含了所有信息(图片二进制/文本/ID等)的DataFrame,直接以Lance格式写入到湖存储中。
价值:
- 解决了传统图文分离存储方案中的数据完整性和一致性问题,图片与元数据存储在同一文件中,方便管理。
- 高效读取。传统方案是在表中存储图片url,访问数据时需额外的IO去读取图片数据。Lance的多模存储可以一次性把元数据和图片同时读取出来,减少IO操作和路径查找时间,尤其适合批量处理大量图片+数据的场景(如机器学习数据集)。在客户场景测试中,与采用Parquet对比,处理性能提升2-4倍。
▶︎ 图片打标及微调
方案:图片打标,是AI领域的常见操作,即对原始图片添加一个或多个描述性内容(即“标签”或“Tag”)。通过ADB Ray Data实现源数据的加载和Lance格式转换,基于Ray Serve部署打标推理服务,最终在Lance数据集中新增标签列,并且还可部署微调框架LLaMA Factory进行后续开发。
价值:
- 利用Lance零成本schema演进特性,实现高效加列,无需重写数据文件,新增小文件即可;在客户场景测试中,与采用Parquet对比,性能提升3倍+。
- 通过ADB Ray工具链,一站式完成数据处理、打标和微调。
▶︎ ADB Ray Pipeline流式高并发调度
方案:在车端数据中,需处理PB级多模态Clip数据(视频/点云/雷达/GPS/车辆控制信号),基于ADB Ray Pipeline进行流式的视频文件切割和打标,并将处理好的数据通过Lance格式存储在湖存储中。基于打标好的数据,业务可结合场景通过Airflow触发Ray Pipeline对Lance数据做二次加工。
价值:
- 相比传统调度的异构资源使用和开销,ADB Ray不同阶段CPU和GPU任务可以并行执行,执行时间无等待,资源空闲小,最大化处理吞吐。结合基于画像的CPU和GPU异构资源精细化调度,可将GPU利用率提升至90%+。
- 任务调度吞吐可达400+ task/s , 随着资源增加,吞吐线性增长。
欢迎钉钉搜索群号 23128105 or 扫码加入钉群进行交流