Dask (oprogramowanie)
Oryginalni autorzy | Mateusza Rocklina |
---|---|
Deweloperzy | Dask |
Pierwsze wydanie | 8 stycznia 2015 |
Wersja stabilna | 2022.05.02 / 2 maja 2022
|
Magazyn | Repozytorium Dask |
Napisane w | Pyton |
System operacyjny | Linux , Microsoft Windows , macOS |
Dostępne w | Pyton |
Typ | Analityka danych |
Licencja | Nowy BSD |
Strona internetowa |
Dask to elastyczna biblioteka Pythona o otwartym kodzie źródłowym do obliczeń równoległych . Dask skaluje kod Pythona z wielordzeniowych maszyn lokalnych do dużych rozproszonych klastrów w chmurze. Dask zapewnia znajomy interfejs użytkownika, odzwierciedlając interfejsy API innych bibliotek w ekosystemie PyData, w tym: Pandas , scikit-learn i NumPy . Udostępnia również interfejsy API niskiego poziomu, które pomagają programistom równolegle uruchamiać niestandardowe algorytmy.
Dask został stworzony przez Matthew Rocklina w grudniu 2014 roku i ma ponad 9,8 tys. gwiazdek i 500 współpracowników na GitHub .
Dask jest używany przez organizacje detaliczne, finansowe, rządowe, a także instytuty nauk przyrodniczych i geofizycznych. Walmart , Wayfair , JDA , GrubHub , General Motors , NVIDIA , Harvard Medical School , Capital One i NASA należą do organizacji korzystających z Dask.
Przegląd
Dask składa się z dwóch części:
- Zbiory dużych zbiorów danych (wysokiego i niskiego poziomu)
- Dynamiczne planowanie zadań
Wysokopoziomowe kolekcje równoległe Dask — DataFrames, Bags i Arrays — działają równolegle na zestawach danych, które mogą nie mieścić się w pamięci.
Harmonogram zadań Dask wykonuje równolegle wykresy zadań. Można go skalować do klastrów o tysiącu węzłów. To zasila kolekcje wysokiego poziomu, a także niestandardowe obciążenia zdefiniowane przez użytkownika przy użyciu kolekcji niskiego poziomu.
kolekcje Daska
Dask obsługuje kilka interfejsów użytkownika zwanych kolekcjami wysokiego i niskiego poziomu:
Wysoki poziom
- Tablica Dask: równoległe tablice NumPy
- Dask Bag: Równoległe listy Pythona
- Dask DataFrame: Równoległe Pandy DataFrame
- Uczenie maszynowe: równoległe uczenie się scikit
- Inne z projektów zewnętrznych, takich jak Xarray
Niski poziom
- Opóźnione: ocena funkcji równoległej
- Kontrakty terminowe: ocena funkcji równoległej w czasie rzeczywistym
Pod maską każdy z tych interfejsów użytkownika przyjmuje tę samą równoległą maszynerię obliczeniową.
Kolekcje na wysokim poziomie
Wysokopoziomowe kolekcje Dask są naturalnym punktem wejścia dla użytkowników, którzy są zainteresowani zwiększeniem obciążenia pand, NumPy lub scikit-learn. DataFrame, Array i Dask-ML firmy Dask to alternatywy odpowiednio dla Pandas DataFrame, Numpy Array i scikit-learn z niewielkimi różnicami w stosunku do oryginalnych interfejsów.
Tablica Daska
Dask Array to kolekcja wysokiego poziomu, która równoległa obciążenia oparte na tablicach i obsługuje znany interfejs API NumPy, taki jak krojenie, arytmetyka, redukcje, matematyka itp., co ułatwia użytkownikom Numpy skalowanie operacji tablicowych.
Tablica Dask składa się z wielu mniejszych n-wymiarowych tablic Numpy i wykorzystuje zablokowany algorytm, aby umożliwić obliczenia na tablicach większych niż pamięć. Podczas operacji Dask tłumaczy operację tablicową na wykres zadań, dzieli duże tablice Numpy na wiele mniejszych fragmentów i wykonuje pracę na każdym fragmencie równolegle. Wyniki z każdego fragmentu są łączone w celu uzyskania ostatecznego wyniku.
Dask DataFrame
Dask DataFrame to kolekcja wysokiego poziomu, która równoległa obciążenia oparte na DataFrame. Dask DataFrame zawiera wiele mniejszych Pandas DataFrame podzielonych wzdłuż indeksu. Utrzymuje znane API Pandas, ułatwiając użytkownikom Pandas skalowanie obciążeń DataFrame. Podczas operacji DataFrame Dask tworzy wykres zadań i wyzwala operacje na składowych DataFrame w sposób, który zmniejsza zużycie pamięci i zwiększa równoległość poprzez udostępnianie i usuwanie wyników pośrednich.
Torba Dask
Dask Bag to nieuporządkowana kolekcja powtarzających się obiektów, hybryda między zestawem a listą. Dask Bag służy do równoległego przetwarzania częściowo ustrukturyzowanych lub nieustrukturyzowanych danych, takich jak rekordy JSON, dane tekstowe, pliki dziennika lub zdefiniowane przez użytkownika obiekty Pythona przy użyciu operacji takich jak filtrowanie, składanie, mapowanie i grupowanie. Dask Bags mogą być tworzone z istniejącego iterowalnego Pythona lub mogą ładować dane bezpośrednio z plików tekstowych i plików binarnych w formacie Avro.
Kolekcje niskiego poziomu
Interfejs niskiego poziomu Dask pozwala na większą personalizację. Jest odpowiedni dla danych, które nie wchodzą w zakres Dask DataFrame, Bag lub Array. Dask ma następujące kolekcje niskiego poziomu:
- Opóźnione: ocena funkcji równoległej
- Kontrakty terminowe: ocena funkcji równoległej w czasie rzeczywistym
Opóźniony
Dask opóźniony to interfejs używany do równoległości ogólnego kodu Pythona, który nie pasuje do kolekcji wysokiego poziomu, takich jak Dask Array lub Dask DataFrame. Funkcje Pythona ozdobione Daskiem opóźnione przyjmują strategię leniwej oceny, odraczając wykonanie i generując wykres zadania z funkcją i jej argumentami. Funkcja Pythona zostanie wykonana tylko wtedy, gdy zostanie wywołana metoda .compute. Opóźniony Dask może być użyty jako funkcja dask.delayed lub jako dekorator @dask.delayed.
Kontrakty terminowe
Dask Futures, natychmiastowa (nie leniwa) alternatywa dla opóźnionego Daska, zapewnia platformę zadań w czasie rzeczywistym, która rozszerza interfejs concurrent.futures Pythona, który zapewnia interfejs wysokiego poziomu do asynchronicznego wykonywania wywołań. Powszechne jest łączenie interfejsów wysokiego i niskiego poziomu. Na przykład użytkownicy mogą uruchomić tablicę/bag/ramkę danych Dask, aby załadować i wstępnie przetworzyć dane, a następnie przełączyć się na Dask opóźniony dla niestandardowego algorytmu, który jest specyficzny dla ich domeny, a następnie przełączyć się z powrotem na tablicę/ramkę danych Dask, aby wyczyścić i zapisać wyniki .
Planowanie
Kolekcje wysokiego i niskiego poziomu Daska tworzą ukierunkowany acykliczny wykres zadań, który reprezentuje związek między zadaniami obliczeniowymi. Węzeł na grafie zadania reprezentuje funkcję Pythona, która wykonuje jednostkę obliczeniową, a krawędź reprezentuje zależność danych między zadaniem w górę iw dół. Po wygenerowaniu grafu zadań harmonogram zadań zarządza przepływem pracy na podstawie danego grafu zadań, przydzielając zadania pracownikom w sposób poprawiający równoległość i respektujący zależności danych.
Dask udostępnia dwie rodziny programów planujących : program planujący dla pojedynczej maszyny i program planujący rozproszony.
Harmonogram dla jednej maszyny
Harmonogram pojedynczej maszyny to domyślny program planujący, który zapewnia podstawowe funkcje lokalnych procesów lub puli wątków i jest przeznaczony do użycia na jednym komputerze. Jest prosty i tani w użyciu, ale nie skaluje się.
- Wątki lokalne
- Wątkowy program planujący wykorzystuje funkcję concurrent.futures.ThreadPoolExecuter języka Python do wykonywania obliczeń. Ma niski ślad pamięci i nie wymaga żadnej konfiguracji. Ponieważ wszystkie obliczenia odbywają się w tym samym procesie, harmonogramy wątkowe powodują minimalne narzuty zadań i brak kosztów przesyłania danych między zadaniami. Ze względu na Global Interpreter Lock w Pythonie, lokalne wątki zapewniają równoległość tylko wtedy, gdy obliczenia są głównie kodem innym niż Python, co ma miejsce w przypadku Pandas DataFrame, tablic Numpy lub innych projektów opartych na Pythonie/ C / C++ .
- Proces lokalny
- Harmonogram wieloprocesorowy wykorzystuje funkcję concurrent.futures.ProcessPoolExecutor Pythona do wykonywania obliczeń. Zadania i ich zależności są przenoszone z procesu głównego do procesu lokalnego, wykonywane, a wyniki są przesyłane z powrotem do procesu głównego. Pozwala to ominąć problemy z globalną interpretowalną blokadą Pythona i zapewnia równoległość zadań obliczeniowych z głównie kodem Pythona. Jednak przesyłanie danych między głównymi i lokalnymi procesami obniża wydajność, zwłaszcza w przypadkach, gdy rozmiar przesyłanych danych jest duży.
- Pojedynczy wątek
- Harmonogram jednowątkowy wykonuje obliczenia bez równoległości. Jest używany do celów debugowania.
Rozproszony harmonogram
Rozproszony harmonogram Dask można skonfigurować na komputerze lokalnym lub skalować w klastrze. Dask może współpracować z wieloma różnymi menedżerami zasobów, takimi jak Hadoop YARN , Kubernetes lub PBS, Slurm , SGD i LSF dla klastrów High Performance Computing (HPC).
Dask-ML
Dask-ML jest kompatybilny z interfejsem API estymatora scikit-learn dopasowywania, przekształcania i przewidywania oraz jest dobrze zintegrowany z innymi popularnymi platformami uczenia maszynowego i głębokiego uczenia się, takimi jak XGBoost , LightGBM, PyTorch , Keras i TensorFlow poprzez opakowania kompatybilne z scikit -learn.
Integracje
integracja nauki scikit
Wybrane estymatory i narzędzia scikit-learn można zrównoleglić, wykonując zadania na wielu rdzeniach procesora przy użyciu biblioteki Joblib. Liczba procesów jest określana przez parametry n_jobs. Domyślnie biblioteka Joblib używa loky jako wieloprocesorowego backendu. Dask oferuje alternatywny backend Joblib, który jest przydatny do skalowania wspieranych przez Joblib algorytmów scikit-learn do klastra maszyn dla obciążeń z ograniczeniami obliczeniowymi.
W przypadku obciążeń z ograniczoną pamięcią Dask oferuje alternatywy, takie jak Parallel Meta-estymators do zrównoleglania i skalowania zadań, które nie są zrównoleglone w ramach scikit-learn oraz Incremental Hyperparameter Optimization do skalowania wyszukiwania hiperparametrów i równoległych estymatorów.
Integracje XGBoost i LightGBM
XGBoost i LightGBM to popularne algorytmy oparte na Gradient Boosting i oba są zintegrowane z Dask w celu rozproszonego uczenia się. Dask nie obsługuje XGBoost ani LightGBM, raczej ułatwia konfigurację klastra, harmonogramu i wymaganych pracowników oraz przekazuje dane do platformy uczenia maszynowego w celu przeprowadzenia szkolenia rozproszonego.
Aby wytrenować model XGBoost za pomocą Dask, klaster Dask składa się z centralnego programu planującego i wielu rozproszonych procesów roboczych, uruchamia program planujący XGBoost w tym samym procesie, który uruchamia centralny program planujący Dask, oraz proces roboczy XGBoost w tym samym procesie, w którym działają pracownicy Dask. Następnie pracownicy Dask przekazują Pandas DataFrame lokalnemu pracownikowi XGBoost w celu przeprowadzenia szkolenia rozproszonego.
Integracja z PyTorchem
Skorch to opakowanie zgodne z scikit-learn dla PyTorch, które umożliwia używanie Dask-ML razem z PyTorch.
Integracje Keras i TensorFlow
SciKeras to opakowanie kompatybilne z scikit-learn dla modeli Keras, które umożliwia używanie Dask-ML z Keras.
Aplikacje
Sprzedaż detaliczna
- Walmart używa Dask do prognozowania popytu na 500 000 000 kombinacji artykułów w sklepie. Aby dostarczać poszukiwane produkty w wystarczających ilościach we wszystkich swoich punktach sprzedaży, muszą wykonywać ogromne obliczenia. Korzystając z RAPIDS i XGBoost, wspieranych przez Dask, osiągnęli 100-krotne przyspieszenie.
- Blue Yonder używa Dask do codziennego przetwarzania terabajtów danych. Mogą napisać kod podobny do Pandy w Dask, który następnie może zostać wypchnięty bezpośrednio do produkcji. Pomaga to w utrzymaniu krótkich cykli informacji zwrotnych i niskim poziomie marnotrawstwa.
- Grubhub używa Dask wraz z TensorFlow do wstępnego przetwarzania i ETL. Dask pozwala im kontynuować pracę w Pythonie i uzyskać potrzebne im funkcjonalności.
Nauki o życiu
Dask jest używany do 4-wymiarowych obrazów komórkowych o wysokiej rozdzielczości przez Harvard Medical School , Howard Hughes Medical Institute , Chan Zuckerberg Initiative i UC Berkeley Advanced Bioimaging Center. Rejestrują ewolucję i ruchy trójwymiarowej komórki w czasie, z maksymalną szczegółowością. Generuje to duże ilości danych, które trudno analizować tradycyjnymi metodami. Dask pomaga im skalować przepływy pracy związane z analizą danych za pomocą znanego interfejsu API, który przypomina NumPy, Pandy i kod scikit-learn. Dask jest również używany w Novartis Institute for Biomedical Research do skalowania prototypów uczenia maszynowego.
Branża finansowa
- Capital One używa Dask do przyspieszania potoków ETL i ML
- Barclays do modelowania systemów finansowych
Nauki geofizyczne
Dask jest używany w nauce o klimacie, energetyce, hydrologii, meteorologii i obrazowaniu satelitarnym przez firmy takie jak NASA , LANL , PANGEO: Earth Science i UK Meteorology Office .
Dzięki Dask oceanografowie mogą tworzyć ogromne zbiory danych symulowanych oceanów na Ziemi, a badacze mogą przeglądać duże zbiory danych sejsmologicznych z czujników na całym świecie, gromadzić dużą liczbę obserwacji z satelitów i stacji pogodowych oraz przeprowadzać duże symulacje.
Biblioteki oprogramowania
Dask jest zintegrowany z wieloma bibliotekami, takimi jak Pangeo i xarray; oprogramowanie szeregów czasowych, takie jak Prophet i tsfresh; oprogramowanie ETL/ML, takie jak scikit-learn, RAPIDS i XGBoost ; narzędzia do zarządzania przepływem pracy, takie jak Apache Airflow i Prefect.
Historia
2014–2015
Dask został pierwotnie opracowany w Continuum Analytics, nastawionej na zysk firmie konsultingowej Python, która ostatecznie przekształciła się w Anaconda , Inc., twórcę wielu pakietów open source i popularnej dystrybucji Anaconda Python. Dask wyrósł z projektu Blaze, finansowanego przez DARPA projektu mającego na celu przyspieszenie obliczeń w open source.
Blaze był ambitnym projektem, który próbował przedefiniować interfejsy API do obliczeń, przechowywania, kompresji i analizy danych dla Pythona, kierowany pierwotnie przez Travisa Oliphanta i Petera Wanga, współzałożycieli Anaconda. Jednak podejście Blaze polegające na byciu ekosystemem w pakiecie oznaczało, że nowi użytkownicy mieli trudności z łatwą adaptacją.
Zamiast przepisywać cały ekosystem oprogramowania, zespół Dask zamierzał rozszerzyć istniejący o odpowiedni komponent. Mając to na uwadze, 21 grudnia 2014 roku Matthew Rocklin stworzył Dask. Celem Dask było pierwotnie zrównoleglenie NumPy , tak aby mogło ono wykorzystać jeden pełny komputer stacji roboczej, co było wówczas powszechne w sklepach finansowych.
2015–2017
Pierwszymi projektami, które naprawdę przyjęły Dask, były Xarray (powszechnie używany w naukach o Ziemi) i Scikit-Image (powszechnie używany w przetwarzaniu obrazów). Dask został zintegrowany z Xarray w ciągu kilku miesięcy od narodzin. Dask dostarczył pierwszej społeczności użytkowników, która pozostaje silna do dziś.
Rozumiejąc, że istnieje ogromne zapotrzebowanie na lekkie rozwiązanie równoległości dla Pandas DataFrames i narzędzi uczenia maszynowego, takich jak scikit-learn, Dask szybko ewoluował, aby wspierać również inne projekty.
2018
Od 2018 roku nie tylko oddolni użytkownicy społeczności, ale także inne zespoły i instytucje w środowisku akademickim, firmy technologiczne i duże korporacje, takie jak NASA, UK Met Office , Blue Yonder i NVIDIA , bardziej zainteresowały się Dask i zaczęły aktywnie integrować go ze swoimi systemami .
Dask otrzymał wsparcie z różnych źródeł: rządu USA (grant DARPA), Fundacji Gordona i Betty Moore , Anaconda , NSF i NASA (granty badawcze w USA przy współpracy z Pangeo) oraz Nvidia.
2020 – obecnie
W 2020 roku Matthew Rocklin założył Coiled Computing, Inc., aby zapewnić dalsze wsparcie dla rozwoju Dask i umożliwić firmom wdrażanie klastrów Dask w chmurze. W maju 2021 roku firma zebrała 21 milionów dolarów w ramach finansowania serii A kierowanego przez Bessemer Venture Partners .
- Bibliografia _ _ _ _ dask.org . Źródło 2022-05-12 .
- ^ a b „Matthew Rocklin - Bio” . matthewrocklin.com . Źródło 2022-05-12 .
- ^ ab " GitHub, Dask, 2014" . github.com . Źródło 2022-05-12 .
- ^ „GitHub, Dask, 2022” . github.com . Źródło 2022-05-12 .
- Bibliografia _ „Walmart i NVIDIA rozmawiają o tym, jak współpracują w celu przekształcenia handlu detalicznego” . blogs.nvidia.com . Źródło 2022-05-12 .
- ^ Sharma Meenakshi, Gonsalves Nick. „Przekształcanie przepływów pracy w szkoleniu modeli w Wayfair” . owayfair.com . Źródło 2022-05-12 .
- ^ a b c Eswaramoorthy, Pavithra. „Kto używa Daska?” . zwinięty.io . Źródło 2022-05-12 .
- Bibliografia _ „Dask i TensorFlow w produkcji w Grubhub” . zwinięty.io . Źródło 2022-05-12 .
- ^ „Firmy obecnie korzystające z Dask” . odkrycie.hgdata.com . Źródło 2022-05-12 .
- ^ a b c „DASK” . nvidia.com . Źródło 2022-05-12 .
- Bibliografia _ „Rozproszone uczenie maszynowe w Capital One” . zwinięty.io . Źródło 2022-05-12 .
- ^ „Korzystanie z Dask na serwerze NAS” . nas.nasa.gov . Źródło 2022-05-12 .
- ^ „Skalowalne przetwarzanie z Dask” . Samouczki ULHPC . Źródło 2022-05-12 .
- ^ a b „DataFrame - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ a b „Dokumentacja torby - Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ a b „Array - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- Bibliografia _ „Co to jest Daszek?” . zwinięty.io . Źródło 2022-05-12 .
- Bibliografia _ _ ml.dask.org . Źródło 2022-05-12 .
- ^ a b „Przetwarzanie równoległe z Dask” . docs.xarray.dev . Źródło 2022-05-12 .
- ^ a b „Opóźniony - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ a b „Kontrakty terminowe - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ „Specyfikacja - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ „Harmonogram Dask - dokumentacja Dask” . docs.dask.org . Źródło 2022-05-12 .
- ^ „Obliczenia z nauką scikit” . scikit-learn.org . Źródło 2022-05-12 .
- ^ „Równoległe przewidywanie i transformacja - dokumentacja Dask” . ml.dask.org . Źródło 2022-05-12 .
- ^ „Przyrostowa optymalizacja hiperparametrów - dokumentacja Dask” . ml.dask.org . Źródło 2022-05-12 .
- ^ „Informacje o interfejsie API — dokumentacja Dask” . ml.dask.org . Źródło 2022-05-12 .
- ^ a b „Dystrybucja XGBoost z Dask” . Samouczki XGBoost . Źródło 2022-05-12 .
- ^ „Jak działa rozproszone światło GBM. Dask” . LightGBM. Przewodnik po rozproszonym nauczaniu . Źródło 2022-05-12 .
- Bibliografia _ „Dask i Pandy i XGBoost” . matthewrocklin.com . Źródło 2022-05-12 .
- ^ „Dokumentacja Skorcha” . Skorch . Źródło 2022-05-12 .
- ^ „Dokumentacja SciKeras” . adriangb.com . Źródło 2022-05-12 .
- ^ „Użycie Dask w Blue Yonder” . tech.blueyonder.com . Źródło 2022-05-12 .
- Bibliografia _ „Wyszukiwanie w Grubhub i intencja użytkownika” . zwinięty.io . Źródło 2022-05-12 .
- Bibliografia _ „Dask i RAPIDS: kolejna wielka rzecz dla nauki o danych i uczenia maszynowego” . Capitalone.com . Źródło 2022-05-12 .
- Bibliografia _ „Której biblioteki powinienem użyć? Porównanie wydajności Apache Spark, Dask i Pandas (z testami porównawczymi)” . censius.ai . Źródło 2022-05-12 .
- ^ „Dostosowanie Dask do intensywnych badań geologicznych związanych z danymi” . coiled.wistia.com . Źródło 2022-05-12 .
- Bibliografia _ _ metoffice.gov.uk . Źródło 2022-05-12 .
- Bibliografia _ _ pangeo.io . Źródło 2022-05-12 .
- ^ „Prognozowanie za pomocą HEAVY.AI i Prophet” . docs.heavy.ai . Źródło 2022-05-12 .
- ^ „Dask - prosty sposób. Dokumentacja Tsfresh” . tsfresh.readthedocs.io . Źródło 2022-05-12 .
- ^ a b „nauka scikit” . nauka scikit . Źródło 2022-05-12 .
- ^ „Skaluj Pythona za pomocą Dask na GPU” . bystrza.ai . Źródło 2022-05-12 .
- ^ „Dask Executor - Dokumentacja przepływu powietrza Apache” . airflow.apache.org . Źródło 2022-05-12 .
- ^ „Wdrożenie: Dask. Dokumenty prefekta” . docs.prefekt.io . Źródło 2022-05-12 .
- Wikimedia Commons znajdują się multimedia związane z Anakondą . anakonda.com . Źródło 2022-05-12 .
- ^ „Ekosystem Blaze” . blaze.pydata.org . Źródło 2022-05-12 .
- Bibliografia _ _ darpa . Źródło 2022-05-12 .
- ^ „Historia Daska” . Zwinięty. YouTube . Źródło 2022-05-12 .
- Bibliografia _ _ xarray.pydata.org . Źródło 2022-05-12 .
- ^ „Przetwarzanie obrazu w Pythonie” . obraz scikit . Źródło 2022-05-12 .
- Bibliografia _ _ pandy . Źródło 2022-05-12 .
- Bibliografia _ „Finansowanie Dask, krótka historia” . matthewrocklin.com .
- ^ „Coiled: Python do analizy danych w chmurze z Dask” . zwinięty.io . Źródło 2022-05-12 .
- Bibliografia _ „Uruchomienie operacji związanych z danymi i sztuczną inteligencją Coiled zarabia 21 mln USD” . VentureBeat . Źródło 2022-05-12 .