当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。