paint-brush
LanceDB:对抗数据复杂性的值得信赖的骏马经过@minio
25,852 讀數
25,852 讀數

LanceDB:对抗数据复杂性的值得信赖的骏马

经过 MinIO8m2024/02/01
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

在本教程提供的基础上,有多种方法可以使用 MinIO 和 LanceDB 创建高性能、可扩展且面向未来的 ML/AI 架构。

People Mentioned

Mention Thumbnail
featured image - LanceDB:对抗数据复杂性的值得信赖的骏马
MinIO HackerNoon profile picture
0-item
1-item

LanceDB 基于 Lance(一种开源列式数据格式)构建,具有一些有趣的功能,使其对 AI/ML 具有吸引力。例如,LanceDB 支持显式和隐式矢量化,能够处理各种数据类型。 LanceDB 与领先的 ML 框架集成,例如火炬TensorFlow 。更酷的是 LanceDB 的快速邻居搜索,它可以使用近似最近邻算法有效地检索相似向量。所有这些结合起来创建了一个快速、易于使用且轻量级的矢量数据库,可以部署在任何地方。


LanceDB 能够查询 S3 兼容的对象存储中的数据。这种组合非常适合构建高性能、可扩展的云原生 ML 数据存储和检索系统。 MinIO 为不同的硬件、位置和云环境带来了性能和无与伦比的灵活性,使其成为此类部署的自然选择。


完成本教程后,您将准备好使用 LanceDB 和 MinIO 应对任何数据挑战。

兰斯是什么?

文件格式是一种针对 ML 工作流程和数据集进行优化的柱状数据格式。它旨在轻松快速地进行版本控制、查询和用于训练,并且适用于各种数据类型,包括图像、视频、3D 点云、音频和表格数据。此外,它还支持高性能随机访问:兰斯报告基准查询速度比 Parquet 快 100 倍。 Lance 的速度部分归功于 Rust 及其云原生设计的结果,其中包括零拷贝版本控制和优化向量操作等功能。


其中之一主要特征是执行矢量搜索的能力,允许用户找到最近的邻居不到 1 毫秒,并将 OLAP 查询与矢量搜索相结合。 lance 格式的其他生产应用包括用于 ML 应用的边缘部署的低延迟矢量数据库、自动驾驶汽车公司中多模态数据的大规模存储、检索和处理,以及电子行业中十亿级以上的矢量个性化搜索。 - 商业公司。 Lance 文件格式的部分吸引力在于它与流行工具和平台的兼容性,例如 Pandas、鸭数据库,极地,和 皮罗。即使您不使用 LanceDB,您仍然可以在数据堆栈中利用 Lance 文件格式。

专为人工智能和机器学习而打造

像 LanceDB 这样的向量数据库为人工智能和机器学习应用程序提供了明显的优势,这要归功于它们的高效解耦存储计算架构和数据高维向量表示的检索。以下是一些关键用例:


自然语言处理(NLP):


语义搜索:根据含义(而不仅仅是关键字)查找与查询相似的文档或段落。这为聊天机器人响应、个性化内容推荐和知识检索系统提供了动力。


问答:通过基于语义相似性查找相关文本段落来理解和回答复杂问题。


主题建模:发现大型文本集合中的潜在主题,对于文档聚类和趋势分析非常有用。


计算机视觉:


图像和视频检索:根据视觉内容搜索相似的图像或视频,这对于基于内容的图像检索、产品搜索和视频分析至关重要。


对象检测和分类:通过有效检索相似的训练数据来提高对象检测和分类模型的准确性。


视频推荐:根据以前观看过的视频的视觉内容推荐类似的视频。


在市场上众多的矢量数据库中,LanceDB 特别适合人工智能和机器学习,因为它支持在 S3 兼容存储上进行查询。您的数据无处不在,您的数据库也应该无处不在。

成功的架构

将 MinIO 与 LanceDB 结合使用具有多种优势,包括:


  • 可扩展性和性能:MinIO 的云原生设计专为大规模和高性能存储和检索而构建。通过利用 MinIO 的可扩展性和性能,LanceDB 可以有效地处理大量数据,使其非常适合现代机器学习工作负载。


  • 高可用性和容错性:MinIO 具有高可用性、不可变性和高耐用性。这确保了 MinIO 中存储的数据免受硬件故障的影响,并提供高可用性和容错能力,这对于 LanceDB 等数据密集型应用程序至关重要。


  • 主动-主动复制:多站点、主动-主动复制可在多个 MinIO 部署之间实现近乎同步的数据复制。这种强大的流程可确保高耐用性和冗余性,使其成为关键任务生产环境中保护数据的理想选择。


MinIO 和 LanceDB 的结合提供了一个高性能可扩展的云原生解决方案,用于管理和分析大规模机器学习数据集。

要求

要遵循本教程,您将需要使用Docker 组合。您可以使用 Docker Desktop 单独或一起安装 Docker Engine 和 Docker Compose 二进制文件。最简单的选择是安装 Docker Desktop。


通过运行以下命令确保已安装 Docker Compose:


 docker compose version


您还需要安装 Python。您可以从以下位置下载 Python这里。在安装过程中,请确保选中将 Python 添加到系统路径的选项。


或者,您可以选择创建虚拟环境。创建虚拟环境来隔离依赖关系是一种很好的做法。为此,请打开终端并运行:


 python -m venv venv


激活虚拟环境:


在 Windows 上:

 .\venv\Scripts\activate


在 macOS/Linux 上:

 source venv/bin/activate

入门

首先克隆项目这里。完成后,导航到在终端窗口中下载文件的文件夹并运行:


 docker-compose up minio


这将启动 MinIO 容器。您可以导航至 ' http://172.20.0.2:9001 ' 查看 MinIO 控制台。


MinIO 控制台


使用用户名和密码minioadmin:minioadmin登录。


接下来,运行以下命令创建一个名为lance的 MinIO 存储桶。


 docker compose up mc 


MinIO桶


该命令执行一系列操作MinIO客户端shell 中的 (mc) 命令。


以下是每个命令的细分:


直到(/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done ;:此命令重复尝试使用指定参数(端点、访问密钥和秘密密钥)配置名为minio的 MinIO 主机,直到成功。在每次尝试期间,它都会回显一条等待消息并暂停 1 秒。


/usr/bin/mc rm -r --force minio/lance;:该命令强制移除(删除)MinIO 中lance桶内的所有内容。


/usr/bin/mc mb minio/lance; :此命令在 MinIO 中创建一个名为lance的新存储桶。


/usr/bin/mc 策略集 public minio/lance; :该命令将lance存储桶的策略设置为public,允许公共读访问。


退出 0; :该命令确保脚本退出时状态码为0,表示执行成功。

兰斯数据库

不幸的是,LanceDB 没有原生 S3 支持,因此,您必须使用 boto3 之类的东西来连接到您创建的 MinIO 容器。随着 LanceDB 的成熟,我们期待原生 S3 支持,这将使用户体验变得更好。


下面的示例脚本将帮助您入门。


使用 pip 安装所需的包。创建一个名为requirements.txt的文件,其中包含以下内容:


 lancedb~=0.4.1 boto3~=1.34.9 botocore~=1.34.9


然后运行以下命令来安装软件包:


 pip install -r requirements.txt


如果您创建 MinIO 容器的方法与上述方法不同,您将需要更改您的凭据。


将以下脚本保存到文件中,例如lancedb_script.py


 import lancedb import os import boto3 import botocore import random def generate_random_data(num_records): data = [] for _ in range(num_records): record = { "vector": [random.uniform(0, 10), random.uniform(0, 10)], "item": f"item_{random.randint(1, 100)}", "price": round(random.uniform(5, 100), 2) } data.append(record) return data def main(): # Set credentials and region as environment variables os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin" os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin" os.environ["AWS_ENDPOINT"] = "http://localhost:9000" os.environ["AWS_DEFAULT_REGION"] = "us-east-1" minio_bucket_name = "lance" # Create a boto3 session with path-style access session = boto3.Session() s3_client = session.client("s3", config=botocore.config.Config(s3={'addressing_style': 'path'})) # Connect to LanceDB using path-style URI and s3_client db_uri = f"s3://{minio_bucket_name}/" db = lancedb.connect(db_uri) # Create a table with more interesting data table = db.create_table("mytable", data=generate_random_data(100)) # Open the table and perform a search result = table.search([5, 5]).limit(5).to_pandas() print(result) if __name__ == "__main__": main()


该脚本将从随机生成的数据创建一个 Lance 表并将其添加到您的 MinIO 存储桶中。同样,如果您不使用上一节中的方法创建存储桶,则需要在运行脚本之前执行此操作。请记住更改上面的示例脚本以匹配您为 MinIO 存储桶命名的内容。


最后,脚本打开表,而不将其移出 MinIO,并使用 Pandas 进行搜索并打印结果。


该脚本的结果应类似于以下结果。请记住,数据本身每次都是随机生成的。


 vector item price _distance 0 [5.1022754, 5.1069164] item_95 50.94 0.021891 1 [4.209107, 5.2760105] item_100 69.34 0.701694 2 [5.23562, 4.102992] item_96 99.86 0.860140 3 [5.7922664, 5.867489] item_47 56.25 1.380223 4 [4.458882, 3.934825] item_93 9.90 1.427407


自行扩展

在此教程中提供的基础上,可以采用多种方法来创建高性能、可扩展且面向未来的 ML/AI 架构。您的武器库中有两个尖端的开源构建模块 – MinIO 对象存储和 LanceDB 矢量数据库 – 将此视为您通往 ML/AI 的中奖门票比赛


别停在这里。 LanceDB 提供了广泛的食谱以及扩展您在本教程中构建的内容的教程,包括最近宣布的 Udacity 课程使用矢量数据库构建生成式 AI 解决方案。特别感兴趣的是与您的文档聊天的秘诀。我们致力于打破障碍,充分利用您的数据。


请向我们展示您正在构建的内容,如果您需要有关您崇高追求的指导,请随时发送电子邮件至 [email protected] 或加入我们的圆桌会议松弛