AMD plaidml против CPU Tensorflow - неожиданные результаты - PullRequest
0 голосов
/ 29 сентября 2019

В настоящее время я запускаю простой скрипт для обучения набора данных mnist.

Выполнение обучения через мой ЦП через Tensorflow дает мне 49us/sample и 3e эпоху с использованием следующего кода: -

# CPU

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))

model.compile(optimizer='adam', loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(x_train, y_train, epochs=3)

Когда я запускаю набор данных через AMD Pro 580 с помощью настройки opencl_amd_radeon_pro_580_compute_engine через plaidml, я получаю следующие результаты 249us/sample с периодом 15 с, используя следующий код: -

# GPU

import plaidml.keras
plaidml.keras.install_backend()
import keras
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = keras.utils.normalize(x_train, axis=1)
x_test = keras.utils.normalize(x_test, axis=1)

model = keras.models.Sequential()
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))

model.compile(optimizer='adam', loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(x_train, y_train, epochs=3)

Я вижу, как мой ЦП запускается для теста ЦП, и мой ГП максимально загружается для теста ГП, но я очень озадачен тем, почему ЦП не выполняет ГП с коэффициентом 5.

Должны ли это быть ожидаемые результаты?

Что-то не так в моем коде?

1 Ответ

1 голос
/ 29 сентября 2019

Я думаю, что есть две стороны наблюдаемой ситуации:

  1. Пледмл не так уж хорош в моем опыте, и у меня были похожие результаты, к сожалению.
  2. Перемещение данных вGPU медленный. В этом случае данные MNIST действительно малы, и время перемещения этих данных перевешивает «преимущество» параллельного вычисления. На самом деле процессор TF, вероятно, также выполняет параллельное умножение матриц, но это намного быстрее, поскольку данные меньше и ближе к единице обработки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...