Polars GPU engine#
cuDF provides GPU-accelerated execution engines for Python users of the Polars Lazy API. The engines support most of the core expressions and data types as well as a growing set of more advanced dataframe manipulations and data file formats. When a GPU engine is selected, Polars converts expressions into an optimized query plan and determines whether the plan is supported on the GPU. If it is not, the execution transparently falls back to the standard Polars engine and runs on the CPU.
Install#
Follow the RAPIDS installation guide and pick the
cudf-polars package for your CUDA and Python versions. For example, with conda:
conda install -c rapidsai -c conda-forge -c nvidia cudf-polars
Or with pip (CUDA 13 wheels; use cudf-polars-cu12 for CUDA 12):
pip install cudf-polars-cu13
Quick start#
RayEngine with no arguments uses
every GPU visible to the process, so the same code runs on one GPU and scales to multi-GPU /
multi-node setups automatically:
import polars as pl
from cudf_polars.engine.ray import RayEngine
query = (
pl.scan_parquet("/data/dataset/*.parquet")
.filter(pl.col("amount") > 100)
.group_by("customer_id")
.agg(pl.col("amount").sum())
)
with RayEngine() as engine:
result = query.collect(engine=engine)
See Usage for the full tutorial, Engines for a conceptual overview of the
available engines, Configuration Options for the
StreamingOptions configuration, and
Understanding Memory Use in the GPU Streaming Engine for guidance on out-of-memory errors and memory tuning.
Benchmark#
Note
The following benchmarks were performed with the POLARS_GPU_ENABLE_CUDA_MANAGED_MEMORY
environment variable set to "0". Using managed memory (the default) imposes a performance cost
in order to avoid out of memory errors. Peak performance can still be attained by setting the
environment variable to 0.
We reproduced the Polars Decision Support (PDS) benchmark to compare Polars GPU engine with the default CPU settings across several dataset sizes. Here are the results:
You can see up to 13x speedup using the GPU engine on the compute-heavy PDS queries involving complex aggregation and join operations. Below are the speedups for the top performing queries:
PDS-H benchmark | GPU: NVIDIA H100 PCIe | CPU: Intel Xeon W9-3495X (Sapphire Rapids) | Storage: Local NVMe
You can reproduce the results by visiting the Polars Decision Support (PDS) GitHub repository.
Learn More#
The GPU engine for Polars is now available in Open Beta and the engine is undergoing rapid development. To learn more, visit the GPU Support page on the Polars website.
Launch on Google Colab#
Try out the GPU engine for Polars in a free GPU notebook environment. Sign in with your Google account and launch the demo on Colab.#