其他
【强基固本】聊聊炼丹效率
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
编辑:人工智能前沿讲习
效率。在迭代的早期通常会用小模型加小数据。单个模型往往只需占用一张卡,在常见的 8 卡服务器中便留着其他卡在那干等。 认知负载。训一个模型涉及到非常冗长的 pipeline 以及众多超参:数据处理,模型结构,模型参数,训练参数,测试参数。这些可调的节点通常分布在代码、数据或者命令行的参数里面。这让检查、排错和调整极其费劲。往往开完一组实验一天的精力就见底了,更不用说随时出现的错误会让这组实验的结果白白报废。 可用性。怎么在文件系统里面区分这些不同的实验?怎么样高效地区分并分析这些实验的结果?怎么样把在一个 project 里面开发的工具快速迁移到其他的 project? 鲁棒性。如果机器突然宕机,哪些实验需要重新跑一遍?
把所有的模型、流程改动都映射到命令行参数。模型结构变化用 if/else 或者 switch/case 引出来。这符合把 operation 变成 code 的主流趋势,也能够无缝对接到大多数主流代码框架。 把不关心的默认参数放到一个“命令模板”里面,然后将感兴趣的参数变成变量,将感兴趣的的取值组合写到一个文件里面。把 baseline 取值也写到文件里,方便对比。 把文件当做任务池,用一组 worker (分配了 gpu 资源) 并发地去拉任务,跑任务。每个任务的中间结果写到以超参组合命名的文件夹中,这比时间戳更可读,也有足够区分不同实验,还可以查重防止重复跑实验。用 tensorboard 跟踪训练进程。 写一个评价标准和感兴趣指标的 parser 对所有实验的中间文件进行处理,再把结果拉到 jupyter notebook 或者 excel 表里做可视化和分析。
01
---
template:
train: >
python train.py data-bin/{data}
--seed 1
--criterion label_smoothed_cross_entropy
--arch transformer_iwslt_de_en --share-all-embeddings
--optimizer adam --adam-betas '(0.9,0.98)' --clip-norm 0.0
--dropout 0.3 --lr-scheduler inverse_sqrt --warmup-updates 8000
--lr 0.0015 --min-lr 1e-09
--label-smoothing 0.1 --weight-decay 0.0001
--max-tokens 4096
--save-dir {_output}
--tensorboard-logdir {_output}
--no-save-optimizer-state
--update-freq 1 --log-format simple --log-interval 50
--ddp-backend no_c10d
--keep-last-epochs 5 --early-stop 5
--normalization {norm} [moment]
avg: >
python scripts/average_checkpoints.py --inputs {_output}
--num-epoch-checkpoints 5 --output {_output}/averaged_model.pt
test: >
python generate.py data-bin/{data}
--max-tokens 4096 --beam 5 --lenpen 1.0 --remove-bpe
--path {_output}/averaged_model.pt --gen-subset test
default:
data: iwslt14
norm: batch
moment: 0.1
resource: [ 0, 1, 2, 3 ]
---
norm: [ new, batch ]
moment: [ 0.1, 0.05 ]
$ run
Orphan params: set()
Tasks: 4, commands to run: 12
START gpu: 0, train: 1/ 4, output/Norm_new-Moment_0.1
START gpu: 1, train: 2/ 4, output/Norm_new-Moment_0.05
START gpu: 2, train: 3/ 4, output/Norm_batch-Moment_0.1
START gpu: 3, train: 4/ 4, output/Norm_power-Moment_0.05
START gpu: 2, avg : 3/ 4, output/Norm_batch-Moment_0.1
FAIL gpu: 2, avg : 3/ 4, output/Norm_batch-Moment_0.1
...
$ ls output/Norm_batch-Moment_0.1
checkpoint51.pt
checkpoint52.pt
averaged_model.pt
log.train.20220316.030151
log.avg.20220316.030151
log.test.20220316.030151
param
stat
from runner.examine import Examiner, latest_log
# define a metric parser for each directory (experiment)
def add_bleu(output_dir, experiment, caches):
# Each parser follows the same signature
# It can read/write to a global cache dict `caches`,
# and read/write each experiment:
# collections.namedtuple("Experiment", ["cache", "metric", "param"])
latest_test_log = latest_log("test", output_dir)
bleu = parse_bleu(latest_test_log) # a user-defined log parser
experiment.metric["test_bleu"] = bleu
examiner = Examiner() # container for parsed results
# register parser for each directory (experiment)
examiner.add(add_bleu)
# run all parsers for directories matched by regex
examiner.exam(output="output", regex=".*batch.*")
# print the tsv table with all (different) params and metrics of each experiment
examiner.table()
02
03
“强基固本”历史文章
为什么回归问题用MSE?
记MoCo中一个关于CrossEntropyLoss的计算问题
Transformer总结-2022版
浅谈弱监督学习(Weakly Supervised Learning)
DINO:目标检测benchmark COCO屠榜的正确姿势
图卷积知识梳理
生成对抗网络(GAN)与它背后的思想
基于深度学习的自然图像和医学图像分割:网络结构设计
稀疏性在机器学习中的发展趋势:MoE、稀疏注意力机制
机器学习和深度学习的区别
基于深度学习的声学场景分类(Acoustic Sence Classifier)方法整理
自动驾驶场景中的毫米波雷达数据集
浅谈神经网络(基础概念篇)
聊一聊AI框架前端
更多强基固本专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!