禁用Tensorflow调试信息

2024-06-16 11:03:20 发布

您现在位置:Python中文网/ 问答频道 /正文

通过调试信息,我指的是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
...

Tags: corestreamsogputensorflowlibraryloadercommon
3条回答

2.0更新(10/8/19) 设置TF_CPP_MIN_LOG_LEVEL应该仍然有效(请参见下面的v0.12+更新),但当前有一个问题尚未解决(请参见issue #31870)。如果设置TF_CPP_MIN_LOG_LEVEL对您不起作用(再次,请参见下文),请尝试执行以下操作以设置日志级别:

import tensorflow as tf
tf.get_logger().setLevel('INFO')

此外,请参阅^{}上的文档,该文档设置签名日志消息的详细程度-例如:

# Can also be set using the AUTOGRAPH_VERBOSITY environment variable
tf.autograph.set_verbosity(1)

v0.12+更新(5/20/17),通过TF 2.0+:

在TensorFlow 0.12+中,根据这个issue,您现在可以通过名为TF_CPP_MIN_LOG_LEVEL的环境变量控制日志记录;它默认为0(显示所有日志),但可以设置为Level列下的下列值之一。

  Level | Level for Humans | Level Description                  
 -------|------------------|------------------------------------ 
  0     | DEBUG            | [Default] Print all messages       
  1     | INFO             | Filter out INFO messages           
  2     | WARNING          | Filter out INFO & WARNING messages 
  3     | ERROR            | Filter out all messages      

请参阅以下使用Python的通用操作系统示例:

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

为了更彻底,还可以调用设置Python^{}模块的级别,该模块用于summary ops、tensorboard、各种估计器等

# append to lines above
tf.logging.set_verbosity(tf.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}

对于1.14,如果不按以下方式更改为使用v1 API,则将收到警告:

# append to lines above
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}


对于先前版本的TensorFlow或TF Learn测井(v0.11.x或更低版本):

查看下面的页面以获取有关TensorFlow日志记录的信息;通过新的更新,您可以将日志记录详细程度设置为DEBUGINFOWARNERRORFATAL。例如:

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

此外,该页面还可以浏览可用于TF学习模型的监视器。Here is the page

不过,这并不会阻止所有日志记录(仅限于TF Learn)。我有两个解决方案:一个是“技术上正确的”解决方案(Linux),另一个涉及到重建TensorFlow。

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

另一方面,请参见this answer,这涉及到修改源代码和重建TensorFlow。

我也遇到过这个问题(关于tensorflow-0.10.0rc0),但无法通过建议的答案解决过多的鼻子测试日志记录问题。

我通过直接探测tensorflow记录器解决了这个问题。不是最正确的修复,但效果很好,只会污染直接或间接导入tensorflow的测试文件:

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

可以使用os.environ禁用所有调试日志:

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

在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

相关问题 更多 >