YourMT3 / amt /src /config /config.py
mimbres's picture
.
a03c9b4
raw
history blame
13.4 kB
"""config.py"""
import numpy as np
# yapf: disable
"""
audio_cfg:
- Used by 'ymt3' to create a spectrogram layer.
- Input shape of model is determined by audio_cfg.
- 'train.py' arguments can override these defaults.
"""
audio_cfg = {
# Overwrittable by args in train.py
"codec": "melspec", # {melspec, spec} melspec for MT3, spec for PerceiverTF
"hop_length": 128, # {128, 300} 128 for MT3, 300 for PerceiverTF
# Shared audio parameters
"audio_backend": "torchaudio", # {torchaudio, nnAudio}
"sample_rate": 16000,
"input_frames": 32767, # number of input frames (~=2.048 s), determining in-/output shape of front layers.
"n_fft": 2048,
"n_mels": 512, # only for melspec
"f_min": 50.0,
"f_max": 8000.0,
} # TODO: currently dataloader is not updated by "input_frames"
"""
model_cfg:
- Encoder type dictates use of T5_CFG or PERCEIVER_TF_CFG.
- 'train.py' arguments can override these defaults.
"""
model_cfg = {
"encoder_type": "t5", # {"t5", "perceiver-tf", "conformer"}
"decoder_type": "t5", # {"t5", "multi-t5"}
"pre_encoder_type": "default", # {None, "default", "conv", "conv1d", "conv2d_avpt"} by default, t5:None, perceiver:conv.
"pre_encoder_type_default": {"t5": None, "perceiver-tf": "conv", "conformer": None},
"pre_decoder_type": "default", # {None, 'linear', 'conv1', 'mlp', 'group_linear'} see model/projection_layer.py
"pre_decoder_type_default": { # [enc_type][dec_type]
"t5": {"t5": None,},
"perceiver-tf": {"t5": "linear", "multi-t5": "mc_shared_linear"},
"conformer": {"t5": None,},
},
"conv_out_channels": 128, # number of filters for 'conv' pre_encoder. Otherwise ignored.
"t5_basename": "google/t5-v1_1-small",
"pretrained": False, # bool, if True, load pretrained weights from t5_basename. Mismatched layers are ignored.
"use_task_conditional_encoder": True, # True by default, but default task is None. So not activated by default.
"use_task_conditional_decoder": True, # True by default, but default task is None. So not activated by default.
"d_feat": "auto", # Input audio feature dimension for encoder. Automatically inferred by audio_cfg and existence of pre_encoders.
"tie_word_embeddings": True, # If True, weights of embed_tokens and lm_head are tied for stabilizing gradients.
"vocab_size": "auto", # int or "auto", automatically inferred by task manager.
"num_max_positions": "auto", # int or "auto". Length of positional encoding. Automatically inferred by "feat_length", "event_length" and task_manager.max_task_token_length.
# 'vocab_size', 'tie_word_embeddings' and 'num_max_positions' are auto-copied to encoder and decoder configs in the below.
"encoder": {
"t5": {
"d_model": 512, # Hidden size of T5 encoder.
"num_heads": 6,
"num_layers": 8,
"dropout_rate": 0.05,
"position_encoding_type": "sinusoidal", # {'sinusoidal', 'trainable'}.
"ff_widening_factor": 2, # wideening factor for MLP/MoE layers. Default is 2 in T5.
"ff_layer_type": "t5_gmlp", # {'t5_gmlp', 'moe', 'mlp', 'gmlp'}. 'moe' for mixture of experts, 'mlp' for standard transformer dense layer, 'gmlp' for simple gated MLP.
},
"perceiver-tf": {
"num_latents": 24, # number of latents in Perceiver. 24 in perceiver-tf paper.
"d_latent": 128, # latent dimension of Perceiver. 128 in perceiver-tf paper.
"d_model": "q", # int or "q" or "kv". Inner-dim of sca and local/temporal self-att.
# "q" follows "latent_dim". "kv" follows "d_feat". Best practice is to inc-/decrease 'd_latent', instead of 'd_model'.
"num_blocks": 3, # number of Perceiver-TF blocks in encoder. L in the paper.
"num_local_transformers_per_block": 2, # N in the paper.
"num_temporal_transformers_per_block": 2, # M in the paper.
"sca_use_query_residual": False,
"dropout_rate": 0.1,
"position_encoding_type": "trainable", # {'trainable', 'rotary', 'alibi', 'alibit', None, 'tkd','td', 'tk', 'kdt'}. alibit is alibi with trainable slopes.
"attention_to_channel": True, # Whether to use channel attention in sca.
"layer_norm_type": "layer_norm", # {'layer_norm', 'rms_norm'}
"ff_layer_type": "mlp", # {'moe', 'mlp', gmlp}. 'moe' for mixture of experts, 'mlp' for standard transformer dense layer, 'gmlp' for simple gated MLP.
"ff_widening_factor": 1, # wideening factor for MLP/MoE layers. Default is 1.
"moe_num_experts": 4, # number of experts in MoE layer. Default is 4. Disabled if ff_layer_type is not 'moe'.
"moe_topk": 2, # top-k routing in MoE layer. Default is 2. Disabled if ff_layer_type is not 'moe'.
"hidden_act": 'gelu', # activation function in MLP/MoE layer. Default is 'gelu'. {'gelu', 'silu', 'relu'}
"rotary_type_sca": "pixel", # {'l'|'lang', 'p'|'pixel'}. Default is 'pixel'.
"rotary_type_latent": "pixel", # {'l'|'lang', 'p'|'pixel'}. Default is 'pixel'.
"rotary_type_temporal": "lang", # {'l'|'lang', 'p'|'pixel'}. Default is 'lang'.
"rotary_apply_to_keys": False, # Whether to apply rotary to keys. Default is False.
"rotary_partial_pe": False, # Whether to use partial positional encoding. Default is False.
},
"conformer": {
"d_model": 512, # Hidden size of T5 encoder.
"intermediate_size": 512, # or 2048. size of the intermediate feed forward layer in each T5Block
"num_heads": 8,
"num_layers": 8,
"dropout_rate": 0.1,
"layerdrop": 0.1, # see https://arxiv.org/abs/1909.11556
"position_encoding_type": "rotary", # {'rotary', 'relative'}.
"conv_dim": (512, 512, 512, 512, 512, 512, 512),
"conv_stride": (5, 2, 2, 2, 2, 2, 2),
"conv_kernel": (10, 3, 3, 3, 3, 3, 3),
"conv_depthwise_kernel_size": 31,
},
},
"decoder": {
"t5": {
"d_model": 512, # Hidden size of T5 encoder. If encoder has lower dim, it is projected to this dim for enc-dec cross att.
"num_heads": 6,
"num_layers": 8,
"dropout_rate": 0.05,
"position_encoding_type": "sinusoidal", # {'sinusoidal', 'trainable'}.
"ff_widening_factor": 2, # wideening factor for MLP/MoE layers. Default is 2 in T5.
"ff_layer_type": "t5_gmlp", # {'t5_gmlp', 'moe', 'mlp', 'gmlp'}. 'moe' for mixture of experts, 'mlp' for standard transformer dense layer, 'gmlp' for simple gated MLP.
},
"multi-t5": {
"d_model": 512, # Hidden size of T5 encoder. Recommended: {256 or 512}
"num_heads": 6,
"num_layers": 8,
"dropout_rate": 0.05,
"position_encoding_type": "sinusoidal", # {'sinusoidal', 'trainable'}.
"ff_widening_factor": 2, # wideening factor for MLP/MoE layers. Default is 2 in T5.
"ff_layer_type": "t5_gmlp", # {'t5_gmlp', 'moe', 'mlp', 'gmlp'}. 'moe' for mixture of experts, 'mlp' for standard transformer dense layer, 'gmlp' for simple gated MLP.
"num_channels": 13,
},
},
"feat_length": "auto", # Input audio feature length for encoder. Automatically inferred by audio_cfg.
# mt3: 256 time steps
"event_length": 1024, # max length of event tokens excluding task tokens <-- 128 for multi-t5
"init_factor": 1.0, # initialization factor for embedding layers
}
# yapf: enable
shared_cfg = {
"PATH": {
"data_home": "../../data", # path to the data directory. If using relative path, it is relative to /src directory.
},
"BSZ": { # global batch size is local_bsz * n_GPUs in DDP mode
"train_sub": 12, #20, # sub-batch size is per CPU worker
"train_local": 24, #40, # local batch size is per GPU in DDP mode
"validation": 64, # validation batch size is per GPU in DDP mode
"test": 64,
},
"AUGMENTATION": {
"train_random_amp_range": [0.8, 1.1], # min and max amplitude scaling factor
"train_stem_iaug_prob": 0.7, # probability of stem activation in intra-stem augmentation
"train_stem_xaug_policy": {
"max_k": 3,
"tau": 0.3,
"alpha": 1.0,
"max_subunit_stems": 12, # the number of subunit stems to be reduced to this number of stems
"p_include_singing": None, # NOT IMPLEMENTED; probability of including singing for cross augmented examples. if None, use base probaility.
"no_instr_overlap": True,
"no_drum_overlap": True,
"uhat_intra_stem_augment": True,
},
"train_pitch_shift_range": [-2, 2], # [min, max] in semitones. None or [0, 0] for no pitch shift.
},
"DATAIO": { # do not set `shuffle` here.
"num_workers": 4, # num_worker is per GPU in DDP mode
"prefetch_factor": 2, #2,
"pin_memory": True,
"persistent_workers": False,
},
"CHECKPOINT": {
"save_top_k": 4, # max top k checkpoints to save
"monitor": 'validation/macro_onset_f',
"mode": 'max',
# "every_n_epochs": 20, # only working when check_val_every_n_epoch is 0
"save_last": True, # save last model
"filename": "{epoch}-{step}",
},
"TRAINER": { # do not coverwrite args in this section
"limit_train_batches": 1.0, # How much of training dataset to check (float = fraction, int = num_batches)
"limit_val_batches": 1.0,
"limit_test_batches": 1.0,
"gradient_clip_val": 1.0, # {0 or None} means don't clip.
"accumulate_grad_batches": 1, #1, # Accumulates grads every k batches. If set to 1, no effect.
"check_val_every_n_epoch": 1, #5, 1 for very large dataset such as EGMD
"num_sanity_val_steps": 0,
},
"WANDB": {
"save_dir": "../logs",
"cache_dir": "../logs/.wandb_cache",
"resume": "allow",
"anonymous": "allow", # {never, allow, must}
"mode": "online", # {online, offline, disabled}
},
"LR_SCHEDULE": {
# "scheduler_type": "cosine", # {legacy, cosine, constant}
"warmup_steps": 1000, # only for cosine scheduler, legacy scheduler follows T5's legacy schedule
"total_steps": 100000, # argparser of train.py can overwrite this
"final_cosine": 1e-5, # only for cosine scheduler
},
"TOKENIZER": {
"max_shift_steps": "auto", # max number of shift steps in the model. (int) or "auto". If "auto", it is set by audio_cfg["input_frames"] and shift_steps_ms. 206 with default setup.
"shift_step_ms": 10, # shift step in ms
},
}
T5_BASE_CFG = {
"google/t5-v1_1-small": {
"architectures": ["T5ForConditionalGeneration"],
"d_ff":
1024, # size of the intermediate feed forward layer in each T5Block. Can be overwrten by ff_widening_factor in model_cfg.
"d_kv": 64, # d_kv has to be equal to d_model // num_heads.
# "d_model": 512, # encoder hiddnen size, defined by model_cfg
"decoder_start_token_id": 0,
"dense_act_fn": "gelu_new",
# "dropout_rate": 0.05, # can be overwritten by args in ymt3
"eos_token_id": 1,
"feed_forward_proj": "gated-gelu",
"initializer_factor": 1.0,
"is_encoder_decoder": True,
"is_gated_act": True,
"layer_norm_epsilon": 1e-06,
"model_type": "t5",
# "num_decoder_layers": 8, # defined by model_cfg
# "num_heads": 6, # defined by model_cfg
# "num_layers": 8, # defined by model_cfg
"output_past": True,
"pad_token_id": 0,
"relative_attention_num_buckets": 32,
# "tie_word_embeddings": True,
"use_cache": True,
# "vocab_size": 1391 # vocab_size is automatically set by the task manager...
},
"google/t5-efficient-small": {
"architectures": ["T5ForConditionalGeneration"],
"d_ff": 2048,
"d_kv": 64,
"d_model": 512,
"decoder_start_token_id": 0,
"dropout_rate": 0.1,
"eos_token_id": 1,
"feed_forward_proj": "relu",
"initializer_factor": 1.0,
"is_encoder_decoder": True,
"layer_norm_epsilon": 1e-06,
"model_type": "t5",
"num_decoder_layers": 6,
"num_heads": 8,
"num_layers": 6,
"pad_token_id": 0,
"relative_attention_num_buckets": 32,
"torch_dtype": "float32",
"transformers_version": "4.17.0.dev0",
"use_cache": True,
},
}
# yapf: enable
DEEPSPEED_CFG = {
"zero_allow_untested_optimizer": True,
"optimizer": {
"type": "adam",
"params": {
"lr": 1e-4,
"betas": [0.998, 0.999],
"eps": 1e-3,
"weight_decay": 0.001,
"adam_w_mode": True,
}
},
"scheduler": {
"type": "WarmupLR",
"params": {
"last_batch_iteration": -1,
"warmup_min_lr": 0,
"warmup_max_lr": 3e-5,
"warmup_num_steps": 100,
},
},
"zero_optimization": {
"stage": 0, #0,1,2,3
# "offload_optimizer":
# False, # Enable Offloading optimizer state/calculation to the host CPU
},
}