与joblib集成#

Joblib 是一个与 scikit-learn 集成的库,用于使机器学习任务并行。我们为 joblib 创建一个后端,使用Mars remote,用户可以在 Mars 上使他们的 scikit-learn 任务并行。

要启用后端,您需要使用下面的代码进行注册。

from mars.learn.contrib.joblib import register_mars_backend
register_mars_backend()

之后,可以使用Mars服务端点或现有的Mars会话创建Mars并行后端。当没有指定时,将使用默认或本地会话。

import joblib
# create with Mars endpoint
with joblib.parallel_backend('mars', service='http://<host>:<port>'):
    # scikit-learn code
# create with existing Mars session
sess = new_session('http://<host>:<port>')
with joblib.parallel_backend('mars', session=sess):
    # scikit-learn code

下面显示了一个简单的例子,我们使用随机搜索拟合了一个SVM分类器。您只需将joblib.parallel_backend中的服务端点替换为您自己的服务端点。

import joblib
import sklearn
from sklearn.datasets import load_digits
from sklearn.model_selection import RandomizedSearchCV
from sklearn.svm import SVC

from mars.learn.contrib.joblib import register_mars_backend
register_mars_backend()

digits = load_digits()
param_space = {
    'C': np.logspace(-6, 6, 30),
    'gamma': np.logspace(-8, 8, 30),
    'tol': np.logspace(-4, -1, 30),
    'class_weight': [None, 'balanced'],
}
model = SVC(kernel='rbf')
search = RandomizedSearchCV(model, param_space, cv=5, n_iter=10, verbose=10)

with joblib.parallel_backend('mars', service='http://<host>:<port>'):
    search.fit(digits.data, digits.target)

请注意,joblib 只能用于足够小的数据,这些数据可以保存在单个机器中。对于巨大的数据集,请使用 Mars 对象实现的学习算法。