LanceDB 是您在对抗数据复杂性时值得信赖的支架

小夏 健康 更新 2024-01-31

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

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

在本教程结束时,您将准备好使用 LanceDB 和 Minio 应对任何数据挑战。

Lance 文件格式是一种针对 ML 工作流和数据集优化的列式数据格式。 它旨在快速轻松地进行版本控制、查询和训练,并适用于各种数据类型,包括图像 d 点云、音频和数据。 此外,它还支持高性能随机存取:Lance 报告基准测试的速度比 Parquet 快 100 倍。 Lance 的速度在一定程度上归功于 Rust 所取得的成就,以及它的云原生设计,其中包括零拷贝版本控制和优化的矢量操作等功能。

它的主要功能之一是能够执行向量搜索,允许用户在不到 1 毫秒的时间内找到最近的邻域,并将 olap 查询与向量搜索相结合。 Lance 格式的其他生产应用包括用于 ML 应用的边缘部署低延迟向量数据库,自动驾驶汽车公司中多模态数据的大规模存储、检索和处理,以及电子商务公司中的亿+向量个性化搜索。 Lance 文件格式的部分吸引力在于它与流行的工具和平台兼容,例如 pandas、duckdb、polars 和 pyarrow。 即使您不使用 LanceDB,您仍然可以在数据堆栈中使用 Lance 文件格式。

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

自然语言处理(NLP):

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

Q&A:通过根据语义相似性查找相关文本段落来理解和回答复杂的问题。

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

计算机视觉:目标检测和分类:通过高效检索相似的训练数据,提高目标检测和分类模型的准确性。

*推荐:与之前的视觉内容推荐类似**。

将 Minio 与 LanceDB 结合使用有几个好处,包括:

可扩展性和性能:Minio 的云原生设计专为扩展和高性能存储和检索而构建。 通过利用 Minio 的可扩展性和性能,LanceDB 可以高效处理大量数据,使其成为现代 ML 工作负载的理想选择。

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

主动-主动复制:多站点、主动-主动复制支持跨多个 minio 部署近乎同步地复制数据。 这种强大的过程确保了高耐用性和冗余性,使其成为在关键任务生产环境中屏蔽数据的理想选择。

Minio 和 LanceDB 的结合为管理和分析大规模 ML 数据集提供了高性能、可扩展的云原生解决方案。

要学习本教程,您需要使用 docker compose。 您可以单独安装 Docker Engine 和 Docker Compose 二进制文件,也可以一起使用 Docker Desktop。 最简单的选择是安装 Docker Desktop。

通过运行以下命令确保安装了 docker compose

docker compose version

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

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

python -m venv venv

要激活虚拟环境,请执行以下操作:

在 Windows 上:

.\venv\scripts\activate

在 macOS Linux 上: 在 macOS Linux 上:

source venv/bin/activate

首先从这里克隆项目。 完成后,导航到“终端”窗口中的“文件”文件夹,然后运行:

docker-compose up minio

这将启动 minio 容器。 您可以导航到 minio 控制台。

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

接下来,执行以下命令,创建名为 Lance 的 minio 存储桶。

docker compose up mc

此命令在 shell 中执行一系列 minio 客户端 (MC) 命令。

以下是每个命令的细分:

until (/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 policy set public minio/lance;此命令将 Lance 存储桶的策略设置为 public,从而允许 public 读取访问。

exit 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 scriptpy .

import lancedb

import os

import boto3

import botocore

import random

def generate_random_data(num_records):

data =

for _ in range(num_records):

record = ","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=))

# connect to lancedb using path-style uri and s3_client

db_uri = f"s3:///"

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 提供了广泛的方法和教程来扩展您在本教程中构建的内容,包括最近宣布的关于使用矢量数据库构建生成式 AI 解决方案的 Udacity 课程。 特别令人感兴趣的是与您的文档聊天的秘诀。 我们都致力于打破障碍,充分利用您的数据。

相似文章

    这场冲突的复杂性

    近日,军事形势打得风火石,缅北联军以出人意料的速度攻占了关键据点,如飓风席卷而来,改写了冲突的走向。在果敢盟军 若开军和德昂民族解放军的共同努力下,驻扎在掸邦北部公丘乡的第团于月日投降。这个消息使缅甸 军队雪上加霜,而据点的丧失使整个战争局势岌岌可危。缅甸北部联军的突然崛起引发了人们对这场冲突复杂性...

    缅甸局势的复杂性和挑战

    缅甸作为东南亚国家,长期以来一直是国际关注的焦点。最近,缅甸局势再次成为热门话题,主要是由于该国持续的冲突和不稳定。虽然缅甸 已宣布停火并得到国际社会的积极回应,但昂惠地区的行动使局势进一步复杂化。缅甸冲突具有深远的历史背景,涉及种族 宗教 政治等问题。特别是在昂莱地区,由于其地理位置,它已成为各方...

    中国天庭制度的复杂性及其影响

    中国天庭制度是中国古代神话传说的重要组成部分,包含诸神 神 仙等诸多元素,构成了一个庞大而复杂的神话体系。这一制度不仅在中国文化中占有重要地位,而且对世界神话文化产生了深远的影响。本文将探讨中国天庭制度的复杂性及其对后世的影响。.中国天庭制度的组成。中国天庭系统主要由玉皇大帝 太上老君 佛陀等诸神组...

    孝道的复杂性 胡宗南与父亲的矛盾与亲情!

    中国自古以来就倡导尊老 爱幼 孝敬父母的传统礼仪,素有礼仪之国之称。这种价值观不仅是对民族文化的肯定,也对每个人提出了更高的要求。然而,在 时期,有一个人成为了例外,他就是国民党高级将领胡宗南。胡宗南的父亲胡吉庆曾去军营探望儿子,却被军营门口的哨兵拦住。胡继庆曾经是一个威风凛凛的人物,但这次他依靠儿...

    尿路结石是需要注意的复杂尿路病因之一

    尿路结石是一种常见的泌尿系统疾病,其形成与多种因素有关,包括年龄 性别 饮食习 环境因素等。尿路结石的主要症状包括疼痛 血尿 尿频 尿急等,严重者甚至可能导致肾功能衰竭。本文将详细介绍尿路结石的病因 诊断方法和方法。.尿路结石的成因。尿路结石的形成与多种因素有关,其中最重要的是尿液中钙 草酸等物质浓...