大模型与大数据之挑战与解决——湖仓一体框架的应用

释放双眼,带上耳机,听听看~!
本文探讨了大模型对大数据架构带来的挑战,以及湖仓一体框架在解决这些挑战中的应用。

自 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 的设计

大模型与大数据之挑战与解决——湖仓一体框架的应用

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 的支持

大模型与大数据之挑战与解决——湖仓一体框架的应用

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

官方交流群:

微信群:关注公众号,点击“了解我们-用户交流”

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

ChatGLM-6B大模型在昇腾910加速卡上模型训练详解

2023-11-22 20:14:14

AI教程

基于Weka的数据库挖掘-聚类方法K-Means算法

2023-11-22 20:29:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索