Page 68 - 《软件学报》2026年第3期
P. 68

周依杰 等: GoVector: I/O-高效的高维向量近邻查询缓存策略                                            1031


                 部排序与页分配, 使得在实际查询过程中, 相似向量更可能被一并加载至同一磁盘页中. 这种布局更贴合第                                2  阶段
                 以相似性为导向的拓展行为, 因此, GoVector 的布局方式有效提升了单次                 I/O  的数据利用率, 使得下一次拓展顶点
                 与当前拓展顶点更大概率位于同一磁盘页中, 从而减少                 I/O  开销并提升查询性能.
                  6   实验分析


                  6.1   实验设置
                  6.1.1    实验环境
                    本文所有实验均在一台高性能服务器上完成, 该服务器配备                    Intel® Xeon® Gold 6248R  处理器  (3.00 GHz, 48
                 核心), 32 GB DDR4  内存 (3 200 MT/s) 以及两块  1.7 TB SSD, 顺序读写带宽最高可达        500 MB/s. 操作系统为
                 Ubuntu 22.04 LTS, 编译器版本为  GCC 11.4.0.
                  6.1.2    实验数据
                                                                                    [8]
                                                                                               [8]
                    实验采用    6  个公开的真实向量数据集 (见表        1), 包括  SIFT [33] 、Text2Img [34] 、DEEP 、Word2Vec 、MSong [8]
                 和  GIST [33] . 这些数据集涵盖图像、文本、音频和词向量等多种类型, 向量维度从                 128  至  960  不等, 已被广泛用于
                 现有  ANNS  系统的性能评估.

                                                      表 1 实验数据集

                             数据集        数据集类型       向量维度        向量数量       查询数量        内容类型
                              SIFT        float       128       1 000 000   10 000      图像
                            Text2Img      float       200       1 000 000    1 000     图文混合
                             DEEP         float       256       1 000 000    1 000      图像
                            Word2Vec      float       300       1 000 000    1 000     词向量
                             MSong        float       420       994 185      1 000      音频
                              GIST        float       960       1 000 000    1 000      图像

                  6.1.3    对比系统及参数设置
                    本文将   GoVector 与当前两种代表性的基于磁盘的近似最近邻搜索系统                  DiskANN  和  Starling  进行对比.
                    DiskANN  是由微软开发的一种基于图的高效磁盘              ANNS  方法, 采用贪婪搜索策略, 从预选的入口顶点出发,
                 沿图的邻接结构逐步逼近查询向量. 为了减少              I/O  开销, DiskANN  在内存中引入了静态缓存机制, 预加载访问频率
                 较高的入口顶点及其若干跳邻居. 本文中对其实验参数设置如下: 缓存顶点数为索引文件总大小的                                1%, 默认执行
                 Top-100  查询, 图中每个顶点的邻居数      R  为  32, 搜索线程数  T  设为  32.
                    Starling  是近年来提出的一种磁盘驻留型索引图系统, 针对分段式数据布局优化了存储与查询路径. 其查询过
                 程中采用块级搜索策略, 以磁盘页为单位加载数据, 有效降低路径长度与                      I/O  频次. 此外, Starling  基于拓扑结构引
                 入重排序算法 (BNF     策略), 使得相邻顶点尽量聚集于同一磁盘页中, 从而提升                I/O  利用率. 在本文实验中默认重排
                 序策略为   BNF, 其余参数设置与      DiskANN  保持一致.
                    GoVector 是本文提出的一种高效的混合缓存策略. 它通过静态与动态缓存相结合的机制, 在不增加内存占用
                 的前提下提升     I/O  命中率与整体查询吞吐量. GoVector 的核心思想是基于向量的相似性对索引进行物理布局优
                 化, 使在查询过程中拓展路径上的相邻顶点尽可能集中在同一磁盘页中, 从而提升局部性 (区别于                              Starling  的拓扑
                 相似性重排序). 实验中设置的参数为: 静态缓存与动态缓存在总缓存顶点数中的比例设为                                2:8, 其余参数与
                 DiskANN  一致.
                  6.2   系统整体表现
                    图  9  展示了不同   ANNS  方法在每秒处理的查询次数 (queries per second, QPS) 与召回率 (Recall) 之间的性能
                 对比. 其中, GoVector-hybrid  表示采用静态与动态缓存机制相结合的              GoVector (静态与动态缓存比例为        2:8),
                 GoVector-dynamic 则表示未使用静态缓存 (即静态缓存顶点数为            0) 的纯动态版本    GoVector.
   63   64   65   66   67   68   69   70   71   72   73