随着 2 月 16 日谷歌开发者大会 上 TensorFlow1.0 的发布,这一最流行的深度学习框架迈进了新的时代。昨天,谷歌宣布开源 TensorFlow Debugger,一个专用于调试TensorFlow 代码的新工具,希望以此让开发者们能够更轻松地构建机器学习项目。
今天,我们很高兴发布 TensorFlow Debugger:一个让 TensorFlow 中机器学习模型变得容易的工具。
地址:https://www.tensorflow.org/programmers_guide/debugger
TensorFlow 是谷歌开源的机器学习框架,它基于数据流图。构建一个典型的 TensorFlow 机器学习项目需要经历两个步骤:
1. 使用 Python API 将机器学习模型设置为数据流图。
2. 使用 Session.run() 对这个流图进行训练或应用。
此前,如果在第二阶段出现了错误和 bug(如 TensorFlow runtime),我们很难进行 debug 工作。
为了了解这种情况,请注意标准的 Python debugger,Session.run() 调用是一个单独的语句,不会暴露流图的内部结构(节点及其连接)和状态(输出数组或节点的张量)。一些低级的 debugger,如 gdb 无法理解 TensorFlow 流图的堆栈结构和变量值。所以,一个专用的运行环境调试器(debugger)是目前 TensorFlow 用户所急需的工具。
tfdbg 的出现完美解决了运行环境调试器的需求。让我们看看它在一个简短的,用于运行简单线性方程梯度下降的代码片段中的表现。
import numpy as np import tensorflow as tf import tensorflow.python.debug as tf_debug xs = np.linspace(-0.5, 0.49, 100) x = tf.placeholder(tf.float32, shape=[None], name="x") y = tf.placeholder(tf.float32, shape=[None], name="y") k = tf.Variable([0.0], name="k") y_hat = tf.multiply(k, x, name="y_hat") sse = tf.reduce_sum((y - y_hat) * (y - y_hat), name="sse") train_op = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(sse) sess = tf.Session() sess.run(tf.global_variables_initializer()) sess = tf_debug.LocalCLIDebugWrapperSession(sess) for _ in range(10): sess.run(train_op, feed_dict={x: xs, y: 42 * xs})
正如代码高亮处所示,会话对象被包装为 debugging(LocalCLIDebugWrapperSession),因此调用 run() 方式将启动 tfdbg 的命令行界面(CLI)。使用鼠标点击或输入命令,你可以继续进行连续调用,检查流图节点和它们的属性,通过中间张量显示流图中执行所有相关节点的完整历史记录。通过使用 invoke_stepper 命令,你可以在「步进模式」中执行 Session.run() 调用。在该模式下,您可以跳转到所选节点,观察和修改它们的输出,然后继续检查下一步,这类似于程序语言的 debug(就像在 gdb 或 pdb 中)。
在开发 TensorFlow 机器学习模型时,我们经常会遇到的问题是由于溢出、被零除、log0 等情况下出现的错误值(无穷大和 NaN)在大型 TensorFlow 流图中,寻找这样的错误是费时费力的。但现在通过 tfdbgCLI,你可以很快地找到罪魁祸首。以下视频展示了如何使用 tfdbg 解决神经网络代码中的无穷大/NaN 问题。
相比于其他 debug 选择,比如 Print Ops,tfdbg 需要更少的代码行变化,还能提供对 graph 更全面的覆盖,以及更交互的 debug 体验。tfdbg 能够加速模型开发、debug 工作流程。它还提供了其他的特征,比如对服务器环境中废弃张量(dumped tensors)的离线 debug,还有融合 tf.contrib.learn 的特征。在你开始的时候,可以先浏览这一文档:
https://www.tensorflow.org/programmers_guide/debugger。
运行 tfdbg 需求的 TensorFlow 最低版本是 0.12.1。报告 bug 时,请在 Github 上 TensorFlow 的问题页面开个问题。
以下论文详细展示了 tfdbg 的设计。
论文:TensorFlow Debugger: Debugging Dataflow Graphs for Machine Learning
摘要:可调试性在机器学习系统的开发中非常重要。包括 TensorFlow 和 Theano 在内的多个普遍使用的机器学习框架都是基于数据流图的(dataflow graph)。虽然数据流图能提供分布式训练这样的便利,但这种范式也使得模型问题的 debugg 相比于传统的程序式模型的 debugg 更难。在此论文中,我们提出了 TensorFlow Debugger(tfdbg) 设计,为 TensorFlow 中的机器学习模型专门设计的 debugger。tfdbg 提供的特征包括检验运行时数据流图和媒介图形元素(张量,trensors),以及模拟在图上的步骤。我们将会讨论该 debugger 在开发和测试使用案例中的应用。