在CPU上运行Tensorflow时禁止OpenMP调试消息

时间:2019-05-10 21:25:46

标签: python tensorflow openmp

在包含import tensorflow(未安装GPU支持)的Linux上运行Python程序时,即使从未调用过tensorflow模块的功能,也会将一堆OpenMP调试消息写入stdout。这是摘录:

OMP: Info #212: KMP_AFFINITY: decoding x2APIC ids.
OMP: Info #210: KMP_AFFINITY: Affinity capable, using global cpuid leaf 11 info
OMP: Info #154: KMP_AFFINITY: Initial OS proc set respected: 0-3
OMP: Info #156: KMP_AFFINITY: 4 available OS procs
OMP: Info #157: KMP_AFFINITY: Uniform topology

在导入tensorflow之前设置os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'并不会消除这些消息,如何抑制它们(来自Python)?

2 个答案:

答案 0 :(得分:1)

当另一个答案告诉我做什么但又不完全是如何做时,我决定添加我的答案。

如果要禁止显示这些警告,可以通过将KMP_WARNINGS环境变量设置为false值来实现。在代码中,您可以执行以下操作;在脚本中,您需要先导入os,然后设置environ变量,如下所示:

import os
os.environ["KMP_WARNINGS"] = "FALSE" 

任何false值在这里都可以使用,只要它的字符串格式"0""off""no"也可以使用。

答案 1 :(得分:0)

底线:KMP_WARNINGS envvar设置为错误值(0FALSEoffno)。

(如果使用多进程设置,请确保在生成子进程之前执行此操作,以使它们继承它。)


使用Google搜索"Affinity capable, using global cpuid leaf"(带引号-即完整短语)可找到https://github.com/catboost/catboost/blob/master/contrib/libs/cxxsupp/openmp/i18n/en_US.txt。它是OpenMP实施的一部分。这段代码不是张量流的一部分(并且在https://github.com/tensorflow/tensorflow中专门搜索短语或名为“ openmp”的子模块引用什么都找不到),但这是可以理解的,因为OpenMP是编译器实现的一部分(此文件专门声明成为LLVM的一部分-即clang)。该代码可能与您的程序使用的不是完全相同,而是它的另一个版本,但是我们可以假定一般逻辑是相同的,因此我们可以使用此代码进行导航。

现在,searching for references to the entity containing this phrase(即AffUseGlobCpuidL11-这是邮件的ID),then for a definition of KMP_INFORMthen for a definition of __kmp_msg最终找到了the code doing the loggingIt says仅使消息if ( severity != kmp_ms_fatal && __kmp_generate_warnings == kmp_warnings_off )保持沉默。通过遍历对__kmp_generate_warnings的引用来查找分配给对象的地方,找到https://github.com/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_settings.c#L944,并寻找https://github.com/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_settings.c#L4514no official documentation comes up,这表明__kmp_stg_parse_warningsname。 / p>

在这一点上,我认为应该记录该名称。因此,对其进行谷歌搜索将更快地告诉我用户应该如何设置“ KMP_WARNINGS”以及允许的值是多少。我很失望-Another resulthttps://github.com/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_global.c#L116暗示它是一个envvar,有效值为:“使用” 0“,” FALSE“,”。F。“,” off“,” no“作为假值,” 1“ ,“ TRUE”,“。T。”,“ on”,“ yes”作为真实值。” 源代码还使用"KMP_WARNINGS"作为可能的值,但名称kmp_warnings_low表示否,用户只能提供“ true”和“ false”值,而不能提供其他任何值。上面的过滤条件表明,__kmp_stg_parse_bool以外的任何内容都不会产生影响,http://localhost:8080/contact-api/contacts则说kmp_warnings_off是默认值(如果用户未提供任何内容)。