проблема с tenorflow-GPU OOM после нескольких эпох

Я использовал тензорный поток для обучения CNN с Nvidia Geforce 1060 (память 6 ГБ), но у меня возникло исключение OOM.

В первые две эпохи процесс обучения прошел нормально, но в третью эпоху произошло исключение OOM.

============================ 2017-10-27 11:47: 30.219130: W tensorflow / core / common_runtime / bfc_allocator.cc: 277] ********************************************** ******************************************** xxxxxx 2017-10 гг. -27 11: 47: 30.265389: W tensorflow / core / framework / op_kernel.cc: 1192] Ресурс исчерпан: OOM при выделении тензора с формой [10,10,48,48,48] Traceback (последний вызов последним): файл "/anaconda3/lib/python3.6/sitepackages/tensorflow/python/client/session.py", строка 1327, в _do_call return fn (* args) File "/anaconda3/lib/python3.6/site-packages/tensorflow /python/client/session.py ", строка 1306, в состоянии _run_fn, run_metadata) Файл" /anaconda3/lib/python3.6/contextlib.py ", строка 88, в выходе далее (сам .gen) Файл "/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", строка 466, в файле raise_exception_on_not_ok_status pywrap_tensorflow.TF_GetCode (status)) tensorflow.python.frameplustedErrors. : OOM w при выделении тензора с формой [10,10,48,48,48] [[Узел: gradient_4 / global / Detector_scope / maxpool_conv3d_2 / MaxPool3D_grad / MaxPool3DGrad = MaxPool3DGrad [T = DT_FLOAT, TInput = DT_FLOAT, kD_form_form_ [1, 2, 2, 2, 1], padding = "VALID", strides = [1, 2, 2, 2, 1], _device = "/ job: localhost / replica: 0 / task: 0 / gpu: 0 "] (глобальный / детектор_скопа / maxpool_conv3d_2 / транспонирование, глобальный / детектор_scope / maxpool_conv3d_2 / MaxPool3D, градиенты_4 / глобальный / детектор_scope / maxpool_conv3d_2 / transpose_1_grad / transpose)]] [[Node: Momentum_4 / updatecv540 = _ "/ job: localhost / replica: 0 / task: 0 / cpu: 0", send_device = "/ job: localhost / replica: 0 / task: 0 / gpu: 0", send_device_incarnation = 1, tensor_name = "edge_1540_Momentum_4 / update ", tensor_type = DT_FLOAT, _device =" / job: localhost / replica: 0 / task: 0 / cpu: 0 "]]

=============================

Итак, я не понимаю, почему я получил это исключение OOM в третью эпоху после завершения обработки первых двух эпох.

Учитывая, что наборы данных одинаковы в каждую эпоху, если у меня закончится память графического процессора, я должен получить исключение в первую эпоху. Но две эпохи я успешно завершил. Итак, почему это произошло позже?

Есть предложения, пожалуйста?


person user426546    schedule 27.10.2017    source источник


Ответы (1)


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

Первая ситуация просто связана с объемом памяти модели. Для этого проще всего уменьшить размер партии. Если ваша модель действительно большая и размер вашего пакета теперь уменьшен до единицы, у вас все еще есть несколько вариантов: уменьшить размер скрытых слоев или перейти в облачный экземпляр с достаточным количеством GPU или даже CPU, чтобы статическое распределение памяти работало. .

Во второй ситуации вы, вероятно, столкнетесь с своего рода утечкой памяти. Многие обучающие реализации используют обратный вызов для удерживаемого набора данных, чтобы получить оценку проверки. Это выполнение, скажем, вызванное Keras, может удерживать ресурсы сеанса GPU. Они накапливаются, если не выпущены, и могут привести к тому, что экземпляр графического процессора будет сообщать об OOM через несколько эпох. Другие предлагали использовать второй экземпляр графического процессора для сеанса проверки, но я думаю, что лучший подход - иметь более разумную обработку сеанса обратного вызова проверки (в частности, для освобождения ресурсов сеанса графического процессора после завершения каждого обратного вызова проверки).

Вот псевдокод, иллюстрирующий проблему обратного вызова. Этот обратный вызов приводит к OOM:

my_models_validation_score = tf.get_some_v_score

Этот обратный вызов не приводит к OOM:

with tf.Session() as sess: 
    sess.run(get_some_v_score)

Я приглашаю других помочь дополнить этот ответ ...

person Rick Lentz    schedule 14.03.2018
comment
Вы знаете, почему первое ведет к OOM? У меня создалось впечатление, что он работает в интерактивном сеансе, который закрывается сам по себе, когда операция завершается. - person shubhamgoel27; 12.03.2019