LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

2024-01-02 00:44

本文主要是介绍LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

什么是Lance?

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

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

专为 AI 和机器学习而构建

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

自然语言处理(NLP):

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

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

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

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

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

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

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

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

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

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

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

要求

要按照本教程进行操作,您需要使用 Docker Compose。您可以单独安装 Docker 引擎和 Docker Compose 二进制文件,也可以使用 Docker Desktop 一起安装。最简单的选择是安装 Docker Desktop。

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

docker compose version

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

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

python -m venv venv

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

On Windows: 在 Windows 上:

.\venv\Scripts\activate

On macOS/Linux: 在 macOS/Linux 上:

source venv/bin/activate

开始

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

docker-compose up minio

这将启动 MinIO 容器。您可以导航到“http://172.20.0.2:9001”以查看 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

不幸的是,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 randomdef 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 datadef main():# Set credentials and region as environment variablesos.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 accesssession = boto3.Session()s3_client = session.client("s3", config=botocore.config.Config(s3={'addressing_style': 'path'}))# Connect to LanceDB using path-style URI and s3_clientdb_uri = f"s3://{minio_bucket_name}/"db = lancedb.connect(db_uri)# Create a table with more interesting datatable = db.create_table("mytable", data=generate_random_data(100))# Open the table and perform a searchresult = 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 课程。特别令人感兴趣的是这个与您的文档聊天的秘诀。我们都致力于打破障碍,从您的数据中获得最大收益。

这篇关于LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560935

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者