web-dev-qa-db-fra.com

Mémoire d'allocation Tensorflow: l'allocation de 38535168 dépasse 10% de la mémoire système

Utilisation de poids pré-formés ResNet50 J'essaie de créer un classificateur. La base de code est entièrement implémentée dans l’API de haut niveau Keras de Keras. Le code complet est affiché dans le lien GitHub ci-dessous.

Code source: Classification à l'aide de l'architecture RestNet5

La taille de fichier du modèle pré-formé est de 94.7mb .

J'ai chargé le fichier pré-formé

new_model = Sequential()

new_model.add(ResNet50(include_top=False,
                pooling='avg',
                weights=resnet_weight_paths))

et adapter le modèle

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 12,
    class_mode = 'categorical'
    )

validation_generator = data_generator.flow_from_directory(
    'path_to_the_validation_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    class_mode = 'categorical'
    )

#compile the model

new_model.fit_generator(
    train_generator,
    steps_per_Epoch = 3,
    validation_data = validation_generator,
    validation_steps = 1
)

et dans l'ensemble de données de formation, j'ai deux dossiers chien et chat, chacun contenant près de 10 000 images. Quand j'ai compilé le script, j'obtiens l'erreur suivante

Epoch 1/1 2018-05-12 13: 04: 45.847298: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 38535168 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 46.845021: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 47.552176: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 48.199240: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 48.918930: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 49.274137: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 49.647061: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 50.028839: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 50.413735: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système.

Des idées pour optimiser la façon de charger le modèle pré-formé (ou) vous débarrasser de ce message d'avertissement?

Merci!

18
Madhi

Essayez de réduire l'attribut batch_size à un petit nombre (comme 1,2 ou 3). Exemple:

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 2,
    class_mode = 'categorical'
    )
8
user9804206

J'avais le même problème lors de l'exécution du conteneur Tensorflow avec les blocs-notes Docker et Jupyter. J'ai pu résoudre ce problème en augmentant la mémoire du conteneur.

Sur Mac OS, vous pouvez facilement le faire à partir de:

       Docker Icon > Preferences >  Advanced > Memory

Faites glisser la barre de défilement au maximum (par exemple, 4 Go). Appliquez et le moteur Docker redémarrera.

Maintenant, lancez à nouveau votre conteneur de flux tensoriel.

C'était pratique d'utiliser le docker stats commande dans un terminal séparé Elle montre l’utilisation de la mémoire du conteneur en temps réel et vous permet de voir la consommation de mémoire qui augmente:

CONTAINER ID   NAME   CPU %   MEM USAGE / LIMIT     MEM %    NET I/O             BLOCK I/O           PIDS
3170c0b402cc   mytf   0.04%   588.6MiB / 3.855GiB   14.91%   13.1MB / 3.06MB     214MB / 3.13MB      21
4
revolutionary

Vous pouvez également définir la variable d'environnement TF_CPP_MIN_LOG_LEVEL=2 pour filtrer les informations et les messages d’avertissement. J'ai trouvé cela sur ce problème de github où ils se plaignent du même résultat . Pour faire cela en python, vous pouvez utiliser la solution de here :

import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

Vous pouvez même l'activer et le désactiver à volonté. Je teste la taille de lot maximale possible avant d'exécuter mon code et je peux désactiver les avertissements et les erreurs en le faisant.

3
Poik

Je courais un petit modèle sur un processeur et avait le même problème. Ajouter:os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' résolu le problème.

2
Ahmed J.