环境
- 镜像:
seekdb-hipvs-nb-demo_v1.4.0-fix(Radeon Cloud,Radeon PRO W7900 / gfx1100 / RDNA3 / VRAM 49136 MB) - ROCm 7.2.4,16 核 / 55 GB
- seekdb v1.4.0,数据为 128 维随机向量
问题
按题面要求做「索引构建加速」对比:建表 → 灌入 N 条数据 → 执行 create vector index,对这条 DDL 计时,同时用 rocm-smi --showuse 每 0.3 秒采样 GPU 利用率。
lib=vsag 与 lib=cuvs 两组配置,除 lib 外参数完全一致:
create vector index i on t(c2) with (distance=l2, type=hnsw, lib=cuvs);
结果如下(N=50000,128 维):
[vsag n=50000] build 17.11s gpu_build_max 0 gpu_build_avg 0 samples 40
[cuvs n=50000] build 17.09s gpu_build_max 0 gpu_build_avg 0 samples 40
- 耗时相差 0.02 秒(0.1%)
- 建索引全程 40 次采样 GPU 利用率全为 0%
- 显存占用建索引前后均为 26 MB,无变化
其他规模同样吻合:
| N | vsag build | cuvs build | 差异 |
|---|---|---|---|
| 2000 | 1.05 s | 0.72 s | 秒级噪声 |
| 10000 | 2.75 s | 2.74 s | 0.4% |
| 50000 | 17.02 s | 16.92 s | 0.6% |
检索侧也一样(N=50000 表,100 次 approximate 查询,热态):vsag 2248.6 qps / cuvs 2286.5 qps,GPU 利用率同为 0%。
已确认环境是就绪的
| 检查项 | 结果 |
|---|---|
| CUVS_HOME | /opt/hipvs |
| LD_LIBRARY_PATH | /seekdb_workspace/bridge:/opt/hipvs/lib:/opt/rocm/lib |
| /proc/pid/maps 中的桥接库 | 已映射 libseekdb_cuvs_bridge.so、librapids_logger.so、librmm.so 等 20 条 |
| libcuvs 链接数 | 3(>0,GPU 后端已编入) |
| show variables like ‘%vector%’ / ‘%cuvs%’ / ‘%hnsw%’ | 仅 ob_hnsw_ef_search=64、ob_hnsw_extra_info_max_size=1024,无任何 GPU 相关开关 |
另外两个已确认的镜像问题(供官方参考)
- 建表内联 with(…) 在本镜像直接报 1064。官方 seekdb_demo.py L104-108 的写法:
create table t_vsag(c1 int primary key, c2 vector(128), vector index i(c2))
with (distance=l2, type=hnsw, lib=vsag, m=16, ef_construction=200, ef_search=64);
实测 ERROR 1064 (42000),near ‘(distance=l2, type=hnsw, …)’。试过 5 种变体(完整参数 / 只留 3 个 / 只留 2 个 / 只留 lib / algorithm=hnsw)全部 1064。
唯一可用写法是拆成两句:
create table t(c1 int primary key, c2 vector(128));
create vector index i on t(c2) with (distance=l2, type=hnsw, lib=vsag);
推测这也是 notebook 里 setup_data 卡住不返回的原因——建表 DDL 根本执行不通,后续 approximate 查询永远阻塞,而 wait_index_ready 的 timeout 只在 while 条件里判断,无法生效。
- 双 observer 并存会导致建索引线程自旋挂死:sk.start_observer() 换目录会再起一个 observer,与默认的 obs1 并存时,查询 15 分钟不返回,rocm-smi 显示 GPU 100% 但显存读写为 0。杀掉多余 observer 后用原目录重启即可恢复。
想请教
- lib=cuvs 是否还需要额外的启用步骤(环境变量、DDL 参数、type 换成 cagra 之类)?还是说本镜像的 cuVS 通道目前尚未真正接通?
- 若确实需要额外配置,期望的正确用法是什么?我愿意按官方给出的方式重新测一遍并反馈数据。
如果能给一个能复现 GPU 利用率上升的最小示例(哪怕 1000 条数据),我这边可以立刻验证并把数据回帖。