添加索引创建判断
在创建索引的过程中,Milvus经常出现程序已进入下一阶段,但索引仍在后台创建的情况。当索引创建时间较长时,程序可能会开始查询,而此时索引创建仍在后台占用大量CPU资源,导致不完整的索引和资源受限,进而使得召回率和QPS结果都很低。
为了尽量避免这种情况,需要在整体流程的源码中加入一些判断,确保索引创建完成后再进入下一阶段。
- 打开module.py文件。
假设ann-benchmarks-main文件夹路径在“/data/milvus”目录下。
1
vim /data/milvus/ann-benchmarks-main/ann_benchmarks/algorithms/milvus/module.py
- 引入时间相关文件,方便打印出相关阶段进行的时间。
1
from datetime import datetime
- 修改create_index函数。
- 删除以下对应的源码。
1 2 3 4 5 6
index = self.collection.index(index_name = "vector_index") index_progress = utility.index_building_progress( collection_name = self.collection_name, index_name = "vector_index" ) print(f"[Milvus] Create index {index.to_dict()} {index_progress} for collection {self.collection_name} successfully!!!")
- 在函数最后添加睡眠时间,保证准备数据时间的充分。
1
sleep(300)
- 删除以下对应的源码。
- 修改fit函数。
在self.create_index()语句后面添加while循环,当满足条件才进入下一个阶段,否则进行一段时间的睡眠之后继续判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
self.create_index() index = self.collection.index(index_name = "vector_index") while True: index_progress = utility.index_building_progress( collection_name = self.collection_name, index_name = "vector_index" ) if index_progress["total_rows"] == index_progress["indexed_rows"] and index_progress["pending_index_rows"] == 0: break sleep(300) print(f"[Milvus] Create index {index.to_dict()} {index_progress} for collection {self.collection_name} successfully!!!") print(f"{datetime.now()} [Milvus-sync] utility.index_building_progress successfully!!!") self.load_collection()
父主题: 运行测试