Я пытаюсь использовать многопроцессорность для обучения модели на нескольких наборах данных на машине с 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
, чтобы попытаться остановить дочерние процессы от создания других процессов, но, похоже, это не работает.
Я что-то упустил?