内容提要
最近发布的Pgvector v0.6.0和Lantern都通过并行构建索引来提高速度。Lantern使用lantern-cli工具,PgVector使用Postgres的并行工作进程。Lantern在多核心创建索引时比Pgvector快36%(m=8)和31%(m=16)。两个扩展都能显著提高索引创建时间。
延伸解读
并行索引构建的机制差异
Lantern 通过外部工具 lantern-cli 实现并行,主线程分块读取数据,由多个工作线程调用 usearch API 追加索引。PgVector 则利用 PostgreSQL 的并行工作进程,需设置 max_parallel_maintenance_workers,每个工作进程扫描部分表并通过共享内存追加元素。两者实现路径不同,但都旨在利用多核加速 HNSW 索引构建。
性能对比:Lantern 仍保持领先
在并行度为 8 的快速基准测试中,使用 sift-128-euclidean 数据集,Lantern 的索引创建时间比 PgVector 快 36%(m=8)和 31%(m=16)。尽管 PgVector 0.6.0 通过并行构建大幅提升了速度,但 Lantern 在多核场景下依然保持优势。这一结果基于特定参数和硬件配置,实际表现可能因环境而异。
并行带来的加速幅度
启用并行后,两个扩展的索引创建时间均有显著下降:Lantern 提升 3.98 至 4.53 倍,PgVector 提升 4.64 至 4.96 倍。这表明并行化对 HNSW 索引构建非常有效,能大幅缩短等待时间。不过,加速比受并行度、数据规模和硬件资源影响,用户需根据自身环境调整参数。
实践注意事项
要启用 PgVector 的并行构建,需设置 max_parallel_maintenance_workers;Lantern 则通过 lantern-cli 自动检测并行度。测试中使用了特定的 PostgreSQL 和 Docker 配置,如 maintenance_work_mem=8GB、cpu_limit=8 等。用户在实际部署时,应确保资源充足,并参考官方文档调整参数,以充分发挥并行优势。
Q&A
Pgvector v0.6.0 和 Lantern 在并行索引构建上有什么不同?
Pgvector v0.6.0 使用 Postgres 的并行工作进程,通过设置 max_parallel_maintenance_workers 激活并行构建;Lantern 使用外部工具 lantern-cli,通过生成 N 个额外线程实现并行。
Lantern 和 Pgvector 在并行索引构建速度上哪个更快?
在多核心创建索引时,Lantern 比 Pgvector 快 36%(m=8)和 31%(m=16)。
如何启用 Pgvector 的并行索引构建?
需要设置 max_parallel_maintenance_workers 参数来激活并行构建。
Lantern 是如何实现并行索引构建的?
Lantern 通过外部工具 lantern-cli 实现并行,它会生成 N 个额外线程(N 由 std::thread::available_parallelism 决定),主线程从基表按 2K 行分块查询数据,通过同步通道发送给工作线程,工作线程调用 usearch API 将数据追加到索引。
并行索引构建对索引创建时间有多大提升?
使用并行后,Lantern 的索引创建时间提升了 3.98 到 4.53 倍,Pgvector 提升了 4.64 到 4.96 倍。
在哪里可以试用 PgVector 0.6.0?
PgVector 0.6.0 已在 Tembo 的 Vector DB Stack 中提供,可以免费试用。