zoukankan      html  css  js  c++  java
  • Faiss教程:GPU

    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值很大时性能也会受影响。

  • 相关阅读:
    PlayMaker 不支持过渡条件
    Unity Inspector 给组件自动关联引用(二)
    C# 重载和默认参数(那种情况下使用更好)
    Unity 开发游戏编写代码的技巧
    C# Conditional特性避免 预处理命令泛滥使用
    在DirectX12中使用Texture
    再探Lua的require
    如何实现水下效果
    n个骰子的点数
    用DirectX12实现Blinn Phong
  • 原文地址:https://www.cnblogs.com/houkai/p/9316176.html
Copyright © 2011-2022 走看看