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.

Predicción del modelo de TensorFlow que resulta en una fuga de memoria (fuera de memoria)

Estoy tratando de ejecutar predicciones para un modelo de clasificación de imágenes en un gran número de archivos de imagen (800000). A continuación se muestra un fragmento de código de cómo se ve mi canalización de datos:

import tensorflow as tf
BATCH_SIZE = 128

def configure_for_performance(ds):
    ds = ds.batch(BATCH_SIZE)
    ds = ds.prefetch(buffer_size=AUTOTUNE)
    tf.keras.backend.clear_session()
    return ds

def decode_img(img):
    img = tf.io.decode_jpeg(img, channels=3)
    img = tf.image.resize(img, [IMG_HEIGHT, IMG_WIDTH])
    return img

def process_path(file_path):
    img = tf.io.read_file(file_path)
    img = decode_img(img)
    return img

list_ds = tf.data.Dataset.list_files([filepath1,filepath2,...,filepathN],
                                     shuffle=False)

files_list = list()
for files in list_ds.as_numpy_iterator():
    files_list.append(files.decode("utf-8"))

test_ds = list_ds.map(process_path, num_parallel_calls=AUTOTUNE)
test_size = test_ds.cardinality().numpy()
test_ds = configure_for_performance(test_ds)
test_ds = test_ds.map(
    lambda images: normalization_sequential_layer(images))

test_steps = test_size // BATCH_SIZE + 1
score = tf.nn.softmax(model.predict(test_ds, steps=test_steps))

Lo estoy ejecutando en una máquina con 32 núcleos y 64 GB de RAM (sin GPU), pero el proceso tarda bastante tiempo y luego se cierra con el mensaje + Killed, lo que, según mi investigación, podría relacionarse con un problema de falta de RAM (fuga de memoria que ocurre con el tiempo y después de un punto se sale de la RAM). Según mi investigación adicional, puedo ver que las personas enfrentan problemas de OOM al tener un bucle for alrededor del modelo.predict, no estoy seguro de cuál podría ser la razón aquí.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándose en el fragmento de código y la información proporcionados, es posible que la fuga de memoria esté ocurriendo durante el proceso de predicción. Una posible razón para esto es que el conjunto de datos de prueba no se está agrupando adecuadamente. El tamaño de lote actual está establecido en 128, lo que puede no ser apropiado para la memoria disponible. Ajustar el tamaño de lote a un valor más pequeño y aumentar el tamaño del búfer de prefijo puede ayudar a reducir el uso de memoria.

    Otra posible razón para el problema de OOM podría estar relacionada con el tamaño de imagen de entrada. Si las imágenes de entrada son demasiado grandes, pueden consumir mucha memoria durante el procesamiento. En tales casos, cambiar el tamaño de las imágenes a un tamaño más pequeño antes del procesamiento puede ayudar a reducir el uso de memoria.

    También es posible que el problema sea causado por la capa de normalización, que se aplica después de decodificar y cambiar el tamaño de las imágenes de entrada. Si la operación de normalización implica un gran número de parámetros o cálculos, puede causar el problema OOM. En tales casos, simplificar el proceso de normalización o utilizar una técnica de normalización diferente puede ser útil.

    Para investigar aún más el problema, sería útil monitorear el uso de memoria durante la ejecución del código e identificar el paso / operación específico que causa la fuga de memoria. Se pueden utilizar herramientas como TensorBoard para este propósito.

Comments are closed.