Подавлять сообщения отладки OpenMP при запуске Tensorflow на CPU - PullRequest
1 голос
/ 11 мая 2019

При запуске программы на Python в Linux, включающей import tensorflow (устанавливается без поддержки графического процессора), куча отладочных сообщений OpenMP записывается в стандартный вывод, даже когда не вызывается никаких функций из модуля tenorflow.Вот выдержка:

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

Установка os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' перед тем, как импорт tenorflow не избавляется от этих сообщений, как я могу их подавить (из Python)?

1 Ответ

1 голос
/ 11 мая 2019

Нижняя строка: Установите KMP_WARNINGS envvar в ложное значение (0, FALSE, off или no).

(Если вы используетенастройка нескольких процессов, обязательно сделайте это, прежде чем создавать дочерние процессы, чтобы они унаследовали их.)


Поиск в 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).Этот код может быть не совсем тем, что использует ваша программа, но другой версией, но мы можем предположить, что общая логика та же самая, поэтому мы можем использовать этот код для навигации.

Теперь, поискдля ссылок на сущность, содержащую эту фразу (а именно AffUseGlobCpuidL11 - это идентификатор сообщения), , затем для определения 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/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_settings.c#L4514, который предполагает, что name равен "KMP_WARNINGS".

AtВ этот момент я предположил, что это имя должно быть задокументированоТак что поиск в Google скажет мне быстрее, как пользователь должен установить «KMP_WARNINGS» и каковы допустимые значения для него.Я был разочарован - нет официальной документации . Другой результат предполагает, что это envvar, и допустимые значения: "Использовать" 0 "," FALSE "." .F. "," Off "," no "в качестве ложных значений,«1», «TRUE», «.T.», «On», «yes» в качестве истинных значений. « Исходный код также использует kmp_warnings_low в качестве возможного значения, но имя __kmp_stg_parse_bool предполагает, что нетпользователь может предоставить только «истинное» и «ложное» значение, ничего больше.Приведенный выше критерий фильтра говорит, что ничего, кроме kmp_warnings_off, в любом случае не будет иметь эффекта, а https://github.com/catboost/catboost/blob/15712cfa704413d51618455326c30f5764956be5/contrib/libs/cxxsupp/openmp/kmp_global.c#L116 говорит, что low является значением по умолчанию, если пользователь ничего не предоставил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...