Если я использую Dask-Jobqueue на HP C, нужно ли мне использовать Dask-ML для запуска кодов scikit-learn? - PullRequest
0 голосов
/ 21 июня 2020

Если я использую Dask-Jobqueue на высокопроизводительном компьютере (HP C), мне все равно нужно использовать Dask-ML (ie. joblib.parallel_backend('dask') для запуска кодов scikit-learn?

Скажем, у меня есть следующий код:

from dask_jobqueue import PBSCluster

cluster = PBSCluster(cores=36,   
                     memory='100GB',   
                     project='P48500028',   
                     queue='premium',   
                     interface='ib0',
                     walltime='02:00:00')

cluster.scale(100)  
                   
from dask.distributed import Client
client = Client(cluster)   


from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

X, y = make_classification(n_samples=2000, n_features=20, n_classes=2, random_state=0)

param_grid = {"C": [0.001, 0.01, 0.1, 0.5, 1.0, 2.0, 5.0, 10.0],
              "kernel": ['rbf', 'poly', 'sigmoid'],
              "shrinking": [True, False]}

grid_search = GridSearchCV(SVC(gamma='auto', random_state=0, probability=True),
                           param_grid=param_grid,
                           return_train_score=False,
                           iid=True,
                           cv=3,
                           n_jobs=-1)


import joblib

with joblib.parallel_backend('dask'):
    grid_search.fit(X, y)

Поскольку я использую Dask-Jobqueue на HP C (ie. Я подключен к экземпляру HP C) , когда я запускаю свой код, будет ли весь мой код уже распределен в кластере (поскольку я указал cluster.scale(100))? Если да, то нужны ли мне последние 3 строки кода выше, в которых используется Dask-ML? Или мой код может быть таким:

from dask_jobqueue import PBSCluster

cluster = PBSCluster(cores=36,   
                     memory='100GB',   
                     project='P48500028',   
                     queue='premium',   
                     interface='ib0',
                     walltime='02:00:00')

cluster.scale(100)  
                   
from dask.distributed import Client
client = Client(cluster)   


from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

X, y = make_classification(n_samples=2000, n_features=20, n_classes=2, random_state=0)

param_grid = {"C": [0.001, 0.01, 0.1, 0.5, 1.0, 2.0, 5.0, 10.0],
              "kernel": ['rbf', 'poly', 'sigmoid'],
              "shrinking": [True, False]}

grid_search = GridSearchCV(SVC(gamma='auto', random_state=0, probability=True),
                           param_grid=param_grid,
                           return_train_score=False,
                           iid=True,
                           cv=3,
                           n_jobs=-1)

grid_search.fit(X, y)

Будет ли последняя строка кода выше grid_search.fit(X, y) не запускаться ни на одном кластере Dask после того, как я удалил joblib.parallel_backend('dask')? Или он по-прежнему будет работать в кластере, поскольку я ранее заявлял cluster.scale(100)?

Заранее большое спасибо.

1 Ответ

1 голос
/ 27 июня 2020

Будет ли последняя строка кода выше grid_search.fit (X, y) не запускаться ни в одном кластере Dask, поскольку я удалил joblib.parallel_backend ('dask')?

Правильно . Необходимо указать Scikit-Learn использовать Dask

Или он по-прежнему будет работать в кластере, поскольку я ранее объявил cluster.scale (100)?

Нет . Dask не может автоматически распараллелить ваш код. Вам нужно либо указать Scikit-Learn использовать Dask с декоратором joblib, либо использовать эквивалентный объект dask_ml GridSearchCV.

...