raft

NVIDIAApache-2.0活跃维护

提供 CUDA 加速的机器学习与信息检索基础算法和原语,方便快速搭建高性能应用,涵盖最近邻搜索、聚类、线性代数等常用模块。

RAFT contains fundamental widely-used algorithms and primitives for machine learning and information retrieval. The algorithms are CUDA-accelerated and form building blocks for more easily writing high performance applications.

v26.10.00发布于 2026-10-19 16:36 UTC1,052star256fork同步于 2026-11-10 11:51 UTC

怎么上手

由 README 提炼,执行前请确认
mamba install -c rapidsai -c conda-forge raft-dask pylibraft cuda-version=12.9
pip install pylibraft-cu12
硬件要求按 README 说明

README 未说明具体显存要求;算法为 CUDA 加速,需 NVIDIA GPU 及对应 CUDA 版本(示例覆盖 CUDA 12 与 13)。

需要 CUDA多卡 / 张量并行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

NVIDIA 的 CUDA 加速算法原语库,帮你快速搭建高性能机器学习与检索应用

提供 CUDA 加速的机器学习与信息检索基础算法和原语,方便快速搭建高性能应用,涵盖最近邻搜索、聚类、线性代数等常用模块。

核心能力

  • 提供稠密与稀疏线性代数、分解、SVD 等 CUDA 加速原语
  • 以 header-only C++ 模板库形式复用,可选共享库加快编译
  • 提供 pylibraft 轻量 Python 封装,兼容 __cuda_array_interface__
  • raft-dask 支持多节点多 GPU 分布式算法部署
  • 用 mdspan/mdarray 统一管理主机与设备多维数组

容易踩的坑

conda 安装需按 CUDA 版本选择 cuda-version,装错版本会不匹配;pip 包为实验性且静态编译,C++ 头文件不会随包提供;RAFT 面向底层原语开发,不适合数据科学家直接做探索分析。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v26.10.00
  1. v26.10.00最新正式版2026-10-19 · 2026-10-19 16:36 UTC

    What's Changed

    🚨 Breaking Changes

    🐛 Bug Fixes

    📖 Documentation

    🚀 New Features

    🛠️ Improvements

  2. v26.08.002026-08-05 · 2026-08-05 18:53 UTC
    查看更新说明

    What's Changed

    🚨 Breaking Changes

    🐛 Bug Fixes

    📖 Documentation

    🚀 New Features

    🛠️ Improvements

  3. v26.06.002026-06-03 · 2026-06-03 23:54 UTC
    查看更新说明

    What's Changed

    🚨 Breaking Changes

    🐛 Bug Fixes

    📖 Documentation

    🚀 New Features

    🛠️ Improvements

    New Contributors

    Full Changelog: https://github.com/rapidsai/raft/compare/v26.06.00a...v26.06.00

  4. v26.04.002026-04-08 · 2026-04-08 18:53 UTC
    查看更新说明

    What's Changed

    🚨 Breaking Changes

    🐛 Bug Fixes

    📖 Documentation

    🚀 New Features

    🛠️ Improvements

  5. v26.02.002026-02-04 · 2026-02-04 21:15 UTC
    查看更新说明

    What's Changed

    🚨 Breaking Changes

    🐛 Bug Fixes

    📖 Documentation

    🚀 New Features

    🛠️ Improvements

    New Contributors

    Full Changelog: https://github.com/rapidsai/raft/compare/v26.02.00a...v26.02.00

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

     RAFT: Reusable Accelerated Functions and Tools

    Contents

    1. Useful Resources
    2. What is RAFT?
    3. Use cases
    4. Is RAFT right for me?
    5. Getting Started
    6. Installing RAFT
    7. Codebase structure and contents
    8. Contributing
    9. References

    Useful Resources

    What is RAFT?

    RAFT contains fundamental widely-used algorithms and primitives for machine learning and data mining. The algorithms are CUDA-accelerated and form building blocks for more easily writing high performance applications.

    By taking a primitives-based approach to algorithm development, RAFT

    • accelerates algorithm construction time
    • reduces the maintenance burden by maximizing reuse across projects, and
    • centralizes core reusable computations, allowing future optimizations to benefit all algorithms that use them.

    While not exhaustive, the following general categories help summarize the accelerated functions in RAFT:

    CategoryAccelerated Functions in RAFT
    Data Formatssparse & dense, conversions, data generation
    Dense Operationslinear algebra, matrix and vector operations, reductions, slicing, norms, factorization, least squares, svd & eigenvalue problems
    Sparse Operationslinear algebra, eigenvalue problems, slicing, norms, reductions, factorization, symmetrization, components & labeling
    Solverscombinatorial optimization, iterative solvers
    Statisticssampling, moments and summary statistics, metrics, model evaluation
    Tools & Utilitiescommon tools and utilities for developing CUDA applications, multi-node multi-gpu infrastructure

    RAFT is a C++ header-only template library with an optional shared library that

    1. can speed up compile times for common template types, and
    2. provides host-accessible "runtime" APIs, which don't require a CUDA compiler to use

    In addition being a C++ library, RAFT also provides 2 Python libraries:

    • pylibraft - lightweight Python wrappers around RAFT's host-accessible "runtime" APIs.
    • raft-dask - multi-node multi-GPU communicator infrastructure for building distributed algorithms on the GPU with Dask.

    RAFT is a C++ header-only template library with optional shared library and lightweight Python wrappers

    Is RAFT right for me?

    RAFT contains low-level primitives for accelerating applications and workflows. Data source providers and application developers may find specific tools very useful. RAFT is not intended to be used directly by data scientists for discovery and experimentation. For data science tools, please see the NVIDIA CUDA-X libraries for data science.

    Getting started

    Memory Management

    RAFT uses memory resources for managing device memory. RAFT can use memory resources from CCCL or NVIDIA RMM, defined as either cuda::mr::resource_ref<cuda::mr::device_accessible> or rmm::device_async_resource_ref.

    Multi-dimensional Arrays

    The APIs in RAFT accept the mdspan multi-dimensional array view for representing data in higher dimensions similar to the ndarray in the Numpy Python library. RAFT also contains the corresponding owning mdarray structure, which simplifies the allocation and management of multi-dimensional data in both host and device (GPU) memory.

    The mdarray forms a convenience layer over RMM and can be constructed in RAFT using a number of different helper functions:

    #include <raft/core/device_mdarray.hpp>
    
    int n_rows = 10;
    int n_cols = 10;
    
    auto scalar = raft::make_device_scalar<float>(handle, 1.0);
    auto vector = raft::make_device_vector<float>(handle, n_cols);
    auto matrix = raft::make_device_matrix<float>(handle, n_rows, n_cols);
    

    C++ Example

    Most of the primitives in RAFT accept a raft::device_resources object for the management of resources which are expensive to create, such CUDA streams, stream pools, and handles to other CUDA libraries like cublas and cusolver.

    The example below demonstrates creating a RAFT handle and using it with device_matrix and device_vector to allocate memory, generating random clusters, and computing pairwise Euclidean distances with the NVIDIA cuVS library:

    #include <raft/core/device_resources.hpp>
    #include <raft/core/device_mdspan.hpp>
    #include <raft/random/make_blobs.cuh>
    #include <cuvs/distance/distance.hpp>
    
    raft::device_resources handle;
    
    int n_samples = 5000;
    int n_features = 50;
    
    float *input;
    int *labels;
    float *output;
    
    ...
    // Allocate input, labels, and output pointers
    ...
    
    auto input_view = raft::make_device_matrix_view(input, n_samples, n_features);
    auto labels_view = raft::make_device_vector_view(labels, n_samples);
    auto output_view = raft::make_device_matrix_view(output, n_samples, n_samples);
    
    raft::random::make_blobs(handle, input_view, labels_view);
    
    auto metric = cuvs::distance::DistanceType::L2SqrtExpanded;
    cuvs::distance::pairwise_distance(handle, input_view, input_view, output_view, metric);
    

    Python Example

    The pylibraft package contains a Python API for RAFT algorithms and primitives. pylibraft integrates nicely into other libraries by being very lightweight with minimal dependencies and accepting any object that supports the __cuda_array_interface__, such as CuPy's ndarray. The number of RAFT algorithms exposed in this package is continuing to grow from release to release.

    The example below demonstrates computing the pairwise Euclidean distances between CuPy arrays using the NVIDIA cuVS library. Note that CuPy is not a required dependency for pylibraft.

    import cupy as cp
    
    from cuvs.distance import pairwise_distance
    
    n_samples = 5000
    n_features = 50
    
    in1 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)
    in2 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)
    
    output = pairwise_distance(in1, in2, metric="euclidean")
    

    The output array in the above example is of type raft.common.device_ndarray, which supports cuda_array_interface making it interoperable with other libraries like CuPy, Numba, PyTorch and NVIDIA cuDF that also support it. CuPy supports DLPack, which also enables zero-copy conversion from raft.common.device_ndarray to JAX and Tensorflow.

    Below is an example of converting the output pylibraft.device_ndarray to a CuPy array:

    cupy_array = cp.asarray(output)
    

    And converting to a PyTorch tensor:

    import torch
    
    torch_tensor = torch.as_tensor(output, device='cuda')
    

    Or converting to an NVIDIA cuDF dataframe:

    cudf_dataframe = cudf.DataFrame(output)
    

    When the corresponding library has been installed and available in your environment, this conversion can also be done automatically by all RAFT compute APIs by setting a global configuration option:

    import pylibraft.config
    pylibraft.config.set_output_as("cupy")  # All compute APIs will return cupy arrays
    pylibraft.config.set_output_as("torch") # All compute APIs will return torch tensors
    

    You can also specify a callable that accepts a pylibraft.common.device_ndarray and performs a custom conversion. The following example converts all output to numpy arrays:

    pylibraft.config.set_output_as(lambda device_ndarray: return device_ndarray.copy_to_host())
    

    pylibraft also supports writing to a pre-allocated output array so any __cuda_array_interface__ supported array can be written to in-place:

    import cupy as cp
    
    from cuvs.distance import pairwise_distance
    
    n_samples = 5000
    n_features = 50
    
    in1 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)
    in2 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)
    output = cp.empty((n_samples, n_samples), dtype=cp.float32)
    
    pairwise_distance(in1, in2, out=output, metric="euclidean")
    

    Installing

    RAFT's C++ and Python libraries can both be installed through Conda and the Python libraries through Pip.

    Installing C++ and Python through Conda

    The easiest way to install RAFT is through conda and several packages are provided.

    • libraft-headers C++ headers
    • pylibraft (optional) Python library
    • raft-dask (optional) Python library for deployment of multi-node multi-GPU algorithms that use the RAFT raft::comms abstraction layer in Dask clusters.

    Use the following command, depending on your CUDA version, to install all of the RAFT packages with conda (replace rapidsai with rapidsai-nightly to install more up-to-date but less stable nightly packages). mamba is preferred over the conda command.

    # CUDA 13
    mamba install -c rapidsai -c conda-forge raft-dask pylibraft cuda-version=13.4
    
    # CUDA 12
    mamba install -c rapidsai -c conda-forge raft-dask pylibraft cuda-version=12.9
    

    Note that the above commands will also install libraft-headers and libraft.

    You can also install the conda packages individually using the mamba command above. For example, if you'd like to install RAFT's headers and pre-compiled shared library to use in your project:

    # CUDA 13
    mamba install -c rapidsai -c conda-forge libraft libraft-headers cuda-version=13.4
    
    # CUDA 12
    mamba install -c rapidsai -c conda-forge libraft libraft-headers cuda-version=12.9
    

    Installing Python through Pip

    pylibraft and raft-dask both have experimental packages that can be installed through pip:

    # CUDA 13
    pip install pylibraft-cu13
    pip install raft-dask-cu13
    
    # CUDA 12
    pip install pylibraft-cu12
    pip install raft-dask-cu12
    

    These packages statically build RAFT's pre-compiled instantiations and so the C++ headers won't be readily available to use in your code.

    The build instructions contain more details on building RAFT from source and including it in downstream projects. You can also find a more comprehensive version of the above CPM code snippet the Building RAFT C++ and Python from source section of the build instructions.

    Contributing

    If you are interested in contributing to the RAFT project, please read our Contributing guidelines. Refer to the Developer Guide for details on the developer guidelines, workflows, and principals.

    References

    When citing RAFT generally, please consider referencing this Github project.

    @misc{nvidia_raft,
      title={NVIDIA/raft: RAFT contains fundamental widely-used algorithms and primitives for data science, Graph and machine learning.},
      url={https://github.com/NVIDIA/raft},
      journal={GitHub},
      publisher={NVIDIA},
      author={NVIDIA},
      year={2022}
    }