claude_refactor_v3: De-duplicate gin-configs, + "in/config_files" with common and cpecific experiment-presets gins
This commit is contained in:
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
|
||||
@@ -1 +1,31 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
@@ -1,31 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
# SOFIA v7.1 from-scratch — keep activations live (no gradient checkpointing).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = False
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = False
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
@@ -1,15 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
@@ -1,31 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = False
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
|
||||
# RTX 4090 profile, shared encoder (DINOv3).
|
||||
HardwareConfig.device = 'cuda'
|
||||
HardwareConfig.batch_size = 8
|
||||
HardwareConfig.grad_accum_steps = 8
|
||||
HardwareConfig.num_workers = 4
|
||||
HardwareConfig.use_amp = True
|
||||
HardwareConfig.gradient_checkpointing = True
|
||||
HardwareConfig.reserve_gb = 2.0
|
||||
HardwareConfig.total_vram_gb = 24.0
|
||||
@@ -1,15 +0,0 @@
|
||||
# Default tracking: TensorBoard on, W&B off, no Grad-CAM, no profiler.
|
||||
TrackingConfig.use_wandb = False
|
||||
TrackingConfig.use_tb = True
|
||||
TrackingConfig.wandb_project = 'caption-test-gtauav'
|
||||
TrackingConfig.wandb_run_name = None
|
||||
TrackingConfig.wandb_entity = None
|
||||
|
||||
TrackingConfig.log_grad_norms = True
|
||||
TrackingConfig.use_gradcam = False
|
||||
TrackingConfig.gradcam_every = 5
|
||||
TrackingConfig.gradcam_samples = 8
|
||||
|
||||
TrackingConfig.use_profiler = False
|
||||
TrackingConfig.profiler_warmup = 3
|
||||
TrackingConfig.profiler_active = 5
|
||||
@@ -1,32 +0,0 @@
|
||||
# Loss + optimizer + sampler — symmetric InfoNCE, AdamW, mutex sampler.
|
||||
TrainingConfig.loss_type = 'symmetric'
|
||||
TrainingConfig.tau_init = 0.07
|
||||
TrainingConfig.tau_min = 0.01
|
||||
TrainingConfig.tau_max = 0.1
|
||||
TrainingConfig.learnable_temperature = True
|
||||
TrainingConfig.label_smoothing = 0.1
|
||||
|
||||
TrainingConfig.tau_final = 0.01
|
||||
TrainingConfig.weight_q2g = 0.6
|
||||
TrainingConfig.weight_g2q = 0.4
|
||||
TrainingConfig.hard_mining_k = 0
|
||||
TrainingConfig.neg_bank_size = 0
|
||||
|
||||
# WeightedInfoNCE-only (unused when loss_type='symmetric').
|
||||
TrainingConfig.weighted_loss_k = 5.0
|
||||
|
||||
TrainingConfig.learning_rate = 1e-4
|
||||
TrainingConfig.text_lr_factor = 0.1
|
||||
TrainingConfig.weight_decay = 1e-4
|
||||
TrainingConfig.grad_clip = 1.0
|
||||
|
||||
TrainingConfig.sampler_type = 'mutex'
|
||||
TrainingConfig.dss_warmup_epochs = 1
|
||||
TrainingConfig.dss_reembed_every = 1
|
||||
TrainingConfig.dss_knn_device = 'cuda'
|
||||
TrainingConfig.dss_use_lsh = False
|
||||
TrainingConfig.dss_lsh_num_tables = 8
|
||||
TrainingConfig.dss_lsh_num_bits = 14
|
||||
TrainingConfig.dss_cache_dir = None
|
||||
TrainingConfig.use_mutex_sampler = True
|
||||
|
||||
@@ -1,8 +1,24 @@
|
||||
"""Single entry point for loading all configs in a training run.
|
||||
|
||||
Reads every .gin file in path2cfg (one preset directory) and instantiates
|
||||
the 4 universal configs + ModelsCommonConfig + the family-specific Models
|
||||
config selected by ModelsCommonConfig.backbone.
|
||||
Layout (per REQUIREMENTS_GIN_STYLE.md §1, extended for multi-experiment):
|
||||
|
||||
in/config_files/
|
||||
├── training.gin # common: shared by all training presets
|
||||
├── hardware_default.gin # common: for DINOv3 / StripNet
|
||||
├── hardware_no_gradckpt.gin # common: for SOFIA backbones
|
||||
├── tracking.gin # common: shared by all
|
||||
└── <preset_name>/
|
||||
├── pipeline.gin # local: output_dir, paths, schedule
|
||||
└── models.gin # local: backbone-specific bindings
|
||||
|
||||
`load_all_configs` parses common files at the path2cfg root + preset locals
|
||||
in `path2cfg/<preset_name>/`. Two-pass loading:
|
||||
Pass 1: read <preset_name>/models.gin to learn the backbone.
|
||||
Pass 2: parse common files + preset locals in one batch.
|
||||
|
||||
Override semantics: if the preset directory contains its own training.gin /
|
||||
hardware.gin / tracking.gin, those files are appended AFTER the common
|
||||
versions, so their bindings win (gin: last write wins).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -33,49 +49,114 @@ _BACKBONE_TO_MODELS_CLS = {
|
||||
"sofia_v71": SOFIAv71ModelsConfig,
|
||||
}
|
||||
|
||||
# Sofia backbones disable gradient checkpointing.
|
||||
_NO_GRADCKPT_BACKBONES = {"sofia_v1", "sofia_v71"}
|
||||
|
||||
def load_all_configs(path2cfg: str) -> dict[str, Any]:
|
||||
"""Parse every .gin in path2cfg and instantiate all configs.
|
||||
# Common filenames at the path2cfg root.
|
||||
_COMMON_TRAINING = "training.gin"
|
||||
_COMMON_TRACKING = "tracking.gin"
|
||||
_COMMON_HARDWARE_DEFAULT = "hardware_default.gin"
|
||||
_COMMON_HARDWARE_NO_GRADCKPT = "hardware_no_gradckpt.gin"
|
||||
|
||||
# Files a preset must always have locally (in <path2cfg>/<preset_name>/).
|
||||
_LOCAL_REQUIRED = ("pipeline.gin", "models.gin")
|
||||
|
||||
# Files that can optionally be overridden locally; if present in the preset
|
||||
# directory, they win over the common version.
|
||||
_LOCAL_OVERRIDABLE = ("training.gin", "hardware.gin", "tracking.gin")
|
||||
|
||||
|
||||
def load_all_configs(path2cfg: str, preset_name: str) -> dict[str, Any]:
|
||||
"""Parse common gin files + preset gin files and return all configs.
|
||||
|
||||
Args:
|
||||
path2cfg: Path to a preset directory ending with '/', e.g.
|
||||
'/home/user/caption-test/in/config_files/'.
|
||||
path2cfg: Path to in/config_files/ (per REQUIREMENTS_GIN_STYLE.md §5).
|
||||
Must contain training.gin, hardware_default.gin,
|
||||
hardware_no_gradckpt.gin, tracking.gin at its root, plus
|
||||
per-preset subdirectories.
|
||||
preset_name: Name of the preset subdirectory under path2cfg, e.g.
|
||||
'gtauav_balanced'.
|
||||
|
||||
Returns:
|
||||
Dict with keys:
|
||||
'pipeline' → PipelineConfig
|
||||
'hardware' → HardwareConfig
|
||||
'training' → TrainingConfig
|
||||
'tracking' → TrackingConfig
|
||||
'models_common' → ModelsCommonConfig
|
||||
'models' → DINOv3 | StripNet | SOFIAv1 | SOFIAv71 ModelsConfig
|
||||
(selected by models_common.backbone)
|
||||
Dict with keys: 'pipeline', 'hardware', 'training', 'tracking',
|
||||
'models_common', 'models'.
|
||||
|
||||
Raises:
|
||||
FileNotFoundError: If path2cfg contains no .gin files.
|
||||
ValueError: If models_common.backbone is not one of the known values.
|
||||
FileNotFoundError: If path2cfg, preset directory, or a required file is missing.
|
||||
ValueError: If models_common.backbone is not a known value.
|
||||
"""
|
||||
cfg_dir = Path(path2cfg)
|
||||
gin_files = sorted(cfg_dir.glob("*.gin"))
|
||||
if not gin_files:
|
||||
raise FileNotFoundError(f"No .gin files found in {cfg_dir}")
|
||||
common_dir = Path(path2cfg)
|
||||
preset_dir = common_dir / preset_name
|
||||
|
||||
# MANDATORY: reset gin global state — without clear_config(), bindings
|
||||
# from previous parses accumulate.
|
||||
# Sanity checks.
|
||||
if not common_dir.is_dir():
|
||||
raise FileNotFoundError(
|
||||
f"Config root not found: {common_dir}. "
|
||||
f"Per REQUIREMENTS_GIN_STYLE.md §5, this should be "
|
||||
f"<proj_dir>/in/config_files/.",
|
||||
)
|
||||
if not preset_dir.is_dir():
|
||||
raise FileNotFoundError(
|
||||
f"Preset directory not found: {preset_dir}. "
|
||||
f"Available presets in {common_dir}: "
|
||||
f"{sorted(d.name for d in common_dir.iterdir() if d.is_dir())}",
|
||||
)
|
||||
for required in _LOCAL_REQUIRED:
|
||||
if not (preset_dir / required).is_file():
|
||||
raise FileNotFoundError(
|
||||
f"Preset {preset_name} is missing required file '{required}' "
|
||||
f"(looked in {preset_dir})",
|
||||
)
|
||||
|
||||
# ===== Pass 1: peek at models.gin to learn the backbone. =====
|
||||
gin.clear_config()
|
||||
gin.parse_config_file(str(preset_dir / "models.gin"))
|
||||
backbone = ModelsCommonConfig().backbone
|
||||
if backbone not in _BACKBONE_TO_MODELS_CLS:
|
||||
raise ValueError(
|
||||
f"Unknown backbone={backbone!r} in {preset_dir / 'models.gin'}; "
|
||||
f"expected one of {sorted(_BACKBONE_TO_MODELS_CLS)}",
|
||||
)
|
||||
|
||||
# ===== Pass 2: build the full file list and parse in one batch. =====
|
||||
# Order: common first, preset locals last (so locals win on overrides).
|
||||
gin_files: list[Path] = [
|
||||
common_dir / _COMMON_TRAINING,
|
||||
common_dir / (
|
||||
_COMMON_HARDWARE_NO_GRADCKPT if backbone in _NO_GRADCKPT_BACKBONES
|
||||
else _COMMON_HARDWARE_DEFAULT
|
||||
),
|
||||
common_dir / _COMMON_TRACKING,
|
||||
# Always-required preset locals.
|
||||
preset_dir / "pipeline.gin",
|
||||
preset_dir / "models.gin",
|
||||
]
|
||||
|
||||
# Optional preset overrides (rare).
|
||||
for overridable in _LOCAL_OVERRIDABLE:
|
||||
local = preset_dir / overridable
|
||||
if local.is_file():
|
||||
gin_files.append(local)
|
||||
logger.info("Preset %s overrides %s locally", preset_name, overridable)
|
||||
|
||||
# Sanity: all chosen files must exist.
|
||||
for f in gin_files:
|
||||
if not f.is_file():
|
||||
raise FileNotFoundError(f"Required gin file not found: {f}")
|
||||
|
||||
# MANDATORY: clear gin global state before parsing.
|
||||
gin.clear_config()
|
||||
gin.parse_config_files_and_bindings(
|
||||
config_files=[str(f) for f in gin_files],
|
||||
bindings=[],
|
||||
)
|
||||
logger.info("Loaded %d gin files from %s", len(gin_files), cfg_dir)
|
||||
logger.info(
|
||||
"Loaded preset %s with %d gin files (backbone=%s)",
|
||||
preset_name, len(gin_files), backbone,
|
||||
)
|
||||
|
||||
# Build common first to learn which backbone to use.
|
||||
# Build all configs from gin global state.
|
||||
models_common = ModelsCommonConfig()
|
||||
if models_common.backbone not in _BACKBONE_TO_MODELS_CLS:
|
||||
raise ValueError(
|
||||
f"Unknown backbone={models_common.backbone!r}; "
|
||||
f"expected one of {sorted(_BACKBONE_TO_MODELS_CLS)}",
|
||||
)
|
||||
models_specific = _BACKBONE_TO_MODELS_CLS[models_common.backbone]()
|
||||
|
||||
return {
|
||||
|
||||
125
tests/test_config_loader.py
Normal file
125
tests/test_config_loader.py
Normal file
@@ -0,0 +1,125 @@
|
||||
"""Tests for config_loader.load_all_configs with _common/ + preset structure."""
|
||||
|
||||
from __future__ import annotations
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
from src.conf.config_loader import load_all_configs
|
||||
|
||||
|
||||
def _make_minimal_preset_layout(root: Path) -> None:
|
||||
"""Create _common/ + base files matching the production layout."""
|
||||
common = root / "_common"
|
||||
common.mkdir()
|
||||
(common / "training.gin").write_text("TrainingConfig.tau_init = 0.07\n")
|
||||
(common / "hardware_default.gin").write_text("HardwareConfig.batch_size = 8\n")
|
||||
(common / "hardware_no_gradckpt.gin").write_text(
|
||||
"HardwareConfig.batch_size = 8\n"
|
||||
"HardwareConfig.gradient_checkpointing = False\n",
|
||||
)
|
||||
(common / "tracking.gin").write_text("TrackingConfig.use_tb = True\n")
|
||||
|
||||
|
||||
def _make_preset(root: Path, name: str, models_body: str, output_dir: str) -> None:
|
||||
"""Create a preset directory with required pipeline.gin + models.gin."""
|
||||
preset = root / name
|
||||
preset.mkdir()
|
||||
(preset / "pipeline.gin").write_text(
|
||||
f"PipelineConfig.output_dir = '{output_dir}'\n",
|
||||
)
|
||||
(preset / "models.gin").write_text(models_body)
|
||||
|
||||
|
||||
def test_load_returns_six_keys(tmp_path: Path) -> None:
|
||||
"""load_all_configs returns the 6 expected keys."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
_make_preset(
|
||||
tmp_path, "test_dinov3",
|
||||
models_body="ModelsCommonConfig.backbone = 'dinov3'\n",
|
||||
output_dir="out/test_dinov3",
|
||||
)
|
||||
|
||||
cfgs = load_all_configs("test_dinov3", str(tmp_path))
|
||||
assert set(cfgs.keys()) == {
|
||||
"pipeline", "hardware", "training", "tracking", "models_common", "models",
|
||||
}
|
||||
assert cfgs["pipeline"].output_dir == "out/test_dinov3"
|
||||
assert cfgs["models_common"].backbone == "dinov3"
|
||||
|
||||
|
||||
def test_sofia_uses_no_gradckpt_hardware(tmp_path: Path) -> None:
|
||||
"""Sofia backbones get hardware_no_gradckpt.gin (gradient_checkpointing=False)."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
_make_preset(
|
||||
tmp_path, "test_sofia",
|
||||
models_body="ModelsCommonConfig.backbone = 'sofia_v71'\n",
|
||||
output_dir="out/test_sofia",
|
||||
)
|
||||
|
||||
cfgs = load_all_configs("test_sofia", str(tmp_path))
|
||||
assert cfgs["hardware"].gradient_checkpointing is False
|
||||
|
||||
|
||||
def test_dinov3_uses_default_hardware(tmp_path: Path) -> None:
|
||||
"""DINOv3/StripNet backbones get hardware_default.gin (gradient_checkpointing=True default)."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
# Override gradient_checkpointing=True in default profile to test routing.
|
||||
(tmp_path / "_common" / "hardware_default.gin").write_text(
|
||||
"HardwareConfig.batch_size = 8\n"
|
||||
"HardwareConfig.gradient_checkpointing = True\n",
|
||||
)
|
||||
_make_preset(
|
||||
tmp_path, "test_dinov3_hw",
|
||||
models_body="ModelsCommonConfig.backbone = 'dinov3'\n",
|
||||
output_dir="out/test_dinov3_hw",
|
||||
)
|
||||
cfgs = load_all_configs("test_dinov3_hw", str(tmp_path))
|
||||
assert cfgs["hardware"].gradient_checkpointing is True
|
||||
|
||||
|
||||
def test_local_override_wins(tmp_path: Path) -> None:
|
||||
"""Local training.gin in preset dir overrides _common/training.gin."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
_make_preset(
|
||||
tmp_path, "test_override",
|
||||
models_body="ModelsCommonConfig.backbone = 'dinov3'\n",
|
||||
output_dir="out/test_override",
|
||||
)
|
||||
# Drop a local training.gin that overrides tau_init.
|
||||
(tmp_path / "test_override" / "training.gin").write_text(
|
||||
"TrainingConfig.tau_init = 0.123\n",
|
||||
)
|
||||
|
||||
cfgs = load_all_configs("test_override", str(tmp_path))
|
||||
assert cfgs["training"].tau_init == 0.123
|
||||
|
||||
|
||||
def test_unknown_backbone_raises(tmp_path: Path) -> None:
|
||||
"""Invalid backbone string in models.gin → ValueError."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
_make_preset(
|
||||
tmp_path, "test_bad",
|
||||
models_body="ModelsCommonConfig.backbone = 'mistral_42b'\n",
|
||||
output_dir="out/bad",
|
||||
)
|
||||
|
||||
with pytest.raises(ValueError, match="Unknown backbone"):
|
||||
load_all_configs("test_bad", str(tmp_path))
|
||||
|
||||
|
||||
def test_missing_preset_raises(tmp_path: Path) -> None:
|
||||
"""Non-existent preset directory → FileNotFoundError."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
with pytest.raises(FileNotFoundError, match="Preset directory not found"):
|
||||
load_all_configs("nonexistent", str(tmp_path))
|
||||
|
||||
|
||||
def test_missing_required_file_raises(tmp_path: Path) -> None:
|
||||
"""Preset missing pipeline.gin → FileNotFoundError."""
|
||||
_make_minimal_preset_layout(tmp_path)
|
||||
bad_preset = tmp_path / "test_bad_preset"
|
||||
bad_preset.mkdir()
|
||||
(bad_preset / "models.gin").write_text("ModelsCommonConfig.backbone = 'dinov3'\n")
|
||||
|
||||
with pytest.raises(FileNotFoundError, match="missing required file 'pipeline.gin'"):
|
||||
load_all_configs("test_bad_preset", str(tmp_path))
|
||||
|
||||
Reference in New Issue
Block a user