web-dev-qa-db-ja.com

Tensorflowのデバッグ情報を無効にする

デバッグ情報とは、ロードされているライブラリについてTensorFlowが私の端末に表示しているものや、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
...
108
Ghilas BELHADJ

os.environを使用してすべてのデバッグログを無効にすることができます。

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

Tf 0.12と1.0でテスト済み

詳細に、

0 = all messages are logged (default behavior)
1 = INFO messages are not printed
2 = INFO and WARNING messages are not printed
3 = INFO, WARNING, and ERROR messages are not printed
137
mwweb

1.0+更新(5/20/17):

TensorFlow 0.12以降では、これによって issue では、TF_CPP_MIN_LOG_LEVELという名前の環境変数を介してロギングを制御できるようになりました。デフォルトは0(すべてのログが表示されます)ですが、1を設定してINFOログを除外し、2を追加してWARNINGログを除外し、3を追加してERRORログを除外します。次のPythonを使った一般的なOSの例を見てください。

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

以前のバージョンのTensorFlowまたはTF-Learn Loggingについては、以下を参照してください。

TensorFlowロギングについての情報は以下のページを見てください。新しいアップデートでは、ログの詳細度をDEBUGINFOWARNERROR、またはFATALのいずれかに設定できます。例えば:

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

このページには、TF-Learnモデルで使用できるモニターが追加されています。 これがページです

これはすべてのロギングをブロックするわけではありません、(TF-Learnのみ)。 2つの解決策があります。 1つは「技術的に正しい」解決策(Linux)、もう1つはTensorFlowの再構築です。

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

もう一つは、 この答え を参照してください。これはソースの修正とTensorFlowの再構築を含みます。

78
craymichael

私も(tensorflow-0.10.0rc0で)この問題を抱えていますが、提案された答えを介して過度の鼻テストロギング問題を修正することができませんでした。

テンソルフローロガーを直接調べて、これを解決できました。最も正しい修正方法ではありませんが、うまく機能し、直接または間接的にテンソルフローをインポートするテストファイルを汚染するだけです。

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)
12
Pedro Lopes

TF_CPP_MIN_LOG_LEVELが私のために働かなかったのであなたは試すことができます:

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

Tensorflow v1.6.0で私のために働きました

8
Wikunia

いつものpython3ログマネージャは私にとってはtensorflow == 1.11.0で動きます:

import logging
logging.getLogger('tensorflow').setLevel(logging.INFO)
5
estevo

Tensorflow 2.0との互換性のために tf.get_logger を使いたくなるかもしれません

import logging
tf.get_logger().setLevel(logging.ERROR)

しかし、それは私にとってはうまくいきませんでした。

3
serv-inc

ここでいくらかの柔軟性を追加するために、あなたが好きなメッセージを除外する関数を書くことによってロギングのレベルのよりきめ細かい制御を達成することができます:

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

my_filter_funcは入力としてLogRecordオブジェクトを受け入れ[ LogRecord docs ]、メッセージをスローしたい場合はゼロを返します。それ以外の場合はゼロ以外。

これは、n番目の情報メッセージをすべて保持するフィルタの例です(ここではnonlocalを使用しているため、Python 3)。

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))

上記のすべては、TensorFlowがすでにロギング状態を設定していることを前提としています。フィルタを追加する前にtf.logging.get_verbosity()を呼び出すことで、副作用なくこれを保証できます。

2
Tyler

はい、tf 2.0-betaを使用していて、デフォルトのロギングを有効/無効にしたいです。 tf1.Xの環境変数とメソッドはもう存在しないようです。

私はPDBに歩き回り、これが機能することがわかりました:

# close the TF2 logger
tf2logger = tf.get_logger()
tf2logger.error('Close TF2 logger handlers')
tf2logger.root.removeHandler(tf2logger.root.handlers[0])

次に、独自のロガーAPI(この場合はファイルベース)を追加します

logtf = logging.getLogger('DST')
logtf.setLevel(logging.DEBUG)

# file handler
logfile='/tmp/tf_s.log'
fh = logging.FileHandler(logfile)
fh.setFormatter( logging.Formatter('fh %(asctime)s %(name)s %(filename)s:%(lineno)d :%(message)s') )
logtf.addHandler(fh)
logtf.info('writing to %s', logfile)
1
dturvene

私はこの投稿で解決しました すべての警告を削除できません#27045 、そして解決策は次のとおりでした:

import logging
logging.getLogger('tensorflow').disabled = True
1