Faiss教程:GPU

原文作者:@houkai
轉載自:https://www.cnblogs.com/houkai/p/9316176.html


目錄

Fassi通過CUDA支持GPU,要求3.5以上算力,float16要求CUDA7.5+

通過index_gpu_to_cpu可以將索引從GPU複製到CPU,index_cpu_to_gpu 和 index_cpu_to_gpu_multiple可以從CPU複製到GPU,並支持GpuClonerOptions來調整GPU存儲對象的方式。

GpuIndexFlat, GpuIndexIVFFlat 和 GpuIndexIVFPQ分別是IndexFlat, IndexIVFFlat 和 IndexIVFPQ的GPU實現。它們除了算法需要的參數,還需要一個資源對象GpuResources,來避免無效的數據交互。

GPU下的限制:

  • 都所有索引 k 和nprobe 必須小於1024
  • GpuIndexIVFPQ,每個向量允許字節數:1, 2, 3, 4, 8, 12, 16, 20, 24, 28, 32, 48, 56, 64 和 96。超過56,可以使用 float16 IVFPQ 模式。
  • GpuIndexIVFPQ的預計算表佔用顯存較大,如果有cudaMalloc錯誤,禁止預計算表
  • indices_options = INDICES_CPU,設置倒排文件可以放在CPU
  • StandardGpuResources默認使用18%的GPU顯存,並動態調整
  • add和search最好再batch的形式進行,見示例
  • I/O操作不支持GPU

benchs/bench_gpu_sift1m.py 下是Python的GPU使用示例

使用多卡
可以複製數據到多個GPU,分開查詢IndexProxy;也可以通過IndexShards分割數據到多個GPU。

GPU在單卡下是CPU的5-10倍,多卡和單卡相比基本是線性的提升:8個卡可以提升6-7倍。推薦支持batch查詢,且當最近鄰k值很大時性能也會受影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章