es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

OOM (Memory error) en Keras con un modelo pequeño y un batch_size de 1

Estoy recibiendo un error OOM de keras inmediatamente después de crear el modelo, durante la primera llamada a predecir.

Los pesos y las activaciones son muy pequeños, no puedo entender la fuente del OOM.

    tf.keras.backend.clear_session()

up1, up2, up3 = [
tf.keras.layers.UpSampling2D(size=(2, 2), interpolation=”nearest”, name=f”up{i}”)
para i in range(3)
]

c1, c2 = [
tf.keras.layers.Conv2D(
filters=5,
kernel_size=3,
use_bias=False,
name=f”conv{i}”,
)
para i in range(2)
]

m = tf.keras.models.Sequential(
[
up1,
c1,
up2,
c2,
up3,
]
)

m.predict(tf.zeros((1, 500, 97, 97, 1)), batch_size=1, verbose=1).shape


esta función procesa ~1350 lotes de tamaño 1 y se detiene

1367/1500 [==========================>…] – ETA: 0s


ResourceExhaustedError: OOM al asignar tensor con forma [1,5,384,384] y tipo float en /job:localhost/replica:0/task:0/device:GPU:0 por el asignador GPU0bfc
[[{{node sequential/conv1/Conv2D-0-TransposeNHWCToNCHW-LayoutOptimizer}}]]
Sugerencia: Si desea ver una lista de tensores asignados cuando se produce OOM, agregue la opción de ejecución report_tensor_allocations_upon_oom para obtener información de asignación actual.
[Op:_inference_predict_function_160]

Pila de llamadas de función:
predict_function


Antes de crear el modelo, hay mucha RAM disponible

Uso de memoria
377MiB / 16280MiB


Después de crear el modelo, no queda tanto

15781MiB / 16280MiB
“`

No puedo entender por qué un modelo tan pequeño usaría toda la RAM, agradecería cualquier sugerencia para reducir el uso de RAM.

usando tensorflow 2.5.2 en Ubuntu 18.04 (tf oficial con docker y entorno conda propio)
NVIDIA-SMI 450.80.02 Versión del controlador: 450.80.02 Versión de CUDA: 11.0

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error OOM está ocurriendo porque el modelo está intentando asignar un tensor con una forma de [1,5,384,384], lo cual es demasiado grande para caber en la memoria de la GPU. Una posible razón para esto podría ser que el modelo está utilizando mucha memoria para activaciones intermedias durante la propagación hacia adelante.

    Para reducir el uso de memoria, puedes intentar algunas cosas:

    1. Utilizar entrenamiento de precisión mixta. Esto puede reducir significativamente el uso de memoria mediante el uso de tipos de datos de menor precisión para ciertos cálculos.
    2. Reducir el tamaño del lote (batch size). Disminuir el tamaño del lote puede ayudar a reducir el uso de memoria, pero también puede disminuir el rendimiento general.

    3. Utilizar tamaños de imagen más pequeños. Si las imágenes de entrada son muy grandes, intenta cambiar su tamaño a un tamaño más pequeño antes de alimentarlas al modelo. Esto puede reducir significativamente el uso de memoria sin sacrificar demasiada precisión.

    4. Probar una arquitectura de modelo diferente. Algunos modelos están diseñados para ser más eficientes en el uso de memoria que otros, por lo que experimentar con diferentes arquitecturas podría ayudar.

    5. Utilizar un perfilador de memoria para identificar y optimizar partes del código intensivas en memoria.

    Implementar estos cambios debería ayudar a reducir el uso de memoria y solucionar el error OOM.

Comments are closed.