浅谈DTT模型的配置文件
当你运行
python train.py experiment=vocals_dis datamodule=musdb_dev14 trainer=default
时,配置文件究竟是怎么选的呢?
我们可以首先看一下config文件夹的结构:
然后看要运行的这个train.py
的内容:
@hydra.main(config_path="configs/", config_name="config.yaml", version_base='1.1')
def main(config: DictConfig):
###省略
由此可知它用到了config.yaml这个文件,我们接下来看一下这个文件(我删了一些无关注释):
defaults:
- datamodule: musdb18_hq
- model: null
- callbacks: default # set this to null if you don't want to use callbacks
- logger: null # set logger here or use command line (e.g. `python run.py logger=wandb`)
- trainer: default
- hparams_search: null
- paths: default.yaml
- hydra: default
- experiment: null
# enable color logging
- override hydra/hydra_logging: colorlog
- override hydra/job_logging: colorlog
debug: False
# pretty print config at the start of the run using Rich library
print_config: True
# disable python warnings if they annoy you
ignore_warnings: True
wandb_api_key: ${oc.env:wandb_api_key}
先看defaults部分:
-
datamodule: musdb18_hq
告诉我们它用到了configs\datamodule\musdb18_hq.yaml
里的配置 -
model: null
告诉我们它没在这边设置好模型(不过其实experiment=vocals_dis
这边间接设置了,一会儿来看) -
同理,我们跳过几个,看
trainer: default
,这个告诉我们它用到了configs\trainer\default.yaml
里的配置 -
然后看一个比较重要的:
experiment
,别看这边是null
,不要忘了我们运行命令时指定了experiment=vocals_dis
,我们来看一下
configs\experiment\vocals_dis.yaml
这个文件:# @package _global_ # to execute this experiment run: # python run.py experiment=example_simple.yaml defaults: - multigpu_default - override /model: vocals.yaml seed: 2021 exp_name: vocals_g32 # the name inside project logger: wandb: name: ${exp_name} model: lr: 0.0002 optimizer: adamW bn_norm: syncBN audio_ch: 2 # datamodule.single_channel g: 32 trainer: devices: 2 # int or list sync_batchnorm: True track_grad_norm: 2 # gradient_clip_val: 5 datamodule: batch_size: 8 num_workers: ${oc.decode:${oc.env:NUM_WORKERS}} pin_memory: False overlap: ${model.overlap} audio_ch: ${model.audio_ch} epoch_size:
你看它里面也有之前已经配置过的model,trainer,datamodule之类的,当然是以后出现的配置为准(会覆盖与前面配置的冲突的地方)
defaults里面有一个multigpu_default,指向
configs\experiment\multigpu_default.yaml
文件,还是一样,后出现的配置覆盖与前面配置的冲突的地方defaults里面还有一个override /model: vocals.yaml,
override
说明是覆盖,/model: vocals.yaml
指定了模型部分的配置应该从configs\experiment\vocals_dis.yaml
文件中加载。
PS:!!! Hydra的配置优先级顺序如下:
- 命令行参数
- 配置文件中的默认值
- 配置文件中的其他指定值
如果你的训练命令中加上了logger=[]:根据Hydra的配置机制,命令行参数的优先级高于配置文件。因此,即使 vocals_dis.yaml
中指定了 logger
为 wandb
,命令行中的 logger=[]
会覆盖这个设置,最终导致 logger
被设置为空列表,不会使用任何日志记录器