下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

从Faiss 1.7.1版本升级到Faiss 1.7.4

1.7.1版本的Faiss依赖的cmake为3.17及以后版本,而Faiss1.7.4依赖的cmake版本为3.23.1及以后版本,因此将Faiss从1.7.1版本升级到1.7.4版本之前,需要先升级cmake版本。

安装Faiss1.7.4前,请先卸载旧版本Faiss,再参考9.1.3-Faiss安装参考完成Faiss的安装。若之前Faiss安装在指定目录,直接删除该文件夹即可。若未指定目录,默认安装在/usr/local路径下,请删除以下文件以及文件夹。

sudo rm -f /usr/local/lib/libfaiss.so 
sudo rm -rf /usr/local/include/faiss/
sudo rm -rf /usr/local/share/faiss/

若编译旧版本faiss时安装了静态库, 请把静态库也删除:

sudo rm -f /usr/local/lib/libfaiss.a

注意事项

  1. 由于faiss1.7.4内部idx_t类型所属命名空间变动,为与faiss1.7.4保持一致,接口中涉及类型为faiss::Index::idx_t的参数全部改为faiss::idx_t。
  2. 由于faiss1.7.4内部头文件变动,涉及使用IDSelector类型的函数(主要涉及remove_ids函数)需要新增头文件 #include <faiss/impl/IDSelector.h>。
  3. 在faiss1.7.4的Flat检索中,保存底库数据的变量由faiss1.7.1的std::vector<float> xb修改为fiass1.7.4的std::vector<uint8_t> codes。AscendIndexFlat通过getBase接口获取到的特征向量数据仍可存入float类型的数组中,而对cpu侧(开源faiss)的索引来讲,faiss1.7.4使用数据类型为uint8_t的codes向量存入数据,若需将数据存入float数据类型的向量,可以通过faiss的sa_decode函数进行转换。
    // AscendIndexFlat获取底库数据示例
    std::vector<float> xbAscend;// xbAsend用于储存所有device上存储的底库特征向量
            for (auto deviceId : conf.deviceList) {
                …
    // base向量储存AscendIndexFlat在deviceId上存储的底库特征向量
                std::vector<float> base(size * dim); 
                ascendindex.getBase(deviceId, (char *)base.data());
                xbAsend.insert(xbAsend.end(), base.begin(), base.end());
                …
            }
            // cpu侧(开源faiss)Index获取底库数据示例
    std::vector<float> faissXb(dim * ntotal); //构建 faissxb向量
    //使用fiass的sa_decode函数,将cpuIndex.codes的数据存入faissXb
    cpuIndex.sa_decode(static_cast<faiss::idx_t>(ntotal), cpuIndex.codes.data(), faissXb.data());

    如果升级Faiss后,IVFSQ算法train和add接口性能下降,可参考升级Faiss后,IVFSQ算法train和add接口性能下降解决。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词