Распределение задачи / функции / вычисления по нескольким машинам / узлам может быть выполнено с использованием различных структур в 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, но для этого потребуется более настраиваемое кодирование.
Надеюсь, эта информация поможет вам!