TensorBoard

TensorBoard 是一套用於偵錯、優化及瞭解 TensorFlow、PyTorch、Hugging Face Transformers 和其他機器學習程式的可視化工具。

使用 TensorBoard

在 Azure Databricks 中啟動 TensorBoard 與在本機電腦上的 Jupyter Notebook 上啟動它並無不同。

  1. %tensorboard載入 magic 命令並定義您的記錄目錄。

    %load_ext tensorboard
    experiment_log_dir = <log-directory>
    
  2. 叫用 %tensorboard magic命令。

    %tensorboard --logdir $experiment_log_dir
    

    TensorBoard 伺服器會啟動,並在筆記本中內嵌顯示使用者介面。 它也提供連結,以在新索引卷標中開啟 TensorBoard。

    下列螢幕快照顯示已填入記錄目錄中啟動的 TensorBoard UI。

    TensorBoard UI 在填入的記錄檔目錄中啟動

您也可以直接使用 TensorBoard 的筆記本模組來啟動 TensorBoard。

from tensorboard import notebook
notebook.start("--logdir {}".format(experiment_log_dir))

TensorBoard 記錄和目錄

TensorBoard 會藉由讀取 TensorBoard 回呼和 TensorBoardPyTorch 中的函式所產生的記錄,將機器學習程式可視化。 若要產生其他機器學習連結庫的記錄,您可以使用 TensorFlow 檔案寫入器直接寫入記錄(請參閱 TensorFlow 2.x 的模組:tf.summary,請參閱 TensorFlow 1.x 中舊版 API 的模組:tf.compat.v1.summary

為了確保實驗記錄能可靠地儲存,Databricks 建議將記錄寫入雲端記憶體,而不是在暫時叢集文件系統上。 針對每個實驗,請在唯一目錄中啟動 TensorBoard。 針對產生記錄的實驗中每一次執行機器學習程序代碼,請將 TensorBoard 回呼或檔案寫入器設定為寫入實驗目錄的子目錄。 如此一來,TensorBoard UI 中的數據就會分成執行。

閱讀官方 TensorBoard 檔 ,以開始使用 TensorBoard 來記錄機器學習計畫的資訊。

管理 TensorBoard 程式

在 Azure Databricks 筆記本內啟動的 TensorBoard 進程不會在中斷連結或重新啟動 REPL 時終止(例如,當您清除筆記本的狀態時)。 若要手動終止 TensorBoard 進程,請使用 %sh kill -15 pid傳送終止訊號。 不當終止的 TensorBoard 進程可能會損毀 notebook.list()

若要列出目前在您的叢集上執行的 TensorBoard 伺服器,及其對應的記錄目錄和進程標識碼,請從 TensorBoard 筆記本模組執行 notebook.list()

已知問題

  • 內嵌 TensorBoard UI 位於 iframe 內。 除非您在新索引標籤中開啟連結,否則瀏覽器安全性功能會防止UI中的外部連結運作。
  • --window_title TensorBoard 的選項會在 Azure Databricks 上覆寫。
  • 根據預設,TensorBoard 會掃描埠範圍,以選取要接聽的埠。 如果叢集上執行太多 TensorBoard 進程,埠範圍中的所有埠可能無法使用。 您可以使用 自變數來指定埠號碼 --port ,藉此解決這項限制。 指定的埠應介於 6006 和 6106 之間。
  • 若要讓下載鏈接能夠運作,您必須在索引標籤中開啟 TensorBoard。
  • 使用 TensorBoard 1.15.0 時,投影機索引卷標是空白的。 因應措施是,若要直接流覽投影機頁面,您可以將URL中的取代 #projectordata/plugin/projector/projector_binary.html
  • TensorBoard 2.4.0 有已知 問題 ,如果升級,可能會影響 TensorBoard 轉譯。
  • 如果您要將 TensorBoard 相關資料記錄至 DBFS 或 UC 磁碟區,您可能會收到類似 的錯誤 No dashboards are active for the current data set。 若要克服此錯誤,建議您在使用 writer 來記錄資料之後呼叫 writer.flush()writer.close() 。 這可確保所有記錄的數據都已正確寫入,並可供 TensorBoard 轉譯。