В приложении PyQt5 возможно ли запускать sklearn с параллельными заданиями без зависания

Можно ли запускать в приложении qt, не замораживая графический интерфейс, скажем, поиск sklearn gird, который использует несколько заданий параллельно (n_jobs > 1)? Проблема в том, что joblib, который используется для распараллеливания кода sklearn, не может запустить многопроцессорную обработку в потоке.

Например, я использую Gridsearch, чтобы найти лучшие параметры для svr, который довольно интенсивен в вычислительном отношении.

Этот вопрос задавался несколько раз, но решение не найдено:

pyqt5-run-sklearn-расчеты-на-отдельном-qthread, предлагают использовать QProcess?

мультипроцессорная поддержка параллельных циклов, которые не могут быть вложенными ниже потоков, threading.current_thread().name = 'MainThread' Обходной путь не работает после устранения проблемы

joblib-параллельный-использует-только-одно-ядро-если-началось-из-qthread, переписать задачу, используя multiprocessing.Pool(processes=4), Этот метод не применим для gridsearch embed njobs.

И любая идея, почему это намеренно не поддерживается (это особенность)? Кажется, что-то, что было бы весьма полезно?

0 ответов

Насколько я понимаю, проблема связана с серверной частью по умолчанию, используемой joblib, а именно loky.

Покопавшись в документации по joblib и sklearn, я решил проблему, переключивjoblib бэкэнд для threading. Обратите внимание, призыв кregister_parallel_backend лежит за пределами __init__ функция.

from sklearn.utils import parallel_backend, register_parallel_backend
from joblib._parallel_backends import ThreadingBackend

class ModelTrainer(QRunnable):
    register_parallel_backend('threading', ThreadingBackend, make_default=True)

    def __init__(self, **kwargs):
Другие вопросы по тегам