当 Tensorboard 尝试重用已杀死的 Windows PID 时如何重置它

How to reset Tensorboard when it tries to reuse a killed Windows PID

如果两天的挫败感泄露出去,我们深表歉意...

问题:无法可靠地运行 jupyter notebook 中的 Tensorboard(实际上是在 Jupyter Lab 中)

%tensorboard --logdir {logdir}

如果我终止 tensorboard 进程并在 notebook 中重新启动它说它正在重用死进程和端口,但是进程已经死了并且 netstat -ano | findstr :6006` 什么也没显示,所以端口看起来也关闭了。

问题:以$deity的名义,我如何让tensorboard从头开始重新启动并忘记它认为它知道的关于进程、端口等的信息?如果我能做到这一点,我就可以解决剩余路径等问题...

已知问题已经解决(我认为:需要转义Python字符串中的反斜杠以获得正确的路径和其他 OS 个小精灵;避免路径中的空格,确保大小写正确...

环境: Win 64-bit Home with Anaconda and Tensforflow-GPU 2 installed via conda install - TF正在工作并将数据写入通过回调给定的指定路径

tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1) # logdir is the full path

但如果我能在笔记本中可靠地启动 Tensorboard,我就该死了。

我发现如果我启动一个 Anaconda 命令 window 并从那里调用 tensorboard tensorboard 就可以启动...

(TF2GPU_Anaconda) C:\Users\Julian>tensorboard --logdir "a:\tensorboard200102-112749"
2020-01-02 11:53:58.478848: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.0.0 at http://localhost:6006/ (Press CTRL+C to quit)

它在 localhost:6006 的 Chrome 中可以访问(具体来说 http://localhost:6006/#scalars&run=20200102-112749%5Ctrain)(我将忽略张量板的 other 问题例如标量上的刷新失败、图形上的奇怪消息等)

%tensorboard --logdir {logdir}

然后在笔记本和单独的 chrome 选项卡中显示 tensorboard。

但是! 虽然 tensorboard 在笔记本中报告它正在重用旧的死 PID,但实际上它是在一个完全不同的新 PID 上

我做错了什么,如何完全重置 tensorboard?

PS 最后一次(成功!)调用实际上是

%tensorboard --logdir {makeWindowsCmdPath('A:\tensorboard\20200102-112749')}

其中 makeWindowsCmdPath 定义为

def makeWindowsCmdPath(path):
    return '\"' + str(path) + '\"'

更新 2020-01-03 最终成功的 MWE 已在 Github 的评论中上传,以响应包含 PID 引用错误的问题张量板

嘿——很遗憾得知您 运行 遇到了问题。完全是 合理的是你所描述的一切都是准确的,而且是我的 过错。 :-)

How in the name of $deity do I get tensorboard to restart from scratch and forget what it thinks it knows about processes, ports etc.? If I could do that I could hack away at residual path etc. issues...

您的临时目录中有一个名为 .tensorboard-info 的目录 它维护着我们的 TensorBoard 作业的最大努力注册表 认为是运行。当 TensorBoard 启动时(以任何方式,包括 使用 %tensorboard),它将一个“信息文件”写入该目录,并且 当您使用 %tensorboard 时,我们首先检查是否有“兼容 instance”(相同的工作目录和 CLI args)仍然是 运行,如果 所以重用它。当 TensorBoard 实例干净地关闭时,它 删除自己的信息文件。这个想法是只要 TensorBoard 是 干净地关闭我们应该始终有一个准确的记录 进程是实时的,并且由于此注册表位于任何临时目录中 硬关机导致的错误将是短暂的。

但这就是我犯错的地方:来自 POSIX 世界而不是 非常熟悉 Windows 应用程序开发,我没有意识到 Windows 临时目录实际上并没有自动删除, 曾经。因此,任何簿记错误都会无限期地存在。

所以,你的问题的答案是,“删除 .tensorboard-info 位于 tempfile.gettempdir() 下的目录”(最好是当你 没有任何活跃的 运行 TensorBoard 实例)。

我们可以通过多种方式在 TensorBoard 中合理地解决这个问题 核心:参见 https://github.com/tensorflow/tensorboard/issues/2483 开始,我也考虑过分摊的方法,比如让每个 TensorBoard 实例在启动时对其他实例执行一些清理 时间。我们还没有开始实施这些。

让我知道这是否有帮助,或者是否无法解决您的问题。