Почему этот скрипт Python работает быстрее в процессоре, чем в графическом процессоре? - PullRequest
0 голосов
/ 10 сентября 2018

Я использую библиотеку 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 ЦП работает быстрее, чем ГП.

1 Ответ

0 голосов
/ 11 сентября 2018

Согласно рисунку 5 в этой статье о somoclu , графический процессор был быстрее. Тем не менее, документ не показал обширный сравнительный анализ. Я могу только предположить, что для вашей машины, процессор более способный. Но вы можете изучить документ, чтобы выполнить более похожий тест для сравнения. enter image description here

Чтобы обеспечить воспроизводимость результатов, мы публично доступные кластерные графические экземпляры, предоставляемые Amazon Web Services. тип экземпляра был cg1.4xlarge (https://aws.amazon.com/ec2/instance-types/), оснащен 22 ГиБ память, два четырехъядерных процессора IntelXeon X5570 и два NVIDIA Tesla M2050 Графические процессоры под управлением Ubuntu 12.04.

(16) Somoclu: эффективная параллельная библиотека для самоорганизующихся карт, доступная по адресу: https://www.researchgate.net/publication/236635216_Somoclu_An_Efficient_Parallel_Library_for_Self-Organizing_Maps

Кажется, что и ваш процессор, и ваш графический процессор более мощные, чем тесты AWS.

...