M08 · Data analysis, curation, and visualization08-0527 min read

Lesson 57 of 106 · Module 9 of 14 · Week 4

Threads:The measurement threadThe control thread

NVIDIA RAPIDS: cuDF, cuML, and cuGraph for GPU Data Science

RAPIDS is NVIDIA's open-source suite of GPU-accelerated data science libraries that mirror the familiar CPU Python stack API-for-API: cuDF is GPU pandas, cuML is GPU scikit-learn, and cuGraph is GPU NetworkX. That three-way mapping is the exam item — a Tier-2 recognition question, not a fluency requirement. GPU acceleration pays off when data volume is large enough that transfer and startup overhead is amortised and the operations are parallel; on small data the overhead dominates and CPU pandas wins.

01

What NVIDIA RAPIDS is

RAPIDS is a suite of open-source Python libraries, built on CUDA, that execute data science and analytics workloads on NVIDIA GPUs while exposing APIs closely modelled on the corresponding CPU libraries [NVIDIA-DOC]. It occupies the slot in NVIDIA's stack labelled GPU data science — the layer between raw CUDA and the deep-learning frameworks. When a question describes accelerating dataframe operations, classical machine learning, or graph analytics on GPUs, RAPIDS is the answer.

Two design decisions explain everything else about it:

API mirroring. RAPIDS libraries intentionally imitate their CPU counterparts' interfaces. The consequence is that porting is often a change of import rather than a rewrite, and the consequence of that is the exam's favourite framing: RAPIDS components are identified by which CPU library they replace.

Keeping data on the GPU. Moving data between host (CPU) memory and device (GPU) memory costs time. RAPIDS is designed so a whole pipeline — load, clean, join, aggregate, featurise, fit — can stay resident in GPU memory, paying the transfer cost once rather than at every step. This single fact explains the entire when-to-use rule: the overhead is fixed, the benefit scales with data, so there is a crossover size below which the CPU wins.

The component map

RAPIDS componentReplacesDomainThe one-line identity
cuDFpandasdataframesGPU dataframes: read, filter, join, group-by, aggregate
cuMLscikit-learnclassical machine learningGPU ML: regression, clustering, dimensionality reduction, tree ensembles, nearest neighbours
cuGraphNetworkXgraph analyticsGPU graphs: PageRank, connected components, centrality, traversal
cuPyNumPyn-dimensional arraysGPU arrays (part of the wider GPU-Python ecosystem RAPIDS builds on)
cuSpatialGeoPandasgeospatialGPU spatial operations
cuVS / RAFTvector search primitivessimilarity searchGPU-accelerated nearest-neighbour building blocks
Dask-cuDFDask + pandasscale-outdistributes cuDF across multiple GPUs and nodes

The first three rows are the exam. The rest are worth recognising so a distractor naming cuPy or cuSpatial does not unsettle you, but no reasonable question requires depth on them. The confusable-pairs list for this certification names cuDF vs cuML vs cuGraph explicitly as a trio to keep distinct [FIELD], which is a direct signal that a question exists in the form "which RAPIDS library replaces X?"

A memory device that survives exam pressure: cu + what it does. cuDF = dataframes = pandas. cuML = machine learning = scikit-learn. cuGraph = graphs = NetworkX. The names are the answers; the only trap is confusing which CPU library each corresponds to, and the expansion resolves it.

02

How GPU-accelerated data science works

L1 — Intuition: why a GPU can do dataframe work at all

A GPU is a throughput machine: thousands of relatively simple cores executing the same instruction across many data elements at once. A CPU is a latency machine: a few very sophisticated cores optimised for complex, branching, sequential work.

Most dataframe operations turn out to be a natural fit for the throughput machine, because they are element-wise or reduction-shaped: filter every row against a predicate, add two columns, group by a key and sum, sort, join on a key. Each of those applies the same logic across millions of independent elements — precisely the pattern a GPU is built for. Similarly, the classical ML algorithms in cuML are dominated by dense linear algebra and distance computations, and graph algorithms in cuGraph are dominated by repeated sparse matrix-style operations over edge lists. All three domains parallelise.

What does not fit: work that is sequential, branch-heavy, tiny, or dependent on Python-level per-row logic. A .apply() with an arbitrary Python function per row is the canonical anti-pattern; it drags execution back toward the interpreter and gives up the parallelism the GPU exists for.

L2 — The three components in more detail

cuDF. A dataframe library with a pandas-like API: reading CSV, Parquet, JSON and ORC; selection and filtering; joins and merges; group-by and aggregation; sorting; string operations; datetime handling. Its usefulness for the work in this module is direct — the deduplication, group-by-source cross-tabulation, and percentile computations from 08-03 are exactly the shapes that accelerate. Modern RAPIDS also ships a pandas accelerator mode (cudf.pandas) that lets unmodified pandas code run on the GPU where supported and fall back to CPU where not; for the exam, the fact to hold is that such a compatibility path exists, not its flags.

The important caveat is coverage: cuDF mirrors most of pandas, not all of it. Some methods, dtypes, and index behaviours differ or are unsupported, so "drop-in replacement" is a design goal that is largely met rather than a guarantee. Treat any claim of perfect API parity as a distractor.

cuML. GPU implementations of the classical ML algorithm families you would reach for in scikit-learn: linear and logistic regression, ridge/lasso, k-means and DBSCAN clustering, PCA and truncated SVD, t-SNE and UMAP for dimensionality reduction, random forests and gradient-boosted trees, k-nearest neighbours, and support vector machines. The API deliberately follows scikit-learn's fit / predict / transform conventions.

Where it matters for LLM work: k-nearest neighbours and clustering over embedding vectors. Clustering a large embedding set to find topical structure, or running approximate nearest-neighbour search over millions of vectors, are cuML-shaped problems, and they connect directly to the embedding and retrieval work in 03-01 and 07-04. Note the boundary though — cuML is classical ML. It is not a deep-learning framework and does not train neural networks; that is PyTorch and TensorFlow territory, and confusing the two is a distractor family.

cuGraph. GPU graph analytics with a NetworkX-like API: PageRank, betweenness and other centrality measures, connected components, community detection (Louvain), shortest paths, breadth- and depth-first traversal. Graph algorithms are the least intuitive of the three as a GPU fit, but they are dominated by repeated sparse operations over the same edge structure, which parallelises well and rewards keeping the graph resident in GPU memory across iterations. Graph work with NetworkX and cuGraph is named in this course's feature-engineering material for exactly this reason.

Dask and Polars, for context. Two non-RAPIDS scale tools worth being able to place, since the official suggested-reading orbit includes big-data topics:

ToolWhat it isRelationship to RAPIDS
DaskPython parallel-computing framework that partitions work across cores, processes, or a clusterDask-cuDF combines them: Dask distributes, cuDF accelerates each partition. Dask is the multi-GPU / multi-node story
Polarsfast dataframe library in Rust, columnar and multi-threaded, CPU-baseda CPU alternative that closes much of the single-node performance gap without a GPU; not part of RAPIDS

The distinction worth carrying: Dask is about distributing work across more devices; cuDF is about making one device faster; Polars is about making the CPU path faster. They answer different questions and a well-formed exam option will reflect that. Also note the scaling ladder implied: pandas → Polars or cuDF on one machine → Dask-cuDF across many GPUs.

L3 — When GPU acceleration actually pays off

This is the judgment half of the lesson, and the part where it is easy to over-claim. This course quotes no speedup figure, because none of the sources it is built from supply a benchmark that can be responsibly attributed, and a fabricated multiplier is worse than an admitted gap. What can be said structurally is more useful for an exam anyway.

GPU acceleration has costs that do not scale with your data:

Fixed costWhat it is
Process and CUDA context startupinitialising the GPU runtime
Host-to-device transfercopying data from CPU RAM to GPU memory across the PCIe or NVLink bus
Device-to-host transfercopying results back, per round trip
Kernel launch overheadper-operation dispatch cost

And a hard constraint that CPU work does not have: GPU memory is a fixed, comparatively small budget. A dataset that fits in host RAM may not fit in device memory, and exceeding it produces an out-of-memory failure rather than graceful slowdown. The mitigations are chunking, multi-GPU via Dask-cuDF, and, in recent RAPIDS, unified/managed memory — but the constraint is the first thing to check before proposing a GPU pipeline.

So the payoff condition is a conjunction:

GPU acceleration pays off when — (1) the dataset is large relative to the fixed overheads, (2) the operations are parallelisable rather than sequential or per-row-Python, (3) the working set fits in GPU memory or can be partitioned to, and (4) the pipeline can stay on the GPU for multiple steps so the transfer is paid once, not per operation.

It does not pay off when the data is small (the overhead dominates and pandas finishes first), when the work is a single trivial operation on data already in CPU memory (you pay two transfers to save microseconds), when the bottleneck is disk or network I/O rather than compute, when the logic is inherently row-sequential, or when no GPU is available and the environment must run anywhere.

One additional practical point, and it is the one that catches people converting a working pipeline: transfer costs are per boundary crossing, so a pipeline that bounces between cuDF and pandas repeatedly can be slower than either pure path. The win comes from staying on one side. Convert once at the start, work, convert once at the end.

03

cuDF vs cuML vs cuGraph vs Dask vs Polars vs deep-learning frameworks

The disambiguation table. Read it right-to-left when an exam stem names a CPU library and asks for the GPU equivalent.

ComponentReplaces / relates toDomainUse it forDo not confuse with
cuDFpandastabular dataframesfiltering, joins, group-by, aggregation, string ops, I/OcuML — cuDF does not fit models
cuMLscikit-learnclassical MLregression, clustering, PCA/UMAP, random forest, kNN, SVMPyTorch/TensorFlow — cuML is not a deep-learning framework
cuGraphNetworkXgraph analyticsPageRank, centrality, connected components, community detectionvector search — graphs are not embeddings
cuPyNumPyn-dim arraysGPU array mathcuDF — arrays are not labelled dataframes
Dask— (orchestration)parallel/distributed executionscaling across cores, GPUs, or nodescuDF — Dask distributes, it does not itself accelerate on GPU
Polarspandas (CPU)fast CPU dataframessingle-machine speed without a GPUcuDF — Polars is a CPU library and not part of RAPIDS
PyTorch / TensorFlowdeep learningtraining and running neural networkscuML — different problem class
TensorRT / TensorRT-LLMinference optimisationcompiling a trained model for fast inferenceRAPIDS — optimisation, not data science (12-08)
Triton / NIMserving and deploymenthosting models behind an APIRAPIDS — deployment, not data prep (12-13)
NeMo CuratorLLM data curationdownload, clean, filter, dedup a training corpus at scalecuDF — Curator is a curation pipeline, cuDF is a dataframe library

The last three rows exist because RAPIDS questions frequently appear inside a broader NVIDIA-stack question, and the failure mode is picking a real NVIDIA product that solves a different problem. The one-line placements to hold:

  • RAPIDS = GPU data science (prepare and analyse the data)
  • NeMo = build, customise, and curate for LLMs — with NeMo Curator owning data curation (08-01)
  • TensorRT / TensorRT-LLM = optimise a model for inference
  • Triton = serve many models
  • NIM = packaged, pre-optimised inference microservice

Note the genuine adjacency between RAPIDS and NeMo Curator, which is where a careless answer goes wrong. Both touch data at scale, and NVIDIA's curation tooling is itself GPU-accelerated. The discriminator is level of abstraction: cuDF is a general-purpose dataframe library you write analysis code against; NeMo Curator is a purpose-built curation pipeline for LLM training corpora. If the stem says "curate a training dataset," answer NeMo Curator. If it says "accelerate pandas-style dataframe operations," answer cuDF.

04

Worked example: an illustrative migration decision

The figures below are constructed for illustration to expose the reasoning about fixed versus scaling costs. They are not measured, and no speedup claim should be taken from them.

Continue the 12,000-document corpus from 08-03. The profiling pipeline does: load metadata, tokenize and count, dedup by hash, compute near-duplicate similarity, group-by-source cross-tabs, and cluster the embeddings to find topical structure. A colleague asks whether it should be a RAPIDS pipeline.

Work the four payoff conditions in order rather than guessing.

Condition 1 — is the data large relative to the overheads? 12,000 documents is metadata for 12,000 rows plus one embedding matrix. As a dataframe, 12,000 rows is small. Rows in the thousands are where pandas is comfortably fast and the CUDA context startup plus two transfers is a meaningful fraction of total runtime. Verdict for the dataframe steps: no benefit, likely a small net loss.

Condition 2 — which operations are parallelisable? Break the pipeline down:

StepShapeParallel?Right tool at this scale
Load metadata (12k rows)I/O boundn/apandas
Tokenize and countper-document, CPU tokenizer librarypartly, but tokenizer is CPU-sidepandas + the tokenizer
Exact dedup by hashhashing + group-byyeseither; too small to matter
Near-duplicate similarityall-pairs-ish similaritystrongly yesGPU if the set were larger
Group-by-source cross-tabsreductionyeseither; too small to matter
Cluster embeddings (12k × 768)distance computation, iterativestrongly yescuML is plausible even here
Percentile computationsort + indexyeseither

Two steps are genuinely GPU-shaped. The rest are too small to care.

Condition 3 — does it fit in GPU memory? A 12,000 × 768 float32 embedding matrix is about 12,000 × 768 × 4 bytes ≈ 35 MB. Trivially yes. Note that this is also the arithmetic that says the problem is small: 35 MB is not a GPU-scale working set.

Condition 4 — can the pipeline stay on the GPU? No. The tokenizer is CPU-side and sits in the middle of the pipeline, so a GPU implementation would bounce across the boundary — the exact anti-pattern from section 2.

The decision: keep the profiling pipeline in pandas. Optionally use cuML for the embedding clustering as a single self-contained GPU step, transferring the 35 MB matrix in and the labels out — one boundary crossing, one parallel workload, no bouncing.

Now change one number. The same pipeline over 12 million documents. Re-run the conditions:

Condition12,000 docs12,000,000 docs
Size vs overheadoverhead-dominatedoverhead is negligible against the work
Parallelisable steps2 of 7 matterdedup, group-by, sort, similarity, clustering all matter
Embedding matrix~35 MB~35 GB — exceeds most single-GPU memory
Stay-on-GPUbroken by CPU tokenizerworth restructuring the pipeline to preserve
Verdictpandas, plus cuML for clusteringcuDF for the dataframe work, cuML for clustering, and Dask-cuDF because 35 GB needs partitioning across GPUs or chunking

The finding, and the exam-relevant lesson: the correct answer changed because of scale, not because of preference, and the constraint that forced the multi-GPU decision was GPU memory capacity, not compute. That is the reasoning shape to bring to a scenario question — check whether the working set fits before proposing the GPU path, and reach for Dask-cuDF when it does not.

05

When to reach for RAPIDS and when not to: the decision table

SituationReach forRationale
Thousands of rows, exploratory notebook workpandasoverhead exceeds benefit; the GPU is idle waiting on transfers
Tens of millions of rows, repeated group-by and join workcuDFparallel operations, overhead amortised, pipeline can stay resident
Same workload but exceeds one GPU's memoryDask-cuDFpartition across GPUs or nodes; capacity, not compute, is the constraint
Need single-machine speed with no GPU availablePolarscloses much of the gap on CPU; not part of RAPIDS
k-means, PCA, UMAP, or kNN over a large embedding setcuMLdistance-dominated and highly parallel
Training a neural networkPyTorch / TensorFlowcuML is classical ML only
PageRank or community detection on a large graphcuGraphiterative sparse operations, resident graph
Bottleneck is reading files from object storageneitherI/O bound; a faster compute engine changes nothing
Row-by-row Python logic in .apply()rewrite it firstvectorise before accelerating; unvectorised code defeats the GPU
A pipeline alternating between CPU-only libraries and dataframe opspick one siderepeated boundary crossings can be slower than either pure path
Curating an LLM training corpus at web scaleNeMo Curatorpurpose-built curation pipeline, not a general dataframe library
Code must run in an environment with no guaranteed GPUCPU stack, with an optional accelerated pathportability is a requirement, not a preference
Learning for this exam on a free entry-level GPUread this lesson, do not build a labthe exam wants recognition; fluency here is not a good use of study time

That last row is a deliberate piece of course design. This lesson is allocated the shortest study time in the module because the exam's demand is a mapping, and the honest advice is to bank the mapping and move on.

06

Why NVIDIA RAPIDS is on the NCA-GENL exam

Objectives served. 2.1 "awareness of the process of extracting insights from large datasets using data mining, data visualization, and similar techniques" — note large datasets, which is the clause RAPIDS answers — and 2.3 "conduct data analysis under the supervision of a senior team member" [OFFICIAL]. It also sits under 1.10 / 4.6, "use Python packages (spaCy, NumPy, Keras, etc.) to implement specific traditional machine learning analyses," because cuML is precisely traditional ML, and under 1.6 / 4.3 on familiarity with the Python ecosystem. Crucially, the official study guide's suggested-reading list names RAPIDS, cuML, and GPU data science among its readings, which is about as explicit a signal as the blueprint gives that these names are expected knowledge [OFFICIAL].

Calibration. RAPIDS is Tier 2 in the [FIELD] priority tiers, alongside data-quality handling and TensorRT/Triton — above visualization, below tokenization and NIM [FIELD]. Two further calibration findings shape how to study it. First, NVIDIA-branded answers are favoured: when two options are technically defensible, the NVIDIA-stack option tends to be keyed, which means an option naming a RAPIDS component in a GPU-data-science stem deserves serious weight. Second, deep GPU-hardware detail was reported as overkill and absent, so nothing below the component-identity level is worth memorising.

The net: this is a small number of near-guaranteed marks available for a few minutes of memorisation, which is an unusually good trade in a 50–60 question exam with roughly 60–70 seconds per question.

Question phrasings to expect

  • "Which RAPIDS library provides a GPU-accelerated equivalent of pandas?" → cuDF.
  • "Which RAPIDS library provides GPU-accelerated machine learning algorithms similar to scikit-learn?" → cuML.
  • "Which RAPIDS library accelerates graph analytics in place of NetworkX?" → cuGraph.
  • "A team's pandas pipeline over tens of millions of rows is too slow. Which NVIDIA solution addresses this with minimal code change?" → cuDF / RAPIDS, because the API mirrors pandas.
  • "What is the main design goal of the RAPIDS APIs?" → to mirror familiar CPU library APIs so existing code ports with minimal change while executing on the GPU.
  • "When is GPU-accelerated data processing not beneficial?" → on small datasets, where transfer and startup overhead dominates; on I/O-bound work; on inherently sequential logic.
  • "Which tool scales a cuDF workload across multiple GPUs or nodes?" → Dask (Dask-cuDF).
  • "What limits the size of a dataset that can be processed on a single GPU?" → GPU memory capacity.
  • "Which is used for GPU-accelerated data science rather than model serving?" → RAPIDS, versus Triton/NIM for serving and TensorRT for inference optimisation.

Distractor families

Distractor familyLooks likeWhy it is wrong
Swapped component mapping"cuML is the GPU pandas replacement"cuDF is pandas; cuML is scikit-learn. This is the single most likely trap
cuML offered for deep learning"use cuML to train a transformer"cuML is classical ML; neural network training is PyTorch/TensorFlow
cuGraph offered for vector search"use cuGraph to search embeddings"graph analytics, not similarity search; vector search is a vector DB / ANN index (07-04)
Dask presented as a GPU library"Dask accelerates dataframes on the GPU"Dask distributes work; the GPU acceleration comes from cuDF underneath it
Polars presented as part of RAPIDS"Polars is the RAPIDS CPU dataframe"Polars is an independent CPU library, not an NVIDIA product
GPU as an unconditional speedup"always use cuDF instead of pandas"on small data the fixed overhead dominates and pandas is faster
Wrong stack layerTriton, NIM, or TensorRT offered for a data-preparation stemserving, deployment, and inference optimisation respectively — not data science
NeMo Curator vs cuDF confusioneither offered for the other's stemCurator is a purpose-built LLM corpus curation pipeline; cuDF is a general dataframe library
Quoted speedup multipliers"provides exactly N× faster processing"treat any specific unsourced multiplier with suspicion; the defensible claim is structural, about which workloads parallelise
Perfect API parity claimed"cuDF supports the entire pandas API identically"mirroring is a design goal that is largely met, not a guarantee; coverage gaps exist
07

Common mistakes with RAPIDS and GPU data science

#SymptomCauseFix
1GPU version of a small script is slower than pandasfixed overhead (context startup, transfers) dominates at small scalekeep small work on CPU; measure before migrating
2Pipeline is slower after converting half of itrepeated CPU↔GPU boundary crossingsconvert once at the start, once at the end; do not alternate
3Out-of-memory error on data that fits in host RAMGPU memory is a much smaller, fixed budgetchunk the work, use Dask-cuDF across GPUs, or check managed-memory options
4Almost no speedup despite large datalogic sits in a per-row Python .apply()vectorise first; unvectorised code cannot use the parallelism
5A cuDF port fails on an unsupported method or dtypeassumed perfect pandas API paritycheck coverage for the specific operations; keep a CPU fallback path
6Migration effort spent, no user-visible improvementthe real bottleneck was disk or network I/Oprofile to find the actual bottleneck before choosing an accelerator
7Answer chosen was Triton or TensorRT on a data-prep questionstack layers conflatedRAPIDS = data science; TensorRT = optimise; Triton = serve; NIM = packaged deploy
8Component mapping recalled backwards under time pressurememorised as a list rather than as expansionsexpand the names: cuDF = dataframes, cuML = machine learning, cuGraph = graphs
9Code runs in the notebook and fails in CICI runner has no GPUmake the GPU path optional and detected, not assumed

Mistake 8 deserves the extra second it takes to prevent. Under exam pressure the three cu* names blur, and the reliable defence is to expand the suffix rather than to recall a memorised pairing: DF is dataframes, so pandas. ML is machine learning, so scikit-learn. Graph is graphs, so NetworkX.

What is the difference between cuDF, cuML, and cuGraph?

They cover three different problem domains and replace three different CPU libraries. cuDF is the dataframe library — the GPU equivalent of pandas — handling I/O, filtering, joins, group-by, aggregation, sorting, and string operations on tabular data. cuML is the classical machine learning library — the GPU equivalent of scikit-learn — providing regression, k-means and DBSCAN clustering, PCA and UMAP, random forests, k-nearest neighbours, and SVMs, with the same fit/predict/transform conventions. cuGraph is the graph analytics library — the GPU equivalent of NetworkX — providing PageRank, centrality measures, connected components, community detection, and traversals. They compose naturally in a single pipeline: load and clean in cuDF, featurise and fit in cuML, analyse relationships in cuGraph, all without leaving GPU memory. That last property is the point of having them share a suite rather than existing separately.

Is cuDF really a drop-in replacement for pandas?

Close enough to be the design principle, not close enough to be a guarantee — and that nuance is worth holding because both the over-claim and the under-claim show up as distractors. The API is intentionally modelled on pandas, so a large fraction of ordinary dataframe code ports with an import change, and RAPIDS additionally offers a pandas accelerator mode that runs unmodified pandas code on the GPU where operations are supported and falls back to CPU where they are not. What is not guaranteed is complete coverage: some pandas methods, dtypes, and index behaviours are unsupported or behave differently, and code that reaches for obscure corners of the API or for per-row Python callbacks will need work. The practical posture is to treat the mirroring as a strong head start rather than a promise, test the specific operations your pipeline uses, and keep a CPU fallback for environments without a GPU.

When does GPU acceleration not help a data science workload?

Four situations, and they are worth being able to recite because the exam asks the negative form. Small data, where CUDA context startup and host-to-device transfer are a large fraction of total runtime and pandas finishes first. I/O-bound work, where the pipeline spends its time waiting on disk or object storage and a faster compute engine changes nothing. Inherently sequential or branch-heavy logic, including per-row Python callbacks, which cannot exploit thousands of parallel cores. Working sets that exceed GPU memory without being partitioned, where the result is an out-of-memory failure rather than a slowdown — this is a capacity constraint, distinct from the others, and it is why Dask-cuDF exists. A fifth practical case: pipelines that alternate between GPU and CPU libraries, where repeated boundary crossings can cost more than either pure path. The single sentence to carry into the exam: GPU acceleration is a throughput advantage with a fixed setup cost, so it wins when the work is big and parallel and loses when it is small, sequential, or I/O-bound.

How does RAPIDS relate to NeMo, TensorRT, Triton, and NIM?

They are different layers of the same stack and each owns one verb. RAPIDS prepares and analyses data on the GPU — the data science layer. NeMo builds and customises LLMs, with NeMo Curator owning corpus curation, NeMo Retriever owning retrieval accuracy, and NeMo Guardrails owning runtime safety rails. TensorRT compiles a trained model for fast inference, and TensorRT-LLM adds the LLM-specific machinery (KV cache, paged attention, in-flight batching). Triton Inference Server serves many models with features like dynamic batching. NIM packages a pre-optimised model as a deployable inference microservice. A stem that describes accelerating dataframe or classical-ML work is RAPIDS; one that describes cleaning and deduplicating a training corpus is NeMo Curator; one about making inference faster is TensorRT; one about hosting models is Triton or NIM. Getting the layer right is most of getting the answer right, and 12-08 and 12-13 cover the optimisation and serving layers properly.

Do I need a GPU to learn RAPIDS for the NCA-GENL exam?

No, and this is a deliberate judgment rather than a concession. The exam examines RAPIDS at recognition depth: which component replaces which CPU library, what problem class RAPIDS occupies in NVIDIA's stack, and when GPU acceleration is and is not worthwhile. All of that is learnable from reading, and the [FIELD] calibration that this exam asks general-level rather than deep-technical questions applies with particular force here [FIELD]. If you already have GPU access and a genuinely large dataset, running one cuDF and one cuML workload will make the memory-capacity and transfer-overhead constraints concrete in a way reading does not, and that is worth an hour. If you are working on a free entry-level GPU with small data, you will mostly demonstrate the overhead-dominated case from section 4 — educational in its own way, but not what the exam asks about. Spend the time on Tier-1 material instead.

Glossary recap: the terms this lesson introduced

TermDefinition
RAPIDSNVIDIA's open-source suite of CUDA-based Python libraries for GPU-accelerated data science, with APIs mirroring the CPU stack [NVIDIA-DOC].
cuDFRAPIDS GPU dataframe library; the GPU counterpart to pandas.
cuMLRAPIDS GPU classical machine learning library; the GPU counterpart to scikit-learn. Not a deep-learning framework.
cuGraphRAPIDS GPU graph analytics library; the GPU counterpart to NetworkX.
cuPyGPU n-dimensional array library; the counterpart to NumPy.
DaskPython parallel-computing framework for distributing work across cores, GPUs, or nodes.
Dask-cuDFDask distributing cuDF partitions across multiple GPUs or nodes; the answer when the working set exceeds one GPU's memory.
PolarsFast columnar CPU dataframe library; an alternative to pandas, and not part of RAPIDS.
API mirroringRAPIDS' design principle of imitating CPU library interfaces so code ports with minimal change.
pandas accelerator modeThe RAPIDS compatibility path (cudf.pandas) that runs unmodified pandas code on the GPU where supported, falling back to CPU otherwise.
Host-to-device transferCopying data from CPU RAM to GPU memory; a fixed cost paid per boundary crossing.
CUDA context startupThe one-time cost of initialising the GPU runtime in a process.
GPU memory capacity constraintThe fixed, comparatively small device memory budget; exceeding it fails rather than degrades.
VectorisationExpressing computation as whole-array operations rather than per-row Python, which is prerequisite to any GPU benefit.
Overhead-dominated workloadA job small enough that setup and transfer costs exceed the compute saved, where the CPU path wins.

Key takeaways on NVIDIA RAPIDS for GPU data science

  1. Memorise the three-way mapping cold: cuDF = GPU pandas · cuML = GPU scikit-learn · cuGraph = GPU NetworkX. This is the exam item, and expanding the suffix (dataframes / machine learning / graphs) is the recall trick that survives time pressure.
  2. RAPIDS' design principle is API mirroring — imitating CPU library interfaces so existing code ports with minimal change while running on the GPU.
  3. cuML is classical ML, not deep learning. Neural network training is PyTorch and TensorFlow; that swap is a distractor.
  4. GPU acceleration pays off on large, parallel, GPU-resident workloads and loses on small data, I/O-bound work, sequential per-row logic, and pipelines that keep crossing the CPU/GPU boundary.
  5. GPU memory capacity is a hard constraint, not a soft one. Exceeding it fails; Dask-cuDF is the answer when the working set needs partitioning across GPUs or nodes.
  6. Dask distributes, cuDF accelerates, Polars is a CPU alternative. Three different answers to three different questions, and Polars is not an NVIDIA product.
  7. Vectorise before you accelerate. A per-row Python .apply() gives up exactly the parallelism the GPU exists to provide.
  8. Get the stack layer right: RAPIDS = data science · NeMo Curator = LLM corpus curation · TensorRT = inference optimisation · Triton = serving · NIM = packaged deployment microservice.
  9. Do not memorise speedup numbers. This course quotes none because none can be responsibly sourced from its material; the defensible claim is structural — which workload shapes parallelise and which fixed costs must be amortised.
  10. Tier 2, recognition depth. A few minutes of memorisation for near-certain marks; then move your study time to Tier-1 topics.

Next: scaling the evaluation set to a hundred items

That closes this module. You can now curate a dataset on purpose including the cases that should fail, name any defect from its symptom, profile a text corpus in tokens rather than characters, choose the chart that answers the question you actually asked, disaggregate it so group-level harm can be seen, and identify which RAPIDS component replaces which CPU library and whether reaching for it is justified.

Next: 09-01 returns to the 20-item evaluation set you built by hand back in 01-08 and grows it to roughly a hundred items — using exactly the curation discipline, coverage matrix, and defect vocabulary this module just gave you. The measurement thread that ran through this module becomes the whole subject of the next one, and the first question it answers is how to add eighty items without quietly making the set easier.