python многопроцессорность на ElasticNetCV потребляет больше процессоров, чем следовало бы - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь использовать многопроцессорность для обучения модели на нескольких наборах данных на машине с 16 процессорами. Вот пример моего кода, предполагающего, что datasets - это список путей к файлам csv.

import multiprocessing as mp
def training_process(dataset, semaphore):
    data = load(dataset) # load data from csv
    features = select_features(data) # feature selection using sklearn.linear_model.ElasticNetCV
    results = train(data, features) # training model and validation results
    save(results) # save results into csv
    semaphore.release()

semaphore = mp.Semaphore(6)
jobs = []
for dataset in datasets:
    semaphore.acquire()
    p = mp.Process(target=training_process, args=(dataset, semaphore))
    p.daemon=True
    jobs.append(p)
    p.start()

for job in jobs:
    job.join()

Когда я запускаю htop на linux, я замечаю, что у меня есть 6 процессов, которые я настроил для запуска но когда training_process достигает features = select_features(data), он потребляет все 16 доступных ядер. Я использую ElasticNetCV и исправляю меня, если я ошибаюсь, он не использует несколько процессоров, если только в контексте joblib.parallel_backend, который я не использую.

Я добавил p.daemon=True, чтобы попытаться остановить дочерние процессы от создания других процессов, но, похоже, это не работает.

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...