Какой должна быть производительность графического процессора при обучении модели keras? - PullRequest
2 голосов
/ 05 мая 2020

Я использую RTX 2080 ti на множестве данных mnist. Я установил tensrflow-gpu. Это почти в 12 раз быстрее, чем работа только на ЦП в другой среде.

Я проверяю производительность ЦП и графического процессора диспетчера задач во время обучения. Вот производительность во время обучения:

Среда GPU: CPU = 20% GPU = 10% времени обучения = 24 se c

Среда CPU: CPU = 100% GPU = 10% времени обучения = 500 se c

Я хотел бы знать, нормально ли работает GPU на 10%? и можно ли увеличить производительность вручную или уменьшить?

1 Ответ

0 голосов
/ 20 мая 2020

Это зависит от вашего приложения. Низкая загрузка графического процессора - не редкость. Попробуйте увеличить размер пакета для большего использования.

С учетом того, что сети размера MNIST крошечные, и для них трудно достичь высокой эффективности GPU (или CPU), я думаю, что использование 10% вместе с CPU не является чем-то необычным для вашего приложения. Вы получите более высокую вычислительную эффективность с большим размером пакета, что означает, что вы можете обрабатывать больше примеров в секунду, но вы также получите более низкую статистическую эффективность, а это означает, что вам нужно обработать больше примеров, чтобы достичь целевой точности. Так что это компромисс. Для крошечных моделей персонажей статистическая эффективность очень быстро падает после 100, поэтому, вероятно, не стоит пытаться увеличить размер партии для обучения. Для вывода вы должны использовать максимально возможный размер пакета.

Вы также можете установить тип устройства, который будет использоваться в вашей программе. В вашем случае заставьте вашу программу использовать только графический процессор и проверьте использование графического процессора.

Например, в программе использовать графический процессор только для модели. Fit

%tensorflow_version 2.x
print(tf.__version__)
# MLP for Pima Indians Dataset saved to single file
import numpy as np
from numpy import loadtxt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import model_from_json

# load pima indians dataset
dataset = np.loadtxt("/content/pima-indians-diabetes.csv", delimiter=",")

# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]

# define model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Model Summary
model.summary()

# Fit the model
with tf.device("/device:GPU:0"):
  model.fit(X, Y, epochs=150, batch_size=10, verbose=0)

# evaluate the model
scores = model.evaluate(X, Y, verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

Вывод -

2.2.0
Model: "sequential_6"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_18 (Dense)             (None, 12)                108       
_________________________________________________________________
dense_19 (Dense)             (None, 8)                 104       
_________________________________________________________________
dense_20 (Dense)             (None, 1)                 9         
=================================================================
Total params: 221
Trainable params: 221
Non-trainable params: 0
_________________________________________________________________
accuracy: 78.39%

Надеюсь, это ответит на ваш вопрос. Удачного обучения.

...