Внутри ИИ
Используйте многоядерность для повышения производительности в Scikit-Learn
Объем доступных данных растет в геометрической прогрессии с развитием Интернета вещей, датчиков и возможностей хранения.
Мир, в котором мы все будем жить через десятилетие, будет полностью отличаться и сложнее, чем нынешний мир.
По мере того, как мир становится сложным, меняются и базовые данные. Одна из проблем машинного обучения - растущая потребность в вычислительной мощности и времени для обработки сложного набора данных.
Scikit-learn не поддерживает графический процессор, такой как Keras или TensorFlow, но мы можем использовать многоядерный процессор для параллельного выполнения нескольких задач.
В этой статье мы увидим процесс ускорения машинного обучения и сокращения времени на построение модели.
В этой статье мы будем использовать набор данных «Вулканы», чтобы понять процесс параллельного выполнения задач в Sckit-learn.
from sklearn.datasets import fetch_openml from sklearn.ensemble import RandomForestClassifier from time import time from matplotlib import pyplot as plt
В приведенном ниже коде набор данных «вулканы» извлекается из openml.
X,y= fetch_openml(name="volcanoesb3",version=1, return_X_y=True,as_frame=True)
Время, затраченное на обучение каждой модели, будет сохранено в списке «затраченное время». У меня четырехъядерный ноутбук, поэтому я буду тренировать модель машинного обучения с максимум четырьмя ядрами. Если у вас восьмиядерный или более ядер, вы можете указать «n_cores» до восьми или более ядер.
timetaken = [] n_cores = [1, 2, 3, 4]
В приведенном ниже коде модель машинного обучения обучается от одноядерного до четырехъядерного в цикле, и время, затраченное на обучение, сохраняется.
Мы можем указать количество заданий, которые будут запускаться параллельно с параметром «n_jobs» в RandomForestClassifier. В случае, если мы хотим использовать все доступные ядра, мы можем указать «n_jobs» как «-1».
for n in n_cores: start = time() model = RandomForestClassifier(n_estimators=1500, random_state=42, n_jobs=n) model.fit(X, y) end = time() elapsedtime = end - start timetaken.append(elapsedtime)
Полезно визуализировать время, необходимое для обучения модели с разными ядрами.
plt.plot(n_cores, timetaken) plt.show()
Мы видим, что время обучения модели резко сократилось по мере того, как она обучается с одного ядра до трех. Использование трех или всех четырех ядер дает лишь небольшой выигрыш во времени.
Обучение модели с одноядерным процессором заняло около 22 секунд, и оно упало до прибл. ~ 11 секунд с тремя ядрами.
Заключение и вывод
Объем доступных данных растет в геометрической прогрессии с развитием Интернета вещей, датчиков и возможностей хранения.
GPU и TPU - это своего рода спасители для ускорения обработки и повышения производительности алгоритмов машинного обучения.
К сожалению, Scikit-Learn не поддерживает графический процессор, но мы можем использовать многоядерный микропроцессор для параллельной обработки нескольких задач и получения более быстрых результатов.
Даже с четырехъядерными и восьмиядерными ноутбуками мы можем значительно сократить время обработки машинного обучения.
Вы можете узнать больше о Линейная регрессия в Python: Sklearn vs Excel