Chroma 教程

HNSW 参数全解

🎉摘要:详解HNSW支持的参数及默认值,重点说明space、ef_construction、max_neighbors建库后不可修改,ef_search、num_threads等可随时调整,并提供ChromaDB修改ef_search的代码示例。

前面已经了解了 hnsw 参数是对集合进行配置,下面介绍 HNSW 支持那些参数,那些参数是不能被修改的,哪些能被修改。

注意,下面完整列表是从 chromadb.api.collection_configuration 的源码里翻出来的,如下图:

每个参数的意思如下:

参数默认值可调说明
space"l2"仅建库时距离度量:l2 / cosine / ip
ef_construction100仅建库时建索引时的候选集大小
max_neighbors16仅建库时每个节点最多连多少边(常说的 M)
ef_search100可随时改查询时的候选集大小,最重要的调优旋钮
num_threadsCPU 核数可随时改建索引的并发线程数
batch_size100可随时改索引同步时的批处理大小
sync_threshold1000可随时改WAL 攒到多少条刷一次索引
resize_factor1.2可随时改索引扩容时的一次性放大倍数

注意哦,【可调】列是重点:space、ef_construction、max_neighbors 这三个决定索引结构的参数,建完之后改不了。改了对已有的索引不生效,想改只能重建集合。

其余的随时能改,例如:

import chromadb

client = chromadb.EphemeralClient()
# 上文用到的定义,直接搬过来,保证这段能独立跑
col = client.create_collection(
    name="kb_demo",
    embedding_function=None,
    configuration={
        "hnsw": {
            "space": "cosine",
            "ef_construction": 200,
            "ef_search": 100,
            "max_neighbors": 32,
        }
    },
)

print(f"修改前:{col.configuration["hnsw"]["ef_search"]}") # 修改前:100

# 修改 ef_search 参数
col.modify(configuration={
    "hnsw": {
        "ef_search": 200
    }
})

print(f"修改后:{col.configuration["hnsw"]["ef_search"]}") # 修改后:200


说说我的看法
全部评论()
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号