与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 对象实现的学习算法。