Я использую библиотеку Python somoclu
для обучения самоорганизующейся карты с использованием Python. Библиотека позволяет пользователям проводить обучение на процессоре (Intel Core i7-8700) или на графическом процессоре (GeForce GTX 1080 Ti).
Я заметил, что процессор выполнял сценарий быстрее, чем GPU, поэтому я провел проверку, меняя количество точек данных и размер карты, чтобы посмотреть, превзошел ли GPU какой-либо процессор. Это был сценарий:
import numpy as np
import somoclu
import time
m = 3 # Number of dimensions
points = [5000, 30000, 80000, 150000, 300000] # Number of datapoints
iterMax = 200 # Max number of iterations
mapSize = [4, 32, 64, 128] # Dimensions of SOM
np.random.seed(0)
#%% SOM
for n in points:
for size in mapSize:
y = np.random.rand(n,m) # Input data
# With CPU
t = time.clock() # Start time
som = somoclu.Somoclu(size,
size,
compactsupport = False,
kerneltype = 0)
som.train(y.astype(np.float32), epochs = iterMax)
elapsedTime = time.clock() - t
# With GPU
t = time.clock() # Start time
som = somoclu.Somoclu(size,
size,
compactsupport = False,
kerneltype = 1)
som.train(y.astype(np.float32), epochs = iterMax)
elapsedTime = time.clock() - t
Я сохранил время в CSV, и вот что я получил:
CPU GPU
2.7632589999999997 5.935387999999999
60.340638 82.796062
228.292085 305.75625900000006
861.3243 1141.331934
11.692982999999913 24.568256999999903
330.17140100000006 443.82112400000005
1354.677431 1749.3110039999992
5559.308704 6990.034151000002
29.3726179999976 47.36881999999969
913.3250950000001 1163.5942189999987
3703.653313999999 4615.292857
14868.418703000003 18635.051464000004
37.40133600000263 68.64375999999902
1699.020611 2141.047305
6925.692426000009 8645.564134
27887.844171999997 illegal memory access was encountered
Как вы можете видеть, CPU превосходит GPU в каждом отдельном случае (кроме того, версия GPU зависала при запуске сценария с 150000 точками данных и картой 64x64). Как это возможно? В чем преимущество использования GPU для обучения SOM?
EDIT:
Я попробовал ту же библиотеку в R, и на этом языке графический процессор превосходит центральный процессор. Так что, очевидно, это всего лишь проблема с Python, но я не специалист по программированию, чтобы понять, что происходит. Я считаю, что ядро работает одинаково, поэтому меняется только интерфейс. Давайте посмотрим, поможет ли это кому-нибудь выяснить, почему в Python ЦП работает быстрее, чем ГП.