#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__
помощью after2. Просматривая онлайн, я нашел несколько
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".