Исходный выпуск FastText от Facebook включает параметр командной строки thread
, по умолчанию 12, который контролирует количество рабочих потоков, которые будут выполнять параллельное обучение (на одной машине). Если у вас есть больше процессорных ядер и вы еще не пытались увеличить его, попробуйте это.
Реализация gensim (как gensim.models.fasttext.FastText
) включает параметр инициализации workers
, который управляет количеством рабочих потоков. Если вы еще не пытались увеличить его, вплоть до количества ядер, это может помочь. Однако из-за дополнительных узких мест многопоточности в реализации Python, если у вас много ядер (особенно 16+), вы можете найти максимальную пропускную способность при меньшем количестве рабочих мест, чем у ядер - часто что-то в диапазоне 4-12. (Вы должны экспериментировать и следить за достигнутыми показателями с помощью регистрации, чтобы найти оптимальное значение, и все ядра не будут увеличены.)
Вы получите значительную многопоточность в gensim только в том случае, если ваша установка сможет использовать ее оптимизированные для Cython подпрограммы. Если вы смотрите журнал при установке gensim через pip
или аналогичный, в случае сбоя должна появиться явная ошибка. Или, если вы просматриваете логи / вывод при загрузке / использовании классов gensim, обычно будет предупреждение, если используются более медленные неоптимизированные версии.
Наконец, часто в способах, которыми люди используют gensim, узкое место может заключаться в их корпусе итератора или ввода-вывода, а не в параллелизме. Чтобы минимизировать это замедление:
- Проверьте, насколько быстро ваш корпус может перебирать все примеры отдельно от передачи его классу gensim.
- Избегайте выполнения каких-либо операций выбора базы данных или сложной / регулярной обработки / токенизации в итераторе - сделайте это один раз и сохраните полученный в результате простой для чтения токен токен где-нибудь.
- Если корпус поступает с сетевого тома, проверьте, помогает ли потоковая передача с локального тома. Если вы идете с вращающегося HD, попробуйте SSD.
- Если корпус можно разместить в ОЗУ, возможно, на специальной машине с гигантским ОЗУ, попробуйте это.