Python 与本机sklearn相比,Dask性能较慢

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

我不熟悉使用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 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开销?