自 OpenAI 发布 ChatGPT 以来,其惊艳的作用敏捷招引了很多关注,大模型成为了炙手可热的方向。而大模型的相关技能生态也在蓬勃发展。其中在大模型的练习、微调等过程中,都需求很多的输入练习数据来提高模型作用,例如,Meta 在练习 LLAMA 时运用了超过 4T 的数据集,共消耗了 1.4T 个的 Token。可以说练习数据集的规划和质量,是决议大模型最终推理作用的关键因素之一。一起,大模型年代,也给大数据 + AI 的架构带来一系列应战。

LakeSoul 作为国产自研的湖仓一体结构,从规划之初就充沛考虑了 Data+AI 一体化的重要性,并经过 NativeIO 来完成多种核算引擎、多种数据运用模式的支撑。本文结合湖仓和大模型 AI,从头思考和解读 Data+AI 一体化所带来的应战和 LakeSoul 的解决之道。

1. 大模型对大数据架构带来的应战

1.1 大模型练习对数据安排能力的要求

大模型技能是典型的 Data-centric AI,在本年早些时候发表的《Data-centric Atrifical Intelligence: A Survey》 一文中指出,无论是在练习阶段、推理阶段、持续维护阶段,都是触及了数据搜集、数据加载、加工转化、发掘剖析、对比评估等作业。模型在预练习阶段,需求大规划高质量的数据,特别是在模型的 SFT 和 RLHF 阶段,LLAMA 2 的经历告诉咱们 “Quality is All Your Need”,很多模型的表现出的问题往往是练习数据中“噪声”引入的。因而,大模型的算法工程师为了提高模型的 Helpfulness 和 Safety,除了要优化模型架构、练习算法之外,获取大规划高质量的数据、高效地安排练习数据、优化数据组成的“配方”,也是提高模型最终表现的有用手法之一。

1.2 大模型所需求的数据量级大,IO 功能要求高

当时在生成式大型模型范畴,新模型层出不穷,近年来模型规划呈指数级增长的趋势。而关于 LLM 模型的练习而言,所需的数据集如 CommonCrawl,即使在清洗后也达到了 TB 级别的规划。以 Stable Diffusion 为代表的图画生成模型练习运用的 LAION-400M 数据集的元数据达到了 50GB,图画和文本数据则达到了 10TB。而原始的 LAION-5B 数据集的元数据已经达到了 800GB,图画和文本数据乃至达到了 240TB 的规划。

从练习大模型所需的数据量级上可以看出,练习数据一般难以单机寄存,需求运用数据湖来进行存储各类结构化(文本、类别标签等)以及非结构化(图片、音视频等)数据,来满意大模型对大规划输入数据的需求。一起,多机多卡高并发的练习也对数据的 IO 功能提出了更高的要求。

1.3 传统数仓难以满意大模型对非结构化多模态数据拜访的需求

传统的数仓规划主要还是针对结构化数据的读写和核算,主要是面向 SQL 的 BI 场景。然而在大模型的场景下,练习数据既有结构化部分,如标签、类别,也有非结构化的部分,如文本、图片、语音、视频等。如何将结构化、非结构化数据有机的交融在一起,更好地为 AI 服务,也成为新的研讨探究方向。

1.4 Data + AI 一体化,多种核算引擎衔接,带来更高的架构规划应战

Data+AI 一体化架构,在数据层面除了需求支撑数仓建模、BI 剖析等大数据运用,也要支撑 AI 模型练习。大数据的核算,通常包含 Spark、Flink、Presto 等流、批、MPP 核算引擎。而 AI 以及数据科学的核算,包含 PyTorch、Pandas、Ray 等核算结构。

长期以来,大数据结构和 AI 结构并不能很好地相互衔接,导致从数据到 AI 需求进行繁琐的格局转化和东西、渠道切换,一方面影响了开发迭代的功率,另一方面也造成了存储、核算的冗余和资源浪费。

2. LakeSoul 针对大模型 AI 的规划

当湖仓遇上大模型:LakeSoul 实现 Data+AI 一体化湖仓架构的新思考

2.1 LakeSoul 湖仓的分区、快照、增量等功能助力大模型练习流程

在对大型模型进行练习之前,通常需求对数据进行严格的筛选和清洗,这需求进行很多的 ETL 作业,并且需求运用相似 Spark 这样的大数据系统,对数据进行预处理,包含新增数据写入、脏数据清洗等,并针对不同的数据版别进行多轮模型练习迭代。

LakeSoul 的一体化规划以及其分区、快照和增量读写等功能为算法工程师在构建大型模型时供给了许多有益的支撑:

  1. 无需数据搬运,ETL 的结果可以直接作为模型的输入,大型模型可以无缝地操作数据湖仓库中的样本数据。
  2. 经过 LakeSoul 的分区功能,工程师可以按照特定标准对数据进行分组和安排,然后高效灵敏地办理数据样本的不同版别。
  3. 快照功能使工程师可以轻松获取数据集不同版别的快照,便于进行模型练习和验证。
  4. 增量读写功能使项目发布后,可以持续搜集线上反馈数据,并运用高质量的数据对模型进行增量练习。
  5. 在 LakeSoul 的加持下,大型模型的练习流程防止了数据低效的搬移、复制和紊乱的办理,使算法工程师可以专心于模型本身的优化,提高练习流程的功率。

2.2 湖原生的湖仓一体架构,大容量低本钱,高功能 IO

LakeSoul 的湖仓一体架构规划,是以湖为底座,上层构建数仓、AI 数据的办理能力,也可以称之为湖原生的架构。LakeSoul 湖仓天然承继了湖的开放灵敏、大容量、低本钱的特性,在大模型的年代,也自然可以承当海量练习推理数据的存取使命。一起,LakeSoul 在 IO 层做了很多异步、预取等功能优化,进一步保障大模型练习的功率。

2.3 湖仓支撑非结构化数据拜访

为支撑文生图等类型的模型,需求支撑非结构化数据的读取。LakeSoul 选用了结构化、非结构化交融的规划,在结构化表中,每一行数据可以经过文件名的方法链接到另一个非结构化的文件,LakeSoul 会识别这种“软链接”并自动将非结构化文件读取为二进制字节数组,一起,LakeSoul 针对这种场景,也会经过并行预取的方法,提高非结构化文件的拜访功能。

这样的规划,具有几个重要的优势:一是运用简单,非结构化的图片、视频等,可以依然以原始文件方法放在湖上,而不需求从头导入为另一种格局,关于大规划的数据也能防止重复存储,节约本钱;二是结构化、非结构化数据可以一起进行读取,结兼并行预取等优化,可以较好地确保功能;三是用户运用简单,在 AI 练习时调用一个接口即可完成异构数据交融读取。

2.4 湖仓开放架构和生态,无缝对接多种核算引擎,完成 Data+AI 一体化架构

LakeSoul 已经全面完成了 Native IO 层,选用 Rust 原生语言完成,并封装了 C 接口,然后可以一起对接 Java 的大数据生态和 Python 的 AI 生态。

LakeSoul 的 Native IO 层封装了 LakeSoul 数据读写的内部逻辑,包含目标存储、HDFS 的异步拜访,数据 Append、Upsert 写入和读时自动兼并(Merge on Read),以及异步预取等功能优化。无论是哪一种核算引擎,都可以无缝实时读写 LakeSoul 表,而无需关怀底层的逻辑。

Native IO 层,结合 Native 的元数据层接口,LakeSoul 可以与 Spark、Flink 等流批引擎,Presto、Doris 等 MPP 和向量化查询引擎,以及 Python 生态的 AI 和数据科学结构进行无缝对接,真正完成同一个湖仓渠道,同一份数据,一起支撑 Data+AI 的一体化架构。

3. LakeSoul 对大模型 AI 的支撑

当湖仓遇上大模型:LakeSoul 实现 Data+AI 一体化湖仓架构的新思考

3.1 原生 Python Reader

当时,LakeSoul 正在开发原生的 Python Reader 完成。前面说到,LakeSoul 已经将元数据办理、数据的读写,都运用 Rust 完成,并封装了 C 接口。

在 Python 层,LakeSoul 会进一步封装为 PyArrow Dataset 。这样的封装有两个优点:一是 PyArrow 的生态已经比较老练,和 Pandas、PyTorch 都可以无缝对接,也可以支撑指定分区、列裁剪、过滤条件等;二是可以支撑流式的读取,关于大规划的数据不需求全量加载到内存当中,运用 LakeSoul 异步预取的优化,在确保功能的一起也大幅节约了内存资源。

3.2 对接 PyTorch、HuggingFace 进行多模态模型练习

3.2.1PyTorch Dataset 封装,支撑多机多卡读取

根据 LakeSoul 的 Python PyArrow Dataset 完成,可以进一步为 PyTorch 等 AI 结构完成读数据接口。关于 PyTorch,咱们将会完成一个 IterableDataset,每次迭代回来一个 Arrow 的 RecordBatch,并可以转化为 PyTorch 的 Tensor 目标。

一起,在 PyTorch 的多机多卡并行核算时,咱们可以经过当时进程的 rank,核算出当时进程要读取的分片,然后完成并行的数据加载。

3.2.2支撑多模态数据读取并练习

经过以上的接口封装,关于 LakeSoul 湖仓中的结构化数据,已经可以在 AI 结构中正常运用了。关于文生图等大模型,需求拜访非结构化的数据。经过 LakeSoul 结构化、非结构化交融的方法,可以很方便地读取数据并进行练习。

LakeSoul 一起读取出的结构化如标签部分,以及非结构化数据如图片等,还可以持续运用 torchvision 进行一些必要的图片预处理。LakeSoul 的 PyTorch Dataset 可以直接传递给 PyTorch 或者 HuggingFace Trainer 进行模型练习的核算,整体运用流程可以很好地兼容用户已有的练习逻辑和代码,降低学习本钱。

from lakesoul.torch import dataset_loader
from torch.utils.data import DataLoader
from torchvision import transforms
from transformers import ResNetForImageClassification
# 指定表名,加载 LakeSoul 多模态数据表
# 并对图片数据进行一些预处理
lakesoul_dataset = dataset_loader.load(table_name= 'imagenet' , \
                                       partitions= 'date=20230810' , \
                                       batch_size= 64 ,
                                       transform=transforms.Compose( \
                                            [transforms.Rescale(256), \
                                            transforms.RandomCrop(224), \
                                            transforms.ToTensor()])) 
# 运用 LakeSoul Dataset 初始化 PyTorch DataLoader
dataloader = DataLoader(lakesoul_dataset, batch_size=None) # disable pytorch's auto-batching
...
# 加载模型 checkpoint
model = ResNetForImageClassification.from_pretrained("DMetaSoul/resnet-50")
model = model.to(device)
# 读取并预处理数据,进行练习
for batch in dataloader:
    # 从 LakeSoul 表中一起读取到结构化标签和非结构化图片数据
label s = batch[ 'label s ' ] .to(device)
image s = batch[ 'image s ' ] .to(device)
    optimizer.zero_grad()
 # 模型核算
    outputs = model(images)
    loss = loss_func(outputs, labels)
    ...

总结

数元灵科技专心于一站式湖仓智能新基建,LakeSoul 作为国产唯一开源湖仓结构,一直走在技能探究的前沿,这是年代赋予咱们的使命,也是咱们的走运。在通用大模型年代,咱们依然坚持以数据为中心的理念,并将 LakeSoul 作为 Data+AI 一体化的柱石,一起与数据和智能范畴的其他开源项目紧密合作,共同发掘数据的潜力和价值,为广阔中小企业供给普惠型数据智能服务。

【关于数元灵】

数元灵科技成立于2021年,专心于一站式的大数据智能渠道新基建,在研项目包含云原生湖仓一体结构LakeSoul,一站式机器学习结构MetaSpore, 以及云原生一站式AI开发出产渠道AlphaIDE。公司力求打造以数据驱动为中心的标准化pipeline,推动国家数字化经济发展,致力于为帮助企业充沛开释业务价值,服务新基建,让更多的职业和技能从业者享受到更普惠的大数据人工智能红利。

  • 数元灵科技是北京中关村高新技能企业;
  • 数元灵获国家信创认证、ISO27001信息安全办理认证等资质认证;
  • 数元灵产品具有软件作品12项,核心专利4项;
  • 入选最具潜力创业企业TOP10榜单

GitHub:

github.com/lakesoul-io

github.com/meta-soul/M…

AlphaIDE:

registry-alphaide.dmetasoul.com/#/login

官网:

www.dmetasoul.com

官方沟通群:

微信群:关注公众号,点击“了解咱们-用户沟通”