1. 每个实验保存完整config + wandb远程追踪

还在给model取巨长的文件名来记录其超参吗?out了。wandb可以把config和结果曲线同步云端供横向评比和查看。同步云端的代码:

def wandb_init(cfg: DictConfig):wandb.init(project='best paper',group=cfg.exp_group,name=cfg.exp_name,notes=cfg.exp_desc,save_code=True,config=OmegaConf.to_container(cfg, resolve=True))OmegaConf.save(config=cfg, f=os.path.join(cfg.ckpt_dir, 'conf.yaml'))

这里的OmegaConf下面会讲到。想不起来某个实验的model存在哪了?看wandb的界面查找每个config值

wandb 查看config

对应每个实验的curves

wandb查看曲线

2. Hydra+OmegaConf配置管理

OmegaConf是Meta出的配置管理工具,可将yaml文件转成有对应变量名的Python的class或dict。支持默认值、合并和override、导出成yaml或json等,十分好用。你再也不用手写配置管理了。

比如:

blob_root: /yjblob
exp_name: best_paper_2
ckpt_dir: ${.blob_root}/${.exp_name}/ckpt
log_dir: ${.blob_root}/${.exp_name}/log

上面是config.yaml的片段,OmegaConf.resolve(cfg) 一句即可把blob_root和exp_name 的值填进 ckpt_dir里。而普通的yaml是不支持变量的。

Hydra是Meta出的实验提交工具,支持在命令行里动态修改OmegaConf里面的数值。Hydra支持一个config里引用另一个config,于是你可以很容易的切换用db=mysql还是db=postgresql:

├── conf
│   ├── config.yaml
│   ├── db
│   │   ├── mysql.yaml
│   │   └── postgresql.yaml
│   └── __init__.py
└── my_app.py

而且,这个OmegaConf的配置(DictConfig类型)可以转成Python的dict然后传给wandb,打通全场(见第一节的示例代码)。

3. Plotly导出可交互的曲线

Matplotlib不支持交互,生成的曲线无法还原每个点的值。Tensorboard和wandb的网页 支持交互,但不容易导出,而且其内置的precision-recall曲线等函数无法深度定制,只适合于画一些loss和lr曲线。Plotly就很强了。

鼠标浮动,查看内容

当然也可以做定制化的precision-recall曲线。比如我希望看不同threshold下的precision, recall和false positive ratio,这样的定制化曲线wandb等并不支持,就可以用plotly

df = DataFrame({'thres': thresholds,'prec': prec_data1,'recl': recl_data1,'fp': fp_data2
})
df = df.melt(id_vars=['thres'], value_vars=['prec', 'recl', 'fp'], var_name='curves')
fig = px.line(df, x='thres', y='value', color='curves', markers=True)
fig.update_xaxes(range=[0, 1])
fig.update_yaxes(range=[0, 1])
fig.update_traces(mode="markers+lines", hovertemplate=None)
fig.update_layout(hovermode="x")
fig.write_html(os.path.join(self.cfg.ckpt_dir, 'curves.html'), auto_play = False)

里面的hovermode指定移动鼠标时显示相同x值的不同y值:

这还没完,wandb支持把plotly生成的可交互网页嵌入到wandb里

import wandb
import plotly.express as px# Initialize a new run
run = wandb.init(project="log-plotly-fig-tables", name="plotly_html")# Create a table
table = wandb.Table(columns = ["plotly_figure"])# Create path for Plotly figure
path_to_plotly_html = "./plotly_figure.html"# Example Plotly figure
fig = px.scatter(x = [0, 1, 2, 3, 4], y = [0, 1, 4, 9, 16])# Write Plotly figure to HTML
fig.write_html(path_to_plotly_html, auto_play = False) # Setting auto_play to False prevents animated Plotly charts from playing in the table automatically# Add Plotly figure as HTML file into Table
table.add_data(wandb.Html(path_to_plotly_html))# Log Table
run.log({"test_table": table})
wandb.finish()

以上便完成了Hydra+OmegaConf+wandb+plotly的打通。

4. 使用远程GPU服务器/集群的一些技巧

如果要使用远程的服务器,常见问题在于远程debug、代码从本地同步到远程以及ssh断线重连问题。这些可以使用VS Code解决。

  1. 可以设置用得到的所有远程服务器,每个服务器配置好ssh,便于随时登录。下图的REMOTE EXPLORER里除了SSH Targets还有Containers,即可以直接ssh到服务器的docker container里。container的运行命令可以设置vs code自动完成。

  1. 每个服务器都能从本地登录的git账户里clone代码。Clone之后下次可以直接远程打开这个repo

  1. 编辑Run and Debug设置(launch.json),可以预先设置training,testing等实验对应的命令行参数和环境变量,以后点对应的按钮就直接运行该实验。不用每次手动复制参数

  1. 在repo里开一个文件夹,加入gitignore。每次做可视化图片的时候,把图片存到这个文件夹,即可通过vscode远程看图,不需要每次ssh下载到本地。VS Code也支持内建ipynb文件来一边写一边运行。

节省大量时间的 Deep Learning 效率神器相关推荐

  1. 收藏 | 有没有什么可以节省大量时间的 Deep Learning 效率神器?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:链接:https://www.zhihu.com/quest ...

  2. 4 个节省大量时间的 Deep Learning 效率神器

    问题链接:https://www.zhihu.com/question/384519338,本文来自知乎问答,回答已获作者授权,禁止二次转载. 一.Fing https://www.zhihu.com ...

  3. 有没有什么可以节省大量时间的 Deep Learning 效率神器?

    链接:https://www.zhihu.com/question/384519338 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:Fing https://www.zhihu.com ...

  4. 猿创征文|后端开发工程师提升开发效率神器推荐

    简介 对于现在的后端工程师来说,并不仅仅局限于编写代码和解决bug,这两个要素了.如果你目前还只是忙碌的写代码和改bug的话,那要深度思考一下,我为什么日复一日的写这些重复代码?这样有何意义?或者说, ...

  5. 节省 3/4 的设计时间:14个设计神器

    1.镜像炫光生成器 weavesilk.com  作为在线生成器的鼻祖之一,Silk 早在2010年就发布了,而且效果至今无人超越.   2.在线自动生成背景图片 coolbackgrounds.io ...

  6. 加快效率又节省生产时间,看MPC等五个工作室玩转Action

    Actions是自定义脚本,可以扩展ftrack Studio的功能.通过Actions,你可以自动生成报告,启动应用程序,打开自定义UI等等.下面,来自MPC.Plarium Games.Sila ...

  7. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...

  8. A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读

    第一次校正,改正了一些错误和生硬的翻译(像机器翻译一样).一定会有一些笔误.翻译不准确甚至错误的地方.还望批评指正. 1. 摘要 估计RGB图片的深度一直以来都是棘手的问题,计算机视觉.图形学.机器学 ...

  9. 【点云系列】综述: Deep Learning for 3D Point Clouds: A Survey

    文章目录 起因 题目 摘要 1 简介 2 背景 2.1 数据集 2.2 衡量指标 3 3D形状分类 3.1基于多视角的方法 3.2基于体素的方法 3.3 基于点的方法 3.3.1逐点MLP网络 3.3 ...

最新文章

  1. Forerunner:首个面向“多未来”的推测执行技术
  2. linux安装的时候网卡配置失败,Linux下安装网卡执行make install失败
  3. Problem 2238 Daxia Wzc's problem 1627 瞬间移动
  4. 《操作系统》库函数与系统调用的区别和联系?
  5. 【转】c# [Serializable]的作用
  6. 看着女朋友的肚子,以肉眼可见的速度大起来......
  7. 动态规划(0-1背包)--- 改变一组数的正负号使得它们的和为一给定数
  8. matplotlib —— 添加文本信息(text)
  9. 3.概率分布函数与概率密度函数
  10. json字段名不一致的问题
  11. 413 Arithmetic Slices
  12. DELL R730xd 安装PCIE SSD 后风扇转速增高的解决方案
  13. 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01.pdf
  14. 感恩工作平台心得体会_感恩工作心得体会
  15. 关于win7阉割版pycharm pyttsx3库无法使用解决方法
  16. 爱国者新品发布 智能果汁机助力双创 居家创业双赢新产能
  17. Unity (C#) 使用 LitJson 处理 JSON 数据
  18. 苹果手机怎么设置铃声?不用电脑,轻松搞定
  19. 开关电源的工作原理和构成
  20. 反向迭代器(rbegin,rend)

热门文章

  1. rpcs3模拟器配置要求是什么?
  2. Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过
  3. 阿里 短信回执消息 MNS消息队列消费模式 SmsReport
  4. 将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数
  5. 黑马旅游网-邮箱激活(三)
  6. 物联网平台搭建的全过程介绍(二)——物联网平台通信思维导图
  7. 2019神舟质量_2019质量周
  8. 【爱贝云计费】支付接入流程
  9. 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量...
  10. Android添加phonegap--sencha touch2插件教程