Elasticsearch:圣诞晚餐 BBQ

作者:来自 Elastic Ugo_Sangiorgi

更多阅读:Elasticsearch:圣诞晚餐 BBQ - 图像识别

什么是 VectorFaces?

既然今天是 12 月 24 日,不如来点圣诞晚餐 BBQ?

VectorFaces 是我开发的一个人脸识别演示,用于在会议上展示 Elasticsearch 向量能力。它使用 Elasticsearch BBQ、DIskBBQ、int8 和 int4 量化技术,在 120 万个名人脸部 embedding 中进行搜索。

点击这里,通过 start-local 在单个 CPU(!)上体验在线演示,或者查看 github 仓库自行运行。

该数据集摘自 IMDB-WIKI 数据集,包含来自 IMDb 和 Wikipedia 的名人图片。我们使用 InsightFace 生成了 512 维的 embedding。

该演示并行使用了四种量化方法,在四个不同的索引中分别包含 318,526 个向量 embedding(总计 120 万个向量),让你可以直接比较它们的性能:

  • BBQ(Better Binary Quantization)------ Elasticsearch 的二进制量化方式,在保持高召回率的同时实现显著压缩
  • DiskBBQ ------ 针对磁盘存储优化的 BBQ,在重评分阶段直接从磁盘读取向量
  • int8 ------ 8 位整数量化,将每个维度从 4 字节减少到 1 字节
  • int4 ------ 4 位量化,提供最大压缩率(比 float32 小 8×)

所有量化都会带来一定的准确性损失。实际中,int8 通常几乎不需要重评分int4 往往受益于 1.5×--2× 的过采样,而 BBQ 通常需要 3×--5× 的过采样才能获得最佳召回率。每种方法在准确性、速度、内存占用和存储之间都有不同的权衡,你可以通过调整参数和过采样来验证这一点。

在 Settings 中,你可以试验这些参数以平衡速度和准确性,并选择在查询时要考虑哪些索引:

  • size:从 Elasticsearch 返回的结果数量。必须 ≤ k。
  • k:在所有 shard 上全局返回的最近邻数量。最终的 top k 结果会从所有 shard 合并而来。
  • num_candidates :在选择 top k 之前,每个 shard 收集的近似邻居数量。值越高,召回率和准确性越好,但会增加延迟。
    • 这是用于优化延迟 / 召回权衡的主要调节参数。
    • 对于量化索引,增加 num_candidates 等同于对搜索空间进行过采样,有助于恢复量化过程中损失的准确性。

在更改这些参数后,注意延迟和相关性是如何变化的。在右下角,框中会显示 top 结果以及两个最重要步骤的延迟:你的快照(摄像头或图片)的 embedding 生成,以及 Elasticsearch ------ 它会显示类似 " Elasticsearch: 50ms "。

分数范围是 0 到 1,或者 0% 到 100% 的相似度,这样更容易理解。对于这个数据集,匹配度高于 0.75 可以认为是正匹配,你可以自己测试。

另一个值得关注的点是每个索引使用了多少内存和磁盘,我们可以使用 Elasticsearch _stats API,并在 Kibana 中发出这些请求:

复制代码
GET faces-bbq_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

GET faces-disk_bbq-10.15/_stats?filter_path=*.primaries.dense_vector

GET faces-int8_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

GET faces-int4_hnsw-10.15/_stats?filter_path=*.primaries.dense_vector

更改更多参数

虽然 k 和 num_candidates 可以在查询时修改,但一些量化技术还有可以调整的特殊设置。可以在这里查看完整的设置列表,其中一些只适用于索引阶段(例如 m、ef_construction),这需要重新索引,但也有一些可以在查询阶段使用。

也许最重要的一个是 oversample。它控制使用原始 float 向量进行重评分的候选数量。当 oversample: 3.0 时,搜索会先使用量化向量在每个 shard 上检索 num_candidates,然后在返回最终 top k 结果之前,用原始向量对 top k * oversample 个候选进行重评分。值越高,准确性越好,但会带来额外的计算开销。

对于 BBQ,我们可以在索引 mapping 中修改它:

复制代码
PUT faces-bbq_hnsw-10.15/_mapping
{
  "properties": {
    "face_embeddings": {
      "type": "dense_vector",
      "dims": 512,
      "index": true,
      "similarity": "cosine",
      "index_options": {
        "type": "bbq_hnsw",
        "m": 16,
        "ef_construction": 100,
        "rescore_vector": {
          "oversample": 3
        }
      }
    }
  }
}

对于 DiskBBQ,我们可以修改 rescore_vector.oversample,以及 default_visit_percentage,它控制搜索阶段访问的簇百分比。较低的值通过访问更少的簇来以速度换取准确性。

复制代码
PUT faces-disk_bbq-10.15/_mapping
{
    "properties": {
        "face_embeddings": {
          "type": "dense_vector",
          "dims": 512,
          "index": true,
          "similarity": "cosine",
          "index_options": {
            "type": "bbq_disk",
            "cluster_size": 384,
            "default_visit_percentage": 0,
            "rescore_vector": {
              "oversample": 3
            }
          }
        }
    }
}

同样,在更改这些参数后,注意延迟和相关性的变化。

下一步

查看完整文档,了解如何在你自己的基础设施上索引和运行此演示的设置说明。

圣诞快乐,祝大家 BBQ 开心!

原文:https://discuss.elastic.co/t/dec-24th-2025-en-bbq-for-christmas-dinner/384022

相关推荐
晚霞的不甘11 小时前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源
互联网Ai好者11 小时前
MiyoAI数参首发体验——不止于监控,更是你的智能决策参谋
人工智能
island131411 小时前
CANN HIXL 通信库深度解析:单边点对点数据传输、异步模型与异构设备间显存直接访问
人工智能·深度学习·神经网络
初恋叫萱萱11 小时前
CANN 生态中的图优化引擎:深入 `ge` 项目实现模型自动调优
人工智能
不爱学英文的码字机器11 小时前
深度解读CANN生态核心仓库——catlass,打造高效可扩展的分类器技术底座
人工智能·cann
Kiyra11 小时前
作为后端开发你不得不知的 AI 知识——RAG
人工智能·语言模型
共享家952711 小时前
Vibe Coding 与 LangChain、LangGraph 的协同进化
人工智能
dvlinker11 小时前
2026远程桌面安全白皮书:ToDesk/TeamViewer/向日葵核心安全性与合规性横向测评
人工智能
2的n次方_11 小时前
CANN ascend-transformer-boost 深度解析:针对大模型的高性能融合算子库与算力优化机制
人工智能·深度学习·transformer
熊猫_豆豆11 小时前
YOLOP车道检测
人工智能·python·算法