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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/284393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图文证明 等价无穷小替换

等价无穷小替换 定义 等价无穷小是无穷小之间的一种关系,指的是:在同一自变量的趋向过程中,若两个无穷小之比的极限为1,则称这两个无穷小是等价的。无穷小等价关系刻画的是两个无穷小趋向于零的速度是相等的。 设当 x → x 0 时…

第5课 使用openCV捕获摄像头并实现预览功能

这节课我们开始利用ffmpeg和opencv来实现一个rtmp推流端。推流端的最基本功能其实就两个:预览画面并将画面和声音合并后推送到rtmp服务器。 一、FFmpeg API 推流的一般过程 1.引入ffmpeg库:在代码中引入ffmpeg库,以便使用其提供的功能。 2.捕获摄像头…

条款14:在资源管理类中小心拷贝行为

你可能会发现,有时候需要创建自己的资源管理类。例如,假设你正在使用一个C API来操作互斥对象,互斥类型提供了lock和unlock函数: void lock(Mutex* pm); // 锁住pm指向的互斥量 void unlock(Mutex* pm); // 互斥量解锁 class Lock { publi…

【LMM 003】生物医学领域的垂直类大型多模态模型 LLaVA-Med

论文标题:LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 论文作者:Chunyuan Li∗, Cliff Wong∗, Sheng Zhang∗, Naoto Usuyama, Haotian Liu, Jianwei Yang Tristan Naumann, Hoifung Poon, Jianfeng Gao 作…

2001-2021年各省高速公路里程数据

2001-2021年全国及各省高速公路里程数据 1、时间:2001-2021年 2、指标:高速公路里程 3、范围:全国及30个省市 (不含西藏) 4、来源:各省NJ、省TJGB、第三产业TJNJ (无缺失) 5、指…

Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128

bytebase/bytebase Stars: 7.9k License: NOASSERTION Bytebase 是一个数据库 CI/CD 解决方案,为开发人员和 DBA 提供统一的工具来管理不同数据库系统的开发生命周期。其主要功能包括标准化操作流程、SQL 代码审查、GitOps 集成以及数据访问控制等。关键特性和核心…

【JWT】JWT实战应用

学习参考:BV1gk4y177DS ------------------------------------------------------------------------------------------------------- # 一、前置知识点 - Java Web - Spring/SpringMVC/SpringBoot - Spring Security # 二、JWT介绍 ## 2.1 概念 官网:https://jwt.i…

带大家做一个,易上手的家常蒜酱鲍鱼

超市有个福利鲍鱼 就买回来弄一下 搞一个整个的蒜 蒜去皮切末 三四个干辣椒切小末 切一点葱花混进去 鲍鱼去壳 去内脏&牙齿 将鲍鱼切块 因为鲍鱼是正经不好入味的东西 起锅烧油 下入 葱蒜干辣椒 翻炒出味 然后倒入鲍鱼进行翻炒 翻炒均匀后 倒入 一勺生抽 半勺老抽 …

Python pycharm编辑器修改代码字体

在pycharm编辑器下修改代码字体,可以按照以下步骤: 点开上图所示的菜单, 再点击File->Settings,进入设置页面。 我们找到Editor下的Font并点选,然后我们就可以在右侧修改字体相关配置了。 这里建议使用等宽字体&…

27 UVM queue

uvm_queue类构建一个动态队列,该队列将按需分配并通过引用传递。 uvm_queue类声明: class uvm_queue #( type T int ) extends uvm_object 1 uvm_queue class hierarchy 2 uvm_queue class Methods 3 UVM Queue Example 在下面的示例中,…

Excel中部分sheet页隐藏并设置访问密码

1、新建sheet1 2、新建sheet2 3、隐藏sheet2 4、保护工作簿、输密码 5、密码二次确认 6、隐藏的sheet2已经查看不了 7、想要查看时,按图示输入原密码即可 8、查看sheet2内容

理解SQL中not in 与null值的真实含义

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a ! b. 在sql中, null是缺失未知值而不是空值。 当你判断任意值a ! null时, 官方说, “You cannot use arithmetic comparison operators such as , <, or <> to test for NULL”, 任何与null值的对比都将返…

微服务(11)

目录 51.pod的重启策略是什么&#xff1f; 52.描述一下pod的生命周期有哪些状态&#xff1f; 53.创建一个pod的流程是什么&#xff1f; 54.删除一个Pod会发生什么事情&#xff1f; 55.k8s的Service是什么&#xff1f; 51.pod的重启策略是什么&#xff1f; 可以通过命令kub…

光伏逆变器MPPT的作用、原理及算法

MPPT是逆变器非常核心的技术&#xff0c;MPPT电压在进行光伏电站设计时一项非常关键的参数。 一、什么是MPPT&#xff1f; &#xff08;单块光伏组件的I-V、P-V曲线&#xff09; 上图中&#xff0c;光伏组件的输出电压和电流遵循I-V曲线(绿色)、P-V曲线(蓝色)&#xff0c;如果…

QT基础知识

QT基础知识 文章目录 QT基础知识1、QT是什么2、Qt的发展史3、为什么学习QT4、怎么学习QT1、工程的创建(环境的下载与安装请百度&#xff09;2、创建的工程结构说明3、怎么看帮助文档1、类使用的相关介绍2. 查看所用部件&#xff08;类&#xff09;的相应成员函数&#xff08;功…

uni-app模版(扩展插件)

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

Python如何把类当做字典来访问及浅谈Python类命名空间

Python如何把类当做字典来访问 Python把类当做字典来访问 定义一个类将它实例化&#xff0c;我们可以通过obj.属性来访问类的属性&#xff0c;如果想获取类的所有实例变量&#xff0c;我们可以使用obj.__dict__来访问&#xff0c;如下&#xff1a; class A:def __init__(self)…

CUMT--Java复习--核心类

目录 一、装箱与拆箱 二、“”与equals 三、字符串类 1、String、StringBuffer、StringBuilder的区别 2、String类 3、StringBuffer类 4、StringBuilder类 四、类与类之间关系 一、装箱与拆箱 基本类型与对应封装类之间能够自动进行转换&#xff0c;本质就是Java的自…

Java位运算及移位运算

java中能表示整数数据类型的有byte、short、char、int、long&#xff0c;在计算机中占用的空间使用字节描述&#xff0c;1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系位置 —— Cartesian2

作者&#xff1a;taco 说到关于地理必然逃不开位置的关系。借用百度百科的内容来说地理学&#xff08;geography&#xff09;&#xff0c;是研究地球表层空间地理要素或者地理综合体空间分布规律、时间演变过程和区域特征的一门学科。所以位置&坐标系必然逃不掉了。那么在S…
最新文章