3. mcVS介绍
3.1. 向量数据
人工智能算法可以将物理世界的人/物/场景所产生的各种非结构化数据(如语音、图片、视频、语言文字、行为等)进行抽象,变成多维度的向量。 这些向量如同数学空间中的坐标,标识了各个实体和实体关系。非结构化检索则是对这些生成的向量进行搜索,从而找到对应实体或者近似实体的过程。
图 3.1 向量索引
3.2. 向量索引
3.2.1. 支持GPU加速的索引
mcVS继承了cuVS向量索引在GPU上的实现,在MXMACA上提供了多种向量索引,包括:Brute Force、IVFFlat、IVFPQ和CAGRA。
3.2.2. 选择索引的建议
选择向量索引时需要综合考虑数据集规模、硬件资源、精度要求和性能需求等因素:
* 对于小规模数据集,直接使用Brute Force暴力搜索最为简单高效,能保证100%召回率且无需调参;
* 中等规模数据集则可以推荐使用IVFFlat,通过调整聚类数量 n_list 和探测数量 n_probe 来平衡搜索速度和召回率;
* 当内存受限且需要处理大规模数据时,IVFPQ通过乘积量化大幅压缩内存占用,但需注意有损压缩带来的精度损失,可通过精炼重排策略弥补;
实际应用中,建议根据具体场景先在小数据集上测试不同索引的表现,再结合实际业务指标(延迟要求、内存限制、召回率目标)做出最终选择。
3.3. 向量间的距离
mcVS支持多种距离度量,并提供 pairwise_distance 方法来计算两个向量间的距离。
提供的距离度量如下:
Euclidean: 欧氏距离,空间直线距离
Cityblock: 曼哈顿/街区距离
Chebyshev: 切比雪夫距离,最大坐标差
Canberrac: 堪培拉距离
Correlationc: 皮尔逊相关系数距离
Hamming: 汉明距离,不同位数的比例
JensenShannon: JS散度,概率分布对称距离
RussellRao: 罗素-拉奥距离
Cosine: 余弦距离
Minkowski: 平方欧氏距离
SqEuclidean: 平方欧氏距离
InnerProduct: 内积距离
mcVS计算两个向量间的距离示例:
import cupy as cp
from cuvs.distance import pairwise_distance
n_samples = 5000
n_features = 50
in1 = cp.random.random_sample((n_samples, n_features),
dtype=cp.float32)
in2 = cp.random.random_sample((n_samples, n_features),
dtype=cp.float32)
output = pairwise_distance(in1, in2, metric="euclidean")