导读:从现代数据湖参考架构中找到的顶级 10 件武器和功能,以及每个功能的供应商工具和扩展库。
在了解通用人工智能(GenAI)架构之前,做为架构师的我们,可以从现代数据湖参考架构中借鉴到通用的 10 项重要功能,包括每个功能的相关工具与库,这可以称为AI开发者工具箱的十件武器。
现代数据湖,有时也称为数据湖屋,其一半是数据湖,一半是基于开放表格式规范 (OTF) 的数据仓库。这两者都建立在现代级对象存储上。
接下来,让我们深入思考了组织如何构建 AI 数据基础设施,以支持所有 AI/ML 需求,而不仅仅是训练集、验证集和测试集的原始存储。换句话说,它应该包含训练大型语言模型、MLOps 工具、分布式训练等所需的计算能力。
本文尝试介绍如何使用现代数据湖参考架构来支持我们的 AI/ML需求。下图展示了现代数据湖参考架构,其中重点介绍了生成 AI 所需的功能。
来源:现代数据湖中的 AI/ML
现在我们先讨论一下构建现代数据湖所需的供应商和工具。在这 10 件武器列表中,每个都是支持生成式 AI 所需的一项重要能力。
1. 数据湖
企业数据湖建立在对象存储之上。它不是以前那种使用廉价和深度存档用例的老式基于设备的对象存储,而是现代、高性能、软件定义和 Kubernetes 原生对象存储,它们是现代 GenAI 堆栈的基石。
它们可以作为服务(AWS、Google Cloud Patform (GCP)、Microsoft Azure)或本地或混合/两者使用,例如 MinIO。
这些数据湖必须支持流式工作负载,必须具有高效的加密和纠错删码,需要将元数据与对象一起原子存储,并支持 Lambda 计算等技术。
有鉴于这些现代替代方案是云原生的,它们将与其他云原生技术的整个堆栈集成,从防火墙到可观察性再到用户和访问管理,做到开箱即用。
2.基于OTF的数据仓库
对象存储是基于 OTF-B (Apache Iceberg、Apache Hudi 和 Delta Lake)的数据仓库的底层存储解决方案。
将对象存储用于数据仓库可能听起来很奇怪,但以这种方式构建的数据仓库代表了下一代数据仓库。此技术得益于 Netflix、Uber 和 Databricks 编写的 OTF 规范,这使得在数据仓库中使用对象存储变得更加平滑无缝。
OTF的诞生是因为市场上没有产品能够满足创建者的数据需求。本质上,它们所做的(以不同的方式)都是定义一个可以构建在对象存储之上的数据仓库。对象存储提供了其他存储解决方案无法提供的可扩展容量和高性能的组合。
这些产品是基于现代的全新规范,它们具有老式数据仓库所不具备的高级功能,例如分区演变、模式演变和零拷贝分支等。
两个可以在 MinIO 上运行基于 OTF 的数据仓库的 MinIO 伙伴是 Dremio 和 Starburst。
-
Dremio Sonar(数据仓库处理引擎,https://docs.dremio.com/current/sonar/)
-
Dremio Arctic(数据仓库目录,https://docs.dremio.com/cloud/arctic/)
-
Open Data Lakehouse | Starburst(目录和处理引擎,https://www.starburst.io/solutions/open-data-lakehouse/)
3.机器学习操作(MLOps)
MLOps 之于机器学习,就如同 DevOps 之于传统软件开发。两者都是一套旨在改善工程团队 (Dev 或 ML) 和 IT 运营 (Ops) 团队之间协作的实践和原则。其目标是利用自动化简化开发生命周期,从规划和开发到部署和运营。
这些方法的主要优点之一是持续改进。
MLOps 技术和功能在不断发展,我们需要一个由主要参与者支持的工具,以确保该工具不断发展和改进并提供长期支持。
以下这些工具中的每一个工件都使用 MinIO 来存储模型生命周期:
-
MLRun(Iguazio,被麦肯锡收购。https://www.mlrun.org/)
-
MLflow(Databricks,https://mlflow.org/)
-
Kubeflow(谷歌,https://www.kubeflow.org/)
4.机器学习框架
机器学习框架是用来创建模型并编写训练模型的代码的库(通常为 Python)。这些库功能丰富,它们提供了一系列不同的损失函数、优化器、数据转换工具和用于神经网络的预构建层。这两种库提供的最重要的功能是张量,张量是可以移动到 GPU 上的多维数组。此外,它们还具有自动微分功能,可用于模型训练。
当今最流行的两个机器学习框架是 PyTorch(来自 Facebook)和 Tensorflow(来自 Google)。
-
PyTorch(https://pytorch.org/)
-
TensorFlow(https://www.tensorflow.org/)
5.分布式训练
分布式模型训练是在多个计算设备或节点上同时训练机器学习模型的过程。
这种方法可以明显加快训练过程,特别是在需要大量数据集来训练复杂模型时。在分布式模型训练中,数据集被划分为较小的子集,每个子集由不同的节点并行处理。这些节点可以是集群中的单个机器、单个进程或 Kubernetes 集群中的单个 pod。
它们均可以访问 GPU。每个节点独立处理其数据子集,并相应地更新模型参数。
以下五个库可使开发人员免受分布式训练的大部分复杂性。如果没有集群,也可以在本地运行它们,但你需要一个集群,才能看到训练时间的显着减少。
-
DeepSpeed(来自微软,https://www.deepspeed.ai/)
-
Horovod(来自 Uber,https://horovod.ai/)
-
Ray(来自 Anyscale,https://www.ray.io/)
-
Spark PyTorch 分发器(来自 Databricks,https://www.databricks.com/blog/2023/04/20/pytorch-databricks-introducing-spark-pytorch-distributor.html)
-
Spark TensorFlow 分发器(来自 Databricks,https://docs.databricks.com/en/_extras/notebooks/source/deep-learning/spark-tensorflow-distributor.html)
6. 模型中心
模型中心上并不是现代数据湖参考架构的一部分,但我们还是将其包括在本文之中。
首先,它对于快速开始使用生成式 AI 非常重要。我们知道,Hugging Face 已成为大型语言模型的首选。Hugging Face 拥有一个模型中心,工程师可以下载预先训练的模型并分享他们自己创建的模型。Hugging Face 还是 Transformers 和 Datasets 库的创建者,这两个库与大型语言模型 (LLM) 以及用于训练和微调它们的数据一起使用。
还有其他模型中心。所有主要的云供应商都有上传和共享模型的方法,但 Hugging Face 凭借其模型和库集合,已成为该领域的领导者。
-
Hugging Face(https://huggingface.co/)
7. 应用程序框架
应用程序框架有助于将 LLM 整合到应用程序中。使用 LLM 与使用标准的AI API 不同,必须做大量工作才能将用户请求转换为 LLM 可以理解和处理的内容。
例如,我们构建了一个聊天应用程序并且想要使用检索增强生成 (RAG),接下来需要对请求进行标记,将标记转换为向量,与向量数据库集成,创建提示语,然后再调用你的 LLM。
生成式 AI 的应用程序框架允许开发者将这些操作链接在一起。
目前使用最广泛的应用框架是 LangChain。它与其他技术密切集成,例如 Hugging Face Transformer 库和 Unstructured 的文档处理库。它功能丰富且强大,但使用起来可能有点复杂。
下面为各位列出了一些替代方案,适合那些没有复杂要求并且想要比 LangChain 更简单的东西的开发者。
-
LangChain(https://www.langchain.com/)
-
AgentGPT(https://agentgpt.reworkd.ai/)
-
AutoGPT(https://autogpt.net/)
-
babyAGI(https://github.com/yoheinakajima/babyagi)
-
Flowiseai(https://flowiseai.com/)
-
GradientJ(https://www.gradientj.com/)
-
LamaIndex(https://docs.llamaindex.ai/en/latest/)
-
LangDock(https://www.langdock.com/)
-
TensorFlow(Keras API,https://www.tensorflow.org/)
8. 文件处理
大多数组织都没有一个包含干净准确文档的单一存储库。相反,文档以多种格式分散在整个组织的各个团队门户中。
为生成式 AI 做好准备的第一步是构建一个管道,该管道仅接受已获准用于生成式 AI 的文档并将其放置在矢量数据库中。对于大型全球性组织来说,这可能是生成式 AI 解决方案中最艰巨的任务。
文档管道将文档转换为文本,对文档进行分块,并通过嵌入模型运行分块后的文本,以便将其向量表示保存到向量数据库中。
幸运的是,一些开源库可以为许多常见的文档格式执行此操作。下面列出了一些库。这些库可以与 LangChain 一起使用,以构建完整的文档处理管道。
-
非结构化(https://github.com/Unstructured-IO/unstructured)
-
开放式解析(https://github.com/Filimoa/open-parse)
9.向量数据库
向量数据库(也会称作矢量数据库)有助于进行语义搜索。
理解如何做到这一点需要一些比较多的数学背景,而且比较复杂。但是也不用着急,语义搜索在概念上很容易理解。假设你想找到所有讨论与“人工智能”相关的文档。
要在传统数据库中执行此操作,你需要搜索“人工智能”的所有可能的缩写、同义词和相关术语。我们的查询将类似如下所示:
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(https://milvus.io/)
-
PgVector(https://github.com/pgvector/pgvector)
-
Pinecone(https://www.pinecone.io/)
-
Weaviate(https://weaviate.io/)
10.数据探索和可视化
开发者拥有一些工具来处理数据,并以不同的方式对其进行可视化,总是一个好主意。
下面为列出的 Python 库,提供了数据处理和可视化功能。这些工具看起来像是传统数据才需要的工具,但它们在生成 AI 中也很有用。比如,如果你正在进行情绪分析或情绪检测,那么应该检查你的训练、验证和测试集,以确保在所有类别中都有适当的分布。
-
Pandas(https://pandas.pydata.org/)
-
Matplotlib(https://matplotlib.org/)
-
SeaBorn(https://seaborn.pydata.org/)
-
Streamlit(https://streamlit.io/)
结语
以上就是我为现代数据湖参考架构中找到的十种武器,每种武器功能的具体供应商产品或者扩展库。
最后,以下表格总结了这些工具集。
数据湖 |
MinIO,AWS,GCP,Azure |
基于OTF的数据仓库 |
Dremio(https://www.dremio.com/)Dremio sonar(https://docs.dremio.com/current/sonar/)Dremio Arctic(https://docs.dremio.com/cloud/arctic/)Starburst(https://www.starburst.io/)Opendata Lakehouse | Starburst(https://www.starburst.io/solutions/open-data-lakehouse/) |
机器学习框架 |
PyTorch(https://pytorch.org/)TensorFlow(https://www.tensorflow.org/) |
机器学习操作 |
MLRun(麦肯锡,https://www.mlrun.org/)MLflow(Databricks,https://mlflow.org/)Kubeflow(谷歌,https://www.kubeflow.org/) |
分布式训练 |
DeepSpeed(微软,https://www.deepspeed.ai/)Horovod(来自 Uber,https://horovod.ai/)Ray(来自 Anyscale,https://www.ray.io/)Spark PyTorch 分布器(https://www.databricks.com/blog/2023/04/20/pytorch-databricks-introducing-spark-pytorch-distributor.html)Spark Tensoflow 分布器(https://docs.databricks.com/en/_extras/notebooks/source/deep-learning/spark-tensorflow-distributor.html) |
模型中心 |
HuggingFace(https://huggingface.co/) |
应用程序框架 |
LangChain(https://www.langchain.com/)AgentGPT(https://agentgpt.reworkd.ai/)Auto-GPT(https://autogpt.net/)BabyAGI(https://github.com/yoheinakajima/babyagi)Flowise(https://flowiseai.com/)GradientJ(https://www.gradientj.com/)LlamaIndex(https://docs.llamaindex.ai/en/latest/)Langdock(https://www.langdock.com/)TensorFlow (Keras API,https://www.tensorflow.org/) |
文件处理 |
非结构化(https://github.com/Unstructured-IO/unstructured)开放式解析(https://github.com/Filimoa/open-parse) |
矢量数据库 |
Milvus(https://milvus.io/)Pgvector(https://github.com/pgvector/pgvector)Pinecone(https://www.pinecone.io/)Weaviate(https://weaviate.io/) |
数据探索和可视化 |
Pandas(https://pandas.pydata.org/)Matplotlib(https://matplotlib.org/)Seaborn(https://seaborn.pydata.org/)Streamlit(https://streamlit.io/) |
希望本文为各位的AI 事业增加一点调料。