DiskANN数据布局

_mem.index.data:和sift_base.fbin一模一样。0-3字节是总向量数,4-7是每个向量的特征数。后面就是依次放置的每个向量。

_disk.index:是存储的图,但是不光包含图也包含原始向量。前4KB不知道存的是啥。从第0x1000开始存放的是原始向量,存放顺序和 _mem.index.data一致。每个原始向量后紧跟着的是4B的整数,代表邻居数。然后就是依序存放的邻居,每个邻居是4B的整形。然后就是下一个向量。存放原始向量的目的是为了遍历图的时候能够获取原始向量进行二次排序,与论文说的一致。然后DiskANN会对所有向量进行4K对齐,一个向量不会横跨两个4K块。所以每个4K块的末尾都会有一些为0的数据。

开头的字段定义在pq_flash_index.cpp中第1045行,对我们没有太大意义。包含了向量数量08-0F,向量维数10-17,pq中心数量18-1F,每个向量占的字节数20-27,每个4K块占包含的向量数量28-2F。文件的总大小48-4F

_pq_compressed.bin:存储的是DiskANN要放在内存中的压缩向量。0-3是向量总数,4-7是每个向量的字节数。后面就依次存放每个向量。至于这些PQ向量的中心在哪,被分成了几段什么的不知道。

_pq_pivots.bin:加载这个文件的代码在pq.cpp的load_pq_centroid_bin函数中。第一个4KB主要表示后面有几个偏移量。

首先从第4096开始读,4096开始的前4个字节是pq_file_num_centroids,并且会判断该值是否是256,这个值应该是代表有接下来有多少个向量。后面4个字节是pq_file_dim,应该是向量的维数。解析该文件的时候会和_pq_compressed.bin结合起来看。至于为什么256个向量就够了,这和PQ的原理有关。PQ压缩把他分为nchunk个类别,那么每个聚类的维数就是(维数/nchunk)。然后每个聚类内部有256个类别,即需要256个聚类中心。结合前两个,存储每个聚类中聚类中心的大小是256*(维数/nchunk)*特征大小。然后所有聚类需要的总大小就是256*(维数/nchunk)*特征大小*nchunk = 256*维数*特征大小 = 256个原始特征的大小。

256正好是2^8,那么PQ压缩的时候应该是每个聚类都最多有256个向量,_pq_compressed.bin存储PQ向量的时候每个聚类就最多只需要1B,也就是为什么不管内存设置为多大,_pq_compressed.bin的大小最多就是(维数*向量数)个字节。

然后第二个偏移量开始表示读取centroid,在pq.cpp的105行。centroid of each dimension。

然后第三个偏移量开始表示读取chunk_offsets,在pq.cpp的124行。表示偏移量,the offset of each chunk, start from 0。

_sample_data.bin_sample_ids.bin:应该是采样的邻居,但是具体用途未知,经过测试和检索过程无关。_data是存放的原始向量,_ids是这些向量对应的id。这两个文件都是0-3字节表示这个文件包含多少个向量,4-7表示这些向量的维数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内企业更喜欢私有化部署的 6 大原因

今天在 V 站看到一篇题为《为什么国内企业会更倾向于接受私有部署而不是 SaaS?》的帖子,觉得很有启发,这里把网友的观点稍作整理和总结,分享给大家参考。 在技术日益发展的今天,国内企业的软件部署方式似乎呈现出与欧…

【机器学习】机器学习:人工智能中实现自动化决策与精细优化的核心驱动力

🔒文章目录: 💥1.概述 ❤️2.机器学习基本原理 🛤️2.1定义与关键概念 🛣️2.2 机器学习算法 ☔3.自动化决策中的机器学习应用 🚲4.精细优化与机器学习的结合 👊5.挑战与前景 💥1.概述 …

样式表单MIME 类型 “text/plain“ 不是 “text/css“问题处理

样式表单www.*.com/static/js/*.css未载入,因为它的 MIME 类型 "text/plain" 不是 "text/css"。 原因是服务器返回的MIME类型为 "text/plain",而预期应该是 "text/css"。MIME类型是一种标准,用于定…

基于微信小程序+JAVA Springboot 实现的【房屋租赁管理系统】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的房屋租赁管理系统 在本次项目开发中,我们成功构建了一款基于微信小程序的房屋租赁管理系统,旨在通过现代化信息技术提升房屋租赁服务的效率和质量。以下是对本项目的全面总结: 项目背景与目…

js之选项卡制作实例

大家好&#xff0c;今天给大家书写选项卡实例&#xff0c;话不多说&#xff0c;直接上干货 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

nginx中,location匹配规则解析

一.location匹配规则解析 1.默认"/"配置规则 server{listen 90;# /后面在html目录下能够配置就可以直接访问到 location /{root html;index index.html;} }2.精确"="匹配 server{listen 90;#精确匹配只能匹配到"/home/imooc/img/face1.png"这…

Redis-分片集群存储及读取数据详解

文章目录 Redis分片集群是什么&#xff1f;Redis分片集群的存储及读取数据&#xff1f; 更多相关内容可查看 Redis分片集群是什么&#xff1f; Redis分片集群是一种分布式部署方式&#xff0c;通过将数据分散存储在多个Redis节点上&#xff0c;从而提高了系统的性能、扩展性和…

【linux】用sed 命令修改json文件,正则表达式的复杂用法,全部替换或只替换第一次

全部替换比较容易&#xff0c;只替换一次比较难&#xff0c;没有例子可能搞半天都搞不出来&#xff0c;tips: 如果匹配表达式有问题可以使用p这个选项调试。 一、使用正则表达式搜索文件的内容&#xff0c;把所有的匹配项全部替成的新的字符串 有一个文件名叫file.json, 把里面…

19个测试⽤例⽣成的AI⼯具!卷起来!

在不断发展的软件开发领域中&#xff0c;确保应⽤程序的可靠性和功能性⾄关重要。 随着软件系统复杂性的增加&#xff0c;有效测试⽅法的需求也在上升。 传统的测试⽤例⽣成⽅法通常⽆法满⾜快速开发周期和复杂代码库的需求。 随着进⼊⼈⼯智能&#xff08;AI&#xff09;时…

关于索引的整理

一、索引是干嘛的 索引就是用来在数据库中加速数据库查询速度的。就和在《新华字典》中的按拼音或者按笔画查字是一样的&#xff0c;通过缩小查询的范围&#xff0c;用最短的时间搜索到满足条件的记录。 二、常见的索引类型 1.普通索引&#xff08;NORMAL&#xff09; 普通索…

MongoDB聚合运算符:$week

MongoDB聚合运算符&#xff1a;$week 文章目录 MongoDB聚合运算符&#xff1a;$week语法使用举例 $week聚合运算符返回指定日期日期为一年中第几周的数字值为0到53之间。周从周日开始&#xff0c;第1周从一年的第一个周日开始。一年中第一个星期日之前的日期为第0周。这和 str…

爬虫入门经典(七) | 采集淘宝电场相关信息

大家好&#xff0c;我是不温卜火&#xff0c;昵称来源于成语—不温不火&#xff0c;本意是希望自己性情温和。 PS&#xff1a;由于现在越来越多的人未经本人同意直接爬取博主本人文章&#xff0c;博主在此特别声明&#xff1a;未经本人允许&#xff0c;禁止转载&#xff01;&a…

烟罩一体机清洗维护指南:引领绿色餐饮新时代

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在现代餐饮行业&#xff0c;保持厨房环境清洁和空气质量优良已成为餐厅经营的重要部分。烟罩一体机作为高效油烟净化设备&…

java和c++中i = i++编译报错

在C和C中&#xff0c;i i这样的语句是未定义行为&#xff08;Undefined Behavior&#xff09;。这意味着编译器可以根据其实现规范进行任何操作&#xff0c;包括让程序崩溃、产生错误结果或者产生未预期的行为。在这种情况下&#xff0c;i的值在执行i时会被递增&#xff0c;但…

2123 求二叉树的高和宽

描述 以二叉链表为存储结构&#xff0c;分别写出求二叉树高度及宽度的算法&#xff0c;所谓宽度是指二叉树的各层上&#xff0c;具有结点数最多的那一层上的结点总数。 输入 括号表示的二叉树&#xff0c;如: A(B,C) 输出 二叉树的高度和宽度&#xff0c;用空格分隔&#xf…

AI学习指南数学工具篇-PCA基础知识

AI学习指南数学工具篇-PCA基础知识 1. PCA是什么&#xff1f; PCA&#xff0c;即主成分分析&#xff08;Principal Component Analysis&#xff09;&#xff0c;是一种常用的数据降维技术。它通过线性变换将原始数据投影到一个新的坐标系中&#xff0c;旨在找到数据中的“主成…

main.ts中import App from ‘./App.vue‘报错:找不到模块或者相应的类型证明

在src文件夹下创建一个shims-vue.d.ts并输入以下内容&#xff1a; declare module *.vue {import { ComponentOptions } from vueconst componentOptions: ComponentOptionsexport default componentOptions } 参考链接vue3 报错解决&#xff1a;找不到模块或其相应的类型声明…

Galxe已投资Pencils Protocol,投资者阵营正不断扩大

近日&#xff0c;Scroll 生态项目 Penpad 将品牌进一步升级为 Pencils Protocol&#xff0c;全新升级后其不仅对 LaunchPad 平台进行了功能上的升级&#xff0c;同时其也进一步引入了 Staking、Vault 以及 Shop 等玩法&#xff0c;这也让 Pencils Protocol 的叙事方向不再仅限于…

基础之音视频2

01 前言 02 mp 03 mp实例 简易音乐播放器 04 音频 sound-pool 1.作用 播放多个音频&#xff0c;短促音频 2.过程 加载load- 3.示例 模拟手机选铃声 步骤&#xff1a; 创建SoundPool对象&#xff0c;设置相关属性 音频流存入hashmap 播放音频 05 videoview 3gp 体积小 mp4 …

凸优化(Stephen Boyd) 2-4章答案(中文版)

https://www.123pan.com/s/erusjv-4xXed.html提取码:d4UD 由于是机翻&#xff0c;所以有些地方有错误。建议和原文对照阅读。原英文版答案网上很多。