作者:Simon

Cooper
bfloat16,可以将你的向量数据存储减半。
从向量搜索到强大的
REST
notebooks,尝试一些新的东西。
你也可以现在就开始你的
free
bfloat16。
这有可能将你的向量数据存储减半,并且在大多数使用场景下,对召回率和运行时性能的影响都非常小。
Dense_vector9.3
浮点数。
我们在用于索引的任何量化和/或分层可导航小世界(
HNSW
)图之上存储原始向量,而原始向量占据了向量索引所需磁盘空间的绝大部分。
如果你的向量是浮点数,那么在
9.3
4kB。
当然,还有其他可用的浮点大小:
IEEE-754
3.4x10^38,并且在两者之间进行转换需要多次算术运算。
作为一种替代方案,许多机器学习(machine
learning
来实现,从而保留符号位和指数位不变。
这在不相应降低取值范围的情况下,有效降低了浮点值的精度。
从
float32
值进行一次简单的按位截断,并通过少量处理来实现正确的舍入。
Wikipedia
Elasticsearch9.3
bfloat16。
在内存中,它仍然会将每个向量值处理为
4-byte
的支持。
当将向量数据写入磁盘时,它会简单地将每个
float32
float32。
这实际上将你的向量索引大小减半,因为每个值使用
bytes
在执行必要的转换过程中可能会有一些小的性能开销,但这通常会被
I/O
现在只需要读取一半的数据。
而且对于大多数数据集来说,对搜索召回率的影响是最小的。
作为一个示例,这是在我们的
dense_vector
向量。
这些向量会以与你原始源数据相同的精度持久化到磁盘,从而立即将你的数据存储需求减半。
如果你的输入向量是
4-byte
精度,丢弃小数部分中最低有效的比特。
这意味着你从
Elasticsearch
取回的向量值将不会与最初索引时的值完全相同,因此如果你需要保持
float32
上,你可以在任何新创建的索引中,为所有
dense_vector
bfloat16。
原文:https://www.elastic.co/search-labs/blog/bfloat16-vector-support-elasticsearch


