From 9e9cdd9c318831dabe74bac87537dce941816263 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 Aug 2025 05:42:38 +0000 Subject: [PATCH 1/3] Initial plan From e530f5b3cfade6f191aff870c9e6774b9465e756 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 Aug 2025 06:09:40 +0000 Subject: [PATCH 2/3] Initial exploration and problem analysis for copilot instructions Co-authored-by: ekellbuch <3643282+ekellbuch@users.noreply.github.com> --- src/deep_ssm.egg-info/PKG-INFO | 58 ++++++++++++++++++ src/deep_ssm.egg-info/SOURCES.txt | 15 +++++ src/deep_ssm.egg-info/dependency_links.txt | 1 + src/deep_ssm.egg-info/top_level.txt | 1 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 151 bytes .../__pycache__/mamba_simple.cpython-39.pyc | Bin 0 -> 10651 bytes .../__pycache__/jax_func.cpython-39.pyc | Bin 0 -> 14240 bytes .../s5_fjax/__pycache__/ssm.cpython-39.pyc | Bin 0 -> 18714 bytes .../__pycache__/ssm_init.cpython-39.pyc | Bin 0 -> 5358 bytes 9 files changed, 75 insertions(+) create mode 100644 src/deep_ssm.egg-info/PKG-INFO create mode 100644 src/deep_ssm.egg-info/SOURCES.txt create mode 100644 src/deep_ssm.egg-info/dependency_links.txt create mode 100644 src/deep_ssm.egg-info/top_level.txt create mode 100644 src/deep_ssm/__pycache__/__init__.cpython-39.pyc create mode 100644 src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc create mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc create mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc create mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/ssm_init.cpython-39.pyc diff --git a/src/deep_ssm.egg-info/PKG-INFO b/src/deep_ssm.egg-info/PKG-INFO new file mode 100644 index 0000000..d32b24f --- /dev/null +++ b/src/deep_ssm.egg-info/PKG-INFO @@ -0,0 +1,58 @@ +Metadata-Version: 2.4 +Name: deep_ssm +Version: 0.0.1 +Summary: Deep State Space Models +Home-page: https://github.com/ekellbuch/deep_ssm +Classifier: License :: OSI Approved :: MIT License +Requires-Python: >=3.7 +Description-Content-Type: test/markdown +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: requires-python +Dynamic: summary + +# Deep sequence models + +## Installation: + +Run the following commands to install the required packages: +``` +./setup_env.sh +``` +Note: if working on sherlock make sure to download the correct modules before running the above command. + +``` +ml python/3.9.0 && ml gcc/10.1.0 && ml cudnn/8.9.0.131 && ml load cuda/12.4.1 +``` +## Baselines: + +- Train [S5 model](https://github.com/lindermanlab/s5) on sequential CIFAR10 +``` +python -m example --grayscale +``` + +- Train a GRU model on the Brain Computer Interface (BCI) dataset from [Willett et al. 2023](https://github.com/fwillett/speechBCI). +``` +1. Download data in directory and export directory path to the environment variable $DEEP_SSM_DATA +gsutil cp gs://cfan/interspeech24/brain2text_competition_data.pkl . +export DEEP_SSM_DATA=/path/to/data + +Note: on sherlock the data is already available in the following directory: +export DEEP_SSM_DATA=/scratch/groups/swl1 + +2. Run code to debug model: +python run.py --config-name="baseline_gru" trainer_cfg.fast_dev_run=1 + +3. Full code to train mode: python run.py --config-name="baseline_gru" +python run.py --config-name="baseline_gru" +``` + + +- Train a [Mamba model](https://github.com/state-spaces/mamba) on the Brain Computer Interface (BCI) dataset from [Willett et al. 2023](https://github.com/fwillett/speechBCI) +``` +python run.py --config-name="baseline_mamba" +``` + + diff --git a/src/deep_ssm.egg-info/SOURCES.txt b/src/deep_ssm.egg-info/SOURCES.txt new file mode 100644 index 0000000..ba5afd4 --- /dev/null +++ b/src/deep_ssm.egg-info/SOURCES.txt @@ -0,0 +1,15 @@ +setup.py +deep_ssm/__init__.py +deep_ssm.egg-info/PKG-INFO +deep_ssm.egg-info/SOURCES.txt +deep_ssm.egg-info/dependency_links.txt +deep_ssm.egg-info/top_level.txt +deep_ssm/data/__init__.py +deep_ssm/data/data_loader.py +deep_ssm/data/data_transforms.py +deep_ssm/models/__init__.py +deep_ssm/models/audio_models.py +deep_ssm/models/bci_models.py +deep_ssm/modules/__init__.py +deep_ssm/modules/module_bci.py +deep_ssm/modules/module_safari.py \ No newline at end of file diff --git a/src/deep_ssm.egg-info/dependency_links.txt b/src/deep_ssm.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/deep_ssm.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/deep_ssm.egg-info/top_level.txt b/src/deep_ssm.egg-info/top_level.txt new file mode 100644 index 0000000..b0e5f7d --- /dev/null +++ b/src/deep_ssm.egg-info/top_level.txt @@ -0,0 +1 @@ +deep_ssm diff --git a/src/deep_ssm/__pycache__/__init__.cpython-39.pyc b/src/deep_ssm/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e16eb2dfbbd07ea0b936d0f73f0ac662854a99b GIT binary patch literal 151 zcmYe~<>g`kg5MjLWq|0%AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUSW{fzwFRQ;mT zyu8#R{qp>xZ2gqf)Pnfp;#>ryxF{LHiI30B%PfhH*DI*J#bJ}1pHiBWY6mj)GY~TX E0Nt7;6#xJL literal 0 HcmV?d00001 diff --git a/src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc b/src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f24322fe9b2d99e9f9bbd1dd9fde1de17b3a1e0 GIT binary patch literal 10651 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 VsU_%?2A5-sw@D3cRkT_9e*>T*cA@|P literal 0 HcmV?d00001 diff --git a/src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc b/src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93c2e0a2cb1667910fde88d51ad63983fc229619 GIT binary patch literal 14240 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 literal 0 HcmV?d00001 diff --git a/src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc b/src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae4b87dc5da6989e167f2e3e187dc03c35e47f0d GIT binary patch literal 18714 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 Date: Thu, 21 Aug 2025 06:14:37 +0000 Subject: [PATCH 3/3] Complete copilot instructions with validated commands and timing expectations Co-authored-by: ekellbuch <3643282+ekellbuch@users.noreply.github.com> --- .github/copilot-instructions.md | 238 ++++++++++++++++++ .gitignore | 7 + src/deep_ssm.egg-info/PKG-INFO | 58 ----- src/deep_ssm.egg-info/SOURCES.txt | 15 -- src/deep_ssm.egg-info/dependency_links.txt | 1 - src/deep_ssm.egg-info/top_level.txt | 1 - .../__pycache__/mamba_simple.cpython-39.pyc | Bin 10651 -> 0 bytes .../__pycache__/jax_func.cpython-39.pyc | Bin 14240 -> 0 bytes .../s5_fjax/__pycache__/ssm.cpython-39.pyc | Bin 18714 -> 0 bytes .../__pycache__/ssm_init.cpython-39.pyc | Bin 5358 -> 0 bytes 10 files changed, 245 insertions(+), 75 deletions(-) create mode 100644 .github/copilot-instructions.md create mode 100644 .gitignore delete mode 100644 src/deep_ssm.egg-info/PKG-INFO delete mode 100644 src/deep_ssm.egg-info/SOURCES.txt delete mode 100644 src/deep_ssm.egg-info/dependency_links.txt delete mode 100644 src/deep_ssm.egg-info/top_level.txt delete mode 100644 src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc delete mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc delete mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc delete mode 100644 src/deep_ssm/mixers/s5_fjax/__pycache__/ssm_init.cpython-39.pyc diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..7283952 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,238 @@ +# Deep Sequence Models (deep_ssm) + +Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here. + +## Working Effectively + +### Environment Setup +**CRITICAL**: Installation can take 45+ minutes due to large dependencies and potential build compilation. NEVER CANCEL build operations. + +#### Method 1: Complete Installation (Recommended) +```bash +# Create conda environment with Python 3.9 +conda create -n deep_ssm python=3.9 +conda activate deep_ssm + +# Install PyTorch with CUDA support - NEVER CANCEL: Takes 10+ minutes +pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 + +# Install core dependencies - NEVER CANCEL: Takes 15+ minutes +pip install lightning==2.3.3 hydra-core==1.2.0 omegaconf==2.2.3 wandb tqdm einops datasets==2.4.0 transformers==4.42.4 pandas scikit-learn==1.5.1 + +# Install mamba dependencies (requires CUDA dev tools) - NEVER CANCEL: Takes 20+ minutes +pip install mamba-ssm[causal-conv1d] causal-conv1d triton==2.2.0 + +# Install package in editable mode +pip install -e src/ +``` + +#### Method 2: Minimal Installation (When full install fails) +```bash +# Use system Python or existing environment +pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 +pip install lightning hydra-core omegaconf wandb tqdm einops +pip install -e src/ +``` + +**When to use**: Network timeouts, missing CUDA dev tools, or CI environments with restrictions. + +#### Method 4: Emergency Minimal Setup (If most packages fail) +```bash +# Only install absolutely essential packages +pip install torch --index-url https://download.pytorch.org/whl/cpu # CPU-only PyTorch +pip install -e src/ +``` + +**When to use**: Severe network restrictions or build environment issues. Only basic imports will work. + +**Note**: If installation fails due to network timeouts or missing CUDA tools, use Method 2. Some advanced models (Mamba) will not work, but basic functionality and S5 models will work. + +**Common Installation Failures**: +- `ReadTimeoutError: HTTPSConnectionPool... Read timed out`: Network issues, retry or use Method 2 +- `NameError: name 'bare_metal_version' is not defined`: CUDA dev tools missing for causal-conv1d +- `subprocess-exited-with-error`: Missing build dependencies, skip problematic packages + +#### Method 3: Development Environment (For Sherlock cluster) +```bash +# Load required modules first +ml python/3.9.0 && ml gcc/10.1.0 && ml cudnn/8.9.0.131 && ml load cuda/12.4.1 +./setup_env.sh +``` + +### Data Setup +```bash +# For BCI experiments, set data environment variable +export DEEP_SSM_DATA=/path/to/data + +# Download BCI data (if needed) +gsutil cp gs://cfan/interspeech24/brain2text_competition_data.pkl . + +# On Sherlock cluster, data is pre-available: +export DEEP_SSM_DATA=/scratch/groups/swl1 +``` + +### Running Training + +#### S5 Model on Sequential CIFAR10 +```bash +# Basic sequential CIFAR10 training - NEVER CANCEL: Takes 30+ minutes per epoch +python -m example + +# Grayscale version (faster convergence) +python -m example --grayscale + +# With wandb logging +python -m example --grayscale --wandb + +# MNIST variant +python -m example --dataset mnist --d_model 256 --weight_decay 0.0 +``` + +#### BCI Models with Hydra Configuration +```bash +# Debug run (quick test) - Takes 2-3 minutes +python run.py --config-name="baseline_gru" trainer_cfg.fast_dev_run=1 + +# Full GRU training - NEVER CANCEL: Takes 60+ minutes +python run.py --config-name="baseline_gru" + +# Mamba model training (requires full installation) - NEVER CANCEL: Takes 90+ minutes +python run.py --config-name="baseline_mamba" +``` + +#### Safari Models (Advanced) +```bash +# Safari training - NEVER CANCEL: Takes 45+ minutes +python scripts/train_safari.py +``` + +## Validation + +### Always Run These Tests After Making Changes +```bash +# Test basic imports (should complete in <30 seconds) +python -c "import deep_ssm; print('Package installed correctly')" + +# Test PyTorch CUDA availability +python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}')" + +# Test configuration loading (only if omegaconf installed) +python -c " +try: + from omegaconf import OmegaConf + print('Hydra configs working') +except ImportError: + print('omegaconf not available - use Method 1 installation') +" + +# Check core dependencies availability +python -c " +try: + import lightning + print('Lightning available') +except ImportError: + print('Lightning NOT available - some training scripts will fail') +" + +# Run basic mixer tests (only if all dependencies available) +# NOTE: This will fail if einops, absl, or other test dependencies are missing +python tests/mixers/test_mixers.py +``` + +### Manual Validation Scenarios +**CRITICAL**: Always test one complete training scenario after making code changes: + +1. **Quick S5 Test** (5 minutes): + ```bash + python -m example --dataset mnist --epochs 1 --batch_size 50 + ``` + +2. **BCI Debug Test** (3 minutes): + ```bash + python run.py --config-name="baseline_gru" trainer_cfg.fast_dev_run=1 + ``` + +3. **Full Training Validation** (30+ minutes - run occasionally): + ```bash + python -m example --grayscale --epochs 5 + ``` + +## Time Expectations and Build Commands + +### Timing Guide (NEVER CANCEL these operations) +- **Environment setup**: 15-45 minutes depending on method and network speed +- **PyTorch installation**: 5-15 minutes (2GB+ download) +- **Complete dependency installation**: 20-40 minutes total +- **S5 CIFAR training**: 30 minutes per epoch (250 epochs = ~125 hours total) +- **BCI model training**: 60-90 minutes for full run +- **Debug runs**: 2-5 minutes +- **Tests**: 30 seconds to 5 minutes +- **Package installation**: 2-3 minutes +- **File operations**: <1 second for basic commands + +### Build Timeout Recommendations +- Set timeout to 60+ minutes for full installations +- Set timeout to 30+ minutes for PyTorch installation +- Set timeout to 20+ minutes for individual large packages +- Use 2+ minute timeouts for basic operations + +### Common Validation Commands +```bash +# Always run before committing - Takes <2 minutes +python -c "import deep_ssm.mixers.s5_fjax.ssm; print('S5 imports work')" +python scripts/run.py --config-name="baseline_gru" trainer_cfg.fast_dev_run=1 + +# Check configuration files +find configs/ -name "*.yaml" | head -5 +``` + +## Repository Structure + +### Key Entry Points +- `example.py`: S5 model training on CIFAR10/MNIST +- `scripts/run.py`: BCI model training with Hydra configs +- `scripts/train_safari.py`: Advanced Safari model training + +### Important Directories +- `src/deep_ssm/`: Core package code +- `src/safari/`: Safari models and utilities submodule +- `configs/bci/`: BCI model configurations +- `configs/configs_safari/`: Safari model configurations +- `tests/mixers/`: Unit tests for mixer layers + +### Configuration Files +- `configs/bci/baseline_gru.yaml`: GRU model config +- `configs/bci/baseline_mamba.yaml`: Mamba model config +- `requirements.txt`: Python dependencies + +## Known Issues and Workarounds + +### Installation Problems +- **Network timeouts**: Use Method 2 installation if pip hangs (common in CI environments) +- **CUDA compilation fails**: Skip mamba-ssm installation, use S5 models only - error: "nvcc was not found" or "bare_metal_version not defined" +- **Conda activation errors**: Use `eval "$(conda shell.bash hook)"` before `conda activate` +- **PyTorch version conflicts**: Install PyTorch first, then other dependencies to avoid conflicts +- **torchtext version issues**: May need to skip specific versions or install without version constraints + +### Runtime Issues +- **CUDA out of memory**: Reduce batch_size in configs +- **Hydra output directory**: Outputs go to `./outputs/YY-MM-DD/HH-MM-SS/` +- **Missing DEEP_SSM_DATA**: BCI models require this environment variable + +### Model-Specific Notes +- **S5 models**: Work with minimal installation +- **Mamba models**: Require full installation with CUDA dev tools +- **Safari models**: Use separate configuration system + +## Performance Notes +- **Expected CIFAR10 accuracy**: 88%+ in 250 epochs +- **BCI dataset**: Large neural time series data +- **GPU recommended**: All models benefit significantly from CUDA +- **Memory usage**: 8GB+ GPU memory for larger models + +## Development Workflow +1. Always test installation with: `python -c "import deep_ssm"` +2. Run debug mode first: `trainer_cfg.fast_dev_run=1` +3. Validate with short runs before full training +4. Monitor GPU memory usage during training +5. Check `./outputs/` directory for results and logs \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d32203b --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.git +*.pyc +__pycache__/ +*.egg-info/ +data/ +outputs/ +checkpoint/ diff --git a/src/deep_ssm.egg-info/PKG-INFO b/src/deep_ssm.egg-info/PKG-INFO deleted file mode 100644 index d32b24f..0000000 --- a/src/deep_ssm.egg-info/PKG-INFO +++ /dev/null @@ -1,58 +0,0 @@ -Metadata-Version: 2.4 -Name: deep_ssm -Version: 0.0.1 -Summary: Deep State Space Models -Home-page: https://github.com/ekellbuch/deep_ssm -Classifier: License :: OSI Approved :: MIT License -Requires-Python: >=3.7 -Description-Content-Type: test/markdown -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: home-page -Dynamic: requires-python -Dynamic: summary - -# Deep sequence models - -## Installation: - -Run the following commands to install the required packages: -``` -./setup_env.sh -``` -Note: if working on sherlock make sure to download the correct modules before running the above command. - -``` -ml python/3.9.0 && ml gcc/10.1.0 && ml cudnn/8.9.0.131 && ml load cuda/12.4.1 -``` -## Baselines: - -- Train [S5 model](https://github.com/lindermanlab/s5) on sequential CIFAR10 -``` -python -m example --grayscale -``` - -- Train a GRU model on the Brain Computer Interface (BCI) dataset from [Willett et al. 2023](https://github.com/fwillett/speechBCI). -``` -1. Download data in directory and export directory path to the environment variable $DEEP_SSM_DATA -gsutil cp gs://cfan/interspeech24/brain2text_competition_data.pkl . -export DEEP_SSM_DATA=/path/to/data - -Note: on sherlock the data is already available in the following directory: -export DEEP_SSM_DATA=/scratch/groups/swl1 - -2. Run code to debug model: -python run.py --config-name="baseline_gru" trainer_cfg.fast_dev_run=1 - -3. Full code to train mode: python run.py --config-name="baseline_gru" -python run.py --config-name="baseline_gru" -``` - - -- Train a [Mamba model](https://github.com/state-spaces/mamba) on the Brain Computer Interface (BCI) dataset from [Willett et al. 2023](https://github.com/fwillett/speechBCI) -``` -python run.py --config-name="baseline_mamba" -``` - - diff --git a/src/deep_ssm.egg-info/SOURCES.txt b/src/deep_ssm.egg-info/SOURCES.txt deleted file mode 100644 index ba5afd4..0000000 --- a/src/deep_ssm.egg-info/SOURCES.txt +++ /dev/null @@ -1,15 +0,0 @@ -setup.py -deep_ssm/__init__.py -deep_ssm.egg-info/PKG-INFO -deep_ssm.egg-info/SOURCES.txt -deep_ssm.egg-info/dependency_links.txt -deep_ssm.egg-info/top_level.txt -deep_ssm/data/__init__.py -deep_ssm/data/data_loader.py -deep_ssm/data/data_transforms.py -deep_ssm/models/__init__.py -deep_ssm/models/audio_models.py -deep_ssm/models/bci_models.py -deep_ssm/modules/__init__.py -deep_ssm/modules/module_bci.py -deep_ssm/modules/module_safari.py \ No newline at end of file diff --git a/src/deep_ssm.egg-info/dependency_links.txt b/src/deep_ssm.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/deep_ssm.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/deep_ssm.egg-info/top_level.txt b/src/deep_ssm.egg-info/top_level.txt deleted file mode 100644 index b0e5f7d..0000000 --- a/src/deep_ssm.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -deep_ssm diff --git a/src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc b/src/deep_ssm/mixers/__pycache__/mamba_simple.cpython-39.pyc deleted file mode 100644 index 6f24322fe9b2d99e9f9bbd1dd9fde1de17b3a1e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10651 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 VsU_%?2A5-sw@D3cRkT_9e*>T*cA@|P diff --git a/src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc b/src/deep_ssm/mixers/s5_fjax/__pycache__/jax_func.cpython-39.pyc deleted file mode 100644 index 93c2e0a2cb1667910fde88d51ad63983fc229619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14240 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 diff --git a/src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc b/src/deep_ssm/mixers/s5_fjax/__pycache__/ssm.cpython-39.pyc deleted file mode 100644 index ae4b87dc5da6989e167f2e3e187dc03c35e47f0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18714 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