Configuration Guide
This guide covers all aspects of configuring JEPA for your specific use case.
Configuration Overview
JEPA uses YAML configuration files to specify:
Model architecture parameters
Training hyperparameters
Data loading settings
Logging configuration
Experiment tracking
Configuration Structure
A typical configuration file has these sections:
# Model architecture
model:
encoder_dim: 512
predictor_dim: 256
num_layers: 6
# Training parameters
training:
epochs: 100
batch_size: 64
learning_rate: 0.001
# Data settings
data:
dataset_path: "data/"
train_split: 0.8
# Logging setup
logging:
backends: ["wandb", "tensorboard"]
level: "INFO"
Model Configuration
Core Architecture
model:
# Encoder settings
encoder_dim: 512 # Hidden dimension
encoder_layers: 6 # Number of layers
encoder_heads: 8 # Attention heads (for Transformer)
encoder_type: "transformer" # Options: transformer, cnn, mlp
# Predictor settings
predictor_dim: 256 # Predictor hidden size
predictor_layers: 3 # Predictor depth
# Output settings
output_dim: 128 # Final embedding dimension
dropout: 0.1 # Dropout rate
Advanced Architecture Options
Transformer Encoder:
model:
encoder_type: "transformer"
encoder_dim: 512
encoder_layers: 12
encoder_heads: 8
feedforward_dim: 2048
positional_encoding: true
layer_norm_eps: 1e-6
CNN Encoder:
model:
encoder_type: "cnn"
channels: [64, 128, 256, 512]
kernel_sizes: [3, 3, 3, 3]
strides: [2, 2, 2, 2]
pooling: "adaptive"
MLP Encoder:
model:
encoder_type: "mlp"
hidden_dims: [512, 256, 128]
activation: "relu"
batch_norm: true
Training Configuration
Basic Training Settings
training:
epochs: 100 # Training epochs
batch_size: 64 # Batch size
learning_rate: 0.001 # Initial learning rate
weight_decay: 1e-4 # L2 regularization
gradient_clip: 1.0 # Gradient clipping
# Validation settings
val_frequency: 5 # Validate every N epochs
val_patience: 10 # Early stopping patience
Optimizer Configuration
training:
optimizer:
type: "adamw" # Options: adam, adamw, sgd, rmsprop
learning_rate: 0.001
betas: [0.9, 0.999] # Adam betas
weight_decay: 1e-4
eps: 1e-8
Learning Rate Scheduling
training:
scheduler:
type: "cosine" # Options: cosine, step, exponential, plateau
warmup_epochs: 10 # Warmup period
min_lr: 1e-6 # Minimum learning rate
# For step scheduler
step_size: 30
gamma: 0.1
# For plateau scheduler
patience: 5
factor: 0.5
Data Configuration
Dataset Settings
data:
# Data paths
dataset_path: "data/train"
val_path: "data/val" # Optional separate validation
test_path: "data/test" # Optional test set
# Data splits
train_split: 0.8 # Train/val split if no separate val
random_seed: 42 # For reproducible splits
# Loading settings
batch_size: 64 # Can override training batch_size
num_workers: 4 # DataLoader workers
pin_memory: true # GPU optimization
shuffle: true # Shuffle training data
Data Transforms
data:
transforms:
# Image transforms
resize: [224, 224]
normalize:
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
augmentation:
horizontal_flip: 0.5
rotation: 15
color_jitter: 0.1
# Text transforms
tokenizer: "bert-base-uncased"
max_length: 512
truncation: true
# Time series transforms
window_size: 100
stride: 50
normalization: "z-score"
Context/Target Configuration
data:
masking:
strategy: "random" # Options: random, block, structured
mask_ratio: 0.15 # Fraction to mask
block_size: 16 # For block masking
# Context/target regions
context_ratio: 0.85 # Fraction for context
target_overlap: false # Allow context/target overlap
Logging Configuration
Basic Logging
logging:
level: "INFO" # DEBUG, INFO, WARNING, ERROR
backends: ["console"] # Active logging backends
log_dir: "logs" # Output directory
# Console settings
console:
format: "%(asctime)s - %(levelname)s - %(message)s"
colored: true
Weights & Biases
logging:
backends: ["wandb", "console"]
wandb:
project: "jepa-experiments"
entity: "my-team"
name: "experiment-1" # Run name
tags: ["baseline", "transformer"]
notes: "Initial experiment"
# What to log
log_frequency: 10 # Log every N steps
log_gradients: false # Log gradient histograms
log_model: false # Save model artifacts
TensorBoard
logging:
backends: ["tensorboard", "console"]
tensorboard:
log_dir: "logs/tensorboard"
log_frequency: 10
log_images: true # Log sample images
log_histograms: true # Log parameter histograms
Multi-Backend Logging
logging:
backends: ["wandb", "tensorboard", "console"]
# Shared settings
log_frequency: 10
save_frequency: 50 # Save checkpoints every N epochs
# Backend-specific settings
wandb:
project: "jepa"
tensorboard:
log_dir: "logs/tb"
console:
level: "INFO"
Environment-Specific Configs
Development Configuration
# dev_config.yaml
model:
encoder_dim: 128 # Smaller for faster training
encoder_layers: 2
training:
epochs: 5 # Quick testing
batch_size: 16 # Fit on smaller GPUs
logging:
backends: ["console"] # Simple logging
level: "DEBUG" # Verbose output
Production Configuration
# prod_config.yaml
model:
encoder_dim: 1024 # Large model
encoder_layers: 24
training:
epochs: 1000 # Long training
batch_size: 128 # Large batches
gradient_clip: 1.0 # Stability
logging:
backends: ["wandb", "tensorboard"]
wandb:
project: "production-runs"
Loading and Merging Configs
Loading from File
from config.config import load_config
config = load_config("my_config.yaml")
Merging Configurations
from config.config import load_config, merge_configs
base_config = load_config("base_config.yaml")
override_config = load_config("overrides.yaml")
final_config = merge_configs(base_config, override_config)
Command Line Overrides
Override config values from command line:
python -m jepa.cli train \
--config config/base.yaml \
--learning-rate 0.01 \
--batch-size 128 \
--epochs 50
Validation and Debugging
Config Validation
Validate your configuration:
python -m jepa.cli config --validate my_config.yaml
View Current Config
python -m jepa.cli config --show my_config.yaml
Create Template
Generate a template configuration:
python -m jepa.cli config --create-template new_config.yaml
Best Practices
Use Version Control Track configuration files in git
Environment Variables Use environment variables for sensitive data:
logging:
wandb:
api_key: "${WANDB_API_KEY}"
Configuration Inheritance Create base configurations and extend them:
# child_config.yaml
base_config: "base_config.yaml"
# Override specific values
training:
learning_rate: 0.01
Comments and Documentation Document your configurations:
model:
encoder_dim: 512 # Chosen based on ablation study
Naming Conventions Use descriptive configuration names:
vision_large.yamlnlp_debug.yamlproduction_v2.yaml
Troubleshooting
Config Not Found Check file paths are relative to working directory
Validation Errors
Use --validate flag to check configuration
Memory Issues
Reduce batch_size or encoder_dim
Slow Training
Increase batch_size or num_workers
NaN Loss
Reduce learning_rate or add gradient_clip
Examples
See the examples directory for complete configuration examples for different use cases.