Start a LocalCUDACluster from dask-cuda and connect a Client; one worker is pinned per GPU.
Why: LocalCUDACluster wires each Dask worker to a distinct GPU so the scheduler can balance work.
Building a multi-step Dask pipeline that recomputes too often.
Compose lazily and call .compute() once at the end; use persist() to cache reused intermediates in GPU memory.
Why: Dask is lazy - triggering compute too early or repeatedly redoes work.
Skewed partitions cause some GPU workers to lag.
Repartition to balanced sizes and align partition keys with downstream joins/groupbys.
Why: Uneven partitions create stragglers that bottleneck the whole job.
Keep an ETL β train β score workflow entirely on GPU.
Chain cuDF prep into cuML/XGBoost without converting to pandas in between, keeping data resident on the device.
Why: Every CPU round-trip adds transfer cost; staying on-device preserves the speedup end to end.
Need a workflow that reruns identically for review.
Pin RAPIDS/CUDA versions, set random seeds, and parameterize inputs so the pipeline is deterministic and re-executable.
Descriptive Analysis and Visualization
Compute summary statistics across a billion-row table.
Use cuDF describe/mean/std/quantile and corr; aggregations run as GPU kernels.
Scatter plot of 100M points overplots and is unreadable.
Render with Datashader, which rasterizes the points on GPU into a density image instead of drawing each marker.
Why: Datashader aggregates into pixels, so plot cost is bounded by image size, not point count.
Need an interactive cross-filtering dashboard over a huge GPU DataFrame.
Use cuxfilter to link charts with GPU-accelerated cross-filtering on cuDF data.
Why: cuxfilter keeps the data on-device so brushing/filtering stays interactive at scale.
Visualize the distribution of a large numeric column.
Bin with cuDF/CuPy on GPU, then plot the small aggregated result with Plotly or Matplotlib.
Why: Aggregate first on GPU; only the tiny summary needs to reach the plotting library.
Assess feature relationships before modeling.
Compute df.corr() in cuDF on GPU, then render the small matrix as a heatmap.
Want declarative interactive charts backed by GPU data.
Pair HoloViews/hvPlot with Datashader and cuDF for high-volume, interactive visualizations.
Foundations of Accelerated Data Science
Justify GPU acceleration for a data workload.
Use GPUs for massively data-parallel, throughput-bound ops over large datasets; keep small, branchy, or latency-sensitive work on CPU.
Why: GPUs win on SIMT parallelism across many elements; they lose on small or control-heavy tasks.
Explain how RAPIDS shares data across cuDF, CuPy, and ML libs without copies.
RAPIDS is built on the Apache Arrow columnar memory format, enabling zero-copy interchange between GPU libraries.
Why: A shared on-device columnar layout lets components hand off data without serialization.
A pipeline is GPU-accelerated but barely faster.
Profile data movement; repeated hostβdevice copies often dominate. Keep data resident on the GPU between steps.
Why: PCIe transfer is the hidden tax - minimizing copies is usually the biggest single win.
Understand what executes work on the GPU.
CUDA launches kernels across thousands of threads grouped into blocks/grids under the SIMT model; RAPIDS libraries wrap these so you rarely write kernels yourself.
Workload errors out with out-of-memory on a single GPU.
Reduce dtype sizes, process in chunks, or scale out with Dask; GPU VRAM is far smaller than host RAM.
Why: Device memory is the first constraint in GPU data science - design around it.
Map a CPU data-science task to the right RAPIDS library.
cuDF for DataFrames, cuML for ML, cuGraph for graphs, cuSpatial for geospatial, Dask for scale-out.