• 恒源云GPU使用tensorboard || 以OpenMMLab系列为例 || 定时复制可视化日志


    序言

    在训练过程中使用可视化工具向来是很有效的。相比于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')
    
    • 1
    • 2
    • 3

    如上,在vis_backends中加上tensorboard可视化后端。
    然后,在work_dir的vis_data的输出中就会出现一个可以被tensorboard读取的格式的日志了。
    日志
    但是,现在的问题是,即使这样,由于恒源云的Tensorboard也读取不到日志,因为不在/tf_logs中。我们可以采取直接的方法。

    日志可视化到Tensorboard

    这种更加直接的方式就是复制。

    cp -r vis_data /tf_logs/
    
    • 1

    这样再进入恒源云的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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    这就是我在面对恒源云的Tensorboard用不成的情况下的解决方案。这种复制的方法虽然很糙,但是想必泛用型也是比较强的,其他的框架或者体系在遇到这种情况的时候也可以靠考虑采用定时复制的方案。
    如果你有更好更方便的想法欢迎交流。

  • 相关阅读:
    OOP课第二阶段总结
    数据结构(九)顺序栈
    安全模型在企业中的应用
    【智能优化算法-灰狼算法】基于翻筋斗觅食策略的灰狼优化算法求解单目标优化问题附matlab代码
    GSAman | 我「玩着游戏」就把「科研做了」
    python基础语法(一)
    前端面试的话术集锦第 21 篇博文——高频考点(设计模式)
    【智慧导诊系统源码】智慧导诊系统的技术支撑与实际运作
    Rust原子类型和内存排序
    springboot配置注入增强(三)自定义数据源/自定义解析方法
  • 原文地址:https://blog.csdn.net/raw_inputhello/article/details/132915607