我想对近 100 万个向量进行降维处理,每个向量有 200 个维度(doc2vec
)。我正在使用模块的TSNE
实现sklearn.manifold
,主要问题是时间复杂度。即使使用method = barnes_hut
,计算速度仍然很低。有时甚至会耗尽内存。
我在具有 130G RAM 的 48 核处理器上运行它。有没有一种方法可以并行运行它或利用丰富的资源来加快进程。
我想对近 100 万个向量进行降维处理,每个向量有 200 个维度(doc2vec
)。我正在使用模块的TSNE
实现sklearn.manifold
,主要问题是时间复杂度。即使使用method = barnes_hut
,计算速度仍然很低。有时甚至会耗尽内存。
我在具有 130G RAM 的 48 核处理器上运行它。有没有一种方法可以并行运行它或利用丰富的资源来加快进程。
您必须查看 t-SNE 的这个多核实现。
我实际上尝试过它并且可以保证它的卓越性能。
试试UMAP。
它比 t-SNE 快得多。
由于在 SO 中没有答案,我在 github 页面中问过自己,并且通过说明 GaelVaroquaux 的以下回复结束了该问题。
如果您只想并行化向量操作,那么您应该使用用 MKL 编译的 numpy 构建(不要尝试自己做,这很有挑战性)。
算法本身可能存在高级并行性的方法,这可能会带来更大的收益。但是,在快速查看代码之后,我没有看到任何明确的方法。
我将继续并关闭这个问题,因为它更像是一个蓝天白名单。我完全同意,我希望 TSNE 走得更快,如果并行性很容易,那就太好了。但是在目前的情况下,需要做更多的工作才能达到我们可以处理这样的愿望清单的状态。