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

百万级数据集下Milvus GPU向量搜索无加速效果的问题排查请求

背景

我有100万条1536维的向量数据,希望通过GPU加速向量查询与搜索。

资源信息

CPU

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 57 bits virtual
CPU(s):                          104
On-line CPU(s) list:             0-103
Thread(s) per core:              2
Core(s) per socket:              26
Socket(s):                       2
NUMA node(s):                    2
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           106
Model name:                      Intel(R) Xeon(R) Gold 5320 CPU @ 2.20GHz
Stepping:                        6
CPU MHz:                         2800.167
BogoMIPS:                        4400.00
Virtualization:                  VT-x

GPU

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.42.02              Driver Version: 555.42.02      CUDA Version: 12.5     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA A100 80GB PCIe          Off |   00000000:17:00.0 Off |                    0 |
| N/A   40C    P0             64W /  300W |       1MiB /  81920MiB |      1%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA A100 80GB PCIe          Off |   00000000:CA:00.0 Off |                    0 |
| N/A   42C    P0             69W /  300W |       1MiB /  81920MiB |      3%      Default |
+-----------------------------------------+------------------------+----------------------+
操作步骤
  1. 启动CPU版Milvus服务:参考官方文档《Run Milvus in Docker》
  2. 启动GPU版Milvus服务:参考官方文档《Run Milvus with GPU Support Using Docker Compose》
  3. 插入数据:基于官方示例hello_milvus.py修改:
    • 数据规模:100万条1536维向量
    • 索引配置:CPU版用IVF_FLAT,nlist=2048;GPU版用GPU_IVF_FLAT,nlist=2048
  4. 搜索测试:使用以下代码执行搜索:
from pymilvus import MilvusClient, DataType
import time
import numpy as np
import string
import random

milvus_uri = ""
collection_name = ""
client = MilvusClient(uri=milvus_uri)
client.load_collection(collection_name)

search_params = {
   "metric_type": "L2",
   "params": {"nprobe": 32},
}
vectors_to_search = [np.random.rand(1536).tolist() ]
start_time = time.time()
result = client.search(
       collection_name=collection_name,
       data=vectors_to_search, 
       filter = filter_expr,
       anns_field="embeddings", 
       search_params=search_params, 
       limit=10, 
       output_fields=["random"],
       consistency_level="Eventually"
   )
end_time = time.time()
print(f"time cost {end_time-start_time}")
  1. 性能测试:通过多进程发起并发搜索请求,分别测试CPU和GPU服务的性能,结果如下:

GPU IVF_FLAT(nprobe=32)

并发数QPS
1681
5594
10546

CPU IVF_FLAT(nprobe=32)

并发数QPS
1680
5609
10580
问题

为何GPU版未实现向量搜索加速效果?请排查上述操作是否存在问题。


排查方向与原因分析

1. GPU资源未被实际利用

从NVIDIA-SMI输出看,GPU显存仅占用1MiB,利用率最高3%,说明Milvus的GPU索引并未真正加载到GPU显存中,搜索过程可能仍在CPU上执行:

  • 检查GPU版Milvus的启动配置:确认docker-compose.yml中是否正确映射GPU设备,是否配置MILVUS_GPU_ENABLED=true,以及指定NVIDIA_VISIBLE_DEVICES=all。
  • 查看Milvus日志:执行client.load_collection后,确认是否有Load GPU index successfully类的成功加载日志。

2. 索引参数未适配GPU特性

当前nlist=2048、nprobe=32的配置未能充分发挥GPU并行计算能力:

  • 100万条数据搭配nlist=2048,每个簇仅约488条向量,GPU并行优势难以体现,建议增大nlist至8192或16384,让簇规模更适配GPU批量计算。
  • nprobe=32探测簇数量过少,GPU算力未被充分调用,可尝试提高到64、128,观察性能变化。

3. 测试场景局限性

你的CPU是104核心的Xeon Gold 5320,低并发场景下多核CPU可轻松处理请求,GPU加速效果在高并发或更大数据量场景才会凸显:

  • 把并发数提升至50、100甚至更高,对比CPU和GPU的QPS差异。
  • 测试单条搜索延迟:GPU单条请求可能因CPU→GPU数据传输开销略慢,但高并发下吞吐量会显著超过CPU。

4. 单条搜索的传输开销抵消GPU优势

每次仅搜索1条向量时,CPU到GPU的数据传输开销占比过高,抵消了GPU计算的优势:

  • 修改测试代码,每次批量传入100条以上向量,减少单次传输的开销占比,观察GPU性能是否提升。

5. Milvus版本与CUDA兼容性问题

确认使用的Milvus版本是否支持CUDA 12.5,部分旧版本对高版本CUDA兼容性不佳,会导致GPU加速失效:

  • 核对官方文档的版本兼容性说明,必要时升级到Milvus最新稳定版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:17:34