当前位置: 首页 > news >正文

pgvector: 30 倍构建向量嵌入索引

使用 pgvector 为 HNSW 并行构建索引

alt

Postgres 最受欢迎的向量搜索扩展 pgvector 最近实现了并行索引构建功能,这将分层可导航小世界 (HNSW) 索引构建时间显著提高了 30 倍。

祝贺 Andrew Kane 和 pgvector 的贡献者发布此版本,这巩固了 Postgres 作为最佳向量搜索数据库之一的地位,并允许您充分利用数据库的功能来构建索引。

alt

在 64 vCPU、512GB RAM 实例上使用包含 1,536 维向量的 10M 数据集运行测试。

Pgvector 是 Postgres 最受欢迎的向量相似性搜索扩展。向量搜索对于语义搜索和检索增强生成 (RAG) 应用程序越来越重要,可增强大型语言模型 (LLM) 的长期记忆。

在语义搜索和 RAG 用例中,数据库包含 LLM 未接受过训练的知识库,这些知识库被拆分成一系列文本或块。每个文本都保存在一行中,并与嵌入模型(例如 OpenAI 的 ada-embedding-002 或 Mistral-AI 的 mistral-embed ) 生成的向量相关联。

然后使用向量搜索来查找与查询向量最相似(更接近)的文本。这是通过将查询向量与数据库中的每一行进行比较来实现的,这使得向量搜索难以扩展。这就是为什么 pgvector 实施 近似最近邻 (ANN) 算法(或索引)的原因,该算法在数据库的子集上进行向量搜索,以避免冗长的连续扫描。

最有效的 ANN 算法之一是分层可导航小世界 (HNSW) 索引。其基于图形和多层的特性专为数十亿行向量搜索而设计。这使得 HNSW 在规模上极其快速和高效,并且是向量存储市场中最受欢迎的索引之一。

HNSW 首次由 Yu A Malkov 和 Dmitry A. Yashunin 在题为《使用分层可导航小世界图进行高效、稳健的近似最近邻搜索》的论文中提出。

HNSW 是一种基于图的索引高维数据的方法。它构建了一个图的层次结构,其中每一层都是前一层的子集,因此时间复杂度为 O(log(rows)) 。在搜索过程中,它会浏览这些图以快速找到最近的邻居。

alt

尽管 HNSW 指数快速而高效,但它也存在两个缺点:

1. 内存 :该索引所需的内存明显多于其他索引,例如倒排文件索引 (IVFFlat)。您可以通过拥有更大的数据库实例来解决内存问题。但是,如果您使用独立的 Postgres(例如 AWS RDS),您会发现自己处于仅为索引构建而过度配置的情况。但是,借助 Neon 扩展功能,您可以扩展、构建 HNSW 索引,然后缩减规模以节省成本。

alt

2. 构建时间: 对于百万行数据集,构建 HNSW 索引可能需要数小时。这主要是因为计算向量之间的距离需要花费时间。而这正是 pgvector 0.6.0 通过引入 并行索引构建 解决的问题。通过分配更多 CPU 和工作器,您可以将 HNSW 索引的构建速度提高 30 倍。

alt

但是等一下!HNSW 索引支持更新,那么如果您只需要构建一次索引,为什么这个并行索引构建功能是必要的呢?

嗯,有两种情况需要创建 HNSW 索引:

当您想要更快的查询并优化向量搜索时

当你已经有 HNSW 索引,并从表中删除向量时

后者可能会导致索引搜索返回误报,从而对 LLM 响应的质量和 AI 应用程序的整体性能产生负面影响。

与以前的版本相比,pgvector 0.6.0 使用并行工作器时可将索引构建时间加快 30 倍。处理大型数据集和向量大小(例如 OpenAI 1536 维向量嵌入)时,这种改进尤其明显。

创建 HNSW 索引可能需要大量资源。原因是您需要分配足够的“maintenance_work_mem”以容纳内存中的索引。否则,hnsw 图的构建时间会更长。

NOTICE: hnsw graph no longer fits into maintenance_work_mem after 100000 tuples
DETAIL: Building will take significantly longer.
HINT: Increase maintenance_work_mem to speed up builds.

为了有效地使用并行索引构建,必须使用适当的设置配置 Postgres。需要考虑的关键参数是:

Maintenance_work_mem :此参数决定为创建或重建索引分配的内存。此参数影响这些操作的性能和效率。将其设置为较高的值(例如 8GB)可以更有效地处理索引构建过程。

SET maintenance_work_mem = '8GB';

max_parallel_maintenance_workers: 这决定了可以使用的并行工作器的数量。在 Postgres 中,max_parallel_maintenance_workers 的默认值通常设置为 2。将其设置为较大的数字可以利用更多的计算资源来更快地构建索引。

SET max_parallel_maintenance_workers = 7; -- plus leader

在 RAG 应用中,召回率与查询执行时间一样重要。召回率是 ANN 提供的正确答案的百分比。在 HNSW 索引中,“ef_search”是确定搜索时要扫描的邻居数量的参数。“ef_search”越高,召回率越高,查询执行时间越长。

Johnathan Katz 进行的测试 表明,使用并行构建对召回率的影响微乎其微,大多数变化都产生了超过 1% 的积极影响。尽管速度有了很大的提高,但召回率的这种显著稳定性凸显了 pgvector 0.6.0 并行构建过程的有效性。

alt

pgvector 0.6.0 代表了一次重大飞跃,证明了 Postgres 在向量搜索领域的重要性。通过利用并行索引构建的强大功能,开发人员现在可以更快速、更高效地构建 HNSW 索引,从而显著减少此类任务传统上所需的时间和资源。

原文链接:https://neon.tech/blog/pgvector-30x-faster-index-build-for-your-vector-embeddings?ref=dailydev

本文由 mdnice 多平台发布

相关文章:

pgvector: 30 倍构建向量嵌入索引

使用 pgvector 为 HNSW 并行构建索引 Postgres 最受欢迎的向量搜索扩展 pgvector 最近实现了并行索引构建功能,这将分层可导航小世界 (HNSW) 索引构建时间显著提高了 30 倍。 祝贺 Andrew Kane 和 pgvector 的贡献者发布此版本,这巩固了 Postgres 作为最…...

GNSS形变监测系统

TH-WY1 GNSS形变监测系统采用扼流圈设计有以下几个优势: 高精度测量:扼流圈是一种高精度的传感器,可以提供非常精确的测量结果。这使得GNSS形变监测系统能够准确地测量结构物的形变变化。 高稳定性:扼流圈设计使得传感器具有良好…...

每天一个数据分析题(四百五十三)- 随机抽样

在进行随机抽样时由于某些原因会产生抽样误差,以下关于抽样误差的说法,正确的是 A. 抽样误差是随机抽样调查中偶然发生的代表性误差 B. 抽样误差的大小同样本单位数成正比关系 C. 简单随机抽样比分层抽样误差大 D. 重复抽样比不重复抽样误差小 数据…...

Python爬虫知识体系-----Selenium

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用二、元素定位三、访问元素信息四、自动化交互五、PhantomJS六、Chrome headless 一、安装和基本使用…...

springboot+webSocket对接chatgpt

webSocket对接参考 话不多说直接上代码 WebSocket package com.student.config;import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springfram…...

【ROS2】 默认的DDS通信中间件替换为Eclipse Cyclone_DDS (DDS配置方法)

ROS2替换中间件为Cyclone_DDS 1.一些介绍:)2.不同DDS的RMW实现3.默认的FastDDS替换为Cyclone DDSi.安装依赖ii.编译 cyclone-dds 4.配置网络 1.一些介绍:) 上一篇我们探讨了ros1和ros2编写launch的区别 【ROS2】launch启动文件编…...

迈向数智金融:机器学习金融科技新纪元的新风采

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…...

Nginx+PHP+CI框架实现,访问静态文件带权限验证

1、访问来源验证配置nginx #文件访问来源校验 如路径:https://ys.test.com/test/api/uploads/test.png #不是该允许域名的将返回403页面 location /test/api/uploads/ {valid_referers ys.test.com ys.test2.com;if ($invalid_referer) {return 403;} }2、拦截访问…...

javascript 第二天

正则表达式 a/正则表达式内容/ a.test(“需要检测的内容”) 焦点事件 onfocus 获得焦点 onblur 失去焦点 他们都是事件,和onclick一样 onchange 内容改变 失去焦点时生效,多了内容检测,如果内容不变不触发,内容改变才触发 onk…...

unity2D游戏开发17战斗精灵

导入 将PlayerFight32x32.png拖Player文件夹进去 设置属性 创建动画剪辑 选中前四帧,右键Create|Animation,将动画命名为player-ire-east 其他几个动画也创建好后,将其拖到Animations|Animations文件夹 选中PlayerController,再点击Animator 创建新的Blend Tree Graph,并重…...

kafka架构+原理+源码

1.安装jdk17 sudo yum -y update sudo wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm sudo yum -y install ./jdk-17_linux-x64_bin.rpm sudo java -version 2.安装kafka How to easily install kafka without zookeeper | Aditya’s Blog 1.…...

实力共鉴!微风企斩获2024年浙江省专精特新中小企业

日前,微风企斩获2024年浙江省专精特新中小企业荣誉,这是继获得“国家高新技术企业”“浙江省科技中小企业”“杭州市雏鹰计划企业”等权威性认证后,微风企荣获的又一重磅殊荣。 “专精特新中小企业”是国家对具有“专业化、精细化、特色化、新…...

C#:枚举及位标志周边知识详解(小白入门)

文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…...

这本vue3编译原理开源电子书,初中级前端竟然都能看懂

前言 众所周知vue提供了很多黑魔法,比如单文件组件(SFC)、指令、宏函数、css scoped等。这些都是vue提供的开箱即用的功能,大家平时用这些黑魔法的时候有没有疑惑过一些疑问呢。 我们每天写的vue代码一般都是写在*.vue文件中,但是浏览器却只…...

小白如何安装WNO(小波神经算子),需要安装python3.8,torch,ptwt,pywt等

下载项目 WNO在github上面的项目地址如下: https://github.com/csccm-iitd/WNO/tree/main 下载下来后,里面的数据集需要用matlab代码生成,也可以到里面提到的google云盘里面下载数据集 安装环境 然后需要安装环境 注意python版本一定要…...

Java HashMap 源码解读笔记(一)--xunznux

文章目录 HashMap介绍实现说明:源码解读静态常量和内部节点类 Node静态工具方法属性字段 Fields未完待续。。。 HashMap 本文主要是用于记录我在阅读Java1.8的 HashMap 源码所做的笔记。对于源码中的注释会进行翻译下来,并且会对其中部分源码进行注释。 这一篇文章…...

“等保测评下的数据加密与隐私保护“

在当今数字化时代,数据已成为企业最宝贵的资产之一。然而,数据泄露、隐私侵犯等事件频发,不仅给企业带来经济损失,更严重损害了公众信任。等保测评,作为国家信息安全等级保护制度的重要组成部分,对数据加密…...

Oat++ 后端实现跨域

这里记录在官方的例子中,加入跨域。Oat Example-CRUD 在官方的例子中,加入跨域。 Oat Example-CRUD 修改AppComponent.hpp文件中的代码,如下: #include "AppComponent.hpp"#include "controller/UserController…...

Three basic starting points to do AI

Computers have been based on memory/storage for so many years. Don’t try to come up with something else. For so many years, AI has been based on fixed precise rules or fuzzy matching rules. Don’t think about coming up with the third one by yourself. Vi…...

等保测评练习卷22

等级保护初级测评师试题22 姓名: 成绩: 一、判断题(10110分) 1. 在应用系统测试中,如果审计是一个独立的功能,那么应用系统应对审计进程进行保…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...