Даск (программное обеспечение)
![]() | |
Оригинальный автор(ы) | Мэтью Роклин |
---|---|
Разработчик(и) | сумерки |
Первоначальный выпуск | 8 января 2015 г |
Стабильная версия | 2024.2.1 / 23 февраля 2024 г |
Репозиторий | Репозиторий Даск |
Написано в | Питон |
Операционная система | Linux , Microsoft Windows , macOS |
Доступно в | Питон |
Тип | Аналитика данных |
Лицензия | Новый БСД |
Веб-сайт | сумерки |
Dask — это с открытым исходным кодом библиотека Python для параллельных вычислений . Даск [1] масштабирует код Python с многоядерных локальных компьютеров до крупных распределенных кластеров в облаке. Dask предоставляет знакомый пользовательский интерфейс, отражая API других библиотек в экосистеме PyData, включая Pandas , scikit-learn и NumPy . Он также предоставляет низкоуровневые API, которые помогают программистам параллельно запускать собственные алгоритмы.
Dask был создан Мэтью Роклином. [2] в декабре 2014 года [3] и имеет более 9,8 тысяч звезд и 500 участников на GitHub . [4]
Dask используется розничными, финансовыми, правительственными организациями, а также институтами медико-биологических наук и геофизики. Уолмарт , [5] Вэйфэр , [6] ЖДА , [7] ГрубХаб , [8] Дженерал Моторс , [9] Нвидиа , [10] Гарвардская медицинская школа , [7] Капитал Один [11] и НАСА [12] входят в число организаций, использующих Dask.
Обзор
[ редактировать ]Даск состоит из двух частей: [13]
- Сбор больших данных (высокого и низкого уровня)
- Динамическое планирование задач
Параллельные коллекции высокого уровня Dask — DataFrames, [14] Сумки, [15] и массивы [16] – работать параллельно с наборами данных, которые могут не помещаться в памяти.
Планировщик задач Dask [10] параллельно выполняет графы задач. Он может масштабироваться до кластеров из тысячи узлов. Это обеспечивает работу коллекций высокого уровня, а также пользовательских, определяемых пользователем рабочих нагрузок с использованием коллекций низкого уровня.
Коллекции Даск
[ редактировать ]Dask поддерживает несколько пользовательских интерфейсов [17] называемые коллекциями высокого и низкого уровня:
Высокий уровень
[ редактировать ]- Dask Array: параллельные NumPy массивы
- Dask Bag: параллельные Python списки
- Dask DataFrame: параллельные Pandas кадры данных
- Машинное обучение: [18] Параллельное обучение scikit-learn
- Другие из внешних проектов, таких как Xarray. [19]
Низкий уровень
[ редактировать ]- Отложенный: [20] Параллельная оценка функций
- Фьючерсы: [21] Оценка параллельных функций в реальном времени
Под капотом каждого из этих пользовательских интерфейсов используется один и тот же механизм параллельных вычислений.
Коллекции высокого уровня
[ редактировать ]Коллекции высокого уровня Dask являются естественной отправной точкой для пользователей, которые заинтересованы в расширении своей рабочей нагрузки pandas, NumPy или scikit-learn. DataFrame, Array и Dask-ML от Dask являются альтернативой Pandas DataFrame, Numpy Array и scikit-learn соответственно с небольшими вариациями исходных интерфейсов.
Даск Массив
[ редактировать ]Даск Массив [16] — это коллекция высокого уровня, которая распараллеливает рабочие нагрузки на основе массивов и поддерживает знакомый API NumPy, такой как срезы, арифметика, сокращения, математика и т. д., что позволяет пользователям Numpy легко масштабировать операции с массивами.
Массив Dask состоит из множества меньших n-мерных массивов Numpy и использует блокированный алгоритм для обеспечения вычислений на массивах, размер которых превышает объем памяти. Во время операции Dask преобразует операцию с массивом в граф задач, разбивает большие массивы Numpy на несколько более мелких фрагментов и выполняет работу над каждым фрагментом параллельно. Результаты каждого фрагмента объединяются для получения окончательного результата.
Кадр данных Даска
[ редактировать ]Кадр данных Даска [14] — это коллекция высокого уровня, которая распараллеливает рабочие нагрузки на основе DataFrame. DataFrame Dask состоит из множества меньших DataFrame Pandas, разделенных по индексу. Он поддерживает знакомый API Pandas, что позволяет пользователям Pandas легко масштабировать рабочие нагрузки DataFrame. Во время операции DataFrame Dask создает граф задач и запускает операции над составными DataFrame таким образом, чтобы уменьшить объем памяти и повысить параллелизм за счет совместного использования и удаления промежуточных результатов.
Откиньте назад
[ редактировать ]Откиньте назад [15] представляет собой неупорядоченную коллекцию повторяющихся объектов, гибрид набора и списка. Dask Bag используется для распараллеливания вычислений полуструктурированных или неструктурированных данных, таких как записи JSON, текстовые данные, файлы журналов или определяемые пользователем объекты Python, с использованием таких операций, как фильтр, свертывание, сопоставление и группировка. Пакеты Dask Bags можно создавать на основе существующей итерации Python или загружать данные непосредственно из текстовых и двоичных файлов в формате Avro.
Коллекции низкого уровня
[ редактировать ]Низкоуровневый интерфейс Dask обеспечивает больше возможностей настройки. Он подходит для данных, которые не входят в область действия Dask DataFrame, Bag или Array. Dask имеет следующие низкоуровневые коллекции:
- С задержкой: параллельная оценка функции
- Фьючерсы: оценка параллельных функций в реальном времени.
Отложенный
[ редактировать ]Даск задерживается [20] — это интерфейс, используемый для распараллеливания общего кода Python, который не вписывается в коллекции высокого уровня, такие как Dask Array или Dask DataFrame. Функции Python, украшенные задержкой Dask, используют стратегию ленивой оценки, откладывая выполнение и генерируя граф задач с функцией и ее аргументами. Функция Python будет выполняться только при вызове .compute. Dask Delayed можно использовать как функцию dask.delayed или как декоратор @dask.delayed.
Фьючерсы
[ редактировать ]Даск Фьючерсы, [21] Немедленная (не ленивая) альтернатива Dask Delayed, предоставляет среду задач реального времени, которая расширяет интерфейс Python concurrent.futures, который предоставляет высокоуровневый интерфейс для асинхронного выполнения вызываемых объектов.
Обычно объединяют интерфейсы высокого и низкого уровня. Например, пользователи могут запустить Dask array/bag/dataframe для загрузки и предварительной обработки данных, затем переключиться на Dask с задержкой для специального алгоритма, специфичного для их домена, а затем снова переключиться на Dask array/dataframe для очистки и сохранения результатов. .
Планирование
[ редактировать ]Коллекции высокого и низкого уровня Dask создают направленный ациклический граф задач, [22] который представляет взаимосвязь между вычислительными задачами. Узел в графе задач представляет собой функцию Python, выполняющую единицу вычислений, а ребро представляет зависимость данных между восходящей и нисходящей задачей. После создания графа задач планировщик задач управляет рабочим процессом на основе данного графа задач, назначая задачи работникам таким образом, который улучшает параллелизм и учитывает зависимости данных.
Dask предоставляет два семейства планировщиков : планировщик для одной машины и распределенный планировщик.
Планировщик для одной машины
[ редактировать ]Планировщик для одной машины — это планировщик по умолчанию, который предоставляет базовые функции для локальных процессов или пула потоков и предназначен для использования на одной машине. Он прост и дешев в использовании, но не масштабируется.
- Локальные темы
- Поточный планировщик использует concurrent.futures.ThreadPoolExecuter Python для выполнения вычислений. Он занимает мало памяти и не требует какой-либо настройки. Поскольку все вычисления происходят в одном процессе, поточные планировщики несут минимальные накладные расходы и не требуют затрат на передачу данных между задачами. Благодаря глобальной блокировке интерпретатора Python локальные потоки обеспечивают параллелизм только тогда, когда вычисления в основном выполняются не на Python, как это происходит с Pandas DataFrame, массивами Numpy или другими Python/ C / C++ . проектами на основе
- Локальный процесс
- Планировщик многопроцессорной обработки использует concurrent.futures.ProcessPoolExecutor Python для выполнения вычислений. Задачи и их зависимости передаются из основного процесса в локальный процесс, выполняются, а результаты передаются обратно в основной процесс. Это позволяет обойти проблемы с глобальной интерпретируемой блокировкой Python и обеспечивает параллелизм для вычислительных задач с использованием преимущественно кода Python. Однако передача данных между основным и локальным процессами снижает производительность, особенно в случаях, когда размер передаваемых данных велик.
- Однопоточный
- Однопоточный планировщик выполняет вычисления без параллелизма. Он используется в целях отладки.
Распределенный планировщик
[ редактировать ]Распределенный планировщик Dask [23] можно настроить на локальном компьютере или масштабировать в кластере. Dask может работать с менеджерами ресурсов, такими как Hadoop YARN , Kubernetes или PBS, Slurm , SGD и LSF для кластеров высокопроизводительных вычислений (HPC).
Даск-МЛ
[ редактировать ]Dask-ML совместим с API-интерфейсом оценки подбора, преобразования и прогнозирования scikit-learn и хорошо интегрирован с платформами машинного обучения и глубокого обучения, такими как XGBoost , LightGBM, PyTorch , Keras и TensorFlow, посредством оболочек, совместимых с scikit-learn.
Интеграции
[ редактировать ]интеграция scikit-learn
[ редактировать ]Выбранные средства оценки и утилиты scikit-learn можно распараллелить. [24] посредством выполнения заданий на нескольких ядрах ЦП с использованием библиотеки Joblib. Количество процессов определяется параметром n_jobs. По умолчанию библиотека Joblib использует loky в качестве многопроцессорной серверной части. Dask предлагает альтернативный бэкэнд Joblib, который полезен для масштабирования алгоритмов scikit-learn, поддерживаемых Joblib, до кластера машин для рабочих нагрузок с ограниченными вычислениями.
Для рабочих нагрузок с ограниченной памятью Dask предлагает альтернативы, такие как параллельные метаоценщики. [25] для распараллеливания и масштабирования задач, которые не распараллелены в scikit-learn и дополнительной оптимизации гиперпараметров. [26] для масштабирования поиска гиперпараметров и распараллеленных оценок. [27]
Интеграция XGBoost и LightGBM
[ редактировать ]XGBoost [28] и ЛайтГБМ [29] — это популярные алгоритмы, основанные на градиентном повышении , и оба они интегрированы с Dask для распределенного обучения. Dask не поддерживает XGBoost или LightGBM, а скорее облегчает настройку кластера, планировщика и необходимых рабочих процессов, а затем передает данные в структуру машинного обучения для выполнения распределенного обучения.
Обучение модели XGBoost с помощью Dask, [30] Кластер Dask состоит из центрального планировщика и нескольких распределенных рабочих процессов, что достигается путем запуска планировщика XGBoost в том же процессе, в котором работает центральный планировщик Dask, и рабочего XGBoost в том же процессе, в котором работают рабочие Dask. Затем сотрудники Dask передают DataFrame Pandas местному работнику XGBoost для распределенного обучения.
Интеграция с PyTorch
[ редактировать ]Скорч [31] — это оболочка для PyTorch, совместимая с scikit-learn, которая позволяет использовать Dask-ML вместе с PyTorch.
Интеграция Keras и TensorFlow
[ редактировать ]SciKera's [32] — это совместимая с scikit-learn оболочка для моделей Keras, которая позволяет использовать Dask-ML с Keras.
Приложения
[ редактировать ]Розничная торговля
[ редактировать ]Примеры использования в розничной торговле включают в себя:
- Walmart использует Dask для прогнозирования спроса на 500 000 000 комбинаций товаров в магазине. Чтобы обеспечить востребованные товары в достаточных количествах во всех своих торговых точках, они проводят большие вычисления. Используя RAPIDS и XGBoost при поддержке Dask, они достигли 100-кратного ускорения. [10]
- Blue Yonder использует Dask для ежедневной обработки терабайтов данных. [33] Они могут писать код, подобный Pandas, в Dask, который затем можно отправить непосредственно в производство. Это помогает сократить циклы обратной связи и сократить потери.
- Grubhub использует Dask [2] [34] наряду с TensorFlow для предварительной обработки и ETL. Dask позволяет им продолжать работать на Python и получать необходимые функции.
Науки о жизни
[ редактировать ]Dask используется для получения 4-мерных клеточных изображений с высоким разрешением Гарвардской медицинской школой , Медицинским институтом Говарда Хьюза , Инициативой Чана Цукерберга и Центром передовой биовизуализации Калифорнийского университета в Беркли . [7] Они записывают эволюцию и движения трехмерной клетки с течением времени с максимальной детализацией. Это генерирует большие объемы данных, которые трудно проанализировать традиционными методами. Dask помогает им масштабировать рабочие процессы анализа данных с помощью своего API, который напоминает NumPy, Pandas и код scikit-learn.
Dask также используется в Институте биомедицинских исследований Novartis для масштабирования прототипов машинного обучения.
Финансовая индустрия
[ редактировать ]- Капитал Один [35] использует Dask для ускорения конвейеров ETL и ML
- Барклайс [36] использует Dask для моделирования финансовой системы
Геофизические науки
[ редактировать ]Dask используется в климатологии, энергетике, гидрологии, метеорологии и спутниковой визуализации такими компаниями, как NASA , LANL , PANGEO: [37] Наука о Земле и Метеорологическое бюро Великобритании . [38]
Океанографы создают огромные наборы смоделированных данных об океанах Земли, а исследователи могут просматривать большие наборы сейсмологических данных с датчиков по всему миру, собирать большое количество наблюдений со спутников и метеостанций и запускать большие симуляции.
Библиотеки программного обеспечения
[ редактировать ]Dask интегрирован во многие библиотеки, например Pangeo. [39] и xarray; [19] программное обеспечение для временных рядов, такое как Prophet [40] и цфреш; [41] Программное обеспечение ETL/ML, такое как scikit-learn, [42] ПОроги, [43] и XGBoost ; [28] инструменты управления рабочими процессами, такие как Apache Airflow [44] и префект. [45]
История
[ редактировать ]2014–2015
[ редактировать ]сумерки [1] Первоначально был разработан в Continuum Analytics, коммерческой консалтинговой компании Python, которая в конечном итоге стала Anaconda , Inc., [46] создатель множества пакетов с открытым исходным кодом и дистрибутива Anaconda Python. Даск вырос из Пламени [47] проект DARPA [48] финансируемый проект по ускорению вычислений в открытом исходном коде.
Blaze был амбициозным проектом, который пытался переопределить API вычислений, хранения, сжатия и обработки данных для Python, первоначально его возглавляли Трэвис Олифант и Питер Ванг, соучредители Anaconda. Однако подход Blaze, заключающийся в том, что он представляет собой экосистему в упаковке, означал, что новым пользователям было труднее легко освоиться.
Вместо того, чтобы переписывать экосистему программного обеспечения, команда Даска намеревалась дополнить существующую правильным компонентом. Учитывая эту идею, 21 декабря 2014 г. [3] Мэтью Роклин создал Даска. Цель [49] Первоначально Dask планировал распараллелить NumPy , чтобы он мог использовать одну полноценную рабочую станцию, что в то время было обычным явлением в финансовых магазинах.
2015–2017
[ редактировать ]Первыми проектами, которые по-настоящему внедрили Dask, были Xarray. [50] (обычно используется в геонауках) и Scikit-Image [51] (обычно используется при обработке изображений). Dask был интегрирован в Xarray через несколько месяцев после создания. Это дало Dask первое сообщество пользователей, которое существует и по сей день.
Понимание того, что существует потребность в легком решении параллелизма для Pandas DataFrames. [52] и инструменты машинного обучения, такие как scikit-learn, [42] Dask быстро эволюционировал и стал поддерживать и другие проекты.
2018
[ редактировать ]С 2018 года другие команды и учреждения в академических кругах, технологические компании и крупные корпорации, такие как NASA, UK Met Office , Blue Yonder и Nvidia , заинтересовались Dask и начали интегрировать его в свои системы.
Dask получил поддержку из различных источников: [53] Правительство США (грант DARPA), Фонд Гордона и Бетти Мур , Anaconda , NSF, НАСА (исследовательские гранты США при сотрудничестве с Pangeo) и Nvidia.
2020 – настоящее время
[ редактировать ]В 2020 году Мэтью Роклин основал Coiled Computing, Inc. [54] обеспечить дальнейшую поддержку разработки Dask и позволить компаниям развертывать кластеры Dask в облаке. В мае 2021 года компания привлекла 21 миллион долларов в рамках финансирования серии А под руководством Bessemer Venture Partners . [55]
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Даск» . dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Мэттью Роклин - Биография» . matthewrocklin.com . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «GitHub, Даск, 2014» . github.com . Проверено 12 мая 2022 г.
- ^ «GitHub, Даск, 2022» . github.com . Проверено 12 мая 2022 г.
- ^ Колфилд, Брайан. «Walmart и NVIDIA обсуждают, как они вместе работают над трансформацией розничной торговли» . blogs.nvidia.com . Проверено 12 мая 2022 г.
- ^ Шарма Минакши, Гонсалвес Ник. «Трансформация рабочих процессов обучения моделей в Wayfair» . Aboutwayfair.com . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б с Ишварамурти, Павитра. «Кто использует Даск?» . катушка.io . Проверено 12 мая 2022 г.
- ^ Боун-Андерсон, Хьюго. «Dask и TensorFlow в производстве в Grubhub» . катушка.io . Проверено 12 мая 2022 г.
- ^ «Компании, использующие Dask» . Discover.hgdata.com . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б с «ДАСК» . nvidia.com . Проверено 12 мая 2022 г.
- ^ Ишварамурти, Павитра. «Распределенное машинное обучение в Capital One» . катушка.io . Проверено 12 мая 2022 г.
- ^ «Использование Dask в NAS» . nas.nasa.gov . Проверено 12 мая 2022 г.
- ^ «Масштабируемые вычисления с Dask» . Учебные пособия по ULHPC . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «DataFrame — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Сумка — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Массив — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ Ишварамурти, Павитра. «Что такое Даск?» . катушка.io . Проверено 12 мая 2022 г.
- ^ «Даск-МЛ» . ml.dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Параллельные вычисления с Dask» . docs.xarray.dev . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Задержка — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Фьючерсы — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ «Спецификация — документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ «Планировщик Dask — Документация Dask» . docs.dask.org . Проверено 12 мая 2022 г.
- ^ «Вычисления с помощью scikit-learn» . scikit-learn.org . Проверено 12 мая 2022 г.
- ^ «Параллельное прогнозирование и преобразование — документация Dask» . ml.dask.org . Проверено 12 мая 2022 г.
- ^ «Инкрементная оптимизация гиперпараметров — документация Dask» . ml.dask.org . Проверено 12 мая 2022 г.
- ^ «Справочник по API — документация Dask» . ml.dask.org . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б «Распределяемый XGBoost с помощью Dask» . Учебники по XGBoost . Проверено 12 мая 2022 г.
- ^ «Как работает распределенный LightGBM. Dask» . ЛайтГБМ. Руководство по распределенному обучению . Проверено 12 мая 2022 г.
- ^ Роклин, Мэтью. «Даск, Панды и XGBoost» . matthewrocklin.com . Проверено 12 мая 2022 г.
- ^ «Документация Скорча» . Скорч . Проверено 12 мая 2022 г.
- ^ «Документация SciKeras» . adrianb.com . Проверено 12 мая 2022 г.
- ^ «Использование Dask в Blue Yonder» . tech.blueyonder.com . 19 июня 2020 г. Проверено 12 мая 2022 г.
- ^ Боун-Андерсон, Хьюго. «Поиск в Grubhub и намерения пользователя» . катушка.io . Проверено 12 мая 2022 г.
- ^ МакЭнти Райан, Маккарти Майк. «Dask и RAPIDS: следующее большое достижение для науки о данных и машинного обучения» . www.capitalone.com . Проверено 12 мая 2022 г.
- ^ Патель, Харшил. «Какую библиотеку мне следует использовать? Сравнение производительности Apache Spark, Dask и Pandas (с тестами)» . censius.ai . Проверено 12 мая 2022 г.
- ^ «Адаптация Dask к геофизическим исследованиям с интенсивным использованием данных» . coiled.wistia.com . Проверено 12 мая 2022 г.
- ^ «Метеорологическое бюро» . metoffice.gov.uk . Проверено 12 мая 2022 г.
- ^ «Пангео» . pangeo.io . Проверено 12 мая 2022 г.
- ^ «Прогнозирование с помощью HEAVY.AI и Prophet» . docs.heavy.ai . Проверено 12 мая 2022 г.
- ^ "Даск - простой способ. Цфреш документация" . tsfresh.readthedocs.io . Проверено 12 мая 2022 г.
- ^ Перейти обратно: а б "научное обучение" . scikit-учиться . Проверено 12 мая 2022 г.
- ^ «Масштабирование Python с помощью Dask на графических процессорах» . Rapids.ai . Проверено 12 мая 2022 г.
- ^ «Dask Executor — Документация Apache Airflow» . airflow.apache.org . Проверено 12 мая 2022 г.
- ^ «Развертывание: Dask. Prefect Docs» . docs.prefect.io . Проверено 12 мая 2022 г.
- ^ «Анаконда» . анаконда.com . Проверено 12 мая 2022 г.
- ^ «Экосистема Пламени» . blaze.pydata.org . Проверено 12 мая 2022 г.
- ^ «ДАРПА» . дарпа . Проверено 12 мая 2022 г.
- ^ «История Даска» . Свернутый. Ютуб . Проверено 12 мая 2022 г.
- ^ «Ксаррей» . xarray.pydata.org . Проверено 12 мая 2022 г.
- ^ «Обработка изображений в Python» . scikit-изображение . Проверено 12 мая 2022 г.
- ^ «панды» . панды . Проверено 12 мая 2022 г.
- ^ Роклин, Мэтью. «Финансирование Даска, краткая история» . matthewrocklin.com .
- ^ «Coiled: Python для обработки данных в облаке с помощью Dask» . катушка.io . Проверено 12 мая 2022 г.
- ^ Виггерс, Кайл. «Стартап Coiled, работающий с данными и искусственным интеллектом, получил 21 миллион долларов» . ВенчурБит . Проверено 12 мая 2022 г.