Проблема CPU-бутылочного горлышка
Традиционные пайплайны Data Science, построенные на CPU, часто становятся узким местом при работе с большими объемами табличных данных. Хотя GPU ассоциируются с обучением нейросетей, библиотека RAPIDS от NVIDIA предлагает инструменты для ускорения именно этапа подготовки данных (Data Preparation). Автор статьи Parul Pandey протестировала ускорение на реальном датасете NYC Yellow Taxi Trip Records (CCO License), содержащем ~9–10 миллионов поездок за первые три месяца 2023 года.
Два пути миграции: Native cuDF и cudf.pandas
Существует два основных способа перенести воркфлоу на GPU:
- Native cuDF API: Использование нативной библиотеки, синтаксически похожей на pandas, но выполняющей операции на GPU. Требует замены функций чтения данных (
cudf.read_parquet) и адаптации некоторых методов. - cudf.pandas: Режим ускорителя, позволяющий запускать существующий код на pandas без изменений. Активация происходит через
%load_ext cudf.pandasперед импортом библиотеки.
Результаты бенчмарков: Агрегация и GroupBy
Ключевые операции, такие как groupby и агрегация, наиболее выигрышно используют параллелизм GPU. В тесте на датасете из 10 млн строк были сравнены следующие сценарии:
| Операция | Инструмент | Результат / Эффект |
|---|---|---|
| Суммарная статистика (Sum, Mean, Count) | pandas (CPU) | Базовое время (1x) |
| Суммарная статистика (Sum, Mean, Count) | cuDF (GPU) | Значительное ускорение (в десятки раз) |
| Цепочка операций: GroupBy + ValueCounts + Head | pandas (CPU) | Базовое время (1x) |
| Цепочка операций: GroupBy + ValueCounts + Head | cuDF (GPU) | Существенное сокращение времени выполнения |
| Любой код на pandas | cudf.pandas | Ускорение без изменения строк кода |
Практические выводы
Для новых проектов, где важна максимальная производительность, рекомендуется использовать нативный cuDF. Однако для существующих пайплайнов cudf.pandas предлагает идеальный баланс: вы получаете прирост скорости за счет GPU-вычислений, не тратя время на рефакторинг кода. Конвертация между CPU и GPU DataFrames (to_pandas() и from_pandas()) позволяет гибко интегрировать GPU-этапы в гибридные рабочие процессы.
Источник: Towards Data Science ↗
