启用从 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
,float64
和bfloat16
),提取一个二进制位,指示它是否包含任何-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 关系运行。
- 示例 1:仅从 MatMul 和 Relu ops
-
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():
# ...
相关用法
- Python tf.debugging.enable_check_numerics用法及代码示例
- Python tf.debugging.assert_type用法及代码示例
- Python tf.debugging.check_numerics用法及代码示例
- Python tf.debugging.Assert用法及代码示例
- Python tf.debugging.set_log_device_placement用法及代码示例
- Python tf.debugging.assert_shapes用法及代码示例
- Python tf.device用法及代码示例
- Python tf.distribute.OneDeviceStrategy.experimental_distribute_values_from_function用法及代码示例
- Python tf.data.Dataset.take_while用法及代码示例
- Python tf.data.experimental.RandomDataset.group_by_window用法及代码示例
- Python tf.data.TFRecordDataset.filter用法及代码示例
- Python tf.data.TextLineDataset.reduce用法及代码示例
- Python tf.data.TextLineDataset.with_options用法及代码示例
- Python tf.data.experimental.SqlDataset.enumerate用法及代码示例
- Python tf.data.TextLineDataset.as_numpy_iterator用法及代码示例
- Python tf.data.experimental.make_saveable_from_iterator用法及代码示例
- Python tf.distribute.TPUStrategy用法及代码示例
- Python tf.data.TextLineDataset.random用法及代码示例
- Python tf.data.FixedLengthRecordDataset.repeat用法及代码示例
- Python tf.data.TFRecordDataset.random用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.debugging.experimental.enable_dump_debug_info。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。