Experiments Guide ================= What are Experiments? --------------------- Experiments are configuration presets that combine multiple settings for specific scenarios. They're stored in ``conf/experiment/`` as YAML files. Using Built-in Experiments --------------------------- **Quick Test** Fast test with 10 steps, reduced configuration:: python run_training.py +experiment=quick_test Good for: - Testing setup - Validating data pipeline - Debugging configuration **Full Training** Production settings with default parameters:: python run_training.py +experiment=full_training Good for: - Real training runs - Benchmarking - Production models Creating Custom Experiments --------------------------- Create ``conf/experiment/my_exp.yaml``:: # @package _global_ # This is an experiment configuration defaults: - override /model: gemma3_1b - override /optimizer: adamw # Override specific values training: num_batches: 100 micro_batch_size: 2 optimizer: learning_rate: 1e-5 # Metadata experiment_name: my_experiment tags: [custom, testing] Use it:: python run_training.py +experiment=my_exp Experiment Structure -------------------- **Package Declaration** ``# @package _global_`` is required and tells the system to merge experiment into global config. **Defaults List** Override default configurations:: defaults: - override /model: gemma3_1b - override /optimizer: adamw **Configuration Overrides** Specific value overrides:: training: num_batches: 100 micro_batch_size: 4 grpo: num_generations: 8 **Metadata** (optional) Add tags for organization:: experiment_name: learning_rate_ablation tags: [ablation, hyperparameter] description: Ablating learning rates from 1e-7 to 1e-4 Example Experiments ------------------- **Memory-Efficient Training** ``conf/experiment/low_memory.yaml``:: # @package _global_ defaults: - override /model: gemma3_270m model: lora_rank: 8 training: micro_batch_size: 1 grpo: num_generations: 2 Use:: python run_training.py +experiment=low_memory **Large Batch Training** ``conf/experiment/large_batch.yaml``:: # @package _global_ defaults: - override /model: gemma3_1b model: lora_rank: 64 training: micro_batch_size: 8 optimizer: learning_rate: 1e-4 Use:: python run_training.py +experiment=large_batch **Ablation Study** ``conf/experiment/lr_ablation.yaml``:: # @package _global_ training: num_batches: 50 experiment_name: learning_rate_ablation tags: [ablation, lr] Then sweep:: python run_training.py +experiment=lr_ablation --multirun \ optimizer.learning_rate=1e-7,1e-6,1e-5,1e-4 Experiment Workflow ------------------- **1. Design Experiment** Create YAML file with settings. **2. Test Configuration** Verify config before running:: python run_training.py +experiment=my_exp --cfg job **3. Run Experiment** Execute the experiment:: python run_training.py +experiment=my_exp **4. Evaluate Results** Check metrics and logs:: python evaluate.py checkpoint_dir=./checkpoints/ckpts/ **5. Document Results** Record findings and best settings for future reference. Combining Experiments with Sweeps ---------------------------------- Run an experiment with parameter sweep:: python run_training.py +experiment=my_exp --multirun \ optimizer.learning_rate=1e-6,3e-6,1e-5 This runs the experiment configuration with three different learning rates. Advanced: Experiment Hierarchies -------------------------------- Create base experiments and extend them:: **Base experiment** ``conf/experiment/base.yaml``:: # @package _global_ defaults: - override /model: gemma3_1b training: num_batches: 100 **Extended experiment** ``conf/experiment/extended.yaml``:: # @package _global_ defaults: - base training: num_batches: 500 micro_batch_size: 4 Naming Conventions ------------------ Recommend consistent naming: - **Descriptive**: ``lr_ablation``, ``batch_size_study`` - **Dated**: ``2024_01_experiment`` - **Tagged**: ``ablation_lr``, ``benchmark_v2`` Examples:: conf/experiment/ ├── quick_test.yaml ├── full_training.yaml ├── ablation_lr.yaml ├── ablation_batch_size.yaml ├── benchmark_v1.yaml ├── benchmark_v2.yaml └── memory_constrained.yaml Best Practices -------------- 1. **Document each experiment**: Add description and tags 2. **Keep experiments reproducible**: Don't change configs after creating experiment 3. **Version experiments**: Use dates or version numbers 4. **Clean naming**: Use descriptive, self-explanatory names 5. **Track results**: Document findings with each experiment 6. **Store important configs**: Keep successful experiments in version control Managing Experiments -------------------- **List all available experiments**:: python run_training.py --info config-groups | grep experiment **Show experiment config**:: python run_training.py +experiment=my_exp --cfg job **Compare experiments** Run multiple and compare results in W&B or TensorBoard. Next Steps ---------- - :doc:`Hyperparameter Tuning ` - :doc:`Training Guide ` - :doc:`Configuration Guide `