节省大量时间的 Deep Learning 效率神器

简介: 节省大量时间的 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值

fd6240ee6a07f3d944924acb32d2e532.png

wandb 查看config

对应每个实验的curves

47e9d816c30d2759e639354bc85bf312.png


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就很强了。


e9d9222f1791a154c4d4c6941462e0db.png


鼠标浮动,查看内容

当然也可以做定制化的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值:


5df16e4fccc3d9b2a9f81eb90a5718e7.png


这还没完,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自动完成。
  2. 每个服务器都能从本地登录的git账户里clone代码。Clone之后下次可以直接远程打开这个repo


6a0e18eda0c890cc14cb1862a08f514b.png


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


d5d4894aa634ebd5e9c5acba834fa803.png


  1. 在repo里开一个文件夹,加入gitignore。每次做可视化图片的时候,把图片存到这个文件夹,即可通过vscode远程看图,不需要每次ssh下载到本地。VS Code也支持内建ipynb文件来一边写一边运行。
相关文章
|
1月前
|
人工智能 前端开发 JavaScript
AI+脚本让我的效率翻倍,你也可以试试
本文分享了一名高级软件工程师如何利用 AI 工具(如 VSCode 插件 Codeium、通义灵码,及网页端的通义千问和 GPT-4)提升工作效率的经验。从代码生成、单元测试、脚本生成到文本润色,再到新框架学习,AI 工具在多个方面显著提高了开发效率和代码质量。文章还提供了具体示例和注意事项,帮助读者更好地应用这些工具。
|
3月前
|
机器学习/深度学习 并行计算 TensorFlow
GPU加速TensorFlow模型训练:从环境配置到代码实践的全方位指南,助你大幅提升深度学习应用性能,让模型训练不再等待
【8月更文挑战第31天】本文以随笔形式探讨了如何在TensorFlow中利用GPU加速模型训练,并提供了详细的实践指南。从安装支持GPU的TensorFlow版本到配置NVIDIA CUDA及cuDNN库,再到构建CNN模型并使用MNIST数据集训练,全面展示了GPU加速的重要性与实现方法。通过对比CPU与GPU上的训练效果,突显了GPU在提升训练速度方面的显著优势。最后,还介绍了如何借助TensorBoard监控训练过程,以便进一步优化模型。
605 0
|
5月前
|
语音技术 计算机视觉
CVPR 2024 Highlight :北航等发布时间特征维护:无需训练,极致压缩加速Diffusion
【6月更文挑战第28天】在CVPR 2024会议上,北航等研究团队提出了**时间特征维护**技术,针对Diffusion模型实现无需训练的高效压缩与加速。通过选择性保留关键时间特征,他们在保持生成质量的同时,实现了模型4bit极致压缩和超过2.38倍硬件加速,简化了复杂模型,提升了运行效率。这一创新方法有望改善Diffusion模型在实际应用中的资源需求,但其鲁棒性和泛化能力尚需更多验证。[论文链接](https://arxiv.org/pdf/2311.16503)
63 5
|
5月前
|
人工智能 缓存
[AI words] 突破瓶颈:如何将AI words网站构建时间缩短一半
了解我如何优化AI words网站的构建过程,将构建时间从14分钟缩短到仅仅7分钟。本文详细介绍了优化步骤和遇到的挑战。
|
缓存 算法 Shell
魔搭牵手vLLM,提供更快更高效LLM推理服务
今年六月,来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟内存和分页技术,提出了一个新的注意力算法PagedAttention,并打造了一个LLM服务系统vLLM。
|
11月前
|
机器学习/深度学习 人工智能 并行计算
AI 时代的 GPU 生存工具包,每个开发人员必须知道的最低限度
AI技术迎来了“百花齐放”的春天,这既是我们的挑战也是机会。而AI+千行百业创造了无限可能,也为独立开发者提供了大量的资源、支持以及学习经验的机会。本文分享一篇摘录自Hexmos 期刊的AI 时代的 GPU 生存工具包。
79983 7
|
自然语言处理 PyTorch 算法框架/工具
TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用
TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用
TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用
|
机器学习/深度学习 人工智能 自然语言处理
如何自动搜出更好、更小、更快的NLP模型?
如何自动搜出更好、更小、更快的NLP模型?
311 0
|
机器学习/深度学习 人工智能 PyTorch
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减(1)
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减
129 0
|
PyTorch 算法框架/工具 决策智能
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减(2)
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减
143 0
下一篇
无影云桌面