2013-10-08 2 views
1

Я использую смесь подмодулей модуля sklearn для модели Gaussian Mixxt ... Когда я запускаю свой код в многоядерной системе, он использует несколько ядер, хотя я не прошу об этом в коде. Это поведение по умолчанию? И что более важно, как я могу отключить его?Unintented многопоточность в python (scikit-learn)

Благодаря

+0

возможно, что установка NumPy многопоточность? – prgao

+0

hmmm. может быть. как я могу это проверить? и как я могу заставить его быть однопоточным без переустановки? – ahmethungari

+0

попробуйте умножить две гигантские матрицы (A.dot (B) не A * B), как 5000x5000, и посмотрите, есть ли многоядерное использование. Многопоточность зависит от библиотеки, с которой была скомпилирована numpy. – prgao

ответ

3

Если вы используете МКЛ попробуйте

export MKL_NUM_THREADS=1

Для Numpy с OpenBLAS:

export OPENBLAS_NUM_THREADS=1

Для некоторых версий Numpy это изменение было предложено:

переменная

export NUMEXPR_NUM_THREADS=1

среда должна быть установлена ​​до того, как скрипт запускается (настройка внутри самого скрипта не имеет желаемого эффекта). Для установки темы во время выполнения Престола: Set max number of threads at runtime on numpy/openblas

Смотрите следующее для определения того, как ваш NumPy является установка: How to check blas/lapack linkage in numpy/scipy?

1

благодаря @prgao

ответ является там Python: How do you stop numpy from multithreading?

установка "экспорт MKL_NUM_THREADS = 1", кажется, работает

+1

Работает только в том случае, если версия использования использования numpy связана с реализацией MKL BLAS/LAPACK. Для OpenBLAS это будет 'export OPENBLAS_NUM_THREADS = 1'. Для ATLAS вам придется перекомпилировать ATLAS, чтобы отключить потоки. – ogrisel

+0

Thanx мы сходили с ума! – arutaku

Смежные вопросы