Désactiver les informations de débogage Tensorflow

par débogage d'informations je veux dire ce que TensorFlow montre dans mon terminal sur les bibliothèques chargées et les périphériques trouvés etc. pas les erreurs python.

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties: 
name: Graphics Device
major: 5 minor: 2 memoryClockRate (GHz) 1.0885
pciBusID 0000:04:00.0
Total memory: 12.00GiB
Free memory: 11.83GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:717] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:04:00.0)
I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:51] Creating bin of max chunk size 1.0KiB
...
79
demandé sur Ghilas BELHADJ 2016-03-10 11:32:58

5 réponses

vous pouvez désactiver tous les journaux de débogage en utilisant os.environ :

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

testé sur tf 0,12 et 1,0

104
répondu mwweb 2017-07-06 04:22:45

1.0+ mise à Jour (5/20/17):

dans TensorFlow 0.12+, pour ce édition , vous pouvez maintenant contrôler la journalisation via la variable environnementale appelée TF_CPP_MIN_LOG_LEVEL ; il est par défaut à 0 (Toutes les logs affichées), mais peut être réglé à 1 pour filtrer hors INFO logs, 2 pour filtrer en plus hors WARNING logs, et 3 pour filtrer en plus hors ERROR logs. Voir l'exemple d'OS générique suivant en utilisant Python:

import os
import tensorflow as tf

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # or any {'0', '1', '2'}

pour les versions antérieures de L'enregistrement TensorFlow ou TF-Learn, voir la rubrique suivante:

voir la page ci-dessous pour des informations sur la journalisation TensorFlow; avec la nouvelle mise à jour, vous êtes en mesure de définir la verbosité de journalisation à DEBUG , INFO , WARN , ERROR , ou FATAL . Par exemple:

tf.logging.set_verbosity(tf.logging.ERROR)

la page passe en outre des moniteurs qui peuvent être utilisés avec TF-Learn modèle. Voici la page .

ce ne bloque pas toute la journalisation, cependant (seulement TF-Learn). J'ai deux solutions: L'une est une solution "techniquement correcte" (Linux) et l'autre consiste à reconstruire TensorFlow.

script -c 'python [FILENAME].py' | grep -v 'I tensorflow/'

pour l'Autre, voir cette réponse qui implique la modification de la source et la reconstruction TensorFlow.

54
répondu craymichael 2018-08-13 22:35:10

j'ai eu ce problème aussi (sur tensorflow-0.10.0rc0 ), mais je n'ai pas pu corriger le problème de consignation excessive des essais de nez via les réponses suggérées.

j'ai réussi à résoudre ce problème en sondant directement dans le logger tensorflow. Pas le plus correct des correctifs, mais fonctionne très bien et ne pollue que les fichiers de test qui importent directement ou indirectement tensorflow:

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)
9
répondu Pedro Lopes 2016-09-26 17:04:27

Comme TF_CPP_MIN_LOG_LEVEL ne fonctionne pas pour moi, vous pouvez essayer:

tf.logging.set_verbosity(tf.logging.WARN)

a travaillé pour moi dans tensorflow v1.6.0

1
répondu Wikunia 2018-07-13 14:38:03

pour ajouter un peu de flexibilité ici, vous pouvez obtenir un contrôle plus fin sur le niveau de journalisation en écrivant une fonction qui filtre les messages comme vous voulez:

logging.getLogger('tensorflow').addFilter(my_filter_func)

my_filter_func accepte un LogRecord objet comme entrée ["1519100920 LogRecord docs ] et renvoie zéro si vous voulez que le message soit rejeté; sinon non zéro.

voici un exemple de filtre qui ne conserve que tous les messages nth info (Python 3 en raison l'utilisation de nonlocal ici):

def keep_every_nth_info(n):
    i = -1
    def filter_record(record):
        nonlocal i
        i += 1
        return int(record.levelname != 'INFO' or i % n == 0)
    return filter_record

# Example usage for TensorFlow:
logging.getLogger('tensorflow').addFilter(keep_every_nth_info(5))

Tout ce qui précède a supposé que TensorFlow a déjà mis en place son état de diagraphie. Vous pouvez vous en assurer sans effets secondaires en appelant tf.logging.get_verbosity() avant d'ajouter un filtre.

1
répondu Tyler 2018-08-07 19:41:10