Как улучшить использование графического процессора в сверточной нейронной сети? - PullRequest
1 голос
/ 22 января 2020

Я использую библиотеку keras для реализации CNN и Anaconda 3 (spyder 4) для выполнения.

Я использовал команду conda install -c anaconda keras-gpu Установлено cudatoolkit-10.0.130 , cudnn-7.6.5 и ensorflow-GPU-2.0.0 Но мой код не работает с ensorflow-GPU-2.0.0 , поэтому я понизил его до TenSenflow-GPU-1.15.0 . (Я также установил последний набор инструментов CUDA на мою машину, но я не знаю, какой из них использует spyder, из моей машины или среды conda) Хотя мой код работает нормально, но мой GPU использует только% 1. Я устанавливаю что-то не так, как неправильные комбинации Tensorflow и CUDA? На самом деле я пробовал большинство вещей, упомянутых в Интернете, но я никуда не денусь.

Информация о моей системе: Процессор: i7 GPU 9-го поколения: RTX 2060 Оперативная память: 16 ГБ ОС: Windows 10

Есть ли необходима установка или какие-либо изменения кода, чтобы заставить мой графический процессор работать? (Я выполнил одну из таких команд, как tf.config.list_physical_devices('GPU'), чтобы проверить мой графический процессор, и он показывает положительный результат, поэтому тензор потока обнаруживает мой графический процессор, но я понятия не имею, почему он не использует его для выполнения)

ps: Я читал в Интернете, и большинство людей говорят о узких местах из-за процессора (даже если мой процессор используется низко, поэтому я буду признателен, если вы скажете мне что-то для его улучшения), и решение, которое они просят сделать, это загрузить ваши данные так что графический процессор может быть использован эффективно. Я использую набор данных изображений, поэтому вы можете сказать мне, как предварительно загрузить набор данных или реализовать параллелизм, чтобы его можно было подавать в графический процессор, а не передавать на лету. Я использую керасы, как упомянуто ниже, поэтому фрагмент кода, который будет удобен для новичка ie, как я, поможет получить кикстарт.

Код:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator


classifier = Sequential()

classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))

classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

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


train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         steps_per_epoch = 8000,
                         epochs = 25,
                         validation_data = test_set,
                         validation_steps = 2000)

.

1 Ответ

1 голос
/ 22 января 2020

Согласно официальной документации TensorFlow, следующий фрагмент должен установить использование памяти gpu:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only allocate 1GB of memory on the first GPU
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)])# change here for different values
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Virtual devices must be set before GPUs have been initialized
    print(e)
...