Нужно ли мне модифицировать мой код keras для эффективной работы на GPU? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть cuda8.0.61, версия tenorflow_gpu и керас.Я тренирую модель keras из 20 слоев на данных изображения 224 * 224. Когда я запустил nvidia -smi в терминале, я обнаружил, что память израсходована, а вычислительная нагрузка меньше.Когда я пытаюсь установить модель, машина становится очень медленной.

Я знал, что для того, чтобы использовать gpu и переключаться между устройствами, я должен использовать следующий код:

with K.tf.device('/gpu:0'):
tf_config = tf.ConfigProto( allow_soft_placement=True )
tf_config.gpu_options.allow_growth = True
sess = tf.Session(config=tf_config) 
keras.backend.set_session(sess)

Нужно ли мне переключатьсямежду процессором и процессором gpu, чтобы увеличить скорость с помощью блоков, таких как K.tf.device ('/ gpu: 0'): и с K.tf.device ('/ cpu: 0'):?

Я использую массивы для хранения изображений.Нужно ли использовать tf.array или tf.convert_to_tensor?Поможет ли это?

1 Ответ

0 голосов
/ 08 февраля 2019

Если в вашей системе установлен tenorflow GPU, то ваша система автоматически будет использовать GPU для вычислений, однако проблема возникает из-за того, что GPU не всегда имеет данные, необходимые для выполнения вычислений, то есть узкое место возникает у васвходной конвейер, просто tf.array и tf.convert_to_tensor вряд ли помогут, так как они управляют данными только один раз в памяти, что вам нужно generators (учитывая, что это Python), генератор - это функция, которая возвращает объект (итератор), который мы можем перебрать (по одному значению за раз).

Генераторы и их итераторы уже реализованы в тензорном потоке в tf.data api https://www.tensorflow.org/guide/datasets Вы можете напрямую использовать их и соответственно модифицировать свой конвейер.

...