Дорожная карта
- Чайная беседа на Даске
- Почему Dask a Showstopper?
- Рабочие нагрузки Dask
Что такое Dask в целом?
Механизм рабочей нагрузки - Коллекции Dask
Высокоуровневый API: Dataframe, Массивы, Сумки, Sklearn
Низкоуровневый API: Delayed, Futures - Темная сторона Даска
- Спарк против Даска
Недавно я столкнулся с очень интересной библиотекой Python под названием DASK. Это библиотека Python с открытым исходным кодом с исключительной функцией параллелизма и масштабируемости. Его можно масштабировать в локальной системе или даже на кластере машин. Он создал свое пространство для разработки, связанной с Python, или для построения модели машинного обучения и искусственного интеллекта.
Итак, начнем с этого. 🍵
Чайная беседа на Даске
- Dask - это библиотека Python с открытым исходным кодом, обладающая функциями параллелизма и масштабируемости в Python.
- По умолчанию включен в дистрибутив Anaconda.
- Dask повторно использует существующие библиотеки Python, такие как pandas или numpy, и улучшает их за счет масштабируемости. Также реализованы алгоритмы машинного обучения, относящиеся к sklearn.
- Dask лучше справился с обработкой данных, работая с огромными данными в ГБ, чем pandas и данные прямой трансляции, как и Spark.
- Dask использует механизм ленивых вычислений, в котором вычисления будут выполняться только по явному запросу.
Например,
Предположим, чтобы покрасить 4 стены комнаты, один маляр завершает работу за 4 дня, в то время как 2 маляра вместе занимают максимум 2 дня. Это подчеркивает производительность по скорости и времени, адаптированную Даском.
Почему именно Dask a Showstopper?
- Использование параллелизма в стеке PyData
Библиотеки в стеке PyData, такие как pandas и numpy, созданы для одного ядра ЦП, что приводит к следующим проблемам:
1. Чтение объекта Python (например, фрейма данных ) больше, чем размер ОЗУ, вызывает ошибку нехватки памяти и приводит к сбою системы.
2. Вычисления могут занять много времени.
Dask обходит глобальную блокировку интерпретатора (GIL) и использует многопроцессорные ядра, разделяя объекты Python на части и обрабатывая их параллельно.
- Масштабируемость и распределенные вычисления
DASK может обрабатывать большие наборы данных на одном процессоре, используя его несколько ядер на одном компьютере или кластере машин, выполняющих параллельные вычисления. - Ограничение памяти в Pandas при чтении и обработке огромных данных.
Демонстрация оптимизированных способов чтения больших файлов CSV на Python
- Dask поддерживает потоковую передачу данных в реальном времени, как Spark, что невозможно в Pandas.
- Простая отладка и диагностика
Красивая панель инструментов dask, позволяющая постоянно следить за ходом работы и производительностью на разных машинах. - Чтение нескольких CSV одновременно
Pandas использует read_csv () для чтения одного CSV в память, но чтение нескольких CSV в один невозможно. Но в dask можно использовать символы подстановки, как в Spark.
Рабочие нагрузки Dask
Что такое Dask в целом?
Dask в основном построен с использованием высокоуровневых и низкоуровневых API с планировщиками, контролирующими процесс. В этом разделе мы подробнее поговорим о планировщиках, а в следующем - об этих API.
Механизм рабочей нагрузки
- Даск использует концепцию ленивой оценки, что означает создание результатов только по запросу при вызове compute (). Это выполнение выполняется через следующую группу DAG, координируемую планировщиками задач.
The Marvel: Планировщик заданий
- Планировщик задач, показанный на рисунке 1, координирует вычисления по принципу «разделяй и властвуй», используя параллелизм между ядрами ЦП.
- Как показано на рис. 2, граф задач создается в памяти, в нем последовательно выполняются задачи при вызове compute ().
- Он создает и управляет направленным ациклическим графом (DAG) для моделирования логического представления задач, также известного как график задач. Он управляет, распределяя задачи между работниками узла для параллельных вычислений, генерируя единый результат.
Другое чудо: DAG
- Ациклический ориентированный граф с узлами и ребрами, представляющими отношения.
- Создается планировщиком задач, представляющим шаги для вычисления результата.
- Направлено как движение в одну сторону до конечного узла
- visualize () используется для его визуализации, как показано ниже.
Коллекции Dask
Коллекции, указанные на рисунке 3, распределяются по многоядерным процессорам одного процессора, а затем вычисляются параллельно.
API высокого уровня
- Массивы Dask: (Parallel Numpy, т. е. numpy + threading)
- Один большой массив dask, разбитый на небольшие массивы numpy, распределенные по нескольким ядрам ЦП, работающие параллельно.
- Нагрузки, даже если они больше ОЗУ
- Любая операция с массивом dask запускает то же самое для небольших фрагментов, каждый из которых использует ядро. Это ускоряет вычисления.
2. Фреймы данных Dask: (параллельные панды, т. Е. Панды + потоки)
- То же, что и массив dask, большой фрейм данных, разделенный на маленькие фреймы данных pandas по индексам, как показано на рисунке 4, распределенный по нескольким ядрам ЦП, работающим параллельно.
- Загружает фрейм данных , даже если он больше ОЗУ. Для практического использования проверьте Оптимизированные способы чтения больших CSV в Python.
- Также ускоряет вычисления при одновременном выполнении фрагментов.
3. Пакеты для документов: (параллельный список, т. Е. Список + потоки)
- Параллельный сбор объектов Python, то есть разделов более крупной коллекции.
- Используется при работе с полу- или неструктурированными данными
Например, предварительная обработка JSON, файлов журналов или текстовых данных. Кроме того, определяемый пользователем объект Python.
- Бенефициары:
В случаях чтения вложенного JSON полезны пакеты, которые позже можно преобразовать в фреймворк данных dask. - Ограничения:
1. Невозможно изменить элемент мешка, поскольку он неизменяемый.
2. Функция groupby работает очень медленно.
4. Dask-ML: (параллельное обучение на Scikit, т. Е. Sklearn + threading)
- Эта библиотека Dask аналогична sklearn для построения моделей машинного обучения.
- Использует внутреннюю коллекцию dask для распараллеливания алгоритмов машинного обучения
- Dask использует существующие средства оценки sklearn и алгоритмы с аргументом n_jobs для распараллеливания через Joblib. Он использует backend joblib для распараллеливания в кластере, где сложно выполнять вычисления на одной машине.
- Также можно использовать внешние библиотеки, такие как xgboost или tf.
Лично я бы сказал, что Dask все еще улучшается для ML. Многие текущие проблемы все еще остаются активными при построении даже простой линейной модели.
API низкого уровня
- Задержка Dask: (ленивые параллельные объекты)
- Отложенные объекты dask являются ленивыми по своей природе, что означает, что они вычисляются только при явном вызове функции compute ().
- Эти объекты эквивалентны узлам DAG за счет обертывания отложенного объекта вокруг функции.
- Зависимость задач друг от друга создает цепочку шагов для выполнения и построения DAG.
- Вызов compute () для отложенного объекта вызывает планировщик для обработки параллельных ресурсов и пошагового вычисления DAG, генерируя результат.
2. Фьючерсы Dask: (нетерпеливые параллельные объекты)
- Интерфейс Futures dask вычисляет немедленно маловероятно задержанный объект.
- Выполняется в реальном времени
- В отличие от массива dask, фреймов данных и т. Д., Для использования будущего интерфейса необходим клиент Dask.
Найдите мои практические занятия в этом репозитории на github.
Темная сторона Даска
При работе с Dask следует учитывать несколько ограничений.
- В отличие от Dask, Pandas хороши в оптимизации сложных SQL-запросов.
- Не подходит для тех операций, которые сложны для параллельных вычислений, таких как сортировка и перемешивание. Или настройте новый индекс в несортированном фрейме данных.
Искра против Даска
Функции параллелизма и масштабируемости похожи на Spark, за исключением нескольких отличий.
использованная литература
- Официальная последняя документация Dask
- Потрясающая книга, которую можно попробовать
Не стесняйтесь подписаться на этого автора, если вам понравился блог, потому что этот автор заверяет, что вернется снова с более интересными материалами, связанными с ML / AI.
Спасибо,
Удачного обучения! 😄
Можно связаться через LinkedIn.