Python 与本机sklearn相比,Dask性能较慢
我不熟悉使用Dask,但在尝试在Dask中重新编写本机sklearn函数时,遇到了非常缓慢的性能。我已经尽可能地简化了用例,希望能得到一些帮助 使用标准sklearn/numpy/pandas等,我有以下几点:Python 与本机sklearn相比,Dask性能较慢,python,scikit-learn,dask,Python,Scikit Learn,Dask,我不熟悉使用Dask,但在尝试在Dask中重新编写本机sklearn函数时,遇到了非常缓慢的性能。我已经尽可能地简化了用例,希望能得到一些帮助 使用标准sklearn/numpy/pandas等,我有以下几点: df = pd.read_csv(location, index_col=False) # A ~75MB CSV # Build feature list and dependent variables, code irrelevant from sklearn import lin
df = pd.read_csv(location, index_col=False) # A ~75MB CSV
# Build feature list and dependent variables, code irrelevant
from sklearn import linear_model
model = linear_model.Lasso(alpha=0.1, normalize=False, max_iter=100, tol=Tol)
model.fit(features.values, dependent)
print(model.coef_)
print(model.intercept_)
这需要几秒钟来计算。然后,我在达斯克有以下内容:
# Read in CSV and prepare params like before but using dask arrays/dataframes instead
with joblib.parallel_backend('dask'):
from dask_glm.estimators import LinearRegression
# Coerce data
X = self.features.to_dask_array(lengths=True)
y = self.dependents
# Build regression
lr = LinearRegression(fit_intercept=True, solver='admm', tol=self.tolerance, regularizer='l1', max_iter=100, lamduh=0.1)
lr.fit(X, y)
print(lr.coef_)
print(lr.intercept_)
计算起来需要时间(大约30分钟)。我的开发集群中只有1个Dask工作线程,但它有16GB的ram和无限的CPU
有人知道为什么这么慢吗
希望我的代码遗漏不重要
注意:在人们问为什么要使用Dask之前,这是最简单的用例——它被用作概念验证练习,以检查事情是否按预期运行。您可能需要考虑的文档引用: 对于由多个任务使用的大型参数,将数据预分散到每个工作者可能更有效,而不是为每个任务序列化一次数据。这可以通过使用scatter关键字参数来完成,该参数需要向每个worker发送一组对象 但总的来说,Dask有很多诊断工具可供您使用,特别是调度器的仪表盘,可以帮助您了解工作人员在做什么以及时间是如何花费的—您最好对此进行调查。与任何计算一样,其他系统范围的因素也非常重要:例如,您离内存容量有多近
不过,一般来说,Dask并不是神奇的,当数据适合存储时,肯定会有Dask增加大量开销的情况。仔细阅读有关您正在考虑的方法的预期用途的文档-它应该加快速度,还是仅仅允许您处理超出系统正常范围的数据?您正在比较两种完全不同的算法(提示:坐标下降/一阶vs.牛顿/二阶=hessian opt).@sascha Sorry本来应该读admm的——尽管你说的可能仍然是真的!除了上述(不同的算法)之外,我还试图计算出速度。你是不是在消耗IPC开销?