You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效存储加载1亿个768维向量并训练Faiss HNSWPQ索引?

解决1亿768维向量训练HNSWPQ索引的内存问题

针对你的需求,以下是几个实用方案,无需依赖子集训练,即可全量处理1亿向量:

1. 分批次训练+增量添加向量

Faiss的train方法支持分批次输入数据,无需一次性加载所有向量到内存。你可以把1亿向量拆分成多个小文件(比如每个文件存100万向量),分批次喂给索引完成训练,再分批次添加向量。同时降低HNSW的连接数M(默认16),能大幅减少内存占用。

示例代码:

import faiss
import numpy as np
import os

d = 768
num_clusters = 768
bits_per_subq = 8
M = 12  # 降低HNSW节点连接数,平衡内存与索引质量
batch_size = 1000000  # 单批次加载量,可根据内存调整

# 初始化HNSWPQ索引并配置HNSW参数
hnsw_pq_index = faiss.IndexHNSWPQ(d, num_clusters, bits_per_subq)
hnsw_pq_index.hnsw.M = M
hnsw_pq_index.hnsw.efConstruction = 40  # 可选:降低该值进一步减少内存开销

# 分批次训练(假设向量拆分到vector_dir目录下的多个npy文件)
vector_dir = "your_vector_directory"
vector_files = [os.path.join(vector_dir, f) for f in os.listdir(vector_dir) if f.endswith(".npy")]

for file in vector_files:
    batch = np.load(file).astype(np.float32)  # 强制转float32,内存占用减半
    hnsw_pq_index.train(batch)  # 分批次累积训练统计信息

# 分批次添加向量
for file in vector_files:
    batch = np.load(file).astype(np.float32)
    hnsw_pq_index.add(batch)

# 将索引写入磁盘,释放内存
faiss.write_index(hnsw_pq_index, "full_hnsw_pq_index.faiss")

2. 调整量化参数压缩内存

通过调整量化配置,在可接受的精度损失范围内进一步降低内存压力:

  • 降低bits_per_subq:从8降到4,每个子向量的存储空间直接减半,索引内存占用大幅降低。
  • 调整num_clusters:无需与维度d相等,比如设为256或512,训练阶段的内存压力会更小,且不影响全量训练的有效性。

3. 利用GPU加速(有硬件条件时)

Faiss的GPU版本可借助显存与CPU内存的交互,分批次处理大量向量,训练速度更快,内存压力更小。你可以将索引转移到GPU,分批次加载向量完成训练和添加,最后转回CPU并写入磁盘。

示例代码片段:

# 初始化GPU资源
res = faiss.StandardGpuResources()
gpu_index = faiss.index_cpu_to_gpu(res, 0, hnsw_pq_index)

# 分批次训练和添加向量(逻辑同CPU版本)
for file in vector_files:
    batch = np.load(file).astype(np.float32)
    gpu_index.train(batch)

for file in vector_files:
    batch = np.load(file).astype(np.float32)
    gpu_index.add(batch)

# 转回CPU并保存索引
hnsw_pq_index = faiss.index_gpu_to_cpu(gpu_index)
faiss.write_index(hnsw_pq_index, "gpu_trained_hnsw_pq.faiss")

关键注意事项

  • 始终使用float32数据类型:Faiss默认采用该类型,相比float64能减少一半内存占用。
  • 拆分向量文件时尽量保证批次分布均匀,避免训练时统计信息出现偏差。
  • 训练完成后立即将索引写入磁盘,释放内存用于后续查询操作。

内容的提问来源于stack exchange,提问作者rafayaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:35:21