defaults:
  - _self_
  - model: null
  - effects: all

seed: 12345
train: True
sample_rate: 48000
chunk_size: 262144 # 5.5s
logs_dir: "./logs"
render_files: True
render_root: "./data"
accelerator: null

max_kept_effects: -1
max_removed_effects: -1
shuffle_kept_effects: True
shuffle_removed_effects: False
num_classes: 4
effects_to_use:
  - compressor
  - distortion
  - reverb
  - chorus
effects_to_remove:
  - compressor
  - distortion
  - reverb
  - chorus

callbacks:
  model_checkpoint:
    _target_: pytorch_lightning.callbacks.ModelCheckpoint
    monitor: "valid_loss"   # name of the logged metric which determines when model is improving
    save_top_k: 1           # save k best models (determined by above metric)
    save_last: True         # additionaly always save model from last epoch
    mode: "min"             # can be "max" or "min"
    verbose: False
    dirpath: ${logs_dir}/ckpts/${now:%Y-%m-%d-%H-%M-%S}
    filename: '{epoch:02d}-{valid_loss:.3f}'
  learning_rate_monitor:
    _target_: pytorch_lightning.callbacks.LearningRateMonitor
    logging_interval: "step"

datamodule:
  _target_: remfx.datasets.VocalSetDatamodule
  train_dataset:
    _target_: remfx.datasets.VocalSet
    sample_rate: ${sample_rate}
    root: ${oc.env:DATASET_ROOT}
    chunk_size: ${chunk_size}
    mode: "train"
    effect_modules: ${effects}
    effects_to_use: ${effects_to_use}
    effects_to_remove: ${effects_to_remove}
    max_kept_effects: ${max_kept_effects}
    max_removed_effects: ${max_removed_effects}
    shuffle_kept_effects: ${shuffle_kept_effects}
    shuffle_removed_effects: ${shuffle_removed_effects}
    render_files: ${render_files}
    render_root: ${render_root}
  val_dataset:
    _target_: remfx.datasets.VocalSet
    sample_rate: ${sample_rate}
    root: ${oc.env:DATASET_ROOT}
    chunk_size: ${chunk_size}
    mode: "val"
    effect_modules: ${effects}
    effects_to_use: ${effects_to_use}
    effects_to_remove: ${effects_to_remove}
    max_kept_effects: ${max_kept_effects}
    max_removed_effects: ${max_removed_effects}
    shuffle_kept_effects: ${shuffle_kept_effects}
    shuffle_removed_effects: ${shuffle_removed_effects}
    render_files: ${render_files}
    render_root: ${render_root}
  test_dataset:
    _target_: remfx.datasets.VocalSet
    sample_rate: ${sample_rate}
    root: ${oc.env:DATASET_ROOT}
    chunk_size: ${chunk_size}
    mode: "test"
    effect_modules: ${effects}
    effects_to_use: ${effects_to_use}
    effects_to_remove: ${effects_to_remove}
    max_kept_effects: ${max_kept_effects}
    max_removed_effects: ${max_removed_effects}
    shuffle_kept_effects: ${shuffle_kept_effects}
    shuffle_removed_effects: ${shuffle_removed_effects}
    render_files: ${render_files}
    render_root: ${render_root}

  batch_size: 16
  num_workers: 8
  pin_memory: True
  persistent_workers: True

logger:
  _target_: pytorch_lightning.loggers.WandbLogger
  project: ${oc.env:WANDB_PROJECT}
  entity: ${oc.env:WANDB_ENTITY}
  # offline: False  # set True to store all logs only locally
  job_type: "train"
  group: ""
  save_dir: "."

trainer:
  _target_: pytorch_lightning.Trainer
  precision: 32 # Precision used for tensors, default `32`
  min_epochs: 0
  max_epochs: -1
  enable_model_summary: False
  log_every_n_steps: 1 # Logs metrics every N batches
  accumulate_grad_batches: 1
  accelerator: ${accelerator}
  devices: 1
  gradient_clip_val: 10.0
  max_steps: 50000