當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.debugging.experimental.enable_dump_debug_info用法及代碼示例


啟用從 TensorFlow 程序轉儲調試信息。

用法

tf.debugging.experimental.enable_dump_debug_info(
    dump_root, tensor_debug_mode=DEFAULT_TENSOR_DEBUG_MODE,
    circular_buffer_size=1000, op_regex=None, tensor_dtypes=None
)

參數

  • dump_root 將寫入轉儲信息的目錄路徑。
  • tensor_debug_mode 張量值的調試模式,作為字符串。當前支持的選項有:
    • "NO_TENSOR":(默認)僅跟蹤所有已執行操作的輸出張量(包括那些在 Python 級別即刻執行或作為 TensorFlow 圖的一部分執行的操作)和函數,而不從張量的值中提取任何信息。
    • "CURT_HEALTH":對於每個floating-dtype張量(例如,dtypes的張量,如float32 , float64bfloat16),提取一個二進製位,指示它是否包含任何-infinity、+infinity或NaN。
    • "CONCISE_HEALTH":對於每個 floating-dtype 張量,提取總元素計數,以及 -infinity、+infinity 和 NaN 元素的計數。
    • "FULL_HEALTH":對於每個 floating-dtype 張量,提取 dtype、rank(維數)、總元素計數以及 -infinity、+infinity 和 NaN 元素的計數。
    • "SHAPE":對於每個張量(不考慮 dtype),提取其 dtype、rank、總元素數和形狀。
  • circular_buffer_size 執行事件的循環緩衝區的大小。這些循環緩衝區旨在減少調試轉儲的開銷。它們保存有關即刻執行操作和 tf.function s 以及在 tf.function s 內計算的張量值的跟蹤的最新調試事件。僅當調用正確的刷新方法時才將它們寫入文件係統(請參見下麵的返回值說明)。預計為整數。如果
  • op_regex 僅從與正則表達式匹配的操作類型的張量中轉儲數據(通過 Python 的re.match())。 "Op type" 指的是 TensorFlow 操作的名稱(例如,"MatMul"、"LogSoftmax"),它們可能在 TensorFlow 函數中重複。它確實不是指的是函數中唯一的節點名稱(例如,"dense/MatMul"、"dense_1/MatMul_1")。
    • 示例 1:僅從 MatMul 和 Relu ops op_regex="^(MatMul|Relu)$" 轉儲張量數據。
    • 示例 2:轉儲除 Relu 之外的所有操作的張量:op_regex="(?!^Relu$)"。此過濾器與 tensor_dtypes 以邏輯 AND 關係運行。
  • tensor_dtypes 僅從指定 dtypes 的張量中轉儲數據。此可選參數可以采用以下任何格式:
    • 的列表或元組DType可以轉換為的對象或字符串DType對象通過tf.as_dtype().例子:
      • tensor_dtype=[tf.float32, tf.float64] ,
      • tensor_dtype=["float32", "float64"] ,
      • tensor_dtypes=(tf.int32, tf.bool) ,
      • tensor_dtypes=("int32", "bool")
    • 一個可調用的,需要一個DType參數並返回一個 Pythonboolean指示是否將 dtype 包含在數據轉儲中。例子:
      • tensor_dtype=lambda dtype:dtype.is_integer 。此過濾器與 op_regex 以邏輯 AND 關係運行。

返回

  • 轉儲回調使用的 DebugEventsWriter 實例。調用者可以使用其刷新方法,包括 FlushNonExecutionFiles()FlushExecutionFiles()

調試信息被轉儲到指定為 dump_root 的文件係統上的目錄中。

調試器 UI 可以提取轉儲的調試信息。

轉儲目錄中的文件包含以下信息:

  • TensorFlow 函數構造(例如,用 @tf.function 修飾的 Python 函數的編譯)、操作類型、名稱(如果可用)、上下文、輸入和輸出張量以及相關的堆棧跟蹤。
  • TensorFlow 操作 (ops) 和函數的執行及其堆棧跟蹤、操作類型、名稱(如果可用)和上下文。此外,根據 tensor_debug_mode 參數的值(參見下麵的 Args 部分),輸出張量的值或更簡潔的張量值摘要將被轉儲。
  • 執行 TensorFlow 程序所涉及的 Python 源文件的快照。

啟用後,可以使用同一 Python 命名空間下的相應 disable_dump_debug_info() 方法禁用轉儲。使用相同的dump_root 多次調用此方法是冪等的。使用不同的 tensor_debug_mode 多次調用此方法會導致 ValueError 。使用不同的 circular_buffer_size 多次調用此方法會導致 ValueError 。使用不同的 dump_root 調用此方法會取消 previously-enabled dump_root

使用示例:

tf.debugging.experimental.enable_dump_debug_info('/tmp/my-tfdbg-dumps')

# Code to build, train and run your TensorFlow model...

注意:如果您的代碼在 TPU 上運行,請務必在調用 tf.debugging.experimental.enable_dump_debug_info() 之前調用 tf.config.set_soft_device_placement(True),因為此 API 在 TPU 上使用自動外部編譯。例如:

tf.config.set_soft_device_placement(True)
tf.debugging.experimental.enable_dump_debug_info(
    logdir, tensor_debug_mode="FULL_HEALTH")

resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')
strategy = tf.distribute.TPUStrategy(resolver)
with strategy.scope():
  # ...

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.debugging.experimental.enable_dump_debug_info。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。