Итак, размер необработанных векторов составляет 2M * 512 * 4 = 4 ГБ.
Коллекция отображено в памяти. У меня есть три коллекции с индексами FLAT, IVF_FLAT и HNSW для одного векторного поля в каждой коллекции.
Простая загрузка коллекции требует 4 ГБ памяти, несмотря на то, что она отображается в памяти.
Запрос после загрузки занимает до 5–6 ГБ памяти, несмотря на отображение в памяти.
Освобождение коллекции очищает память, поэтому очевидно, что данные находятся в диск.
Я установил для queryNode.mmap.mmapEnabled значение true в файле Values.yaml.
Код: Выделить всё
index_type, params = 'FLAT', {}
# index_type, params = 'IVF_FLAT', {'nlist': 2000}
# index_type, params = 'HNSW', {'M': 32, 'efConstruction': 200}
# Define a collection schema
eid_field = FieldSchema(name="eid", dtype=DataType.INT64, is_primary=True, description="embedding id")
embedding_field = FieldSchema(name="content_embedding", dtype=DataType.FLOAT_VECTOR, dim=512, description="content embedding")
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[eid_field, embedding_field], auto_id=False, enable_dynamic_field=True, description=f"{index_type} collection")
# Define index parameters
index_params = client.prepare_index_params()
index_params.add_index(
field_name="eid",
index_type="STL_SORT"
)
index_params.add_index(
field_name="content_embedding",
index_type=index_type,
metric_type="L2",
params=params
)
collection_name = f"benchmarking_{index_type}"
params_str = '_'.join([f"{k}_{v}" for k,v in sorted(params.items())])
if len(params_str)>0:
collection_name += f"_{params_str}"
if not client.has_collection(collection_name=collection_name):
client.create_collection(
collection_name=collection_name,
dimension=512, # The vectors we will use in this demo has 512 dimensions
schema=schema, # The collection schema we defined above
index_params=index_params,
properties={'mmap.enabled': True}
)
Подробнее здесь: https://stackoverflow.com/questions/791 ... mory-usage
Мобильная версия