禁用 Tensorflow 调试信息

2025-01-16 08:37:00
admin
原创
134
摘要:问题描述:我所说的调试信息是指 TensorFlow 在我的终端上显示的有关已加载的库和找到的设备等的信息,而不是 Python 错误。I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcub...

问题描述:

我所说的调试信息是指 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
...

解决方案 1:

您可以使用以下方法禁用所有调试日志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

解决方案 2:

2.0 更新(2019 年 10 月 8 日)
设置TF_CPP_MIN_LOG_LEVEL应该仍然有效(请参阅下面的 v0.12+ 更新),但版本 2.0 到 2.3.z 中有一个报告问题,该问题已在 2.4 及更高版本中修复。如果设置TF_CPP_MIN_LOG_LEVEL对您不起作用(再次请参阅下文),请尝试执行以下操作来设置日志级别:

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

此外,请参阅有关tf.autograph.set_verbosity设置签名日志消息详细程度的文档 - 例如:

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

v0.12+ 更新(2017 年 5 月 20 日),通过 TF 2.0+ 进行操作:

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

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

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

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

您可以在运行脚本的环境中设置此环境变量。例如,使用 bash,它可以在文件~/.bashrc、、/etc/environment/etc/profile,或在实际 shell 中,如下所示:

TF_CPP_MIN_LOG_LEVEL=2 python my_tf_script.py

为了彻底起见,您还可以设置 Python 模块的级别tf_logging,该模块用于例如摘要操作、张量板、各种估算器等。

# 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 Logging 的早期版本(v0.11.x 或更低版本):
查看以下页面以获取有关 TensorFlow 日志记录的信息;通过新的更新,您可以将日志记录详细程度设置为DEBUGINFOWARNERRORFATAL。例如:

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

该页面还介绍了可与 TF-Learn 模型一起使用的监视器。以下是页面。

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

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

对于其他问题,请参阅这个答案,其中涉及修改源代码和重建 TensorFlow。

解决方案 3:

为了与 Tensorflow 2.0 兼容,您可以使用tf.get_logger

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

解决方案 4:

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

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

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

解决方案 5:

我正在使用 Tensorflow 2.3.1 版本,上述所有解决方案均未完全有效。

直到我找到了这个包。

像这样安装:

使用 Anaconda,

python -m pip install silence-tensorflow

使用 IDE,

pip install silence-tensorflow

并在第一行代码中添加:

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

就是这样!

解决方案 6:

对于仍然os.environ像我一样努力使解决方案发挥作用的人,请检查在脚本中导入之前tensorflow是否放置了此内容,就像 mwweb 的答案一样:

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

解决方案 7:

我通过这篇文章解决了无法删除所有警告#27045的问题,解决方案是:

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

解决方案 8:

由于TF_CPP_MIN_LOG_LEVEL对我不起作用,您可以尝试:

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

在 tensorflow v1.6.0 中为我工作

解决方案 9:

通常,python3 日志管理器适用于 tensorflow==1.11.0:

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

解决方案 10:

在导入 TensorFlow 之前,只需silence_tensorflow从包中运行该函数:silence-tensorflow

"""Module providing tools to shut up tensorflow useless warnings, letting you focus on the actual problems."""
import os
import logging


def silence_tensorflow():
    """Silence every unnecessary warning from tensorflow."""
    logging.getLogger('tensorflow').setLevel(logging.ERROR)
    os.environ["KMP_AFFINITY"] = "noverbose"
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
    # We wrap this inside a try-except block
    # because we do not want to be the one package
    # that crashes when TensorFlow is not installed
    # when we are the only package that requires it
    # in a given Jupyter Notebook, such as when the
    # package import is simply copy-pasted.
    try:
        import tensorflow as tf
        tf.get_logger().setLevel('ERROR')
        tf.autograph.set_verbosity(3)
    except ModuleNotFoundError:
        pass

免责声明:我不是这个包的作者。

解决方案 11:

对于 tensorflow 2.1.0,以下代码运行良好。

import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

解决方案 12:

这个对我来说很完美,可以关闭所有日志

import logging, os

logging.disable(logging.WARNING)
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"

import tensorflow as tf

解决方案 13:

为了在这里增加一些灵活性,您可以通过编写一个按照您喜欢的方式过滤消息的函数来实现对日志记录级别的更细粒度的控制:

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

接受my_filter_func一个LogRecord对象作为输入 [ LogRecorddocs ],如果您希望抛出消息,则返回零;否则,返回非零。

下面是一个仅保留每第 n 条信息消息的示例过滤器(由于此处使用,因此为 Python 3 nonlocal):

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()在添加过滤器之前调用来确保这一点,而不会产生副作用。

解决方案 14:

是的,我正在使用 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)

解决方案 15:

在测试了各种建议以便它们也可以使使用PyInstaller构建的最终可执行文件静音之后,我想出了以下设置:

import logging
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
logging.getLogger('tensorflow').setLevel(logging.ERROR)

import tensorflow as tf

线路

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

将消除关于重建 TensorFlow的警告:

I tensorflow/core/platform/cpu_feature_guard.cc:193] 此 TensorFlow 二进制文件使用 oneAPI 深度神经网络库 (oneDNN) 进行了优化,以便在性能关键型操作中使用以下 CPU 指令:AVX2 FMA。要在其他操作中启用它们,请使用适当的编译器标志重建 TensorFlow。

线路

logging.getLogger('tensorflow').setLevel(logging.ERROR)

将消除有关AutoGraph的警告:

警告:tensorflow:AutoGraph 在此环境中不可用:函数缺少代码信息。这在某些环境中很常见,例如交互式 Python shell。有关更多信息,请参阅https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/autograph/g3doc/reference/limitations.md#access-to-source-code

关键点在于将这两者放在导入 Tensorflow之前——尽管 Pylint 发出了警告!

TensorFlow 2.11.0

解决方案 16:

在 Jupyter 笔记本中,你可以使用%env魔法命令:

%env TF_CPP_MIN_LOG_LEVEL=3
import tensorflow as tf

解决方案 17:

我为此挣扎了一段时间,尝试了这里几乎所有的解决方案,但无法摆脱调试信息TF 1.14,我尝试了以下多种解决方案:

import os
import logging
import sys

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # FATAL
stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')

import tensorflow as tf
tf.get_logger().setLevel(tf.compat.v1.logging.FATAL)
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
logging.getLogger('tensorflow').setLevel(tf.compat.v1.logging.FATAL)

sys.stderr = stderr

import absl.logging
logging.root.removeHandler(absl.logging._absl_handler)
absl.logging._warn_preinit_stderr = False

调试信息仍然显示出来,最后有用的是重启我的电脑(实际上重启内核应该可以工作)。所以如果有人遇到类似的问题,请尝试在设置环境变量后重启内核,这很简单但可能不太容易想到。

解决方案 18:

这里的大多数答案都有效,但每次打开新会话时都必须使用它们(例如使用 JupyterLab)。要使更改生效,您必须设置环境变量。

Linux:

export TF_CPP_MIN_LOG_LEVEL="3"

(另外将上面的行添加到 .bashrc 以使更改永久生效,而不仅限于会话)

视窗:

setx TF_CPP_MIN_LOG_LEVEL "3"

两者都为用户设置了环境变量。

解决方案 19:

对于 Apple M1 或更高版本的 GPU,您需要安装包 silent_tensorflow。

运行以下命令进行安装

python -m pip install silence-tensorflow

然后在代码中添加以下几行

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

解决方案 20:

如果您只需要摆脱屏幕上的警告输出,您可能希望在导入 tensorflow 后立即使用这个简单的命令清除控制台屏幕(根据我的经验,它比禁用所有调试日志更有效):

在 Windows 中:

import os
os.system('cls')

在Linux或Mac中:

import os
os.system('clear')

解决方案 21:

上述解决方案都无法解决我在 Jupyter Notebook 中的问题,因此我使用下面来自Cicoria的代码片段,问题得以解决。

import warnings  
with warnings.catch_warnings():  
    warnings.filterwarnings("ignore",category=FutureWarning)
    import tensorflow as tf
    from tensorflow import keras
    from tensorflow.keras.preprocessing.text import Tokenizer

print('Done') 
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3892  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2717  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   52  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   54  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   49  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用