在 CPU 上运行 Tensorflow 时抑制 OpenMP 调试消息

Pet*_*ter 5 python openmp tensorflow

当在 Linux 上运行包含import tensorflow(安装时不支持 GPU)的 Python 程序时,即使从未调用过 tensorflow 模块中的任何函数,也会将一堆 OpenMP 调试消息写入标准输出。这是摘录:

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
Run Code Online (Sandbox Code Playgroud)

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

iva*_*eev 5

底线:设置KMP_WARNINGSENVVAR到一个假值(0FALSEoffno)。

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


谷歌搜索"Affinity capable, using global cpuid leaf"(带引号——即作为一个完整的短语)找到https://github.com/catboost/catboost/blob/master/contrib/libs/cxxsupp/openmp/i18n/en_US.txt。它是 OpenMP 实现的一部分。此代码不是 tensorflow 的一部分(并且在https://github.com/tensorflow/tensorflow 中专门搜索短语或名为“openmp”的子模块引用一无所获)但这是可以理解的,因为 OpenMP 是编译器的一部分实现(这个文件特别声称是 LLVM 的一部分——即clang)。这段代码可能不是你的程序正在使用的,而是它的另一个版本,但我们可以假设一般逻辑是相同的,所以我们可以使用这段代码进行导航。

现在,搜索对包含该短语的实体的引用(即AffUseGlobCpuidL11——这是消息的 ID),然后搜索 的定义KMP_INFORM然后搜索 的定义,__kmp_msg最终找到执行日志记录的代码它说它只会使消息静音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__kmp_stg_parse_warnings查找https://github.com/kmp_settings.c#L944 /catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_settings.c#L4514这表明name"KMP_WARNINGS"

在这一点上,我认为应该记录这个名称。因此,使用谷歌搜索它会更快地告诉我用户应该如何设置“KMP_WARNINGS”以及它的允许值是什么。我很失望——没有官方文档出现另一个结果表明它是一个 envvar,有效值是:“使用“0”、“假”。“.F.”、“关闭”、“否”作为假值、“1”、“真”、“ .T.”、“on”、“yes”作为真值。” 源代码也使用kmp_warnings_low一个可能的值,但__kmp_stg_parse_bool顾名思义,不,用户只能提供“真”和“假”值,没有别的。kmp_warnings_offhttps://github.com/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_global.c#L116表示low如果用户未提供任何内容,则这是默认设置。