机器学习期间 CPU 和 GPU 仅运行 10-15% 左右,训练非常慢

Posted

技术标签:

【中文标题】机器学习期间 CPU 和 GPU 仅运行 10-15% 左右,训练非常慢【英文标题】:CPU and GPU running only around 10-15% during machine learning, training is very slow 【发布时间】:2021-01-05 01:51:39 【问题描述】:

已编辑问题,添加了代码。

我正在进入机器学习(甚至还没有深度学习),我注意到计算需要很长时间,而我的 CPU 和 GPU 似乎并没有很努力地工作。我正在使用 MNIST 数据集(70000 个样本,每个样本有 784 个特征)。

我的硬件是:

CPU:AMD 锐龙 5 3600X 6 核 GPU:Radeon RX 570 内存:16GM

jupyter notebook 中的 Windows 10、python 3.8

这是代码,以及我为每个块(jupyter 中的单元格)测量的时间。我没有参考这些是否是正常时间。有些对我来说似乎很长,(出于演示目的,我使用了一个只有 10000 而不是 60000 的训练集),我觉得奇怪的是我的 CPU 和 GPU 几乎没有超过 10-15%。 我的问题:

    对于我的硬件设置而言,这些分类任务的时间是否正常? 为什么我的 CPU 和 GPU 不能更努力地工作?我什至想知道我的 GPU 是否在做任何事情。
from sklearn.datasets import fetch_openml
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mnist = fetch_openml('mnist_784', version=1)

X,y = mnist.data, mnist.target
y = y.astype(np.uint8)

some_digit = X[0]
# following code block is just to visualize what the MNIST dataset is
'''
some_digit_image = some_digit.reshape(28,28)
plt.imshow(some_digit_image, cmap = 'binary')
plt.axis('off')
plt.show()
'''
print( y[0])

# To demonstrate timing, I just took 10000 for training (60000 out of 70000 would make more sense
X_train, X_test, y_train, y_test = X[:10000],X[10000:],y[:10000], y[10000:]

# first make a binary classifier: 5 or not 5
y_train_5 = (y_train ==5)
y_test_5 = (y_test == 5)

# following takes 703 ms
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(max_iter=1000, tol=1e-3, random_state = 40)
sgd_clf.fit(X_train, y_train_5)

sgd_clf.predict([some_digit])

# following takes 1.44 s
from sklearn.model_selection import cross_val_score
cross_val_score(sgd_clf, X_train, y_train_5,cv=3, scoring='accuracy')

# following takes 1.44 s
from sklearn.model_selection import cross_val_predict
y_train_predict = cross_val_predict(sgd_clf,X_train, y_train_5,cv=3)
from sklearn.metrics import confusion_matrix
confusion_matrix(y_train_5, y_train_predict)

# following takes 16.8 s
from sklearn.svm import SVC
svm_clf = SVC()
svm_clf.fit(X_train, y_train)
svm_clf.predict([some_digit])

# following takes 1.7 s
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(X_train,y_train)

#following takes 57 s
y_train_predict = cross_val_predict(kn,X_train, y_train,cv=3)
print(confusion_matrix(y_train, y_train_predict))

【问题讨论】:

【参考方案1】:

减少训练时间的最简单方法是增加批量大小。增加它直到 GPU 使用率接近最大值。

【讨论】:

以上是关于机器学习期间 CPU 和 GPU 仅运行 10-15% 左右,训练非常慢的主要内容,如果未能解决你的问题,请参考以下文章

牛!一块GPU顶数千个CPU内核!

仅使用 Colab Pro 的 GPU

Google声明机器学习在自己定制的芯片比如普通的GPU和CPU快15到30倍

gpu版本低能用啥跑代码

Google声明机器学习在自己定制的芯片比方普通的GPU和CPU快15到30倍

Google声明机器学习在自己定制的芯片比方普通的GPU和CPU快15到30倍