序言
在训练过程中使用可视化工具向来是很有效的。相比于shell中的输出,可视化能够更好地向我们展现在训练过程中各项指标的变化。
但是,由于深度学习所需要的设备性能要求较高,我们常常使用云GPU进行训练。但是一些云平台的可视化工具让人摸不着头脑,现在我以OpenMMLab开源视觉算法体系的MMDetection算法库为例,介绍在恒源云中使用TensorBoard。
恒源云TensorBoard的使用方式
恒源云将Tensorboard的日志文件夹绑定在了/tf_log
文件夹中,自己无法开启另外的Tensorboard后端,并且即使开启,由于恒源云GPU没有提供公网下的端口,也无法访问到。
恒源云有自己预设的Tensorboard,对于使用者来说,需要做的就是将tensorboard所需的日志输出到/tf_log
这个文件夹下,这样之后,就可以在恒源云的实例启动部分开启Tensorboard界面并得到日志可视化结果了。
但是,在实际情况下我们经常是使用一些更大的,别人写好的框架进行训练,这时如果我们对他们的框架不够熟悉就难以修改Tensorboard所需日志的输出地址,那么我们应该怎么做呢?下面以OpenMMLab为例进行演示。
MMDetection开启Tensorboard
首先,我们可以在OpenMMLab的算法库的文档中找到如何输出一个可视化工具所需要的日志。就是在default_runtime.py
中加上TensorBoard这个可视化后端(默认是本地可视化,应该是完了之后手动提取一些信息来可视化用的)。
vis_backends = [dict(type='LocalVisBackend'),dict(type='TensorboardVisBackend')]
visualizer = dict(
type='DetLocalVisualizer', vis_backends=vis_backends, name='visualizer')
如上,在vis_backends
中加上tensorboard可视化后端。
然后,在work_dir的vis_data的输出中就会出现一个可以被tensorboard读取的格式的日志了。
但是,现在的问题是,即使这样,由于恒源云的Tensorboard也读取不到日志,因为不在/tf_logs
中。我们可以采取直接的方法。
日志可视化到Tensorboard
这种更加直接的方式就是复制。
cp -r vis_data /tf_logs/
这样再进入恒源云的Tensorboard前端页面就已经有可视化结果了。
但是这样还不够,我们需要能够比较实时地查看训练的效果,当然不能够一直手操。
所以我们可以写一个shell脚本用于每隔30秒复制一次,并且tensorboard的刷新时间也设置为30s,不就可以做到和直接输出到/tf_logs
详尽的结果了?
#!/bin/bash
while true; do
echo "开始复制文件夹..."
cp -r vis_data /tf_logs/
echo "文件夹复制完成!"
echo "等待30秒..."
sleep 30s
done
这就是我在面对恒源云的Tensorboard用不成的情况下的解决方案。这种复制的方法虽然很糙,但是想必泛用型也是比较强的,其他的框架或者体系在遇到这种情况的时候也可以靠考虑采用定时复制的方案。
如果你有更好更方便的想法欢迎交流。