Понять ООМ механизм тензорного потока - PullRequest
0 голосов
/ 14 декабря 2018

Я использую предварительно обученное внедрение Glove для обучения своей собственной сети.Я использую

self.embedding = tf.get_variable(name="embedding", shape=self.id2vec_table.shape, initializer=tf.constant_initializer(self.id2vec_table), trainable=False)

и tuning_embedding = tf.nn.embedding_lookup(self.embedding, self.txt_from_mfcc)

для инициализации и поиска встраивания.Однако, когда я прошел обучение, ошибка отображается как (сообщение об ошибке слишком длинное, я добавляю сюда наиболее важные, на мой взгляд)

Сумма Общее количество используемых блоков: 3.85GiB, Limit:
11281927373 InUse: 4131524096 MaxInUse:
6826330624 NumAllocs: 47061 MaxAllocSize:
2842165248 Сбой в параметре OP_REQUIRES в matmul_op.cc:478: ресурс исчерпан: OOM при типе float00,400000000000000 [0] при выделении floor [0000] и [0000] в распределении тензор с фигурой/ job: localhost / replica: 0 / task: 0 / device: GPU: 0 по распределителю GPU_0_bfc

Однако, как показывает ошибка STATS, моя максимальная память в tesla k80 составляет 11G, и вот онаиспользуется только для 40% -70% - около 4 ~ 7 G, как мой GPU может быть не хватает памяти, так как он занимает максимум 70% от общей максимальной памяти?Я просто не могу понять внутренний механизм того, как это работает.

Я также пробовал методы из другого поста, такие как https://stackoverflow.com/questions/42495930/tensorflow-oom-on-gpu

и ограничил размер моей партии 16 или config.gpu_options.allow_growth = True или config.gpu_options.allocator_type = 'BFC' или config.gpu_options.per_process_gpu_memory_fraction = 0.4, ошибка по-прежнемуВот.

Любая помощь здесь?

...