现代数据湖,有时也被称为数据湖仓(data lakehouse),是数据湖与基于开放表格式规范(OTF,Open Table Format)的数据仓库各占一半的结合体。两者均建立在现代对象存储之上。
如何构建全面支持AI/ML需求的AI数据基础设施,不仅要包含存储训练集、验证集和测试集的原始数据,还应涵盖训练大型语言模型所需的计算资源、MLOps工具链以及分布式训练等功能。
本文探讨如何利用现代数据湖参考架构来满足AI/ML需求。下图展示了现代数据湖参考架构,并重点标出了支持生成式AI所需的能力。
数据湖 #
企业级数据湖以对象存储为基础。这里所指的并非传统的、以设备为基础的对象存储(主要用于大规模低成本归档),而是现代的、高性能的、软件定义的、Kubernetes原生的对象存储,它是现代生成式AI技术栈的基石。这类存储可作为服务提供(如AWS、Google Cloud Platform(GCP)、Microsoft Azure),也可在本地部署或采用混合模式,例如MinIO。
这些数据湖必须支持流处理工作负载,具备高效的加密和纠删码能力,能够将元数据与对象原子性地存储,并支持Lambda计算等技术。由于这些现代对象存储是云原生的,它们能与其他云原生技术栈(从防火墙到可观测性再到用户和访问管理)无缝集成。
基于OTF的数据仓库 #
对象存储同样是基于OTF的数据仓库的底层存储方案。虽然用对象存储构建数据仓库听起来有些反常,但这种方式代表了新一代数据仓库。Netflix、Uber和Databricks制定的OTF规范使得在数据仓库中使用对象存储变得简单可行。
这些OTF包括Apache Iceberg、Apache Hudi和Delta Lake,是因为市场上缺乏能够满足创建者数据需求的产品而开发的。它们的核心功能(尽管实现方式不同)是定义一个可以构建在对象存储之上的数据仓库。对象存储提供了其他存储方案无法比拟的可扩展容量和高性能的结合。
作为现代规范,它们具备传统数据仓库所不具备的高级功能,如分区演进、模式演进和零拷贝分支。
能够在MinIO之上运行基于OTF的数据仓库的是Dremio和Starburst。
- Dremio Sonar(数据仓库处理引擎)
- Dremio Arctic(数据仓库目录)
- 开放数据湖仓 | Starburst(目录和处理引擎)
机器学习运维(MLOps) #
MLOps之于机器学习,犹如DevOps之于传统软件开发。两者都是一套旨在提升工程团队(开发或机器学习团队)与IT运维团队之间协作的实践和原则。其目标是通过自动化来简化开发生命周期,涵盖从规划、开发到部署和运维的各个阶段。其中一个主要优势是实现持续改进。
MLOps的技术和功能在不断演进。选择一个有大厂支持的工具至关重要,以确保工具能持续开发和改进,并提供长期支持。这些工具底层都使用MinIO来存储模型生命周期中的各种工件。
- MLRun(Iguazio,现已被麦肯锡公司收购)
- MLflow(Databricks)
- Kubeflow(Google)
机器学习框架 #
机器学习框架是用于创建模型和编写训练代码的库(通常是Python库)。这些库功能丰富,提供多种损失函数、优化器、数据转换工具和神经网络的预构建层。其中最重要的功能之一是张量(Tensor)。张量是可以被移至GPU上的多维数组,在模型训练过程中具有自动微分功能。
当前最流行的两个机器学习框架是PyTorch(来自Meta)和TensorFlow(来自Google)。
- PyTorch
- TensorFlow
分布式训练 #
分布式模型训练是指在多个计算设备或节点上同时训练机器学习模型的过程。这种方法能够加速训练过程,尤其在使用大型数据集训练复杂模型时效果显著。
在分布式模型训练中,数据集被分割为更小的子集,每个子集由不同的节点并行处理。这些节点可以是集群中的独立机器、独立进程或Kubernetes集群中的独立Pod,并可能具备GPU访问权限。每个节点独立处理其子集数据,并相应地更新模型参数。以下五个库屏蔽了分布式训练的大部分复杂性。虽然可以在本地运行这些库,但要显著减少训练时间,仍需要一个集群。
- DeepSpeed(来自Microsoft)
- Horovod(来自Uber)
- Ray(来自Anyscale)
- Spark PyTorch Distributor(来自Databricks)
- Spark TensorFlow Distributor(来自Databricks)
模型中心 #
虽然模型中心并非严格属于现代数据湖参考架构的一部分,但由于其对快速启动生成式AI至关重要,仍将其纳入其中。Hugging Face已成为大型语言模型的首选平台。它托管了一个模型中心,工程师可以在此下载预训练模型并分享自己创建的模型。Hugging Face还开发了Transformers和Datasets库,这些库与大型语言模型(LLM)以及用于训练和微调它们的数据协同工作。
当然,还有其他模型中心。所有主要的云供应商都提供了上传和分享模型的途径,但Hugging Face凭借其丰富的模型和库,已成为该领域的领导者。
- Hugging Face
应用框架 #
应用框架帮助将LLM集成到应用程序中。使用LLM与使用标准API有所不同,需要进行大量工作将用户请求转换为LLM可以理解和处理的内容。例如,如果你构建一个聊天应用程序,并希望使用检索增强生成(RAG),你需要将请求标记化,将标记转换为向量,集成向量数据库(如下所述),创建提示,然后调用你的LLM。生成式AI的应用框架允许你将这些操作串联在一起。
当前最广泛使用的应用框架是LangChain。它可以与其他技术集成,如Hugging Face的Transformer库和Unstructured的文档处理库。它功能丰富,使用起来可能有些复杂,因此对于那些需求不复杂并希望使用比LangChain更简单工具的用户,下面列出了一些替代方案。
- LangChain
- AgentGPT
- Auto-GPT
- BabyAGI
- Flowise
- GradientJ
- LlamaIndex
- Langdock
- TensorFlow(Keras API)
文档处理 #
大多数组织并没有一个统一的、包含清晰准确文档的存储中心,而是将文档散落在各个团队的门户中,且格式多样。在为生成式AI准备数据时,首要任务是建立一条管道,筛选出已获批用于生成式AI的文档,并将它们导入向量数据库。对于大型跨国企业而言,这通常是最具挑战性的环节。
文档管道应将文档转化为文本,将长文本分割成更小的片段,并利用嵌入模型对这些片段进行处理,从而获得它们的向量表示,以便存储在向量数据库中。一些开源库可以处理多种常见的文档格式,并能与LangChain无缝结合,构建完整的文档处理流程。
- Unstructured
- Open-Parse
向量数据库 #
向量数据库支持语义搜索。理解其工作原理需要大量的数学背景,较为复杂。然而,语义搜索在概念上很容易理解。假设你想找到所有讨论“artificial intelligence”相关内容的文档。要在传统数据库中实现这一点,你需要搜索“artificial intelligence”的每一个可能的缩写、同义词和相关术语。你的查询可能会像这样:
SELECT snippet
FROM MyCorpusTable
WHERE (text like '%artificial intelligence%' OR
text like '%ai%' OR
text like '%machine learning%' OR
text like '%ml%' OR
... and on and on ...
这种手动的相似性搜索既繁琐又容易出错,而且搜索本身也非常缓慢。向量数据库可以接收类似下面的请求,运行查询更快且更准确。如果你希望使用检索增强生成,快速而准确地运行语义查询至关重要。
{
Get {
MyCorpusTable(nearText: {concepts: ["artificial intelligence"]})
{snippet}
}
}
以下列出了四个流行的向量数据库。
- Milvus
- Pgvector
- Pinecone
- Weaviate
数据探索与可视化 #
拥有能够处理数据并以不同方式可视化的工具始终是明智之选。以下列出的Python库,正是提供了这样的能力。它们不仅适用于传统的AI,在生成式AI中同样大有用武之地。比如,在情感分析中,通过可视化工具,我们可以直观地检查数据集的分布,确保各个情感类别的样本均衡。
- Pandas
- Matplotlib
- Seaborn
- Streamlit
结论 #
以上是现代数据湖参考架构中的十项关键能力,以及对应的具体供应商产品和库。
以下是这些工具的汇总表。
- 数据湖:
- MinIO、AWS、GCP、Azure
- 基于OTF的数据仓库:
- Dremio
- Dremio Sonar
- Dremio Arctic
- Starburst
- Open Data Lakehouse | Starburst
- 机器学习框架:
- PyTorch
- TensorFlow
- 机器学习运维(MLOps):
- MLRun(麦肯锡公司)
- MLflow(Databricks)
- Kubeflow(Google)
- 分布式训练:
- DeepSpeed(Microsoft)
- Horovod(Uber)
- Ray(Anyscale)
- Spark PyTorch Distributor(Databricks)
- Spark TensorFlow Distributor(Databricks)
- 模型中心:
- Hugging Face
- 应用框架:
- LangChain
- AgentGPT
- Auto-GPT
- BabyAGI
- Flowise
- GradientJ
- LlamaIndex
- Langdock
- TensorFlow(Keras API)
- 文档处理:
- Unstructured
- Open-Parse
- 向量数据库:
- Milvus
- Pgvector
- Pinecone
- Weaviate
- 数据探索与可视化:
- Pandas
- Matplotlib
- Seaborn
- Streamlit