cuvs

cuvs

高性能GPU向量搜索与聚类框架

cuVS是一个开源的GPU向量搜索和聚类框架,专注于提供高性能的近似最近邻搜索和聚类功能。它支持C、C++、Python和Rust等多种编程语言,实现了CAGRA等先进算法。开发者可以直接使用cuVS,也可将其集成到其他系统中,从而在向量相似度搜索和聚类任务中充分利用GPU加速能力。

cuVSGPU向量搜索聚类算法RAPIDSGithub开源项目

<div align="left"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/5e553fe1-0574-4870-9f9c-f8fea5811283.png" width="90px"/> cuVS: GPU上的向量搜索和聚类</div>

[!note] cuVS是一个新的库,主要源于RAPIDS RAFT数据挖掘原语库中的近似最近邻和聚类算法。RAPIDS RAFT目前包含了cuVS中最全面的近似最近邻和聚类算法版本。我们正在将算法从RAFT迁移到cuVS,但如果您不确定使用哪个,请考虑以下几点:

  1. RAFT为所有近似最近邻和聚类算法提供C++和Python API。
  2. cuVS对不同语言提供越来越多的支持,包括C、C++、Python和Rust。我们将在未来为cuVS添加更多语言支持,但不会改进RAFT的语言支持。
  3. 一旦RAFT的所有近似最近邻和聚类算法都迁移到cuVS,RAFT的API将被弃用并最终完全移除。移除后,RAFT将成为一个轻量级的仅头文件库。在此期间,如果不需要额外的语言支持,使用RAFT也没有问题。

目录

  1. 有用资源
  2. 什么是cuVS?
  3. 安装cuVS
  4. 开始使用
  5. 贡献
  6. 参考文献

有用资源

什么是cuVS?

cuVS包含了几种在GPU上运行近似最近邻和聚类的最先进算法实现。它可以直接使用,也可以通过集成了它的各种数据库和其他库使用。cuVS的主要目标是简化GPU在向量相似度搜索和聚类中的使用。

安装cuVS

cuVS提供了可以通过conda安装的预构建包。cuVS支持的不同语言有不同的包:

PythonC/C++
cuvslibcuvs, libcuvs-static

稳定版本

建议使用mamba来安装所需的包。以下命令将安装Python包。您可以用上表中的任何包替换cuvs

mamba install -c conda-forge -c nvidia -c rapidsai cuvs

每日构建版本

如果安装尚未发布的版本,可以将rapidsai通道替换为rapidsai-nightly

mamba install -c conda-forge -c nvidia -c rapidsai-nightly cuvs=24.10

有关安装cuVS和从源代码构建的更多信息,请参阅构建和安装指南

开始使用

以下代码片段为CAGRA算法训练一个近似最近邻索引。

Python API

from cuvs.neighbors import cagra dataset = load_data() index_params = cagra.IndexParams() index = cagra.build(build_params, dataset)

C++ API

#include <cuvs/neighbors/cagra.hpp> using namespace cuvs::neighbors; raft::device_matrix_view<float> dataset = load_dataset(); raft::device_resources res; cagra::index_params index_params; auto index = cagra::build(res, index_params, dataset);

有关C++ API的更多示例,请参阅代码库中的cpp/examples目录。

C API

#include <cuvs/neighbors/cagra.h> cuvsResources_t res; cuvsCagraIndexParams_t index_params; cuvsCagraIndex_t index; DLManagedTensor *dataset; load_dataset(dataset); cuvsResourcesCreate(&res); cuvsCagraIndexParamsCreate(&index_params); cuvsCagraIndexCreate(&index); cuvsCagraBuild(res, index_params, dataset, index); cuvsCagraIndexDestroy(index); cuvsCagraIndexParamsDestroy(index_params); cuvsResourcesDestroy(res);

Rust API

use cuvs::cagra::{Index, IndexParams, SearchParams}; use cuvs::{ManagedTensor, Resources, Result}; use ndarray::s; use ndarray_rand::rand_distr::Uniform; use ndarray_rand::RandomExt; /// 展示如何使用CAGRA索引和搜索数据的示例 fn cagra_example() -> Result<()> { let res = Resources::new()?; // 创建一个新的随机数据集进行索引 let n_datapoints = 65536; let n_features = 512; let dataset = ndarray::Array::<f32, _>::random((n_datapoints, n_features), Uniform::new(0., 1.0)); // 构建cagra索引 let build_params = IndexParams::new()?; let index = Index::build(&res, &build_params, &dataset)?; println!( "将{}x{}个数据点索引到cagra索引中", n_datapoints, n_features ); // 使用数据集中的前4个点作为查询:将测试我们是否能够将它们作为自己的最近邻找回 let n_queries = 4; let queries = dataset.slice(s![0..n_queries, ..]); let k = 10; // CAGRA搜索API要求查询和输出在设备内存上 // 复制查询数据,并为距离/邻居输出分配新的设备内存 let queries = ManagedTensor::from(&queries).to_device(&res)?; let mut neighbors_host = ndarray::Array::<u32, _>::zeros((n_queries, k)); let neighbors = ManagedTensor::from(&neighbors_host).to_device(&res)?;

let mut distances_host = ndarray::Array::<f32, _>::zeros((n_queries, k)); let distances = ManagedTensor::from(&distances_host).to_device(&res)?;

let search_params = SearchParams::new()?;

index.search(&res, &search_params, &queries, &neighbors, &distances)?;

// 复制回主机内存 distances.to_host(&res, &mut distances_host)?; neighbors.to_host(&res, &mut neighbors_host)?;

// 最近邻应该是它们自己,因为查询来自数据集 println!("邻居 {:?}", neighbors_host); println!("距离 {:?}", distances_host); Ok(()) }


## 贡献

如果你有兴趣为cuVS库做出贡献,请阅读我们的[贡献指南](docs/source/contributing.md)。有关开发者指南、工作流程和原则的详细信息,请参阅[开发者指南](docs/source/developer_guide.md)。

## 参考文献

在引用cuVS时,请考虑引用此Github仓库。
```bibtex
@misc{rapidsai,
  title={Rapidsai/cuVS: GPU上的向量搜索和聚类。},
  url={https://github.com/rapidsai/cuvs},
  journal={GitHub},
  publisher={Nvidia RAPIDS},
  author={Rapidsai},
  year={2024}
}

如果引用CAGRA,请考虑以下bibtex:

@misc{ootomo2023cagra, title={CAGRA:用于GPU的高度并行图构建和近似最近邻搜索}, author={Hiroyuki Ootomo and Akira Naruse and Corey Nolet and Ray Wang and Tamas Feher and Yong Wang}, year={2023}, eprint={2308.15136}, archivePrefix={arXiv}, primaryClass={cs.DS} }

如果引用k-选择例程,请考虑以下bibtex:

@proceedings{10.1145/3581784, title = {SC '23:高性能计算、网络、存储和分析国际会议论文集}, year = {2023}, isbn = {9798400701092}, publisher = {美国计算机协会}, address = {纽约,纽约,美国}, abstract = {始于1988年,SC会议已成为学术界、产业界和政府研究人员和从业者每年分享信息并促进合作以推进高性能计算(HPC)、网络、存储和分析最新技术的重要聚会。}, location = {, 科罗拉多州丹佛, 美国, } }

如果引用最近邻下降API,请考虑以下bibtex:

@inproceedings{10.1145/3459637.3482344, author = {Wang, Hui and Zhao, Wan-Lei and Zeng, Xiangxiang and Yang, Jianye}, title = {通过基于GPU的NN-Descent快速构建K-NN图}, year = {2021}, isbn = {9781450384469}, publisher = {美国计算机协会}, address = {纽约,纽约,美国}, url = {https://doi.org/10.1145/3459637.3482344}, doi = {10.1145/3459637.3482344}, abstract = {NN-Descent是一种经典的k-NN图构建方法。由于其效率和通用性,它在机器学习、计算机视觉和信息检索任务中仍被广泛使用。然而,当前的设计仅在CPU上表现良好。在本文中,NN-Descent被重新设计以适应GPU架构。提出了一种称为选择性更新的新图更新策略。它显著减少了GPU核心和GPU全局内存之间的数据交换,这是GPU计算架构下的处理瓶颈。这种重新设计充分利用了GPU硬件的并行性。同时,NN-Descent的通用性和简单性得到了很好的保留。此外,还提出了一种在GPU上高效合并k-NN图的程序。它使得构建高质量的超出GPU内存数据集的k-NN图变得可行。我们的方法比单线程NN-Descent快100-250倍,比现有的基于GPU的方法快2.5-5倍,这是我们在百万级和十亿级数据集上测试的结果。}, booktitle = {第30届ACM国际信息与知识管理会议论文集}, pages = {1929–1938}, numpages = {10}, keywords = {高维, nn-descent, gpu, k-最近邻图}, location = {虚拟活动,昆士兰,澳大利亚}, series = {CIKM '21} }

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多