accelerated-computing-cudf
Skill22 starsChanged 23 days agoMITView on GitHub
Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV/Parquet I/O, nullable semantics, and multi-GPU DataFrame workloads.
3 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- rapidsai/cudfedited, first seen Oct 8, 2026
- NVIDIA/skillsedited, first seen Oct 1, 2026
- NVIDIA/cudfedited, first seen Aug 17, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 3
- rapidsai/cudf★ 9.8k99% same
- NVIDIA/cudf★ 9.8k99% same
- NVIDIA/skills★ 3.9k99% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository259 other files it gives its agents.
- AGENTS.mdAGENTS.md
- composition-patterns/AGENTS.mdAGENTS.md
- react-best-practices/AGENTS.mdAGENTS.md
- react-native-skills/AGENTS.mdAGENTS.md
- react-view-transitions/AGENTS.mdAGENTS.md
- vercel-optimize/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- accessibilitySkill
- agentic-evalSkill
- agent-skillguardSkill
- agent-task-mappingSkill
- ai-writing-detectorSkill
- avoid-ai-writing-routerSkill
- avoid-ai-writingSkill
- azure-integrationsSkill
- best-practicesSkill
- brainstormingSkill
- breaking-changes-managementSkill
- canvas-designSkill
- cloud-design-patternsSkill
- codebase-designSkill
- codebase-to-courseSkill
- code-examples-syncSkill
- code-qualitySkill
- codex-app-threadsSkill
- codex-computer-useSkill
- codexerSkill
- codex-in-app-browserSkill
- codex-router-mediaSkill
- codex-routerSkill
- collision-zone-thinkingSkill
- competition-submission-checkerSkill
- composition-patternsSkill
- condition-based-waitingSkill
- context-mapSkill
- core-web-vitalsSkill
- course-content-mapSkill
- csharp-xunitSkill
- custom-agent-usageSkill
- deepstream-devSkill
- deepstream-import-vision-modelSkill
- defense-in-depthSkill
- deploy-to-vercelSkill
- development-workflowSkill
- devops-toolingSkill
- dispatching-parallel-agentsSkill
- docSkill
- documentation-authoringSkill
- documentation-automationSkill
- documentation-patternsSkill
- documentation-qualitySkill
- documentation-verificationSkill
- document-metadata-reviewSkill
- docxSkill
- domain-modelingSkill
- dotnet-best-practicesSkill
- ds-notebook-strict-codeSkill
- ds-teaching-assistantSkill
- excalidraw-diagram-generatorSkill
- excel-sheetSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
22 rules. 5 are common, 3 are distinctive, and 14 are very specific to this project.
5
Common
Most of the 3 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
14
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 15
Read dependencies.yaml for the support matrix (py_version group for Python versions, cuda_version for CUDA versions).
- Common: line 21
Use NVIDIA library-first wording in user-facing answers.
- Very specific: line 29
Choose the right cuDF path: Use cudf.pandas for broad compatibility or minimal-change acceleration.
- Very specific: line 31
Keep conversions at boundaries: Use .to_pandas() or .to_numpy() for CPU-only libraries, display, or final output boundaries.
- Common: line 40
Use when the user needs a small code change, third-party pandas compatibility, or one code path that can keep running while unsupported …
- Very specific: line 89
Keep data on GPU end-to-end: Only call .to_pandas() at the very end for display or CPU or non-GPU handoff.
- Very specific: line 91
Prefer explicit cuDF for tasks involving read_csv/read_parquet, joins, groupby, reshape, nullable types, fillna/where, time buckets, …
- Very specific: line 104
Use explicit cuDF where the equivalent is supported.
- Very specific: line 112
When dataset exceeds GPU memory.
- Very specific: line 155
Run %%cudf.pandas.profile — high CPU % means many fallbacks.
- Very specific: line 156
Check references/api-patterns.md for known gaps.
- Very specific: line 160
If allocator fragmentation or repeated allocation overhead is visible, use the accelerated-computing-rmm memory-resource setup guidance …
- Very specific: line 164
Check references/api-patterns.md for the specific operation
- Common: line 165
Keep that one operation on CPU at a narrow boundary and continue the supported pipeline on GPU
- Very specific: line 166
Use .to_pandas() only for the unsupported op, then .from_pandas() back
- Very specific: line 175
When the user explicitly cares about pandas nullable dtypes, fillna, where/mask, or grouped null behavior, treat parity checks as part of …
- Very specific: line 181
Keep where/mask semantics when they encode a condition.
- Common: line 185
Put the parity check in a reusable helper next to the GPU path, so future changes exercise the same nullable conversion and aggregation …
- Common: line 198
Use WebFetch to retrieve detailed API signatures, parameter descriptions, and examples on demand.
- Distinctive: line 225
Do not claim an MCP operation was used when the active host does not expose it.
- Distinctive: line 226
Treat local files, tests, rendered outputs, logs, or screenshots as the fallback evidence path.
- Distinctive: line 238
Before claiming "skill applied successfully":
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
cuDF & dask-cuDF Implementer's Guide
Compatibility
- Development release tracked by this skill: 26.12 (
VERSION:26.12.00). Use the selected installed release for deployment requirements. - Read
dependencies.yamlfor the support matrix (py_versiongroup for Python versions,cuda_versionfor CUDA versions). Match cuDF, pylibcudf, libcudf, and RMM release versions, and match pip wheel suffixes (-cu12/-cu13) to the CUDA major version. - Requires a supported NVIDIA GPU and compatible driver. Check the installation requirements for the selected release and CUDA version.
- For another checkout or installed release, check
VERSION,dependencies.yaml,python/cudf/pyproject.toml, andcudf.__version__before choosing versions or relying on an API.
Naming
Use NVIDIA library-first wording in user-facing answers. Keep literal RAPIDS/rapidsai URLs, package names, and release metadata when citing sources.
Role
You are a cuDF expert helping an implementer work with GPU DataFrames. The user understands pandas and their data — your job is to get them to correct, fast GPU code with minimal friction. Choose the path from the user's intent: cudf.pandas for broad compatibility or minimal-change acceleration, explicit cuDF for named DataFrame migrations, hot ETL paths, and parity-sensitive work. Treat source schema, row counts, null placement, ordering, and numeric tolerances as user-visible behavior.
Critical Rules
- Choose the right cuDF path. Use
cudf.pandasfor broad compatibility or minimal-change acceleration. Use explicit cuDF when the user asks to migrate DataFrame code, inspect parity, optimize a visible ETL hot path, or control unsupported operations. - Benchmark the working set. GPU transfer and launch overhead can dominate small workloads; 100K rows is a starting heuristic, not a minimum. Use small data for correctness and representative data for performance.
- Keep conversions at boundaries. Use
.to_pandas()or.to_numpy()for CPU-only libraries, display, or final output boundaries..valuesand.to_cupy()return GPU arrays, not NumPy arrays. Keep intermediate ETL data on GPU. - Choose precision deliberately. Float32 reduces memory use and may improve throughput, but preserve float64 when accuracy requires it and benchmark the target hardware.
- Validate semantics on representative slices. For null handling, joins, time series, reshape, or grouped logic, keep a small pandas reference path and compare shape, labels, null counts, ordering, and representative values before claiming parity.
- For data > GPU memory, move to dask-cuDF with
enable_cudf_spill=True. Seereferences/dask-cudf-patterns.md.
Three Paths to GPU DataFrames
Path 1: cudf.pandas Accelerator (Compatibility / Minimal Change)
Use when the user needs a small code change, third-party pandas compatibility, or one code path that can keep running while unsupported operations fall back.
Jupyter/IPython:
%load_ext cudf.pandas
import pandas as pd # now GPU-backed; falls back silently for unsupported opsScript:
python -m cudf.pandas my_script.pyWith multiprocessing:
import cudf.pandas
cudf.pandas.install() # must come BEFORE pandas import, before Pool creation
from multiprocessing import PoolConfirm acceleration with the cudf.pandas profiler before claiming speedup.
For notebook, CLI, and stats examples, read
references/cudf-pandas-accelerator.md. If the profile shows the hot path
running on CPU, use Path 2 for explicit cuDF control.
Path 2: Explicit cuDF API
For full control, hot-path optimization, named DataFrame migrations, and parity-sensitive operations:
import cudf
# Read data directly to GPU
df = cudf.read_parquet("data.parquet")
# Operations mirror pandas
result = df.groupby("key")["value"].sum()
merged = df.merge(lookup, on="id", how="left")
filtered = df[df["amount"] > 1000]
# String operations
df["clean"] = df["name"].str.strip().str.lower()
# To check API coverage before committing to migration:
# See references/api-patterns.md for known gaps and workaroundsKeep data on GPU end-to-end. Only call .to_pandas() at the very end for display or CPU or non-GPU handoff.
Prefer explicit cuDF for tasks involving read_csv/read_parquet, joins,
groupby, reshape, nullable types, fillna/where, time buckets, rolling
windows, or CPU/GPU parity checks. Add a small CPU/GPU validation path when
semantics matter instead of relying on successful execution alone.
For pandas code with null handling, reshape, or time-series behavior, read
references/api-patterns.md for the relevant semantic checklist before
rewriting. A cudf.pandas bootstrap is enough for a minimal-change request; an
implementation request should make the hot path explicit and observable.
For reshape-heavy pandas code (pivot_table, melt, stack/unstack,
crosstab), keep the source schema as part of the contract: index labels,
column labels or levels, fill_value, aggfunc, margins, and normalization.
Use explicit cuDF where the equivalent is supported; use cudf.pandas or a
narrow compatibility boundary when exact pandas reshape semantics matter more
than rewriting every operation. Add a small pandas-reference parity check for
shape, labels, and representative values before finalizing. See
references/api-patterns.md.
Path 3: dask-cuDF (Multi-GPU / Large Data)
When dataset exceeds GPU memory. See references/dask-cudf-patterns.md for full patterns.
from dask_cuda import LocalCUDACluster
from dask.distributed import Client
import dask
import dask.dataframe as dd
dask.config.set({"dataframe.backend": "cudf"})
cluster = LocalCUDACluster(enable_cudf_spill=True) # one worker per GPU
client = Client(cluster)
ddf = dd.read_parquet("s3://bucket/data/*.parquet")
result = ddf.groupby("key").agg({"value": "sum"}).compute()Memory Management
Enable spill before OOM happens (not after):
import cudf
cudf.set_option("spill", True) # spill to host RAM when GPU is fullRMM async allocator (can reduce allocation overhead in pipelines with many allocations). Configure it before any cuDF allocations, and keep the resource alive while its allocations are in use:
import rmm
memory_resource = rmm.mr.CudaAsyncMemoryResource()
rmm.mr.set_current_device_resource(memory_resource)| GPU Free vs Dataset | Strategy |
| Free > 2× dataset | Single GPU cuDF |
| Free 1–2× dataset | cuDF + cudf.set_option("spill", True) |
| Dataset > GPU mem | dask-cuDF |
| Dataset > node mem | dask-cuDF + multi-node (see accelerated-computing-mpf) |
Troubleshooting
No speedup vs pandas:
- Small working set? Measure transfer and launch overhead, then benchmark representative data sizes.
- Run
%%cudf.pandas.profile— high CPU % means many fallbacks. Identify and fix those ops. - Check
references/api-patterns.mdfor known gaps.
OOM (CUDA out of memory):
- Enable spill:
cudf.set_option("spill", True) - If allocator fragmentation or repeated allocation overhead is visible, use the
accelerated-computing-rmmmemory-resource setup guidance before GPU allocations - Still failing: move to dask-cuDF
AttributeError / NotImplementedError:
- Check
references/api-patterns.mdfor the specific operation - Keep that one operation on CPU at a narrow boundary and continue the supported pipeline on GPU
- Use
.to_pandas()only for the unsupported op, then.from_pandas()back
Wrong results vs pandas:
- Null/NaN handling differs: cuDF uses
<NA>(nullable) by default, pandas usesNaN. Seereferences/api-patterns.md. - Sort stability: Python
sort_valueshas nostable=Trueparameter, andkind="stable"/kind="mergesort"currently warn and fall back to quicksort. Add an original-row-position tie-breaker when equal-key ordering matters; seereferences/api-patterns.md. - Floating-point reductions can differ between CPU and GPU because arithmetic is not associative. Preserve the required precision, compare with explicit tolerances, and investigate differences outside those tolerances.
Nullable and Fill Semantics
When the user explicitly cares about pandas nullable dtypes, fillna,
where/mask, or grouped null behavior, treat parity checks as part of the
implementation. See references/api-patterns.md for nullable dtype examples.
- Preserve nullable integer/string columns instead of filling them with sentinel values unless the source code already did that.
- Keep
where/masksemantics when they encode a condition. Use broadfillnaonly when the condition is exactly null-only. - Compare with
to_pandas(nullable=True)when the pandas reference uses nullable extension dtypes. - Put the parity check in a reusable helper next to the GPU path, so future changes exercise the same nullable conversion and aggregation checks.
- Validate row counts, null counts, mask truth tables, grouped aggregates, and representative dtypes before claiming semantic parity.
Reference Files
references/cudf-pandas-accelerator.md— Profiling, fallback detection, cudf.pandas deep divereferences/api-patterns.md— Known API gaps, workarounds, semantic differencesreferences/dask-cudf-patterns.md— Multi-GPU patterns, best practices, partition tuning
External Documentation
Use WebFetch to retrieve detailed API signatures, parameter descriptions, and examples on demand.
- cuDF Documentation: https://docs.nvidia.com/cudf/
- dask-cuDF API Reference: https://docs.nvidia.com/dask-cudf/
- GitHub: https://github.com/NVIDIA/cudf
- CHANGELOG: https://github.com/NVIDIA/cudf/blob/main/CHANGELOG.md
<!-- MCP:START --><!-- PORTABILITY:START -->Cross-Client Portability
This skill is written to stay usable across GitHub Copilot, Claude Code, and Codex.
- GitHub Copilot: keep the folder in a Copilot-visible skill path or wrap the workflow in project instructions when folder discovery is unavailable.
- Claude Code: keep the folder in a local skills directory or a compatible plugin source.
- Codex: install or sync the folder into
$CODEX_HOME/skills/accelerated-computing-cudfand restart Codex after major changes.
<!-- PORTABILITY:END -->MCP Availability And Fallback
Preferred MCP Server: None required
- Fallback prompt: "Use the cuDF & dask-cuDF Implementer's Guide skill without MCP. Rely on its local instructions, bundled resources, standard shell or editor tools, and direct verification. Show the evidence used before concluding."
- Do not claim an MCP operation was used when the active host does not expose it.
- Treat local files, tests, rendered outputs, logs, or screenshots as the fallback evidence path.
<!-- MCP:END -->Anti-Patterns
- Assuming the GPU path wins on tiny datasets: Below the size gate, transfer overhead can erase the gain.
- Bouncing between pandas and cuDF mid-pipeline: Repeated boundary conversions hide the real bottleneck and muddy parity checks.
- Claiming migration success without representative semantics checks: Null handling, ordering, and dtype drift are user-visible bugs.
Verification Protocol
Before claiming "skill applied successfully":
- Pass/fail: The answer chooses the correct acceleration path (
cudf.pandas, explicit cuDF, or dask-cuDF) for the stated workload. - Pass/fail: CPU/GPU conversion boundaries, dtype assumptions, and null or ordering risks are called out before claiming parity.
- Pass/fail: Any performance claim includes a realistic dataset size and a reproducible benchmark or profiler path.
- Pressure-test scenario: Re-run the workflow on a pandas ETL job with one unsupported op and a dataset that does not fit GPU memory.
- Success metric: The user gets a runnable GPU dataframe plan with explicit correctness and performance evidence paths.
Related Skills
- jupyter-notebook: Use it when the cuDF workflow also needs notebook-first experimentation or reproducible analysis.
- development-workflow: Use it when the migration also needs a scoped implementation and validation plan.
- documentation-verification: Use it when the deliverable is a guide or README that must keep commands and caveats accurate.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

