gpt4 book ai didi

python - 光学平行度

转载 作者:行者123 更新时间:2023-12-05 01:38:30 27 4
gpt4 key购买 nike

我有以下脚本 (optics.py) 来估计具有预先计算的距离的聚类:

from sklearn.cluster import OPTICS
import numpy as np

distances = np.load(r'distances.npy')
clust = OPTICS(metric='precomputed', n_jobs=-1)
clust = clust.fit(distances)

查看 htop 结果我可以看到只使用了一个 CPU 内核

enter image description here

尽管事实上 scikit 在多个进程中运行集群:

enter image description here

为什么 n_jobs=-1 没有导致使用所有 CPU 内核?

最佳答案

我是 sklearn OPTICS 模块的主要作者。并行是困难的,因为有一个不能并行运行的排序循环;也就是说,计算量最大的任务是距离计算,这些任务可以并行运行。更具体地说,sklearn OPTICS 一次一行计算上三角距离矩阵,从“n”次距离查找开始,然后减少到“n-1,n-2”次查找,总共进行 n 平方/2 次距离计算。 .. 问题是 sklearn 中的并行性通常由 joblib 处理,它使用进程(而不是线程),在循环中使用时创建和销毁的开销相当高。 (即,当您循环遍历数据集时,您每行创建和销毁流程工作人员,并且“n”个流程的设置/拆卸比您从 joblib 获得的并行性好处更多的开销——这就是为什么 njobs 被禁用 OPTICS )

在 OPTICS 中“强制”并行的最佳方法可能是定义一个并行运行的自定义距离度量——有关此方面的一个很好的例子,请参阅这篇文章:

https://medium.com/aspectum/acceleration-for-the-nearest-neighbor-search-on-earths-surface-using-python-513fc75984aa

上面的一个例子实际上是将距离计算强制到 GPU 上,但仍然使用 sklearn 来执行算法。

关于python - 光学平行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com