面向Data+AI时代的数据湖创新与优化(附Iceberg案例)

news/2024/10/18 16:38:13/

面向Data+AI时代的数据湖创新与优化(附Iceberg案例)

  • 前言
  • 面向Data+AI时代的数据湖创新与优化

前言

在当今数字化时代,数据和人工智能(AI)的融合已成为推动企业发展和创新的关键力量。数据湖作为一种重要的数据存储和处理架构,在这个背景下扮演着至关重要的角色。然而,随着 AI 技术的迅速发展和应用场景的不断拓展,数据湖也面临着诸多挑战。

为了更好地应对这些挑战,实现数据和 AI 的深度融合,我们需要对数据湖进行优化和创新。Apache Iceberg 作为一种先进的数据湖技术,为我们提供了一个强大的基础。通过对 Iceberg 的深入研究和应用,我们可以更好地管理和处理数据,提高数据的质量和可用性,为 AI 模型的训练和推理提供有力支持。

同时,在 AI 时代,数据的多样性和复杂性不断增加,包括多媒体数据、向量数据、图数据等。如何有效地存储和处理这些数据,使其能够在数据湖中得到充分的利用,是我们需要解决的重要问题。此外,数据湖与 AI 的融合还需要考虑到性能、可扩展性、安全性等诸多因素,以确保系统的稳定和可靠运行。

在接下来的文章中,我们将深入探讨面向 Data + AI 时代的数据湖优化与实践,以腾讯的经验为例,介绍他们在 Apache Iceberg 基础上的创新举措和应用成果。希望这些内容能够为读者提供有益的参考和启示,推动数据湖技术在 AI 时代的不断发展和完善。

面向Data+AI时代的数据湖创新与优化

随着数据量的不断增长和AI技术的广泛应用,数据湖作为一种重要的数据存储和处理架构,正面临着新的挑战和机遇。本文将深入探讨面向Data+AI时代的数据湖优化与实践,以腾讯为例,介绍其在Apache Iceberg基础上的创新举措和应用场景。

在这里插入图片描述

数据湖的发展经历了从第一代到第二代的演变,如今正迈向与AI紧密结合的第三代。第一代数据湖以Hadoop、Hive为核心,主要用于离线T+1的大数据存储和查询,但存在分区级重写、集中式元数据管理和存储局限性等问题。第二代数据湖Iceberg、Hudi、Delta Lake、Paimon等为代表,强调实时或近实时更新能力,支持行级事务更新、分散式元数据管理和云存储,为数据处理带来了更高的灵活性和效率。

随着大模型AI技术的兴起,第三代数据湖应运而生。除了传统的关系型数据,第三代数据湖还将存储多媒体数据、向量数据、图数据等与AI相关的数据。在数据湖上,不仅可以进行实时入湖、基于Spark的查询和ETL作业等data相关的负载,还可以实现数据科学、模型推理训练和向量查询等AI功能。这使得在一套数据平台上,既能支持AI,又能支持data负载,极大地减少了算法开发人员的负担,使整个流程更加顺畅。

在这里插入图片描述

然而,在AI时代,数据湖面临着一些挑战。首先,AI数据管理困难,数据散布在不同的文件格式中,需要ETL串联,时效性差;数据修改和模式变更困难,数据版本难以管理,尤其是跨系统的一致性难以保证。其次,AI数据读写性能较差,不同文件格式的重复序列化/反序列化和不同存储介质的重复I/O导致效率低下。

在这里插入图片描述

为了解决这些问题,一些数据湖的创业公司和学术界开始进行前沿探索。例如,LanceDB率先提出了向量数据湖的概念,可存储向量数据和多媒体数据;DeepLake具有好用的可视化界面和版本管理功能;LakeSoul提供了原生的Python接口,方便与模型训练挂钩。学术界也对AI数据管理高度重视,阿里云、微软亚研院和苹果等大公司在相关技术方面进行了探索,如向量数据库的崛起和Batch向量查询优化等。

在这里插入图片描述

Apache Iceberg是一款具有重要影响力的数据湖技术,其基础结构包括Catalog层、Metadata层和Data层。Catalog层存储table与metadata location的映射关系,并提供原子更新能力;Metadata层由metadata file、manifest list和manifest file组成,用于存储表的历史快照信息和过滤数据文件;Data层存储表的底层数据和可选的Delete File。

在这里插入图片描述

Iceberg支持数据更新,采用Copy-on-Write和Merge-on-Read两种方式。Copy-on-Write是读优化操作,通过重写数据文件来更新数据;Merge-on-Read是写优化操作,通过记录删除信息在读取时进行合并。由于Data files默认采取parquet列存且immutable,这影响了索引的设计。

在这里插入图片描述

Iceberg具有很强的开放性,支持多引擎和多语言。其Table Spec采用标准规范化格式,社区实现了多套引擎包,如Spark、Flink等,还支持Python、Java、Rust等多语言API。特别是Iceberg提供的Python接口,为结合AI工作流提供了很大帮助,解决了传统Spark引擎中PySpark模式存在的序列化开销和调试困难等问题。

在这里插入图片描述

腾讯基于PyIceberg进行了AI训练和推理链路的实践。PyIceberg API使用简便,通过加载catalog、进行planning和执行等步骤,可将数据转换为所需格式,如pandas、arrow、ray等,还研发了一些API,如将Iceberg转成PyTorch或TensorFlow dataset,以及开发PyIceberg SQL子系统,实现SQL解析和自动Plan优化,提高了算法调试的效率和便捷性。

在这里插入图片描述

在AI训练的Data Loader实现方面,社区版默认的bulk load形式在处理大规模数据时容易发生OOM,且GPU资源浪费严重。腾讯开发的支持AI大数据集的DataLoader,采用streaming方式分段加载,对外暴露为iterator形式,针对训练和推理场景进行了优化,如利用Alluxio缓存热数据和进行shuffle操作,提高了数据加载速度和GPU利用率,缩短了数据链路准备时间,改善了开发体验。

在这里插入图片描述

在向量查询方面,向量是AI技术中非常重要的概念,将NLP和图像等非结构化数据转化为结构化数组后,可通过数据库方法进行处理。常见的向量查询包括Search和SimJoin,暴力搜索的复杂度较高。为解决此问题,向量数据库采用近似索引技术,如基于聚类的索引和基于图的索引,但这些索引与数据湖的设计思想存在冲突,如难以支持实时入湖、与serverless概念不匹配等。

在这里插入图片描述

腾讯采用基于哈希函数的向量索引技术LSH(Locality Sensitive Hashing),其设计目标与普通哈希函数相反,最大化碰撞,使相似向量映射到同一个哈希桶,提高搜索效率。腾讯引入Iceberg向量表的优化,通过自定义数据类型tensor指定向量维度和哈希函数,设定bucket数量并使用Iceberg作为存储,在数据插入时构建LSH索引,实现了增量索引构建、支持实时更新和近似SimJoin,降低了查询复杂度。

在这里插入图片描述

Iceberg向量表实现过程中,腾讯遇到了一些问题,如真实环境下AI数据集存在稀疏向量和数据倾斜。为解决这些问题,腾讯实现了兼容稀疏/稠密向量的自适应列存格式,并提供了相应的算子;采用动态拆分倾斜bucket的技术,结合Spark AQE和bucket join,缓解了负载不均衡的问题,提高了SimJoin查询性能,与Spark ML相比具有2 - 3倍的性能提升,同时保证了查询结果的正确性。

面向Data+AI时代的数据湖优化与实践是一个不断创新和发展的过程。腾讯在Apache Iceberg基础上的探索和实践,为解决AI时代数据湖面临的挑战提供了有益的借鉴,推动了数据湖技术的发展和应用,为企业实现数据驱动的决策和创新提供了有力支持。在未来,随着技术的不断进步,数据湖将在Data+AI时代发挥更加重要的作用,为企业带来更多的价值和机遇。

参考:https://mp.weixin.qq.com/s/HwnGaPWscY0BvAek-4bHpQ
如有内容涉及违规侵权,请联系圈主处理,感谢


http://www.ppmy.cn/news/1521134.html

相关文章

驱动开发系列15 - Linux Graphics Xorg 详解

目录 一:概述 二:图形硬件概览 1. 帧缓冲区 2. 显卡的图形加速功能 三:X图形(Xorg) 1. 显示管理器(Display Manager),启动和登录 2. X服务器实例 3. X网络协议和客户端库 4. X客户端/服务器2D api 5. X客户端/服务器3D api 6. X用户空间驱动程序 7. 基于内核的图形驱…

Matlab simulink建模与仿真 第七章(表查询库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、表查询库中的模块概览 二、表查询模块 使用Lookup Table表查询模块,需要在配置窗口中建立x-y(自变量-因变量)离散数据对,x与y的维数应相同,x集&a…

从预警到预防:智慧哨兵如何提前化解交通安全隐患

智慧哨兵在提前化解交通安全隐患方面发挥着重要作用,主要通过预警到预防的全方位、立体式手段,有效减少交通事故的发生。以下是从预警到预防,智慧哨兵如何提前化解交通安全隐患的详细阐述: 一、预警机制 实时监测与数据分析&…

sqlite3 db.configure方法详解:设置项与默认值

在Node.js环境中,sqlite3库为开发者提供了一个与SQLite数据库进行交互的简洁API。除了基本的数据库操作外,sqlite3还允许开发者通过db.configure方法来配置数据库的一些底层参数和行为。本文将深入解析db.configure方法,包括其API函数定义、所…

webpack基本使用(基础)

文章目录 概要理解 一、使用示例1.引入库2.创建config/webpack.dev.js 测试环境3.创建config/webpack.prod.js 正式环境3.创建eslintrc.js4.创建babel.config.js5.package.json 总结 概要理解 vue或者react 通常用webpack作为打包工具,打包成浏览器识别的html、css…

@JsonFormat失败问题处理

JsonFormat失败问题处理 在开发中经常使用到时间格式,如果数据库的时间是timestamp格式的,则返回的格式通过带有毫秒 例如2024-08-30 14:53:58.236 这样子的格式,通常不是我们想要的; 但是我们又不想再后端写更多的代码&#xff…

视觉语言模型(VLMs)知多少?

最近这几年,自然语言处理和计算机视觉这两大领域真是突飞猛进,让机器不仅能看懂文字,还能理解图片。这两个领域的结合,催生了视觉语言模型,也就是Vision language models (VLMs) ,它们能同时处理视觉信息和…

React应用中的状态管理:Redux vs Context API

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介React应用中的状态管理:Redux vs Context API1. 引言2. Redux2.1 Redux简介2.2 Redux的核心概念2.2.1 单一状态树(Single Source of Truth)2.2.2 Actions2.2.3 Reducers2.2.4 Store 2.3 Redux的优…