Two Years in a Snap — RAPIDS Release 0.16
By: Josh Patterson
Tags: Big Data, Rapids Ai, Gpu, Data Science, Machine Learning

RAPIDS cuGRAPH

In release 0.16, cuGraph kicked off three major long-term themes. The first is to go big. We have shifted to a new 2D data model that removes the 2 billion vertex limitation and offers better performance and scaling into the 100TB+ graph range. The first multi-node multi-GPU (MNMG) algorithms updated to use the new data model are PageRank, SSSP, BFS, and Louvain.

The second theme is to go wide, by expanding our supported input data models. In 0.16, we are happy to announce that NetworkX graph objects are now valid data types into our algorithms. We are still expanding interoperability between cuGraph and NetworkX and moving to support CuPy and other data types. The last theme is to go small and develop a collection of graph primitives. The primitives support both single GPU and multi-GPU workflows and allow us to have a single code base for both.

RAPIDS Memory Manager (RMM)

RMM 0.16 focused on reduced fragmentation for multithreaded usage, and CMake improvements. This release includes a ton of CMake improvements from contributor Kai Germaschewski that make it easier to use RMM in other CMake-based projects (and more improvements to come!). It also includes a new arena memory resource that reduces fragmentation when many threads share a single GPU, as well as improvements to the pool memory resource to reduce the impact of fragmentation. Another new memory resource is the `limiting_resource_adaptor`, which allows you to impose a maximum memory usage on any `device_memory_resource`. We have improved diagnostics with debug and trace logging, currently supported in the pool_memory_resource. A new simulated memory resource allows running the RMM log replayer benchmark with a simulated larger memory, which can help with diagnosing out-of-memory errors and fragmentation problems. And last, but definitely not least, by removing previously deprecated functionality, librmm is now a header-only library.

RAPIDS Dask-cuDF

For the 0.16 release, Dask-cuDF added an optimized groupby aggregation path when applying many aggregations. Previously, for each aggregation operation, dask-cudf would run serially against the groupby object. Now, Dask-cuDF will call the aggregation operations in parallel on the GPU. This is a big step forward for performance.

RAPIDS cuSignal

cuSignal 0.16 focuses on benchmarking, testing, and performance. We now have 100% API coverage within our PyTest suite — ensuring that deployed features are numerically comparable to SciPy Signal. Further, via our performance studies, we found multiple functions that were better suited to ElementWise CuPy CUDA kernels versus standard CuPy functions — resulting in 2–4x performance gains over cuSignal 0.15.

BlazingSQL

It’s now easier than ever to get started with RAPIDS and BlazingSQL. You can now find BlazingSQL containers on the RAPIDS Getting Started Selector, and we have expanded Blazing Notebooks to include more RAPIDS packages (CLX and cuXfilter) with a multi-GPU private beta slated for public release in early November.

For version 0.16, we have been working hard closing out dozens of user-submitted issues. At the same time, we have been working on a major overhaul of the communications layer in BlazingSQL. SQL queries are shuffle-heavy operations; this new communication layer, (soon to be merged into the 0.17 nightlies) increases performance across 95% of workloads while setting us up to utilize UCX, enabling the technologies of NVIDIA’s NVLink, Mellanox Infiniband, etc. for even greater performance.

NVTabular

NVTabular provides fast on GPU feature engineering and preprocessing and faster GPU based data loading to PyTorch, Tensorflow, HugeCTR, and Fast.ai, speeding up tabular deep learning workflows by 5–20x when used in conjunction with NVIDIA AMP. Since its inception, it has relied on RAPIDS cuDF to provide core IO and dataframe functionality.

With the recent 0.2 release, NVTabular is now even more integrated with the RAPIDS ecosystem, switching from a custom iteration back end to one built entirely on Dask-cuDF. This means users can now pass Dask-cuDF or cuDF dataframes as input in addition to the many file formats already supported by cuIO and can mix and match between NVTabular and Dask-cuDF seamlessly, writing custom ops for NVTabular directly in Dask-cuDF. It also allows for easy scaling across multiple GPUs or even multiple nodes; In a recent benchmark, we were able to preprocess the 1.2TB — 4 Billion row Criteo Ads dataset in under 2 minutes on a DGX A100.

RAPIDS version 0.16 introduces list support in cuDF which allows for the addition of NVTabular’s most requested feature, Multi-hot categorical columns, and the team is hard at work on that for NVTabular version 0.3.

CLX

While there were multiple performance improvements and tweaks to the example notebooks in CLX, making them more performant and easier to use, the big enhancements come to cyBERT. In addition to the on-demand batched mode previously supported, cyBERT can now utilize a streaming pipeline for continuous, inline log parsing. In addition, cyBERT has been modified to support ELECTRA models in addition to the previously supported BERT models. While BERT is still preferred for the log types we’ve observed thus far (providing higher parsing accuracy albeit at a slightly slower speed), ELECTRA support will allow others using cyBERT greater flexibility in choosing a model that works for them in their network environments. cyBERT also got a few more tweaks and improvements, including a new data loader that helps keep up with larger streaming pipelines.

RAPIDS Community

We’re starting a podcast called RAPIDS Fire. The first episode releases in early November, so keep your eyes out for the announcement. We’d love to have your feedback on topics and invite the community to join the dialogue. The format is going to be unique like RAPIDS is unique. There’s going to be a host, Paul Mahler, and rotating co-hosts. I’m up first. The two hosts will interview a guest on anything and everything related to accelerated data science and the RAPIDS Community. We’re really pumped about this, so expect a blog announcing the first episode. We expect the podcast to be available anywhere podcasts are found.

Wrap Up

RAPIDS has made so much progress in two years I almost can’t believe it myself. We have a lot of exciting new things on the way in version 0.17, more improvements to SHAP, more MNMG algorithms in cuGraph, and nested type support in cuDF will continue to improve. As always, find us on GitHub, follow us on Twitter, and check out our documentation and getting started resources. We’re excited to have you join us, and we’re looking forward to another great year of RAPIDS.

And Vote!