Дорожная карта

Недавно я столкнулся с очень интересной библиотекой 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 высокого уровня

  1. Массивы 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 низкого уровня

  1. Задержка Dask: (ленивые параллельные объекты)
  • Отложенные объекты dask являются ленивыми по своей природе, что означает, что они вычисляются только при явном вызове функции compute ().
  • Эти объекты эквивалентны узлам DAG за счет обертывания отложенного объекта вокруг функции.
  • Зависимость задач друг от друга создает цепочку шагов для выполнения и построения DAG.
  • Вызов compute () для отложенного объекта вызывает планировщик для обработки параллельных ресурсов и пошагового вычисления DAG, генерируя результат.

2. Фьючерсы Dask: (нетерпеливые параллельные объекты)

  • Интерфейс Futures dask вычисляет немедленно маловероятно задержанный объект.
  • Выполняется в реальном времени
  • В отличие от массива dask, фреймов данных и т. Д., Для использования будущего интерфейса необходим клиент Dask.

Найдите мои практические занятия в этом репозитории на github.

Темная сторона Даска

При работе с Dask следует учитывать несколько ограничений.

  1. В отличие от Dask, Pandas хороши в оптимизации сложных SQL-запросов.
  2. Не подходит для тех операций, которые сложны для параллельных вычислений, таких как сортировка и перемешивание. Или настройте новый индекс в несортированном фрейме данных.

Искра против Даска

Функции параллелизма и масштабируемости похожи на Spark, за исключением нескольких отличий.

использованная литература

  • Официальная последняя документация Dask


  • Потрясающая книга, которую можно попробовать


Не стесняйтесь подписаться на этого автора, если вам понравился блог, потому что этот автор заверяет, что вернется снова с более интересными материалами, связанными с ML / AI.
Спасибо,
Удачного обучения! 😄

Можно связаться через LinkedIn.