Одновременное выполнение нескольких KMeans с параллелизмом

#scikit-learn #parallel-processing #openmp

Вопрос:

Согласно этой проблеме на github, KMeans в Scikit-Learn >= 0.23 изменилась его реализация. Теперь мы можем задать OMP_NUM_THREADS количество параллельных заданий для KMeans.

Моя система (AWS EC2 с AL2) показывает 32 из nproc . Без настройки OMP_NUM_THREADS KMeans использует все ядра. Это заморозило мою систему, и я не смог подключиться по ssh к хосту. Поэтому теперь, когда я запускаю KMeans, я устанавливаю OMP_NUM_THREADS=30 . При запуске KMeans с этим параметром я обнаружил (из top ), что процесс не всегда использует все 30 процессоров, потому что я часто вижу, что «%процессора» меньше 3000.

Итак, если у меня есть две программы KME для запуска, могу ли я запускать их одновременно, не замораживая свою систему?

Комментарии:

1. Вы не сказали нам, что представляет собой ваша система (в частности, какая ОС). Я бы предположил, что lInux, но, возможно, вы используете эмуляцию LInux в Windows. ЕСЛИ вы работаете в LInux, nice возможно, это ваш друг, так как он должен заставить процесс KMeans (и его потоки) работать с более низким приоритетом, что должно позволять другим вещам работать с меньшим вмешательством.

2. Извините за недостающую информацию. Я использую AWS EC2 с AL2 (который основан на CentOS). Не могли бы вы подробнее рассказать о том, как nice используется в моем случае?

3. nice ( linux.die.net/man/1/nice ) позволяет снизить приоритет планирования потоков внутри процесса, который он запустил, чтобы их можно было легче заменить другими потоками, которые хотят выполнить. Это означает, что вещи (такие как демон ssh) все равно должны быть в состоянии запускаться, когда им это необходимо, так как они будут иметь более высокий приоритет. Если вы используете компиляторы LLVM или Intel, также установите KMP_BLOCKTIME=0 , чтобы потоки OpenMP спали в ядре, как только они ждут, а не опрашивали какое-то время.