我有一个无法容纳到内存中的巨大数据框。因此,我可以通过dask
(分布式)在Python中访问它。
[我想基于数据帧中一列的条目使用包gensim
训练Word2Vec / Doc2Vec模型,这就是为什么我在this question中构建了迭代器。
现在,gensim
训练使用多个内核,我需要指定其编号,并且类似地,dask
也允许我使用多个内核。到目前为止,我将所有可用的内核分配给dask
,将相同数量的内核分配给gensim
。我的理由是,获取数据和对数据进行训练是无法同时完成的排他性任务,因此gensim
和dask
不应争夺核心。
确实,没有错误消息,但是培训似乎仍然很慢,我怀疑有更好的分发工作的方法。有没有人在这件事上有经验?
将两个都尝试使用多线程并行性的库组合在一起可能会适得其反。活动的线程太多会导致争用并使速度变慢。我建议将两个库之一设置为仅使用一个线程。
对于Dask,您可以使用以下方法进行此操作:
dask.config.set(scheduler="single-threaded")