Эффективное использование нескольких ядер с распределением Dask и Gensim - PullRequest
0 голосов
/ 14 января 2020

У меня огромный фрейм данных, который не помещается в память. Таким образом, я получаю к нему доступ в Python через dask (распределенный).

Я хочу обучить модель Word2Vec / Doc2Ve c с пакетом gensim на основе записей одного столбца в данных поэтому я создал итератор, как в этот вопрос .

Теперь gensim обучается с использованием нескольких ядер, число которых мне нужно указать, и аналогичным образом dask позволяет мне использовать многоядерные тоже. До сих пор я дал все доступные ядра для dask и такое же количество ядер для gensim. Я рассуждаю так: выборка данных и обучение на них являются эксклюзивными задачами, которые нельзя выполнять одновременно, поэтому gensim и dask не должны бороться за ядра.

Действительно, есть сообщений об ошибках нет, но, тем не менее, обучение кажется довольно медленным, и я подозреваю, что есть лучший способ распределить работу. У кого-нибудь есть опыт в этом вопросе?

1 Ответ

0 голосов
/ 17 января 2020

Объединение двух библиотек, которые пытаются использовать многопоточный параллелизм, может привести к обратным результатам. Наличие слишком большого количества активных потоков может привести к конфликту и замедлить работу. Я рекомендую установить одну из двух библиотек для использования только одного потока.

Для Dask вы можете сделать это с помощью следующего:

dask.config.set(scheduler="single-threaded")

https://docs.dask.org/en/latest/scheduling.html

...