Numba выводит информацию о драйвере Nvidia на консоль python при использовании его модуля Cuda. Как это подавить?

#python #numba

#python #numba

Вопрос:

Я обнаружил, что Numba печатает информацию о моем драйвере Nvidia на мою консоль python при использовании его модуля Cuda. Например, при использовании

 numba.cuda.to_device(SOME_ARRAY)
 

впервые,

ИНФОРМАЦИЯ — 2020-12-21 19:16:22,163 — driver — init

отображается красным цветом на моей консоли. При использовании его в любое другое время,

ИНФОРМАЦИЯ — ДАТА- ВРЕМЯ — драйвер — добавить ожидающее освобождение: cuMemFree_v2 NUM_BYTES байт

печатается. Например:

ИНФОРМАЦИЯ — 2020-12-21 19:18:34,473 — ожидающее освобождения от добавления драйвера: cuMemFree_v2 729-120 байт

Есть ли какой-либо способ, которым я мог бы запретить Numba печатать эту информацию?

_ _

Как рекомендовано в комментариях, я уже пробовал настраивать

 sys.stdout = open(os.devnull, "w") 

sys.stderr = open(os.devnull, "w") 
 

перед запуском numba.cuda.to_device() , но это не решило проблему.

Я также изучил переменные среды Numba и не нашел ничего, что решало бы проблему. Чтобы быть точным, я попытался установить

 os.environ['NUMBA_CUDA_LOG_LEVEL'] = str(logging.NOTSET) 
 

и

 os.environ['NUMBA_CUDA_LOG_LEVEL'] = str(logging.DEBUG)
 

И ни один из двух не решил проблему. Я также попытался настроить

 numba.config.CUDA_LOG_LEVEL = logging.NOTSET 
 

и

 numba.config.CUDA_LOG_LEVEL = logging.DEBUG 
 

но опять же это не решило проблему.

Комментарии:

1. Вам нужно будет подавить стандартный вывод, поскольку это, вероятно, печать из ядра. Не имея перед собой кода ядра, я не могу подтвердить. Попробуйте sys.stdout = open(os.devnull, "w") sys.stderr = open(os.devnull, "w") непосредственно перед его печатью, а затем восстановите его с sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ помощью after

2. Просматривая онлайн, я нашел несколько Environment Variables , которые меняют Numba поведение. Я уверен, что одно из этих изменений после изменения отключит печать. Чтобы установить environment var в python, используйте os.environ[ARGUMENT_NAME: str] = ARGUMENT_VALUE: int

3. Спасибо за ваш быстрый ответ. Итак, я попытался установить sys.stdout = open(os.devnull, «w») и sys.stderr = open(os.devnull, «w») перед перемещением массивов на графический процессор, а sys.__stdout__ и sys.stderr = sys.__stderr__ после того, как все будет сделано. К сожалению, это не решило проблему.

4. Я также попытался установить os.environ[‘NUMBA_CUDA_LOG_LEVEL’] = str(ведение журнала. ОТЛАДКА) и os.environ[‘NUMBA_CUDA_LOG_LEVEL’] = str(ведение журнала. NOTSET) в начале моей программы, но это также не помогло. Наконец, я также попробовал numba.config. CUDA_LOG_LEVEL = ведение журнала. NOTSET и numba.config. CUDA_LOG_LEVEL = ведение журнала. ОТЛАДКА и это также не сработало. Я просмотрел остальные переменные среды из numba, и они, похоже, не имеют отношения к делу.

5. Эти сообщения не поступают от драйвера NVIDIA. Они поступают из Numba

Ответ №1:

Через некоторое время я нашел решение этой проблемы. Как намекнул talonmies в комментариях выше, эти сообщения поступают от регистратора Numba. На моей машине для уровня ведения журнала было установлено значение «INFO», и Numba печатал непосредственно на консоль. Чтобы запретить печать информации, добавьте в свою программу python следующее:

 import logging
numba_logger = logging.getLogger('numba')
numba_logger.setLevel(logging.WARNING)  # Or any other desired level that has a value above that of "INFO".