opción
HogarHogar Skill Gestión de bases de datos accelerated-computing-cudf

accelerated-computing-cudf

NVIDIA/skills NVIDIA/skills

Acelere los flujos de trabajo de pandas con DataFrames de GPU utilizando cuDF y dask-cuDF para ETL, uniones, groupby y procesamiento de datos a gran escala.

...Expandir todo
2
Tiempo actualizado 27 de septiembre de 2026

Guía del Implementador de cuDF y dask-cuDF

Compatibilidad

  • Versión rastreada por esta habilidad: 26.04.
  • Requiere NVIDIA Volta o posterior en CUDA 12, o Turing o posterior en CUDA 13. La versión 26.04 es compatible con CUDA 12.2-12.9 con controlador 535+ o CUDA 13.0-13.1 con controlador 580+, y Python 3.11-3.14. Punto óptimo de cuDF: >100K filas.

Nomenclatura

Utilice la terminología de las bibliotecas de NVIDIA en primer lugar en las respuestas dirigidas al usuario. Mantenga las URL literales de RAPIDS/rapidsai, los nombres de los paquetes y los metadatos de la versión al citar fuentes.

Rol

Usted es un experto en cuDF que ayuda a un implementador a trabajar con DataFrames de GPU. El usuario comprende pandas y sus datos; su trabajo es lograr que escriban código GPU correcto y rápido con la mínima fricción. Elija la ruta según la intención del usuario: cudf.pandas para una amplia compatibilidad o aceleración con cambios mínimos, o cuDF explícito para migraciones de DataFrame con nombre, rutas ETL críticas y trabajos sensibles a la paridad. Trate el esquema de origen, el número de filas, la colocación de valores nulos, el orden y las tolerancias numéricas como comportamiento visible para el usuario.

Reglas Críticas

  1. Elija la ruta correcta de cuDF. Utilice cudf.pandas para una amplia compatibilidad o aceleración con cambios mínimos. Utilice cuDF explícito cuando el usuario solicite migrar código de DataFrame, inspeccionar la paridad, optimizar una ruta ETL crítica visible o controlar operaciones no compatibles.
  2. Control de tamaño: mínimo 100K filas. Por debajo de ese umbral, la sobrecarga de transferencia a la GPU suele superar la aceleración; utilice datos pequeños para la corrección y analice conjuntos de trabajo más grandes para el rendimiento.
  3. Mantenga las conversiones en los límites. Utilice .to_pandas(), .values o .numpy() para visualización, gráficos, bibliotecas solo de CPU o límites de salida final. Mantenga los datos intermedios de ETL en la GPU.
  4. Float32 es su aliado. Las operaciones de cuDF en float64 son más lentas; realice la conversión de tipo (cast) temprano cuando la precisión lo permita.
  5. Valide la semántica en muestras representativas. Para el manejo de valores nulos, uniones (joins), series temporales, reestructuración (reshape) o lógica agrupada, mantenga una ruta de referencia pequeña en pandas y compare la forma, las etiquetas, los conteos nulos, el orden y los valores representativos antes de afirmar la paridad.
  6. Para datos > memoria de GPU, pase a dask-cuDF con enable_cudf_spill=True. Consulte references/dask-cudf-patterns.md.

Tres Rutas hacia DataFrames de GPU

Ruta 1: Acelerador cudf.pandas (Compatibilidad / Cambio Mínimo)

Úsela cuando el usuario necesite un pequeño cambio en el código, compatibilidad con bibliotecas de pandas de terceros o una única ruta de código que pueda seguir ejecutándose mientras las operaciones no compatibles retroceden (fallback).

Jupyter/IPython:

%load_ext cudf.pandas
import pandas as pd   # ahora respaldado por GPU; retrocede silenciosamente para operaciones no compatibles

Script:

python -m cudf.pandas my_script.py

Con multiprocesamiento:

import cudf.pandas
cudf.pandas.install()   # debe ocurrir ANTES de importar pandas, antes de crear Pool
from multiprocessing import Pool

Confirme la aceleración con el perfilador de cudf.pandas antes de afirmar una mejora de velocidad. Para ejemplos de cuadernos, CLI y estadísticas, lea references/cudf-pandas-accelerator.md. Si el perfil muestra que la ruta crítica se ejecuta en la CPU, utilice la Ruta 2 para un control explícito de cuDF.

Ruta 2: API explícita de cuDF

Para un control total, optimización de rutas críticas, migraciones de DataFrame con nombre y operaciones sensibles a la paridad:

import cudf

# Leer datos directamente a la GPU
df = cudf.read_parquet("data.parquet")

# Las operaciones reflejan pandas
result = df.groupby("key")["value"].sum()
merged = df.merge(lookup, on="id", how="left")
filtered = df[df["amount"] > 1000]

# Operaciones con cadenas
df["clean"] = df["name"].str.strip().str.lower()

# Para verificar la cobertura de la API antes de comprometerse con la migración:
# Consulte references/api-patterns.md para conocer las brechas conocidas y soluciones alternativas

Mantenga los datos en la GPU de extremo a extremo. Llame a .to_pandas() solo al final para visualización o para la CPU o transferencia a no-GPU.

Prefiera cuDF explícito para tareas que involucren read_csv/read_parquet, uniones (joins), groupby, reestructuración (reshape), tipos anulables, fillna/where, buckets de tiempo, ventanas móviles (rolling windows) o verificaciones de paridad CPU/GPU. Agregue una pequeña ruta de validación CPU/GPU cuando la semántica sea importante en lugar de confiar únicamente en una ejecución exitosa.

Para código pandas con manejo de valores nulos, reestructuración o comportamiento de series temporales, lea references/api-patterns.md para obtener la lista de verificación semántica relevante antes de reescribir. Un inicio de cudf.pandas es suficiente para una solicitud de cambio mínimo; una solicitud de implementación debe hacer que la ruta crítica sea explícita y observable.

Para código pandas con mucha reestructuración (pivot_table, melt, stack/unstack, crosstab), mantenga el esquema de origen como parte del contrato: etiquetas del índice, etiquetas o niveles de las columnas, fill_value, aggfunc, márgenes y normalización. Utilice cuDF explícito donde la equivalente sea compatible; utilice cudf.pandas o un límite de compatibilidad estrecho cuando la semántica exacta de reestructuración de pandas sea más importante que reescribir cada operación. Agregue una pequeña verificación de paridad de referencia de pandas para la forma, las etiquetas y los valores representativos antes de finalizar. Consulte references/api-patterns.md.

Ruta 3: dask-cuDF (Multi-GPU / Grandes Datos)

Cuando el conjunto de datos exceda la memoria de la GPU. Consulte references/dask-cudf-patterns.md para obtener los patrones completos.

from dask_cuda import LocalCUDACluster
from dask.distributed import Client
import dask_cudf

cluster = LocalCUDACluster(enable_cudf_spill=True)  # un trabajador por GPU
client = Client(cluster)

ddf = dask_cudf.read_parquet("s3://bucket/data/*.parquet")
result = ddf.groupby("key").agg({"value": "sum"}).compute()

Gestión de Memoria

Habilite el desbordamiento (spill) antes de que ocurra un error de memoria insuficiente (OOM) (no después):

import cudf
cudf.set_option("spill", True)   # desbordar a la RAM del host cuando la GPU esté llena

Asignador de pool RMM (reduce la sobrecarga de cudaMalloc en pipelines con muchas asignaciones):

import rmm
rmm.set_current_device_resource(rmm.mr.CudaAsyncMemoryResource())
# Debe llamarse ANTES de cualquier operación de cuDF
Memoria GPU Libre vs Conjunto de DatosEstrategia
Libre > 2× conjunto de datoscuDF de GPU única
Libre 1–2× conjunto de datoscuDF + `cudf.set_option("spill", True)`
Conjunto de datos > memoria GPUdask-cuDF
Conjunto de datos > memoria del nododask-cuDF + multi-nodo (consulte accelerated-computing-mpf)

Solución de Problemas

Sin mejora de velocidad frente a pandas:

  • Datos
  • Ejecute %%cudf.pandas.profile — un alto porcentaje de CPU significa muchos retrocesos (fallbacks). Identifique y corrija esas operaciones.
  • Consulte references/api-patterns.md para conocer las brechas conocidas.

OOM (CUDA out of memory):

  1. Habilite el desbordamiento: cudf.set_option("spill", True)
  2. Si se observa fragmentación del asignador o sobrecarga de asignación repetida, utilice las directrices de configuración de recursos de memoria accelerated-computing-rmm antes de las asignaciones de GPU
  3. Si aún falla: pase a dask-cuDF

AttributeError / NotImplementedError:

  • Consulte references/api-patterns.md para la operación específica
  • Mantenga esa única operación en la CPU en un límite estrecho y continúe el pipeline compatible en la GPU
  • Utilice .to_pandas() solo para la operación no compatible, y luego .from_pandas() de vuelta

Resultados incorrectos frente a pandas:

  • El manejo de valores nulos/NaN difiere: cuDF utiliza <na></na> (anulable) de forma predeterminada, pandas utiliza NaN. Consulte references/api-patterns.md.
  • Estabilidad del ordenamiento: el ordenamiento de cuDF no está garantizado como estable a menos que se pase stable=True
  • Si la diferencia se debe a diferencias de punto flotante, intente convertir a floats de mayor precisión (por ejemplo, float64 en lugar de float32). Si los resultados siguen siendo diferentes, deténgase. Los algoritmos de GPU y CPU siempre producirán resultados diferentes en números de punto flotante debido a la no asociatividad de la aritmética de punto flotante y eso no se puede corregir.

Semántica de Anulabilidad y Relleno

Cuando al usuario le importa explícitamente los tipos de datos anulables de pandas, fillna, where/mask o el comportamiento de valores nulos agrupados, trate las verificaciones de paridad como parte de la implementación. Consulte references/api-patterns.md para obtener ejemplos de tipos de datos anulables.

  • Preserve las columnas enteras/cadenas anulables en lugar de rellenarlas con valores centinela, a menos que el código fuente ya lo haya hecho.
  • Mantenga la semántica de where/mask cuando codifiquen una condición. Utilice fillna amplio solo cuando la condición sea exactamente solo valores nulos.
  • Compare con to_pandas(nullable=True) cuando la referencia de pandas utilice tipos de datos de extensión anulables.
  • Coloque la verificación de paridad en un auxiliar reutilizable junto a la ruta de GPU, para que los cambios futuros ejerciten las mismas verificaciones de conversión y agregación anulables.
  • Valide los conteos de filas, conteos nulos, tablas de verdad de máscaras, agregaciones agrupadas y tipos de datos representativos antes de afirmar la paridad semántica.

Archivos de Referencia

  • references/cudf-pandas-accelerator.md — Perfilado, detección de retrocesos, análisis profundo de cudf.pandas
  • references/api-patterns.md — Brechas conocidas de la API, soluciones alternativas, diferencias semánticas
  • references/dask-cudf-patterns.md — Patrones de multi-GPU, mejores prácticas, ajuste de particiones

Documentación Externa

Utilice WebFetch para recuperar firmas de API detalladas, descripciones de parámetros y ejemplos bajo demanda.

Ver en GitHub
---
name: accelerated-computing-cudf
description: Accelerate pandas workflows with GPU DataFrames using cuDF and dask-cuDF for ETL, joins, groupby, and large-scale data processing.
license: CC-BY-4.0 AND Apache-2.0
---

# cuDF & dask-cuDF Implementer's Guide

## Compatibility

- Release tracked by this skill: 26.04.
- Requires NVIDIA Volta or newer on CUDA 12, or Turing or newer on CUDA 13. Release 26.04 supports CUDA 12.2-12.9 with driver 535+ or CUDA 13.0-13.1 with driver 580+, and Python 3.11-3.14. cuDF sweet spot: >100K rows.

## 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

1. **Choose the right cuDF path.** Use `cudf.pandas` for 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.
2. **Size gate: 100K rows minimum.** Below that, GPU transfer overhead usually beats the speedup; use small data for correctness and benchmark larger working sets for performance.
3. **Keep conversions at boundaries.** Use `.to_pandas()`, `.values`, or `.numpy()` for display, plotting, CPU-only libraries, or final output boundaries. Keep intermediate ETL data on GPU.
4. **Float32 is your friend.** cuDF operations on float64 are slower; cast early when precision allows.
5. **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.
6. **For data > GPU memory**, move to dask-cuDF with `enable_cudf_spill=True`. See `references/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:**
```python
%load_ext cudf.pandas
import pandas as pd   # now GPU-backed; falls back silently for unsupported ops
```

**Script:**
```bash
python -m cudf.pandas my_script.py
```

**With multiprocessing:**
```python
import cudf.pandas
cudf.pandas.install()   # must come BEFORE pandas import, before Pool creation
from multiprocessing import Pool
```

Confirm 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:

```python
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 workarounds
```

**Keep 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.

```python
from dask_cuda import LocalCUDACluster
from dask.distributed import Client
import dask_cudf

cluster = LocalCUDACluster(enable_cudf_spill=True)  # one worker per GPU
client = Client(cluster)

ddf = dask_cudf.read_parquet("s3://bucket/data/*.parquet")
result = ddf.groupby("key").agg({"value": "sum"}).compute()
```

## Memory Management

**Enable spill before OOM happens** (not after):
```python
import cudf
cudf.set_option("spill", True)   # spill to host RAM when GPU is full
```

**RMM pool allocator** (reduces cudaMalloc overhead in pipelines with many allocations):
```python
import rmm
rmm.set_current_device_resource(rmm.mr.CudaAsyncMemoryResource())
# Must be called BEFORE any cuDF operations
```

| 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:**
- Data < 100K rows? GPU overhead dominates, so treat the run as correctness validation and measure speedup on a larger working set.
- Run `%%cudf.pandas.profile` — high CPU % means many fallbacks. Identify and fix those ops.
- Check `references/api-patterns.md` for known gaps.

**OOM (CUDA out of memory):**
1. Enable spill: `cudf.set_option("spill", True)`
2. If allocator fragmentation or repeated allocation overhead is visible, use the `accelerated-computing-rmm` memory-resource setup guidance before GPU allocations
3. Still failing: move to dask-cuDF

**AttributeError / NotImplementedError:**
- Check `references/api-patterns.md` for 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 uses `NaN`. See `references/api-patterns.md`.
- Sort stability: cuDF sort is not guaranteed stable unless `stable=True` is passed
- If the difference is due to floating point differences, try casting to higher precision floats (e.g. `float64` instead of `float32`). If the results are still different, stop. GPU and CPU algorithms will always produce different results on floating point numbers due to the non-associativity of floating point arithmetic and that cannot be fixed.

## 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`/`mask` semantics when they encode a condition. Use broad
  `fillna` only 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 dive
- `references/api-patterns.md` — Known API gaps, workarounds, semantic differences
- `references/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.rapids.ai/api/cudf/stable/
- **dask-cuDF API Reference:** https://docs.rapids.ai/api/dask-cudf/stable/api/
- **GitHub:** https://github.com/rapidsai/cudf
- **CHANGELOG:** https://github.com/rapidsai/cudf/blob/main/CHANGELOG.md

Todos los archivos

34 archivos
SKILL.md 9.2k
Ver

Instalar accelerated-computing-cudf

Descarga y extrae los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/NVIDIA/skills/tree/main/skills/accelerated-computing-cudf # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copie la carpeta de habilidades a .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio NVIDIA/skills

Habilidades relacionadas

microservices-patterns
Tiempo actualizado 29 de junio de 2026
jpa-patterns
Tiempo actualizado 30 de junio de 2026
fabric-lakehouse
Tiempo actualizado 30 de junio de 2026
prisma-expert
Tiempo actualizado 29 de junio de 2026
OR