apache / apache/opendal

new feature: Explore if OpenDAL can support KvikIO (aka Nvidia GPUDirect Storage)

Open
#5,090 11 comments 7 reactions 1 assignee Claimed by @morristai View on GitHub
enhancement
Dominant language
Rust
Stars
5.4k
Forks
825
Avg merge
1d 14m
Merged PRs (30d)
127

Description

### Feature Description

## GPUDirect Storage

[Nvidia GPUDirect Storage](https://developer.nvidia.com/blog/gpudirect-storage/) is a technology introduced by Nvidia that enables GPUs to read files directly.

![image](https://github.com/user-attachments/assets/d17e65fb-11cf-4c87-8981-87d7ec05b060)

With GPUDirect Storage:

- Higher Bandwidth: GDS offers 2x-8x higher bandwidth by enabling direct data transfers between storage and GPU, bypassing CPU involvement.
- Lower Latency: Explicit and direct transfers reduce latency by 3.8x and ensure stable latency even as GPU concurrency increases.
- Reduced CPU Load: DMA engines near storage reduce CPU load, maintaining higher bandwidth with minimal CPU utilization, and GPU utilization remains near zero during data transfers.
- Superior IO Bandwidth: GPUs achieve higher IO bandwidth (215 GB/s) compared to CPUs (50 GB/s).
- Scalable Storage Access: GDS allows fast access to large data sets, whether stored locally or remotely, nearly saturating GPU bandwidth by combining data transfers from various sources (CPU memory, local storage, remote storage).
- Efficient Data Caching: Large distributed data sets can be cached in local storage, and working tables can be cached in CPU memory for collaborative use with the CPU, enhancing overall system performance.

## cuFile

Nvidia exposes GDS support via [cuFile](https://docs.nvidia.com/gpudirect-storage/api-reference-guide/index.html) which included in [CUDA toolkit](https://docs.nvidia.com/cuda/).

## KvikIO

KvikIO is a High Performance File IO lib.

KvikIO is a Python and C++ library for high performance file IO. It provides C++ and Python bindings to [cuFile](https://docs.nvidia.com/gpudirect-storage/api-reference-guide/index.html), which enables [GPUDirect Storage (GDS)](https://developer.nvidia.com/blog/gpudirect-storage/). KvikIO also works efficiently when GDS isn't available and can read/write both host and device data seamlessly. The C++ library is header-only making it easy to include in [existing projects](https://github.com/rapidsai/kvikio/blob/HEAD/cpp/examples/downstream/).

### Problem and Solution

Perhaps OpenDAL could implement a service based on `kvikio`, allowing our users to interact with GDS using the familiar OpenDAL API.

`kvikio` currently offers only C++ and Python APIs. Those interested should first create a Rust binding for `kvikio`. To explore the performance of GDS, one should also have the CUDA toolkit and a compatible graphics card.

### Additional Context

_No response_

### Are you willing to contribute to the development of this feature?

- [ ] Yes, I am willing to contribute to the development of this feature.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.