Vô hiệu hóa thông tin gỡ lỗi hàng chục


191

Bằng cách gỡ lỗi thông tin, ý tôi là những gì TensorFlow hiển thị trong thiết bị đầu cuối của tôi về các thư viện được tải và các thiết bị được tìm thấy, v.v. không phải lỗi Python.

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties: 
name: Graphics Device
major: 5 minor: 2 memoryClockRate (GHz) 1.0885
pciBusID 0000:04:00.0
Total memory: 12.00GiB
Free memory: 11.83GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:717] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:04:00.0)
I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:51] Creating bin of max chunk size 1.0KiB
...


Tensorflow vẫn là mã alpha sớm và họ vẫn đang tìm ra các lỗi để tương thích cơ bản với numpy và gấu trúc. Vì vậy, để loại bỏ các cảnh báo này trong một đòn duy nhất, hãy thực hiện import warningssau đó warnings.filterwarnings('ignore'), sau đó chạy nhập hàng chục dòng của bạn và mã dựa trên mã alpha-tenorflow bị hỏng, sau đó bật lại cảnh báo warnings.resetwarnings(). Tenorflow không nên quảng cáo tên phiên bản trên 0,05 tại thời điểm này.
Eric Leschinski

Câu trả lời:


214

Bạn có thể vô hiệu hóa tất cả các nhật ký gỡ lỗi bằng cách sử dụng os.environ:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
import tensorflow as tf

Đã thử nghiệm trên tf 0.12 và 1.0

Chi tiết,

0 = all messages are logged (default behavior)
1 = INFO messages are not printed
2 = INFO and WARNING messages are not printed
3 = INFO, WARNING, and ERROR messages are not printed

Điều này hoạt động, nhưng nó loại bỏ dấu thời gian trước các bản ghi - làm thế nào để có thể bật lại?
DreamFlasher

Các cấp độ này (0, 1, 2, 3) có nghĩa là gì?
diralik

2
không hoạt động cho 1.13 và python3, ngay cả trước khi nhập dòng chảy
Li haonan

146

Cập nhật 2.0 (10/8/19) Cài đặt TF_CPP_MIN_LOG_LEVELvẫn hoạt động (xem bên dưới trong bản cập nhật v0.12 +), nhưng hiện tại có một vấn đề mở (xem vấn đề # 31870 ). Nếu cài đặt TF_CPP_MIN_LOG_LEVELkhông phù hợp với bạn (một lần nữa, hãy xem bên dưới), hãy thử thực hiện các thao tác sau để đặt mức ghi nhật ký:

import tensorflow as tf
tf.get_logger().setLevel('INFO')

Ngoài ra, vui lòng xem tài liệu hướng dẫn tf.autograph.set_verbositymức độ chi tiết của thông điệp nhật ký chữ ký - ví dụ:

# Can also be set using the AUTOGRAPH_VERBOSITY environment variable
tf.autograph.set_verbosity(1)

v0.12 + Cập nhật (5/20/17), Hoạt động qua TF 2.0+:

Trong TensorFlow 0.12+, theo vấn đề này , giờ đây bạn có thể kiểm soát việc ghi nhật ký thông qua biến môi trường được gọi là TF_CPP_MIN_LOG_LEVEL; nó mặc định là 0 (tất cả các bản ghi được hiển thị) nhưng có thể được đặt thành một trong các giá trị sau trong Levelcột.

  Level | Level for Humans | Level Description                  
 -------|------------------|------------------------------------ 
  0     | DEBUG            | [Default] Print all messages       
  1     | INFO             | Filter out INFO messages           
  2     | WARNING          | Filter out INFO & WARNING messages 
  3     | ERROR            | Filter out all messages      

Xem ví dụ hệ điều hành chung sau bằng Python:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # or any {'0', '1', '2'}
import tensorflow as tf

Để được kỹ lưỡng, bạn gọi cũng đặt mức cho tf_loggingmô-đun Python , được sử dụng trong ví dụ: ops tóm tắt, bảng liệt kê, các công cụ ước tính khác nhau, v.v.

# append to lines above
tf.logging.set_verbosity(tf.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}

Đối với 1.14, bạn sẽ nhận được cảnh báo nếu bạn không thay đổi để sử dụng API v1 như sau:

# append to lines above
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}


Đối với các phiên bản trước của Nhật ký TensorFlow hoặc TF-Learn (v0.11.x trở xuống):

Xem trang bên dưới để biết thông tin về ghi nhật ký TensorFlow; với bản cập nhật mới, bạn có thể thiết lập tính cách rườm rà khai thác gỗ hoặc là DEBUG, INFO, WARN, ERROR, hoặc FATAL. Ví dụ:

tf.logging.set_verbosity(tf.logging.ERROR)

Ngoài ra, trang còn đi qua các màn hình có thể được sử dụng với các mô hình TF-Learn. Đây là trang .

Tuy nhiên, điều này không chặn tất cả việc ghi nhật ký (chỉ TF-Learn). Tôi có hai giải pháp; một là giải pháp 'đúng về mặt kỹ thuật' (Linux) và giải pháp còn lại liên quan đến việc xây dựng lại TensorFlow.

script -c 'python [FILENAME].py' | grep -v 'I tensorflow/'

Mặt khác, xin vui lòng xem câu trả lời này liên quan đến sửa đổi nguồn và xây dựng lại TensorFlow.


các thông điệp "Tôi căng thẳng" có thể gây phiền nhiễu, tf nên cung cấp một số cách để tắt tiếng chúng bằng cách sử dụng api thay vì xây dựng lại
nhà vật lý

2
Điều này cũng có thể được thực hiện từ dòng lệnh:export TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py
Andrew Hundt

Nó cũng có thể được chạy dưới dạngTF_CPP_MIN_LOG_LEVEL="3" python your_code.py
craymichael

Có cách nào để biến cảnh báo / lỗi dòng chảy thành lỗi không?
CMCDragonkai

1
tf.logging.set_verbosity (tf.logging.ERROR) # hoặc bất kỳ {DEBUG, INFO, WARN, ERROR, FATAL} đã làm việc cho tôi
Amir Md Amiruzzaman

16

Tôi cũng đã có vấn đề này (trên tensorflow-0.10.0rc0), nhưng không thể khắc phục vấn đề đăng nhập kiểm tra mũi quá mức thông qua các câu trả lời được đề xuất.

Tôi quản lý để giải quyết điều này bằng cách thăm dò trực tiếp vào logger dòng chảy. Không phải là sửa lỗi chính xác nhất, nhưng hoạt động rất tốt và chỉ gây ô nhiễm các tệp thử nghiệm nhập trực tiếp hoặc gián tiếp dòng chảy căng thẳng:

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)

1
Làm việc cho tôi, trong khi giải pháp TF_CPP_MIN_LOG_LEVEL thì không. Suy nghĩ tốt!
chịu lỗi

Chỉ có giải pháp hiệu quả với tôi với tenorflow 1.12.
BiBi

Sử dụng tensorflow-gpu 1.14.0. Nhận được kết quả đầu ra này khi được gọi là hàm trên The name tf.logging.set_verbosity is deprecated. Please use tf.compat.v1.logging.set_verbosity instead. WARNING:tensorflow:From C:/.../NN.py:297: The name tf.logging.ERROR is deprecated. Please use tf.compat.v1.logging.ERROR instead. Vui lòng rằng không có cảnh báo nào sau các tin nhắn này
A.Ametov


10

Vì tôi TF_CPP_MIN_LOG_LEVELkhông làm việc nên tôi có thể thử:

tf.logging.set_verbosity(tf.logging.WARN)

Làm việc cho tôi trong tenorflow v1.6.0


6

Trình quản lý nhật ký python3 thông thường hoạt động với tôi với tenorflow == 1.11.0:

import logging
logging.getLogger('tensorflow').setLevel(logging.INFO)

4

Tôi đã giải quyết với bài đăng này Không thể xóa tất cả các cảnh báo # 27045 và giải pháp là:

import logging
logging.getLogger('tensorflow').disabled = True

3
không hoạt động cho FutureWarnings trong quá trình nhập tf, tf = 1.13.1 py3
ffeast

2
Chỉ điều này làm việc cho tôi! Cấu hình của tôi: Keras '2.2.4' (sử dụng tf 1.15.0) và Python
3.7.4

2

Để thêm tính linh hoạt ở đây, bạn có thể đạt được sự kiểm soát chi tiết hơn đối với mức độ ghi nhật ký bằng cách viết một chức năng lọc ra các tin nhắn theo cách bạn muốn:

logging.getLogger('tensorflow').addFilter(my_filter_func)

trong đó my_filter_funcchấp nhận một LogRecordđối tượng làm đầu vào [ LogRecorddocs ] và trả về 0 nếu bạn muốn thông báo bị loại bỏ; khác không.

Đây là một bộ lọc ví dụ chỉ giữ mọi thông báo thông tin thứ n (Python 3 do sử dụng nonlocalở đây):

def keep_every_nth_info(n):
    i = -1
    def filter_record(record):
        nonlocal i
        i += 1
        return int(record.levelname != 'INFO' or i % n == 0)
    return filter_record

# Example usage for TensorFlow:
logging.getLogger('tensorflow').addFilter(keep_every_nth_info(5))

Tất cả những điều trên đã cho rằng TensorFlow đã thiết lập trạng thái đăng nhập của nó rồi. Bạn có thể đảm bảo điều này mà không có tác dụng phụ bằng cách gọi tf.logging.get_verbosity()trước khi thêm bộ lọc.


2

Vâng, tôi đang sử dụng tf 2.0-beta và muốn bật / tắt ghi nhật ký mặc định. Biến môi trường và phương thức trong tf1.X dường như không còn tồn tại nữa.

Tôi đã đi vòng quanh trong PDB và thấy điều này hoạt động:

# close the TF2 logger
tf2logger = tf.get_logger()
tf2logger.error('Close TF2 logger handlers')
tf2logger.root.removeHandler(tf2logger.root.handlers[0])

Sau đó tôi thêm API logger của riêng mình (trong trường hợp này là dựa trên tệp)

logtf = logging.getLogger('DST')
logtf.setLevel(logging.DEBUG)

# file handler
logfile='/tmp/tf_s.log'
fh = logging.FileHandler(logfile)
fh.setFormatter( logging.Formatter('fh %(asctime)s %(name)s %(filename)s:%(lineno)d :%(message)s') )
logtf.addHandler(fh)
logtf.info('writing to %s', logfile)

2

đối với tenorflow 2.1.0, đoạn mã sau hoạt động tốt.

import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

2

Nếu bạn chỉ cần loại bỏ các đầu ra cảnh báo trên màn hình , bạn có thể muốn xóa màn hình giao diện điều khiển ngay sau khi nhập dòng căng bằng cách sử dụng lệnh đơn giản này (Hiệu quả hơn là vô hiệu hóa tất cả nhật ký gỡ lỗi trong trải nghiệm của tôi):

Trong cửa sổ:

import os
os.system('cls')

Trong Linux hoặc Mac:

import os
os.system('clear')

0

Không có giải pháp nào ở trên có thể giải quyết vấn đề của tôi trong Jupyter Notebook, vì vậy tôi sử dụng đoạn mã dưới đây từ Cicoria và các vấn đề đã được giải quyết.

import warnings  
with warnings.catch_warnings():  
    warnings.filterwarnings("ignore",category=FutureWarning)
    import tensorflow as tf
    from tensorflow import keras
    from tensorflow.keras.preprocessing.text import Tokenizer

print('Done') 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.