TensorBoard

TensorBoard 是一套可视化效果工具,用于调试、优化和了解 TensorFlow、PyTorch、Hugging Face Transformers 和其他机器学习程序。

使用 TensorBoard

在 Azure Databricks 中启动 TensorBoard 与在本地计算机上的 Jupyter 笔记本中启动它没有什么不同。

  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 通过读取 TensorBoardPyTorch 中的 TensorBoard 回调和函数生成的日志来可视化你的机器学习程序。 若要为其他机器学习库生成日志,可以使用 TensorFlow 文件编写器直接编写日志(对于 TensorFlow 2.x,请参阅模块:tf.summary,而对于 TensorFlow 1.x 中的较旧 API,请参阅模块:tf.compat.v1.summary)。

若要确保可靠地存储试验日志,Databricks 建议将日志写入到云存储,而不是写入到临时的群集文件系统。 对于每个试验,请在唯一目录中启动 TensorBoard。 对于生成日志的试验中的机器学习代码的每次运行,请将 TensorBoard 回调或文件编写器设置为写入到试验目录的子目录。 这样,TensorBoard UI 中的数据就会被分隔到运行中。

阅读官方 TensorBoard 文档,开始使用 TensorBoard 来记录你的机器学习程序的信息。

管理 TensorBoard 进程

当 Azure Databricks 笔记本拆离或 REPL 重启时(例如,当你清除笔记本的状态时),笔记本中启动的 TensorBoard 进程不会终止。 若要手动终止 TensorBoard 进程,请使用 %sh kill -15 pid 向其发送终止信号。 不正确地终止 TensorBoard 进程可能会损坏 notebook.list()

若要列出群集上当前运行的 TensorBoard 服务器及其相应的日志目录和进程 ID,请从 TensorBoard 笔记本模块运行 notebook.list()

已知问题

  • 内联 TensorBoard UI 位于一个 iframe 中。 浏览器安全功能会妨碍 UI 内的外部链接生效,除非你在新标签页中打开此类链接。
  • TensorBoard 的 --window_title 选项在 Azure Databricks 上被替代。
  • 默认情况下,TensorBoard 会扫描一个端口范围来选择要侦听的端口。 如果在群集上运行的 TensorBoard 进程太多,则并非端口范围内的所有端口都可用。 可以通过使用 --port 参数指定端口号来解决此限制。 指定的端口应介于 6006 到 6106 之间。
  • 为了使下载链接生效,必须在标签页中打开 TensorBoard。
  • 当使用 TensorBoard 1.15.0 时,“投影仪”选项卡为空。 可以将 URL 中的 #projector 替换为 data/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 呈现。