# Windows NNUE Pipeline — Complete Guide

## Quick Links

**Start here:** [`README_WINDOWS.md`](README_WINDOWS.md) — 5-minute quick start

## Documentation Files

| File | Purpose | Time to Read |
|------|---------|------|
| **README_WINDOWS.md** | Windows quick start guide | 5 min |
| **WINDOWS_SETUP.md** | Detailed Windows setup with troubleshooting | 10 min |
| **QUICKSTART.md** | Cross-platform quick reference | 5 min |
| **python/README_NNUE.md** | Complete pipeline documentation | 15 min |
| **NNUE_IMPLEMENTATION_SUMMARY.md** | Technical implementation details | 10 min |

## Launcher Scripts

All scripts work from `modules\bot\` directory.

### Windows Command Prompt / PowerShell

```cmd
set STOCKFISH_PATH=C:\path\to\stockfish.exe
run_nnue_pipeline.bat
```

### PowerShell (Colorful, Recommended)

```powershell
$env:STOCKFISH_PATH = "C:\path\to\stockfish.exe"
.\run_nnue_pipeline.ps1
```

### Git Bash / WSL

```bash
export STOCKFISH_PATH=/c/path/to/stockfish.exe
bash run_nnue_pipeline.sh
```

## Python Pipeline Scripts

Located in `modules\bot\python\`:

| Script | Purpose |
|--------|---------|
| **generate_positions.py** | Step 1: Generate 500K random positions |
| **label_positions.py** | Step 2: Evaluate with Stockfish |
| **train_nnue.py** | Step 3: Train neural network |
| **export_weights.py** | Step 4: Export to Scala |
| **run_pipeline.bat** | Windows batch runner |
| **run_pipeline.sh** | Bash runner |

## Getting Started (3 Steps)

### 1. Install Python

```cmd
REM Check if Python is installed
python --version

REM If not, download from https://python.org
REM During installation, CHECK "Add Python to PATH"
```

### 2. Install Dependencies

```cmd
cd modules\bot\python
pip install -r requirements.txt
```

### 3. Get Stockfish

- Download from https://stockfishchess.org/download/
- Extract to `C:\stockfish`
- Verify: `C:\stockfish\stockfish.exe --version`

### 4. Run Pipeline

```cmd
cd modules\bot
set STOCKFISH_PATH=C:\stockfish\stockfish.exe
run_nnue_pipeline.bat
```

## FAQ

### How long does it take?

- Step 1 (positions): 2-3 minutes
- Step 2 (Stockfish): **24-36 hours** ← slowest
- Step 3 (training): 2-4 hours (faster with GPU)
- Step 4 (export): 1 minute
- **Total: 26-40 hours**

### Can I pause and resume?

Yes! The pipeline saves progress:
1. Press `Ctrl+C` to stop
2. Run the pipeline again - it will resume where it left off

### Does it use my GPU?

Yes, automatically! If you have NVIDIA GPU:
- Training will be 5-10x faster
- Requires CUDA Toolkit (optional, not required)

### Can I test with fewer positions?

Yes! Edit `python\generate_positions.py`:
```python
# Change line 9 from:
for game_num in range(500000):

# To:
for game_num in range(10000):
```

This will complete in ~30 minutes instead of 26+ hours.

## File Locations After Pipeline

```
modules\bot\
├── python\
│   ├── positions.txt                    (15 MB - raw positions)
│   ├── training_data.jsonl              (100 MB - FEN + eval)
│   ├── nnue_weights.pt                  (3 MB - trained weights)
│   └── [python scripts]
├── src\main\scala\de\nowchess\bot\bots\nnue\
│   ├── NNUEWeights.scala                (10 MB - generated weights)
│   ├── NNUE.scala                       (inference engine)
│   ├── EvaluationNNUE.scala             (weights trait)
│   └── NNUEBot.scala                    (bot implementation)
└── [launcher scripts]
```

## Environment Variables

Set these before running the pipeline:

```cmd
REM Required (unless Stockfish is in PATH)
set STOCKFISH_PATH=C:\stockfish\stockfish.exe

REM Optional: specify Python version
set PYTHON_CMD=python3
```

Or in PowerShell:

```powershell
$env:STOCKFISH_PATH = "C:\stockfish\stockfish.exe"
$env:PYTHON_CMD = "python3"
```

## Troubleshooting Flow

1. **Python not found** → Install from python.org, check "Add to PATH"
2. **Stockfish not found** → Download from stockfishchess.org, set `STOCKFISH_PATH`
3. **Module not found** → Run `pip install -r requirements.txt`
4. **GPU out of memory** → Reduce batch size in `train_nnue.py`
5. **Pipeline hangs** → Check `training_data.jsonl` size, Stockfish evaluation is slow

See **WINDOWS_SETUP.md** for detailed troubleshooting.

## Next Steps After Pipeline

1. **Verify output:**
   ```cmd
   cd ..\..\
   compile.bat
   test.bat
   ```

2. **Use NNUEBot in your engine:**
   ```scala
   val bot = new NNUEBot(difficulty, rules, book)
   val move = bot.nextMove(context)
   ```

## Support

- **Quick help:** README_WINDOWS.md
- **Detailed help:** WINDOWS_SETUP.md
- **Technical details:** NNUE_IMPLEMENTATION_SUMMARY.md
- **Complete reference:** python/README_NNUE.md

---

**Platform:** Windows 10/11 (tested on Windows 11)  
**Requirements:** Python 3.8+, Stockfish 14+  
**Languages:** Python, Scala 3  
**Status:** ✅ Production Ready
