Многопроцессорность Python работает медленноPython

Программы на Python
Anonymous
Многопроцессорность Python работает медленно

Сообщение Anonymous »

Я использую многопроцессорность Python, а затем отправляю задание с помощью sbatch. Код .sh следующий:

Код: Выделить всё

#!/bin/bash
##----------------------- Start job description -----------------------
#SBATCH --partition=standard
#SBATCH --job-name=multi_Leaspy
#SBATCH --nodes=1
#SBATCH --ntasks=40
#SBATCH --mem-per-cpu=4096
#SBATCH --time=160:00:00
#SBATCH --mail-type=ALL
#SBATCH --output=out-%j.log
#SBATCH --error=err-%j.log
##------------------------ End job description ------------------------
Это фрагмент, в котором я распараллеливаю код:

Код: Выделить всё

num_workers = ntasks = int(os.environ.get('SLURM_NTASKS', 1))
if __name__ == "__main__":
with ProcessPoolExecutor(max_workers = num_workers - 1) as executor:
arg_list = [(i, row, df_test, id_test, btstrp, classes, classes_auc,
results_table, MAE_table, features_set, vector_range) for i, row in feat_sub.iterrows()]
for result, MAE_row in executor.map(multiLeaspyIter, arg_list):
if result is not None and MAE_row is not None:
results_table = results_table.append(result, ignore_index=True)
MAE_table = MAE_table.append(MAE_row, ignore_index = True)
Затем я ssh и htop, чтобы увидеть использование ресурсов и наличие большего количества выполняемых процессов, чем запрошено. Кроме того, появляется множество ожидающих процессов, которые все замедляют.
htop results:
Задачи = 1627, 501 тыс., 40 работает
Средняя нагрузка = 201,3, 180,94, 117,36
Каждый узел имеет 40 процессоров с включенной технологией Hyper-Threading.
Раньше я использовал ProcessPoolExecutor с тем же кодом, но он работал намного медленнее.
Я не уверен, подходит ли многопроцессорная обработка для среды Slurm, или я что-то упускаю .
Раньше я использовал ProcessPoolExecutor с тем же кодом, но он работал медленнее.
Когда я настраиваю .sh так --ntasks = 1 и .py, поэтому max_workers = 1, код работает быстрее. Если --ntasks = 5 и max_workers = 5, он работает медленнее и создает дополнительные процессы ожидания.
Кроме того, я заметил, что всего лишь с одним процессом создается много потоков.
Я пробовал тот же код в Windows, он работает быстрее.

Подробнее здесь: https://stackoverflow.com/questions/787 ... w-on-slurm

Вернуться в «Python»