Автор: Брат взлетай
Способ повышения скорости бега Панд уже неоднократно вводился ранее, и Даск в нем часто упоминается.Многие друзья, которые не сталкивались с ним, могут мало знать о нем.Сегодня рекомендую этот артефакт.
1. Что такое Даск?
Pandas
иNumpy
Всем знакомо.После выполнения кода данные загружаются в оперативную память.Если набор данных особенно велик, мы увидим рост памяти. Но иногда обрабатываемые данные не подходят дляRAM
,В этот моментDask
приходящий.
Dask
Это с открытым исходным кодом и бесплатно. Он разработан в сотрудничестве с другими проектами сообщества, такими как Numpy, Pandas и Scikit-Learn.
официальный:dask.org/
Dask
служба поддержкиPandas
изDataFrame
иNumpyArray
структур данных и может выполняться как на локальном компьютере, так и масштабироваться для работы в кластере.
По сути, просто напишите код один раз, используя обычныйPythonic
синтаксис, вы можете запустить его локально или развернуть в многоузловом кластере. Это крутая функция сама по себе, но не самая крутая.
я думаюDask
Самые крутые особенности:Он совместим с большинством инструментов, которые мы уже используем, и всего несколькими изменениями кода мы можем запускать код параллельно с вычислительной мощностью, которая уже есть на нашем ноутбуке. А параллельная обработка данных означает меньше времени выполнения, меньше времени ожидания и больше времени анализа.
СледующееDask
Общий поток обработки данных.
2. Какие существующие инструменты поддерживает Dask?
Это то, что я предпочитаю, потому чтоDask
С участиемPython
Пакеты библиотек обработки данных и моделирования совместимы, и используется API пакетов библиотек, что обеспечивает чрезвычайно низкую стоимость обучения для пользователей Python. И нравитсяHadoop
,Spark
Этот вид обработки больших данных имеет высокий порог обучения и временные затраты.
В настоящее время,Dask
может поддержатьpandas
,Numpy
,Sklearn
,XGBoost
,XArray
,RAPIDS
Подождите, я думаю, что этих пунктов достаточно, по крайней мере, для часто используемой обработки данных, моделирования и анализа можно полностью охватить.
3. Установка даска
можно использоватьconda
илиpip
или установить из исходниковdask
.
conda install dask
так какdask
Существует много зависимостей, поэтому для быстрой установки вы также можете использовать следующий код, который установит и запуститDask
Требуется минимальный набор зависимостей.
conda install dask-core
Затем идет установка из исходников.
git clone https://github.com/dask/dask.git
cd dask
python -m pip install .
4. Как использовать Даск?
Нампи, панды
Dask
Введены 3 параллельные коллекции, которые могут хранить данные больше, чем оперативная память, эти коллекции имеютDataFrame
,Bags
,Arrays
. Каждый из этих типов коллекций может использовать данные, разделенные между оперативной памятью и жестким диском, а также данные, распределенные по нескольким узлам в кластере.
Dask
Использование очень ясно, если вы используетеNumPy
массив, изDask
начинается массив, если вы используетеPandas DataFrame
, отDask DataFrame
старт и так далее.
import dask.array as da
x = da.random.uniform(low=0, high=10, size=(10000, 10000), # normal numpy code
chunks=(1000, 1000)) # break into chunks of size 1000x1000
y = x + x.T - x.mean(axis=0) # Use normal syntax for high level algorithms
# DataFrames
import dask.dataframe as dd
df = dd.read_csv('2018-*-*.csv', parse_dates='timestamp', # normal Pandas code
blocksize=64000000) # break text into 64MB chunks
s = df.groupby('name').balance.mean() # Use normal syntax for high level algorithms
# Bags / lists
import dask.bag as db
b = db.read_text('*.json').map(json.loads)
total = (b.filter(lambda d: d['name'] == 'Alice')
.map(lambda d: d['balance'])
.sum())
Эти интерфейсы высокого уровня повторяют стандартные интерфейсы с небольшими изменениями. Для большинства API в исходном проекте эти интерфейсы будут автоматически обрабатывать большие наборы данных для нас параллельно, и реализация не очень сложна.Dask
Документ документа может быть заполнен шаг за шагом.
Delayed
Давайте поговорим оDask
изDelay
функция, очень мощная.
Dask.delayed
— это простой и мощный способ распараллелить существующий код. почему это называетсяdelayed
Причина в том, что вместо немедленного вычисления результата он записывает вычисляемый результат в виде задачи в графе, который позже будет выполняться на параллельном оборудовании.
Иногда проблемы с существующимиdask.array
илиdask.dataframe
может не подойти, в этих случаях мы можем использовать более простойdask.delayed
Интерфейс для распараллеливания пользовательских алгоритмов. Например следующий пример.
def inc(x):
return x + 1
def double(x):
return x * 2
def add(x, y):
return x + y
data = [1, 2, 3, 4, 5]
output = []
for x in data:
a = inc(x)
b = double(x)
c = add(a, b)
output.append(c)
total = sum(output)
45
Приведенный выше код выполняется последовательно в одном потоке. Однако мы видим, что многие из них могут выполняться параллельно.Dask delayed
функция может быть измененаinc
,double
Эти функции, чтобы они могли работать лениво, вместо немедленного выполнения функции, помещают функцию и ее аргументы в граф вычислительных задач.
Мы просто модифицируем код для использованияdelayed
Оберните функцию.
import dask
output = []
for x in data:
a = dask.delayed(inc)(x)
b = dask.delayed(double)(x)
c = dask.delayed(add)(a, b)
output.append(c)
total = dask.delayed(sum)(output)
После запуска кодаinc
,double
,add
иsum
еще не произошло, но сгенерируйте граф вычислительной задачи и передайте егоtotal
. Затем мы используемvisualizatize
Посмотрите на карту задач.
total.visualize()
На приведенном выше рисунке хорошо видна возможность параллелизма, поэтому без раздумий используйтеcompute
Выполняются параллельные вычисления, и в это время расчет завершается.
>>> total.compute()
45
Так как набор данных небольшой и не может сравнить время, здесь представлен только метод использования, и вы можете попрактиковаться в нем самостоятельно.
Машинное обучение Sklearn
Что касается параллельного выполнения машинного обучения, из-за большого количества контента Донге расширит его в другой статье. Просто скажи это здесьdask-learn
.
dask-learn
проект сSklearn
Разработано в сотрудничестве. Распараллеливание теперь возможно сScikit-learn
изPipeline
,GridsearchCV
иRandomSearchCV
и их варианты, которые лучше обрабатывают вложенные параллельные операции.
Поэтому, если вы будетеsklearn
заменитьdklearn
, то скорость сильно возрастет.
# from sklearn.grid_search import GridSearchCV
from dklearn.grid_search import GridSearchCV
# from sklearn.pipeline import Pipeline
from dklearn.pipeline import Pipeline
下面是一个使用Pipeline的示例,其中应用了PCA和逻辑回归。
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=10000,
n_features=500,
n_classes=2,
n_redundant=250,
random_state=42)
from sklearn import linear_model, decomposition
from sklearn.pipeline import Pipeline
from dklearn.pipeline import Pipeline
logistic = linear_model.LogisticRegression()
pca = decomposition.PCA()
pipe = Pipeline(steps=[('pca', pca),
('logistic', logistic)])
grid = dict(pca__n_components=[50, 100, 150, 250],
logistic__C=[1e-4, 1.0, 10, 1e4],
logistic__penalty=['l1', 'l2'])
# from sklearn.grid_search import GridSearchCV
from dklearn.grid_search import GridSearchCV
estimator = GridSearchCV(pipe, grid)
estimator.fit(X, y)
оказаться:sklearn
будет выполнять этот расчет примерно за 40 секунд, в то время какdask-learn
Замена занимает около 10 секунд.
Кроме того, если вы добавите следующий код, вы сможете подключиться к кластеру черезClient
может показать весь процесс расчетаdashboard
,Зависит отBokeh
выполнить.
from dask.distributed import Client
c = Client('scheduler-address:8786')
5. Резюме
ВышеупомянутоеDask
Краткое введение, функции Dask очень мощные, и документация также очень полная, с примерами и пояснениями. Заинтересованные друзья могут зайти на официальный сайт илиGitHub
Учись, братан, в следующий раз поделись и используйDask
Несколько примеров машинного обучения.
Нелегко быть оригинальным, я думаю, хорошо, когда это нравится.
Приглашаю всех обратить внимание на мой оригинальный публичный аккаунт WeChat.PythonНаука о данных, специализирующийся на написании алгоритмов данных на основе Python, машинном обучении и глубоком изучении хардкорных галантерейных товаров, персональный веб-сайт:datadeepin