#python-3.x #keras #gpu #conv-neural-network
#python-3.x #keras #графический процессор #conv-нейронная сеть
Вопрос:
Я пытаюсь запустить свою модель на графическом процессоре кластера. Однако каждый раз, когда я запускаю свою модель, я получаю ошибку ООМ. Ранее я пытался запустить VGG на графическом процессоре кластера, и он работал нормально. И VGG — это более глубокая сеть, чем моя. Моя сеть:
i1 = Input(shape=(1, 162, 5000))
c1 = Conv2D(100, kernel_size=3,activation='relu',data_format='channels_first')(i1)
#c1 = Conv2D(128*2, kernel_size=3,activation='relu',data_format='channels_first')(i1)
c1 = Dropout(0.2)(c1)
c1 = Flatten()(c1)
i2 = Input(shape=(5000, ))
c2 = Dense(100, input_shape = (5000,), activation='relu')(i2)
c2 = Dropout(0.2)(c2)
c = concatenate([c1, c2])
x = Dense(100, activation='relu', kernel_initializer='normal')(c)
x = Dropout(0.25)(x)
output = Dense(5, activation='softmax')(x)
model = Model([i1, i2], [output])
И затем, чтобы использовать многопроцессорную обработку, я делаю следующее:
parallel_model = multi_gpu_model(model, gpus=2)
parallel_model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = parallel_model.fit([image_train, positions_train], Ytest, batch_size=32,
epochs=5,
verbose=1,
validation_split=0.2,
shuffle=True)
Моя ошибка :
Общая используемая память составляет 70,37 ГБ, а зарезервированная память — 384 гб.
Мои вопросы:
- Как вы думаете, это может быть связано с тем, что он использует только одно ядро?
- Как я могу заставить его использовать все ядра на одном узле GPU в Keras. У меня доступно 36 ядер? Как я могу включить это в свой код.
- Почему более глубокая модель, такая как VGG, работает нормально, но как только я пытаюсь запустить свою модель, она выдает ошибку ООМ.
Краткое описание модели:
Помощь будет оценена. Я пробовал это в течение нескольких часов и не смог решить эту проблему.
Комментарии:
1. используйте model.summary() и посмотрите количество обучаемых параметров, оно, вероятно, огромное (сотни миллионов). В этом проблема.
2. Но как я могу использовать все ядра на GPU, потому что сейчас он использует только одно?
3. Это не проблема, графические процессоры не имеют ядер в том же смысле, что и процессоры, ваша модель слишком велика для обучения на GPU. Обратите внимание, что здесь я говорю о оперативной памяти GPU, а не о оперативной памяти CPU.
4. Я в замешательстве. Общая память моего узла GPU составляет 384 г, но он использует только 70,37г. Что это значит?
5. Вы должны указать системе массового обслуживания кластера назначить вам более одного ядра, TensorFlow автоматически будет использовать все доступные ядра по умолчанию.