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

Elasticsearch 9.3 增加 bfloat16 向量 支持

作者:Simon Cooper

探索新的 Elasticsearch element_type: bfloat16,可以将你的向量数据存储减半。

从向量搜索到强大的 REST APIs, Elasticsearch 为开发者提供了最全面的搜索工具包。深入探索 Elasticsearch Labs repo 中的示例 notebooks,尝试一些新的东西。你也可以现在就开始你的 free trial,或者在本地运行 Elasticsearch。


Elasticsearch 9.3 带来了多项针对向量数据的重要改进,包括一个新的 element_type: bfloat16。这有可能将你的向量数据存储减半,并且在大多数使用场景下,对召回率和运行时性能的影响都非常小。

Dense_vector 字段中的存储格式

在 9.3 之前, dense_vector 字段支持单比特向量、 1-byte 整数以及 4-byte 浮点数。我们在用于索引的任何量化和/或分层可导航小世界( HNSW )图之上存储原始向量,而原始向量占据了向量索引所需磁盘空间的绝大部分。如果你的向量是浮点数,那么在 9.3 之前的 Elasticsearch 版本中,唯一的选择是每个向量值存储 4 bytes:对于一个 1024 维向量来说,就是 4kB。

当然,还有其他可用的浮点大小: IEEE-754 规定了多种不同长度的浮点格式,包括 Java 的 float 和 double 类型所使用的 4-byte float32 和 8-byte float64。它还定义了一种 float16 格式,每个值只使用 2 bytes。然而,它的最大值只有 65,504,相比之下 4-byte float32 的最大值是 3.4x10^38,并且在两者之间进行转换需要多次算术运算。

作为一种替代方案,许多机器学习(machine learning - ML)应用现在使用 bfloat16,它是对 IEEE-754 float32 的一种修改,只使用 2 bytes。它通过丢弃数值小数部分的最低 2 bytes 来实现,从而保留符号位和指数位不变。这在不相应降低取值范围的情况下,有效降低了浮点值的精度。从 float32 转换为 bfloat16 只是对 float32 值进行一次简单的按位截断,并通过少量处理来实现正确的舍入。

Source: Wikipedia

Elasticsearch 9.3 中的 bfloat16

Elasticsearch 9.3 现在支持将向量元素类型存储为 bfloat16。在内存中,它仍然会将每个向量值处理为 4-byte 的 float32,因为 Java 并没有内置对 bfloat16 的支持。当将向量数据写入磁盘时,它会简单地将每个 float32 值截断并舍入为 2-byte 的 bfloat16,并在将值读入内存时把每个 bfloat16 值零扩展回 float32。

这实际上将你的向量索引大小减半,因为每个值使用 2 bytes 而不是 4 bytes。在读取和写入数据时, Elasticsearch 在执行必要的转换过程中可能会有一些小的性能开销,但这通常会被 I/O 需求的大幅减少所抵消,因为 OS 现在只需要读取一半的数据。而且对于大多数数据集来说,对搜索召回率的影响是最小的。

作为一个示例,这是在我们的 dense_vector 数据集上使用 bfloat16 时的大小差异:

所以,如果你的输入向量已经是 bfloat16 精度,那就太好了! Elasticsearch 接受以 float 值形式以及 Base64 编码向量形式提供的原始 bfloat16 向量。这些向量会以与你原始源数据相同的精度持久化到磁盘,从而立即将你的数据存储需求减半。

如果你的输入向量是 4-byte 精度,你同样可以使用 bfloat16 格式来将索引数据大小减半。 Elasticsearch 会将每个值截断并舍入为 2-byte 精度,丢弃小数部分中最低有效的比特。这意味着你从 Elasticsearch 取回的向量值将不会与最初索引时的值完全相同,因此如果你需要保持 float32 的完整 4-byte 精度,就不要使用 bfloat16。

从 Elasticsearch 9.3 开始,以及在 Elasticsearch Serverless 上,你可以在任何新创建的索引中,为所有 dense_vector 索引类型指定 element_type: bfloat16。如果你希望在现有索引中使用 bfloat16,可以重新索引到一个 element_type: bfloat16 的索引中, Elasticsearch 会自动将你现有的 float 向量转换为 bfloat16。

原文:https://www.elastic.co/search-labs/blog/bfloat16-vector-support-elasticsearch

http://www.jsqmd.com/news/393129/

相关文章:

  • Elasticsearch 用于词形还原的开源 Hebrew 分析器
  • 2026年漯河旧房翻新公司专业度综合评选与深度解析 - 2026年企业推荐榜
  • OpenClaw Skills系统深度解析:分层架构与智能扩展机制
  • 2026漯河全屋定制施工队深度测评与选择指南 - 2026年企业推荐榜
  • Java Web Web教师个人成果管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 【Linux系统编程】深入 Ext2 块组内部:inode、数据块与目录的底层工作机制
  • mdev vs udev:嵌入式与桌面Linux的设备管理对比
  • SpringBoot+Vue 精品水果线上销售网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 【2025最新】基于SpringBoot+Vue的Web手工艺品销售系统管理系统源码+MyBatis+MySQL
  • 前后端分离MES生产制造执行系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 2026江苏健身器材选型指南:如何甄选优质多功能源头厂家 - 2026年企业推荐榜
  • 深度解析 Python RNN:从理论推导到实战应用的全方位指南
  • 2026年建筑铝材厂家综合评估:这三家值得关注 - 2026年企业推荐榜
  • 2026春晚魔术表演更新版(更新了result-z小于210万的情况)
  • 2026春晚魔术C++代码(计算器的代码)
  • [pta]L2-040 哲哲打游戏 c++
  • 2024年徐州全屋定制装修设计团队综合盘点与选型指南 - 2026年企业推荐榜
  • Java Web 无人超市管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 深度解析:2026年襄城区值得信赖的装修平台 - 2026年企业推荐榜
  • 精品水果线上销售网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 2026年风干鸭供货商综合评估与选择指南 - 2026年企业推荐榜
  • SpringBoot+Vue 安康学院新型冠状病毒肺炎疫情防控专题网站管理平台源码【适合毕设/课设/学习】Java+MySQL
  • SpringBoot+Vue 无人超市管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 2026年广东艺术漆品牌综合实力TOP5盘点 - 2026年企业推荐榜
  • 2026年临沂干洗店铺选择指南:五大品牌综合实力解析 - 2026年企业推荐榜
  • 2026年广东专业艺术漆服务商综合实力TOP5深度解析 - 2026年企业推荐榜
  • 2026年精选:六家顶尖外墙仿石漆团队深度解析 - 2026年企业推荐榜
  • 2026年Q1临泉地区统艺仿石漆专业团队综合评测与推荐 - 2026年企业推荐榜
  • 2026年荆门风干鸡优质厂家深度评估与精选推荐 - 2026年企业推荐榜
  • 临泉县外墙喷砂施工方综合评测:2026年专业指南 - 2026年企业推荐榜