节省大量时间的 Deep Learning 效率神器
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解决。
可以设置用得到的所有远程服务器,每个服务器配置好ssh,便于随时登录。下图的REMOTE EXPLORER里除了SSH Targets还有Containers,即可以直接ssh到服务器的docker container里。container的运行命令可以设置vs code自动完成。
每个服务器都能从本地登录的git账户里clone代码。Clone之后下次可以直接远程打开这个repo
编辑Run and Debug设置(launch.json),可以预先设置training,testing等实验对应的命令行参数和环境变量,以后点对应的按钮就直接运行该实验。不用每次手动复制参数
在repo里开一个文件夹,加入gitignore。每次做可视化图片的时候,把图片存到这个文件夹,即可通过vscode远程看图,不需要每次ssh下载到本地。VS Code也支持内建ipynb文件来一边写一边运行。
节省大量时间的 Deep Learning 效率神器相关推荐
- 收藏 | 有没有什么可以节省大量时间的 Deep Learning 效率神器?
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:链接:https://www.zhihu.com/quest ...
- 4 个节省大量时间的 Deep Learning 效率神器
问题链接:https://www.zhihu.com/question/384519338,本文来自知乎问答,回答已获作者授权,禁止二次转载. 一.Fing https://www.zhihu.com ...
- 有没有什么可以节省大量时间的 Deep Learning 效率神器?
链接:https://www.zhihu.com/question/384519338 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:Fing https://www.zhihu.com ...
- 猿创征文|后端开发工程师提升开发效率神器推荐
简介 对于现在的后端工程师来说,并不仅仅局限于编写代码和解决bug,这两个要素了.如果你目前还只是忙碌的写代码和改bug的话,那要深度思考一下,我为什么日复一日的写这些重复代码?这样有何意义?或者说, ...
- 节省 3/4 的设计时间:14个设计神器
1.镜像炫光生成器 weavesilk.com 作为在线生成器的鼻祖之一,Silk 早在2010年就发布了,而且效果至今无人超越. 2.在线自动生成背景图片 coolbackgrounds.io ...
- 加快效率又节省生产时间,看MPC等五个工作室玩转Action
Actions是自定义脚本,可以扩展ftrack Studio的功能.通过Actions,你可以自动生成报告,启动应用程序,打开自定义UI等等.下面,来自MPC.Plarium Games.Sila ...
- 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...
- A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读
第一次校正,改正了一些错误和生硬的翻译(像机器翻译一样).一定会有一些笔误.翻译不准确甚至错误的地方.还望批评指正. 1. 摘要 估计RGB图片的深度一直以来都是棘手的问题,计算机视觉.图形学.机器学 ...
- 【点云系列】综述: 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 ...
最新文章
- Forerunner:首个面向“多未来”的推测执行技术
- linux安装的时候网卡配置失败,Linux下安装网卡执行make install失败
- Problem 2238 Daxia Wzc's problem 1627 瞬间移动
- 《操作系统》库函数与系统调用的区别和联系?
- 【转】c# [Serializable]的作用
- 看着女朋友的肚子,以肉眼可见的速度大起来......
- 动态规划(0-1背包)--- 改变一组数的正负号使得它们的和为一给定数
- matplotlib —— 添加文本信息(text)
- 3.概率分布函数与概率密度函数
- json字段名不一致的问题
- 413 Arithmetic Slices
- DELL R730xd 安装PCIE SSD 后风扇转速增高的解决方案
- 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01.pdf
- 感恩工作平台心得体会_感恩工作心得体会
- 关于win7阉割版pycharm pyttsx3库无法使用解决方法
- 爱国者新品发布 智能果汁机助力双创 居家创业双赢新产能
- Unity (C#) 使用 LitJson 处理 JSON 数据
- 苹果手机怎么设置铃声?不用电脑,轻松搞定
- 开关电源的工作原理和构成
- 反向迭代器(rbegin,rend)
热门文章
- rpcs3模拟器配置要求是什么?
- Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过
- 阿里 短信回执消息 MNS消息队列消费模式 SmsReport
- 将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数
- 黑马旅游网-邮箱激活(三)
- 物联网平台搭建的全过程介绍(二)——物联网平台通信思维导图
- 2019神舟质量_2019质量周
- 【爱贝云计费】支付接入流程
- 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量...
- Android添加phonegap--sencha touch2插件教程