1

Я занимаюсь диссертацией по методам оценки моделей для задач классификации машинного обучения. Я использую некоторые модели sklearn, потому что я могу написать общий код по большей части, так как у меня много разные наборы данных. Одна часть выхода модели Sklearns равна predict_proba, в которой она оценивает вероятность. Для больших наборов данных с большим количеством данных, для вычисления predict_proba для каждого datapoint требуется много времени. Я загрузил htop и увидел питона только с использованием одного ядра для вычислений, поэтому я написал следующую функцию:Быстрое вычисление времени с помощью Python и Sklearn

from joblib import Parallel, delayed 
import multiprocessing 
num_cores = multiprocessing.cpu_count() 

def makeprob(r,first,p2,firstm): 
    reshaped_r = first[r].reshape(1,p2)   
    probo = clf.predict_proba(reshaped_r) 
    probo = probo.max()      
    print('Currently at %(perc)s percent' % {'perc': (r/firstm)*100})  
    return probo 

# using multiple cores to run the function 'makeprob' 
results = Parallel(n_jobs=num_cores)(delayed(makeprob)(r,first,p2,firstm) for r in range(firstm)) 

Теперь я вижу htop все ядра используются, а скорость до значителен, но не почти так же быстро, как хотелось бы, если кто-нибудь знает способ ускорить это или указать мне в правильном направлении, чтобы получить более быстрый рост вычислений в этом сценарии, что было бы здорово.

ответ

1

Потеря производительности зависит от трех элементов:

  1. Вашей программа питона: убедитесь, что наборы данные хорошо оптимизированы, чтобы не злоупотреблять RAM (то есть, сделать подмножество только ключевым переменным, которые вы need)
  2. Окружающая среда python: Если вы запустите Sk-learn в ноутбуке iythython (Jupyter), «Многопроцессорность» будет работать не так быстро, как в скрипте python. См. iPython for parallel computing. Сценарий python будет быстрее.
  3. Python library: Несколько библиотек Python изначально предназначены для использования всех ресурсов компьютера. Например, с Tensorflow Tensorflow поддерживаемые типы устройств - это CPU и GPU (и вы можете использовать несколько графических процессоров).