milvus坑之不同精度的维度问题

在使用milvus对应的Java的sdk进行插入的时候,Collection创建的vector字段维度是2560,并且在Java实体类内的vector数组打印检查后也是2560长度,但是最后报错说维度不正确
io.milvus.v2.exception.MilvusClientException: io.milvus.exception.ParamException: Incorrect dimension for field 'vector': dimension: 1280 is not equal to field's dimension: 2560
at io.milvus.v2.utils.RpcUtils.retry(RpcUtils.java:145)
at io.milvus.v2.client.MilvusClientV2.insert(MilvusClientV2.java:469)
其中 Incorrect dimension for field 'vector': dimension: 1280 is not equal to field's dimension: 2560 看得我一脸懵逼,前前后后检查了好多次,最后排查出
在向milvus插入数据的时候,会将所有的记录内容转化成字节流,因为定义的变量是float,所以在转换的过程相当于32位,所以在转换的过程中会出现问题
解决方案
方案一
milvus的sdk带有一个Float16Utils用于转化成Bfloat也就是对应的short表示,或者也可以直接转成bytebuffer
Float16Utils.floatToBf16()
方案二
milvus的sdk中定义了向量类比如BFloat16Vec可以直接使用
评论
0 评论