Распределенный Python на кластере с несколькими машинами - PullRequest
0 голосов
/ 19 мая 2019

Следующее требование -:

class MultiMachineDoWork:

    def Function1(self, A, B):  
        return A+B

    def Function2(self, A, B):  
        return A*B 

    def Function3(self, A, B):  
        return A**B  

    def Function4():  
        X = MultiMachineDoWork.Function1(5,10)
        Y = MultiMachineDoWork.Function2(5,10)
        Z = MultiMachineDoWork.Function3(5,10)
        return X+Y+Z

Если предположить, что функция 1, функция 2 и функция 3 занимают очень много времени, лучше запускать их на распределенной модели параллельно на машинах L, M и N соответственно. А функция 4 может работать на машине Р, которая может собирать результаты и объединять.

MapReduce Работает по некоторой схожей концепции, но запускает одну и ту же функцию в другой части данных ... Может ли Dask / Ray / Celery быть полезен в этом примере ...

Если необходимо создать собственное решение, что и как должно действовать, решение ...

Pydoop / Spark With Dask Local Cluster?


Real Life Case Study - Ensemble модель для ML Classification.One функция для RandomForest, One For Support Vector и один раз для XGBoost.All работает на том же наборе данных ...

1 Ответ

1 голос
/ 19 мая 2019

Распределение задачи / функции / вычисления по нескольким машинам / узлам может быть выполнено с использованием различных структур в Python.Наиболее распространенными и широко используемыми являются Ray, Dask и PySpark, и какой из них использовать будет зависеть от варианта использования.

Для простого распределения функций / задач вы можете использовать библиотеку Ray(@ ray.remote) для распространения, а затем используйте метод get для интегрирования / вычисления результата.То же самое можно сделать и через dask.

https://rise.cs.berkeley.edu/blog/modern-parallel-and-distributed-python-a-quick-tutorial-on-ray/

Я предпочту Spark / Pyspark , когда вы имеете дело с большим набором данных и хотите выполнитькакая-то операция ETL, чтобы распределить огромный набор данных по нескольким узлам, а затем выполнить какое-либо преобразование или операцию над ним.Примечание. Концепция Spark или mapreduce предполагает, что вы перенесете вычисления в данные, и они выполнят ту же / аналогичную задачу для другого подмножества данных и, наконец, выполнят некоторую агрегацию (включает перетасовку).1015 * поддерживает ансамбль благодаря встроенному алгоритму случайного леса или градиентного дерева.Но обучение отдельных моделей (случайный лес, деревья градиентов, логистическая регрессия и т. Д.) На отдельных узлах / исполнителях в настоящее время не поддерживается в спарк (из коробки).Хотя это может быть возможно благодаря настраиваемому искровому коду, так же, как это происходит внутри компании для случайного леса (обучение нескольких деревьев решений).

Реальный сценарий ансамблирования может бытьлегко делается с помощью Dask и Sklearn.Dask хорошо интегрируется с scikit-learn xgboost и т. Д. Для выполнения параллельных вычислений между узлами / работниками распределенного кластера с помощью диспетчера контекста joblib.

Теперь для сценария ансамбля вы можете использовать различные модели / алгоритм scikit-learn (RandomForest, SGDSVM, Logistic Regression) и использовать классификатор Voting для объединения нескольких различных моделей (например, подоценок) в одну модель, которая (в идеале) сильнее, чем любая из отдельных моделей в отдельности (т.е. основы концепции ансамбля).

Использование Dask обучит отдельные подоценщики / модели на разных машинах в кластере.

https://docs.dask.org/en/latest/use-cases.html

Высокий уровень кода будет выглядеть-

classifiers = [
    ('sgd', SGDClassifier(max_iter=1000)),
    ('logisticregression', LogisticRegression()),
    ('xgboost', XGBClassifier()
    ('svc', SVC(gamma='auto')),
]
clf = VotingClassifier(classifiers) 

with joblib.parallel_backend("dask"):
    clf.fit(X, y)

** Выше можно достичь и с помощью других распределенных сред, таких как Ray / Spark.etc, но для этого потребуется более настраиваемое кодирование.

Надеюсь, эта информация поможет вам!

...