Name | pylibraft-cu12 JSON |
Version |
24.10.0
JSON |
| download |
home_page | None |
Summary | RAFT: Reusable Algorithms Functions and other Tools |
upload_time | 2024-10-10 15:29:47 |
maintainer | None |
docs_url | None |
author | NVIDIA Corporation |
requires_python | >=3.10 |
license | Apache 2.0 |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# <div align="left"><img src="https://rapids.ai/assets/images/rapids_logo.png" width="90px"/> RAFT: Reusable Accelerated Functions and Tools for Vector Search and More</div>
> [!IMPORTANT]
> The vector search and clustering algorithms in RAFT are being migrated to a new library dedicated to vector search called [cuVS](https://github.com/rapidsai/cuvs). We will continue to support the vector search algorithms in RAFT during this move, but will no longer update them after the RAPIDS 24.06 (June) release. We plan to complete the migration by RAPIDS 24.10 (October) release and will be removing them altogether in the 24.12 (December) release.
![RAFT tech stack](img/raft-tech-stack-vss.png)
## Contents
<hr>
1. [Useful Resources](#useful-resources)
2. [What is RAFT?](#what-is-raft)
2. [Use cases](#use-cases)
3. [Is RAFT right for me?](#is-raft-right-for-me)
4. [Getting Started](#getting-started)
5. [Installing RAFT](#installing)
6. [Codebase structure and contents](#folder-structure-and-contents)
7. [Contributing](#contributing)
8. [References](#references)
<hr>
## Useful Resources
- [RAFT Reference Documentation](https://docs.rapids.ai/api/raft/stable/): API Documentation.
- [RAFT Getting Started](./docs/source/quick_start.md): Getting started with RAFT.
- [Build and Install RAFT](./docs/source/build.md): Instructions for installing and building RAFT.
- [Example Notebooks](./notebooks): Example jupyter notebooks
- [RAPIDS Community](https://rapids.ai/community.html): Get help, contribute, and collaborate.
- [GitHub repository](https://github.com/rapidsai/raft): Download the RAFT source code.
- [Issue tracker](https://github.com/rapidsai/raft/issues): Report issues or request features.
## 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:
#####
| Category | Accelerated Functions in RAFT |
|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| **Data Formats** | sparse & dense, conversions, data generation |
| **Dense Operations** | linear algebra, matrix and vector operations, reductions, slicing, norms, factorization, least squares, svd & eigenvalue problems |
| **Sparse Operations** | linear algebra, eigenvalue problems, slicing, norms, reductions, factorization, symmetrization, components & labeling |
| **Solvers** | combinatorial optimization, iterative solvers |
| **Statistics** | sampling, moments and summary statistics, metrics, model evaluation |
| **Tools & Utilities** | common 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](img/arch.png)
## 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 -- like ANN algorithms -- very useful. RAFT is not intended to be used directly by data scientists for discovery and experimentation. For data science tools, please see the [RAPIDS website](https://rapids.ai/).
## Getting started
### RAPIDS Memory Manager (RMM)
RAFT relies heavily on RMM which eases the burden of configuring different allocation strategies globally across the libraries that use it.
### Multi-dimensional Arrays
The APIs in RAFT accept the [mdspan](https://arxiv.org/abs/2010.06474) 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:
```c++
#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:
```c++
#include <raft/core/device_resources.hpp>
#include <raft/core/device_mdarray.hpp>
#include <raft/random/make_blobs.cuh>
#include <raft/distance/distance.cuh>
raft::device_resources handle;
int n_samples = 5000;
int n_features = 50;
auto input = raft::make_device_matrix<float, int>(handle, n_samples, n_features);
auto labels = raft::make_device_vector<int, int>(handle, n_samples);
auto output = raft::make_device_matrix<float, int>(handle, n_samples, n_samples);
raft::random::make_blobs(handle, input.view(), labels.view());
auto metric = raft::distance::DistanceType::L2SqrtExpanded;
raft::distance::pairwise_distance(handle, input.view(), input.view(), output.view(), metric);
```
It's also possible to create `raft::device_mdspan` views to invoke the same API with raw pointers and shape information:
```c++
#include <raft/core/device_resources.hpp>
#include <raft/core/device_mdspan.hpp>
#include <raft/random/make_blobs.cuh>
#include <raft/distance/distance.cuh>
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 = raft::distance::DistanceType::L2SqrtExpanded;
raft::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](https://docs.cupy.dev/en/stable/user_guide/interoperability.html#rmm). 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. Note that CuPy is not a required dependency for `pylibraft`.
```python
import cupy as cp
from pylibraft.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__](https://numba.pydata.org/numba-doc/dev/cuda/cuda_array_interface.html#cuda-array-interface-version-2) making it interoperable with other libraries like CuPy, Numba, PyTorch and RAPIDS 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:
```python
cupy_array = cp.asarray(output)
```
And converting to a PyTorch tensor:
```python
import torch
torch_tensor = torch.as_tensor(output, device='cuda')
```
Or converting to a RAPIDS cuDF dataframe:
```python
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:
```python
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:
```python
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:
```python
import cupy as cp
from pylibraft.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
- `libraft` (optional) C++ shared library containing pre-compiled template instantiations and runtime API.
- `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.
- `raft-ann-bench` (optional) Benchmarking tool for easily producing benchmarks that compare RAFT's vector search algorithms against other state-of-the-art implementations.
- `raft-ann-bench-cpu` (optional) Reproducible benchmarking tool similar to above, but doesn't require CUDA to be installed on the machine. Can be used to test in environments with competitive CPUs.
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.
```bash
# for CUDA 11.8
mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=11.8
```
```bash
# for CUDA 12.5
mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=12.5
```
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:
```bash
# for CUDA 12.5
mamba install -c rapidsai -c conda-forge -c nvidia libraft libraft-headers cuda-version=12.5
```
If installing the C++ APIs please see [using libraft](https://docs.rapids.ai/api/raft/nightly/using_libraft/) for more information on using the pre-compiled shared library. You can also refer to the [example C++ template project](https://github.com/rapidsai/raft/tree/branch-24.10/cpp/template) for a ready-to-go CMake configuration that you can drop into your project and build against installed RAFT development artifacts above.
### Installing Python through Pip
`pylibraft` and `raft-dask` both have experimental packages that can be [installed through pip](https://rapids.ai/pip.html#install):
```bash
pip install pylibraft-cu11 --extra-index-url=https://pypi.nvidia.com
pip install raft-dask-cu11 --extra-index-url=https://pypi.nvidia.com
```
These packages statically build RAFT's pre-compiled instantiations and so the C++ headers and pre-compiled shared library won't be readily available to use in your code.
The [build instructions](https://docs.rapids.ai/api/raft/nightly/build/) 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](https://docs.rapids.ai/api/raft/nightly/build/#building-c-and-python-from-source) section of the build instructions.
You can find an example [RAFT project template](cpp/template/README.md) in the `cpp/template` directory, which demonstrates how to build a new application with RAFT or incorporate RAFT into an existing CMake project.
## Contributing
If you are interested in contributing to the RAFT project, please read our [Contributing guidelines](docs/source/contributing.md). Refer to the [Developer Guide](docs/source/developer_guide.md) for details on the developer guidelines, workflows, and principals.
## References
When citing RAFT generally, please consider referencing this Github project.
```bibtex
@misc{rapidsai,
title={Rapidsai/raft: RAFT contains fundamental widely-used algorithms and primitives for data science, Graph and machine learning.},
url={https://github.com/rapidsai/raft},
journal={GitHub},
publisher={Nvidia RAPIDS},
author={Rapidsai},
year={2022}
}
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pylibraft-cu12",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": null,
"author": "NVIDIA Corporation",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/f6/fa/0220f08749d94119280e2eac532dce526fb88abe1c0d7c34248a69080337/pylibraft_cu12-24.10.0.tar.gz",
"platform": null,
"description": "# <div align=\"left\"><img src=\"https://rapids.ai/assets/images/rapids_logo.png\" width=\"90px\"/> RAFT: Reusable Accelerated Functions and Tools for Vector Search and More</div>\n\n> [!IMPORTANT]\n> The vector search and clustering algorithms in RAFT are being migrated to a new library dedicated to vector search called [cuVS](https://github.com/rapidsai/cuvs). We will continue to support the vector search algorithms in RAFT during this move, but will no longer update them after the RAPIDS 24.06 (June) release. We plan to complete the migration by RAPIDS 24.10 (October) release and will be removing them altogether in the 24.12 (December) release.\n\n![RAFT tech stack](img/raft-tech-stack-vss.png)\n\n\n\n## Contents\n<hr>\n\n1. [Useful Resources](#useful-resources)\n2. [What is RAFT?](#what-is-raft)\n2. [Use cases](#use-cases)\n3. [Is RAFT right for me?](#is-raft-right-for-me)\n4. [Getting Started](#getting-started)\n5. [Installing RAFT](#installing)\n6. [Codebase structure and contents](#folder-structure-and-contents)\n7. [Contributing](#contributing)\n8. [References](#references)\n\n<hr>\n\n## Useful Resources\n\n- [RAFT Reference Documentation](https://docs.rapids.ai/api/raft/stable/): API Documentation.\n- [RAFT Getting Started](./docs/source/quick_start.md): Getting started with RAFT.\n- [Build and Install RAFT](./docs/source/build.md): Instructions for installing and building RAFT.\n- [Example Notebooks](./notebooks): Example jupyter notebooks\n- [RAPIDS Community](https://rapids.ai/community.html): Get help, contribute, and collaborate.\n- [GitHub repository](https://github.com/rapidsai/raft): Download the RAFT source code.\n- [Issue tracker](https://github.com/rapidsai/raft/issues): Report issues or request features.\n\n\n\n## What is RAFT?\n\nRAFT 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.\n\nBy taking a primitives-based approach to algorithm development, RAFT\n- accelerates algorithm construction time\n- reduces the maintenance burden by maximizing reuse across projects, and\n- centralizes core reusable computations, allowing future optimizations to benefit all algorithms that use them.\n\nWhile not exhaustive, the following general categories help summarize the accelerated functions in RAFT:\n#####\n| Category | Accelerated Functions in RAFT |\n|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------|\n| **Data Formats** | sparse & dense, conversions, data generation |\n| **Dense Operations** | linear algebra, matrix and vector operations, reductions, slicing, norms, factorization, least squares, svd & eigenvalue problems |\n| **Sparse Operations** | linear algebra, eigenvalue problems, slicing, norms, reductions, factorization, symmetrization, components & labeling |\n| **Solvers** | combinatorial optimization, iterative solvers |\n| **Statistics** | sampling, moments and summary statistics, metrics, model evaluation |\n| **Tools & Utilities** | common tools and utilities for developing CUDA applications, multi-node multi-gpu infrastructure |\n\n\nRAFT is a C++ header-only template library with an optional shared library that\n1) can speed up compile times for common template types, and\n2) provides host-accessible \"runtime\" APIs, which don't require a CUDA compiler to use\n\nIn addition being a C++ library, RAFT also provides 2 Python libraries:\n- `pylibraft` - lightweight Python wrappers around RAFT's host-accessible \"runtime\" APIs.\n- `raft-dask` - multi-node multi-GPU communicator infrastructure for building distributed algorithms on the GPU with Dask.\n\n![RAFT is a C++ header-only template library with optional shared library and lightweight Python wrappers](img/arch.png)\n\n\n## Is RAFT right for me?\n\nRAFT contains low-level primitives for accelerating applications and workflows. Data source providers and application developers may find specific tools -- like ANN algorithms -- very useful. RAFT is not intended to be used directly by data scientists for discovery and experimentation. For data science tools, please see the [RAPIDS website](https://rapids.ai/).\n\n## Getting started\n\n### RAPIDS Memory Manager (RMM)\n\nRAFT relies heavily on RMM which eases the burden of configuring different allocation strategies globally across the libraries that use it.\n\n### Multi-dimensional Arrays\n\nThe APIs in RAFT accept the [mdspan](https://arxiv.org/abs/2010.06474) 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.\n\nThe `mdarray` forms a convenience layer over RMM and can be constructed in RAFT using a number of different helper functions:\n\n```c++\n#include <raft/core/device_mdarray.hpp>\n\nint n_rows = 10;\nint n_cols = 10;\n\nauto scalar = raft::make_device_scalar<float>(handle, 1.0);\nauto vector = raft::make_device_vector<float>(handle, n_cols);\nauto matrix = raft::make_device_matrix<float>(handle, n_rows, n_cols);\n```\n\n### C++ Example\n\nMost 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`.\n\nThe example below demonstrates creating a RAFT handle and using it with `device_matrix` and `device_vector` to allocate memory, generating random clusters, and computing\npairwise Euclidean distances:\n```c++\n#include <raft/core/device_resources.hpp>\n#include <raft/core/device_mdarray.hpp>\n#include <raft/random/make_blobs.cuh>\n#include <raft/distance/distance.cuh>\n\nraft::device_resources handle;\n\nint n_samples = 5000;\nint n_features = 50;\n\nauto input = raft::make_device_matrix<float, int>(handle, n_samples, n_features);\nauto labels = raft::make_device_vector<int, int>(handle, n_samples);\nauto output = raft::make_device_matrix<float, int>(handle, n_samples, n_samples);\n\nraft::random::make_blobs(handle, input.view(), labels.view());\n\nauto metric = raft::distance::DistanceType::L2SqrtExpanded;\nraft::distance::pairwise_distance(handle, input.view(), input.view(), output.view(), metric);\n```\n\nIt's also possible to create `raft::device_mdspan` views to invoke the same API with raw pointers and shape information:\n\n```c++\n#include <raft/core/device_resources.hpp>\n#include <raft/core/device_mdspan.hpp>\n#include <raft/random/make_blobs.cuh>\n#include <raft/distance/distance.cuh>\n\nraft::device_resources handle;\n\nint n_samples = 5000;\nint n_features = 50;\n\nfloat *input;\nint *labels;\nfloat *output;\n\n...\n// Allocate input, labels, and output pointers\n...\n\nauto input_view = raft::make_device_matrix_view(input, n_samples, n_features);\nauto labels_view = raft::make_device_vector_view(labels, n_samples);\nauto output_view = raft::make_device_matrix_view(output, n_samples, n_samples);\n\nraft::random::make_blobs(handle, input_view, labels_view);\n\nauto metric = raft::distance::DistanceType::L2SqrtExpanded;\nraft::distance::pairwise_distance(handle, input_view, input_view, output_view, metric);\n```\n\n\n### Python Example\n\nThe `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](https://docs.cupy.dev/en/stable/user_guide/interoperability.html#rmm). The number of RAFT algorithms exposed in this package is continuing to grow from release to release.\n\nThe example below demonstrates computing the pairwise Euclidean distances between CuPy arrays. Note that CuPy is not a required dependency for `pylibraft`.\n\n```python\nimport cupy as cp\n\nfrom pylibraft.distance import pairwise_distance\n\nn_samples = 5000\nn_features = 50\n\nin1 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)\nin2 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)\n\noutput = pairwise_distance(in1, in2, metric=\"euclidean\")\n```\n\nThe `output` array in the above example is of type `raft.common.device_ndarray`, which supports [__cuda_array_interface__](https://numba.pydata.org/numba-doc/dev/cuda/cuda_array_interface.html#cuda-array-interface-version-2) making it interoperable with other libraries like CuPy, Numba, PyTorch and RAPIDS cuDF that also support it. CuPy supports DLPack, which also enables zero-copy conversion from `raft.common.device_ndarray` to JAX and Tensorflow.\n\nBelow is an example of converting the output `pylibraft.device_ndarray` to a CuPy array:\n```python\ncupy_array = cp.asarray(output)\n```\n\nAnd converting to a PyTorch tensor:\n```python\nimport torch\n\ntorch_tensor = torch.as_tensor(output, device='cuda')\n```\n\nOr converting to a RAPIDS cuDF dataframe:\n```python\ncudf_dataframe = cudf.DataFrame(output)\n```\n\nWhen 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:\n```python\nimport pylibraft.config\npylibraft.config.set_output_as(\"cupy\") # All compute APIs will return cupy arrays\npylibraft.config.set_output_as(\"torch\") # All compute APIs will return torch tensors\n```\n\nYou 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:\n```python\npylibraft.config.set_output_as(lambda device_ndarray: return device_ndarray.copy_to_host())\n```\n\n`pylibraft` also supports writing to a pre-allocated output array so any `__cuda_array_interface__` supported array can be written to in-place:\n\n```python\nimport cupy as cp\n\nfrom pylibraft.distance import pairwise_distance\n\nn_samples = 5000\nn_features = 50\n\nin1 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)\nin2 = cp.random.random_sample((n_samples, n_features), dtype=cp.float32)\noutput = cp.empty((n_samples, n_samples), dtype=cp.float32)\n\npairwise_distance(in1, in2, out=output, metric=\"euclidean\")\n```\n\n\n## Installing\n\nRAFT's C++ and Python libraries can both be installed through Conda and the Python libraries through Pip. \n\n\n### Installing C++ and Python through Conda\n\nThe easiest way to install RAFT is through conda and several packages are provided.\n- `libraft-headers` C++ headers\n- `libraft` (optional) C++ shared library containing pre-compiled template instantiations and runtime API.\n- `pylibraft` (optional) Python library\n- `raft-dask` (optional) Python library for deployment of multi-node multi-GPU algorithms that use the RAFT `raft::comms` abstraction layer in Dask clusters.\n- `raft-ann-bench` (optional) Benchmarking tool for easily producing benchmarks that compare RAFT's vector search algorithms against other state-of-the-art implementations.\n- `raft-ann-bench-cpu` (optional) Reproducible benchmarking tool similar to above, but doesn't require CUDA to be installed on the machine. Can be used to test in environments with competitive CPUs.\n\nUse 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.\n```bash\n# for CUDA 11.8\nmamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=11.8\n```\n\n```bash\n# for CUDA 12.5\nmamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=12.5\n```\n\nNote that the above commands will also install `libraft-headers` and `libraft`.\n\nYou 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:\n```bash\n# for CUDA 12.5\nmamba install -c rapidsai -c conda-forge -c nvidia libraft libraft-headers cuda-version=12.5\n```\n\nIf installing the C++ APIs please see [using libraft](https://docs.rapids.ai/api/raft/nightly/using_libraft/) for more information on using the pre-compiled shared library. You can also refer to the [example C++ template project](https://github.com/rapidsai/raft/tree/branch-24.10/cpp/template) for a ready-to-go CMake configuration that you can drop into your project and build against installed RAFT development artifacts above.\n\n### Installing Python through Pip\n\n`pylibraft` and `raft-dask` both have experimental packages that can be [installed through pip](https://rapids.ai/pip.html#install):\n```bash\npip install pylibraft-cu11 --extra-index-url=https://pypi.nvidia.com\npip install raft-dask-cu11 --extra-index-url=https://pypi.nvidia.com\n```\n\nThese packages statically build RAFT's pre-compiled instantiations and so the C++ headers and pre-compiled shared library won't be readily available to use in your code.\n\nThe [build instructions](https://docs.rapids.ai/api/raft/nightly/build/) 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](https://docs.rapids.ai/api/raft/nightly/build/#building-c-and-python-from-source) section of the build instructions.\n\nYou can find an example [RAFT project template](cpp/template/README.md) in the `cpp/template` directory, which demonstrates how to build a new application with RAFT or incorporate RAFT into an existing CMake project.\n\n\n## Contributing\n\nIf you are interested in contributing to the RAFT project, please read our [Contributing guidelines](docs/source/contributing.md). Refer to the [Developer Guide](docs/source/developer_guide.md) for details on the developer guidelines, workflows, and principals.\n\n## References\n\nWhen citing RAFT generally, please consider referencing this Github project.\n```bibtex\n@misc{rapidsai,\n title={Rapidsai/raft: RAFT contains fundamental widely-used algorithms and primitives for data science, Graph and machine learning.},\n url={https://github.com/rapidsai/raft},\n journal={GitHub},\n publisher={Nvidia RAPIDS},\n author={Rapidsai},\n year={2022}\n}\n```\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "RAFT: Reusable Algorithms Functions and other Tools",
"version": "24.10.0",
"project_urls": {
"Documentation": "https://docs.rapids.ai/api/raft/stable/",
"Homepage": "https://github.com/rapidsai/raft"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f6fa0220f08749d94119280e2eac532dce526fb88abe1c0d7c34248a69080337",
"md5": "758e2ae72d33194a60b8c429b54b730e",
"sha256": "18d931b46c57d6c5003c020a6ec5795561f9451e989cc3fb09fb8105487900d2"
},
"downloads": -1,
"filename": "pylibraft_cu12-24.10.0.tar.gz",
"has_sig": false,
"md5_digest": "758e2ae72d33194a60b8c429b54b730e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 5807,
"upload_time": "2024-10-10T15:29:47",
"upload_time_iso_8601": "2024-10-10T15:29:47.073030Z",
"url": "https://files.pythonhosted.org/packages/f6/fa/0220f08749d94119280e2eac532dce526fb88abe1c0d7c34248a69080337/pylibraft_cu12-24.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-10 15:29:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rapidsai",
"github_project": "raft",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pylibraft-cu12"
}