Google發布tfdbg:讓TensorFlow機器學習調試更簡單

ADVERTISEMENT

選自Google Blog

作者:蔡善清

參與:李澤南、李亞洲

隨著 2 月 16 日Google開發者大會上 TensorFlow1.0 的發布,這一最流行的深度學習框架邁進了新的時代。昨天,Google宣布開源 TensorFlow Debugger,一個專用於調試TensorFlow 代碼的新工具,希望以此讓開發者們能夠更輕鬆地構建機器學習項目。

今天,我們很高興發布 TensorFlow Debugger:一個讓 TensorFlow 中機器學習模型變得容易的工具。

地址:https://www.tensorflow.org/programmers_guide/debugger

TensorFlow 是Google開源的機器學習框架,它基於數據流圖。構建一個典型的 TensorFlow 機器學習項目需要經歷兩個步驟:

ADVERTISEMENT

1. 使用 Python API 將機器學習模型設置為數據流圖。

2. 使用 Session.run() 對這個流圖進行訓練或應用。

此前,如果在第二階段出現了錯誤和 bug(如 TensorFlow runtime),我們很難進行 debug 工作。

為了了解這種情況,請注意標準的 Python debugger,Session.run() 調用是一個單獨的語句,不會暴露流圖的內部結構(節點及其連接)和狀態(輸出數組或節點的張量)。一些低級的 debugger,如 gdb 無法理解 TensorFlow 流圖的堆棧結構和變量值。所以,一個專用的運行環境調試器(debugger)是目前 TensorFlow 用戶所急需的工具。

tfdbg 的出現完美解決了運行環境調試器的需求。讓我們看看它在一個簡短的,用於運行簡單線性方程梯度下降的代碼片段中的表現。

import numpy as npimport tensorflow as tfimport tensorflow.python.debug as tf_debugxs = 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 命令,你可以在「步進模式」中執行

ADVERTISEMENT

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 的設計。

ADVERTISEMENT

論文:TensorFlow Debugger: Debugging Dataflow Graphs for Machine Learning

摘要:可調試性在機器學習系統的開發中非常重要。包括 TensorFlow 和 Theano 在內的多個普遍使用的機器學習框架都是基於數據流圖的(dataflow graph)。雖然數據流圖能提供分布式訓練這樣的便利,但這種範式也使得模型問題的 debugg 相比於傳統的程序式模型的 debugg 更難。在此論文中,我們提出了 TensorFlow Debugger(tfdbg) 設計,為

TensorFlow 中的機器學習模型專門設計的 debugger。tfdbg 提供的特徵包括檢驗運行時數據流圖和媒介圖形元素(張量,trensors),以及模擬在圖上的步驟。我們將會討論該 debugger 在開發和測試使用案例中的應用。

論文地址:https://research.google.com/pubs/pub45789.html

ADVERTISEMENT