Бесплатная память GPU в Google Colab

#keras #memory-management #conv-neural-network #gpu #google-colaboratory

Вопрос:

Я хотел знать, есть ли способ освободить память GPU в Google Colab.

Я тренирую некоторые CNN в цикле с eurosat/rgb/ набором данных из tf.datasets . Модели не настолько велики, как и набор данных.

Ошибка заключается в следующем:

 Epoch 1/8  ---------------------------------------------------------------------------  ResourceExhaustedError Traceback (most recent call last)  lt;ipython-input-15-c4badfe8da7dgt; in lt;modulegt;()  27 nclasses=NCLASSES,  28 metadic = METADIC, ---gt; 29 val_split = 0.20)  30 plot_results(record=current_exp,run='avg',batch=False,save=True)  31 plot_results(record=current_exp,run='avg',batch=True,save=True)  7 frames  lt;ipython-input-6-f1fac48c4ac9gt; in run_experiment(bloques, input_shape, init_conv_filters, batch_size, epochs, init_lr, end_lr, nruns, optimizer, sma_periods, nclasses, metadic, val_split)  75 epochs = epochs,  76 workers = 1, ---gt; 77 callbacks = [LRFinder]  78 )  79   /usr/local/lib/python3.7/dist-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)  1182 _r=1):  1183 callbacks.on_train_batch_begin(step) -gt; 1184 tmp_logs = self.train_function(iterator)  1185 if data_handler.should_sync:  1186 context.async_wait()  /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)  883   884 with OptionalXlaContext(self._jit_compile): --gt; 885 result = self._call(*args, **kwds)  886   887 new_tracing_count = self.experimental_get_tracing_count()  /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)  948 # Lifting succeeded, so variables are initialized and we can run the  949 # stateless function. --gt; 950 return self._stateless_fn(*args, **kwds)  951 else:  952 _, _, _, filtered_flat_args =   /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py in __call__(self, *args, **kwargs)  3038 filtered_flat_args) = self._maybe_define_function(args, kwargs)  3039 return graph_function._call_flat( -gt; 3040 filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access  3041   3042 @property  /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py in _call_flat(self, args, captured_inputs, cancellation_manager)  1962 # No tape is watching; skip to running the function.  1963 return self._build_call_outputs(self._inference_function.call( -gt; 1964 ctx, args, cancellation_manager=cancellation_manager))  1965 forward_backward = self._select_forward_and_backward_functions(  1966 args,  /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/function.py in call(self, ctx, args, cancellation_manager)  594 inputs=args,  595 attrs=attrs, --gt; 596 ctx=ctx)  597 else:  598 outputs = execute.execute_with_cancellation(  /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)  58 ctx.ensure_initialized()  59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, ---gt; 60 inputs, attrs, num_outputs)  61 except core._NotOkStatusException as e:  62 if name is not None:  ResourceExhaustedError: failed to allocate memory  [[node dense1/kernel/Regularizer/Square (defined at lt;ipython-input-6-f1fac48c4ac9gt;:77) ]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. This isn't available when running in Eager mode.  [Op:__inference_train_function_309982]  Function call stack: train_function  

То, что я пробовал до сих пор:

Я провел некоторое исследование и после обучения каждой модели вызываю следующую функцию

 def reset_tensorflow_keras_backend():  # to be further investigated, but this seems to be enough  import tensorflow as tf  import tensorflow.keras as keras  tf.keras.backend.clear_session()  tf.compat.v1.reset_default_graph()  _ = gc.collect()  

Как способ получить новую сессию для каждой модели. Мне удалось запустить цикл с несколькими моделями и не получить ошибку, но сегодня ошибка снова возникла в одной из самых простых моделей, что странно.

Использование графического процессора в момент сбоя составляет:

 !nvidia-smi    -----------------------------------------------------------------------------  | NVIDIA-SMI 470.74 Driver Version: 460.32.03 CUDA Version: 11.2 | |------------------------------- ---------------------- ----------------------  | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=============================== ====================== ======================| | 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 | | N/A 48C P0 57W / 149W | 11077MiB / 11441MiB | 0% Default | | | | N/A |  ------------------------------- ---------------------- ----------------------   

Что явно близко к 100%.

Ответ №1:

Вероятно, это произошло потому, что каждый раз, когда вы открываете сеанс в colab, вы не всегда получаете один и тот же графический процессор, вы можете проверить назначенный графический процессор следующим образом.

 !nvidia-smi -L   

Что я делаю, так это сбрасываю сеанс, пока Google не благословит меня Tesla T4.

Я искал в прошлом способ освободить память, но единственный способ-перезапустить сеанс.

Я уверен, что, выбрав графический процессор, вы больше не столкнетесь с этой проблемой.

Как вы можете видеть , Google назначил вам Tesla K80 наихудшее из возможных

Комментарии:

1. Вам нужно делать это вручную? Это может занять много времени, верно?

2. вы намерены произвести перезагрузку? нет, вам просто нужно закрывать сеанс пару раз большую часть времени, это операция продолжительностью 1-2 минуты, но это зависит от того, насколько перегружены серверы, если вам нужна услуга премиум-класса, вы можете купить премиум-версию colab, но она доступна не везде