|
| 1 | +# Release Notes - v0.3.0 Community Release |
| 2 | + |
| 3 | +**Release Date:** 11 January 2026 |
| 4 | +**Status:** Ready for community feedback |
| 5 | + |
| 6 | +## Overview |
| 7 | + |
| 8 | +v0.3.0 represents a major expansion of the MAX Learning repository, growing from 3 examples to 6 progressive examples with comprehensive testing, benchmarking, and documentation. This release transforms the repository from a focused DistilBERT demonstration into a complete learning path for MAX Graph API. |
| 9 | + |
| 10 | +## What's New |
| 11 | + |
| 12 | +### 🎯 Six Progressive Examples |
| 13 | + |
| 14 | +1. **Element-wise Operations** - Basic ops (mul, add, relu) |
| 15 | + - ✅ Works on CPU and Apple Silicon GPU |
| 16 | + - Includes minimal and full versions |
| 17 | + |
| 18 | +2. **Linear Layer** - Matrix operations (matmul, transpose, bias) |
| 19 | + - ✅ Works on CPU |
| 20 | + - ❌ Apple Silicon GPU (matmul kernel missing) |
| 21 | + - Includes minimal and full versions |
| 22 | + |
| 23 | +3. **DistilBERT Sentiment** - Full transformer (66M parameters) |
| 24 | + - 🚀 5.58x speedup vs PyTorch on M1 CPU |
| 25 | + - Production-quality inference |
| 26 | + |
| 27 | +4. **MLP Regression** - Multi-layer perceptron |
| 28 | + - 3 hidden layers |
| 29 | + - Housing price prediction |
| 30 | + - NEW in v0.3.0 |
| 31 | + |
| 32 | +5. **CNN MNIST** - Convolutional neural network |
| 33 | + - 2 conv + 2 dense layers |
| 34 | + - Digit classification |
| 35 | + - NEW in v0.3.0 |
| 36 | + |
| 37 | +6. **RNN Forecast** - Recurrent network |
| 38 | + - 🚧 WIP - Parked due to MAX Graph API limitations |
| 39 | + - NEW in v0.3.0 |
| 40 | + |
| 41 | +### ⭐ Minimal Examples |
| 42 | + |
| 43 | +New self-contained minimal examples for element-wise and linear layer operations: |
| 44 | +- No configuration files |
| 45 | +- No helper functions |
| 46 | +- Pure MAX Graph API |
| 47 | +- Clear 4-step structure: Build → Compile → Run → Results |
| 48 | +- ~120-140 lines each |
| 49 | +- Perfect starting point for learning |
| 50 | + |
| 51 | +### 🧪 Comprehensive Testing |
| 52 | + |
| 53 | +- **49 tests** (up from 30) |
| 54 | +- Correctness validation for all examples |
| 55 | +- Tests mirror example structure: |
| 56 | + - `tests/python/01_elementwise/` |
| 57 | + - `tests/python/02_linear_layer/` |
| 58 | + - `tests/python/03_distilbert/` |
| 59 | + - `tests/python/03_mlp/` |
| 60 | + - `tests/python/04_cnn_mnist/` |
| 61 | + |
| 62 | +### 📊 Enhanced Benchmarking |
| 63 | + |
| 64 | +- **MAX vs PyTorch comparisons** for all neural network models |
| 65 | +- Correctness verification (max absolute error checks) |
| 66 | +- Reports in MD/JSON/CSV formats |
| 67 | +- Machine ID in filenames for multi-system tracking |
| 68 | +- New benchmarks: |
| 69 | + - `benchmarks/03_mlp/` - MLP vs PyTorch |
| 70 | + - `benchmarks/04_cnn/` - CNN vs PyTorch |
| 71 | + |
| 72 | +### 📦 Package Restructuring |
| 73 | + |
| 74 | +- All Python modules now installable via `src/python/pyproject.toml` |
| 75 | +- Eliminated ALL `sys.path` manipulation from codebase |
| 76 | +- Created `utils` package with: |
| 77 | + - `paths.py` - Project root detection via pixi.toml/.git search |
| 78 | + - `benchmark_utils.py` - Shared benchmarking utilities |
| 79 | +- Editable installs via pixi: `[pypi-dependencies]` |
| 80 | +- Version synchronised: pyproject.toml and pixi.toml both at 0.3.0 |
| 81 | + |
| 82 | +### 📚 Documentation Overhaul |
| 83 | + |
| 84 | +- **README.md** completely rewritten: |
| 85 | + - Clear "Why This Repository?" section |
| 86 | + - All 6 examples documented in order (1️⃣-6️⃣) |
| 87 | + - Performance highlights (successes AND limitations) |
| 88 | + - Progressive learning path articulated |
| 89 | + - Repository structure expanded |
| 90 | + |
| 91 | +- **Example READMEs updated**: |
| 92 | + - Document minimal vs full versions |
| 93 | + - Explain when to use each |
| 94 | + - Include expected output |
| 95 | + |
| 96 | +- **Community announcements**: |
| 97 | + - Long version: comprehensive feature documentation |
| 98 | + - Short version: 120-word summary |
| 99 | + - Moved to `docs/planning/` |
| 100 | + |
| 101 | +## Performance Results |
| 102 | + |
| 103 | +### ✅ Where MAX Excels |
| 104 | + |
| 105 | +**DistilBERT (M1 CPU, batch=1)** |
| 106 | +- MAX: 45.88ms mean |
| 107 | +- PyTorch: 255.85ms mean |
| 108 | +- **Result: 5.58x speedup** 🚀 |
| 109 | + |
| 110 | +### ⚠️ Where PyTorch is Faster |
| 111 | + |
| 112 | +**MLP Regression (M1 CPU, batch=2048)** |
| 113 | +- MAX: 142ms |
| 114 | +- PyTorch: 0.56ms |
| 115 | +- Result: PyTorch ~253x faster |
| 116 | + |
| 117 | +**CNN MNIST (M1 CPU, batch=256)** |
| 118 | +- PyTorch: ~5x faster than MAX |
| 119 | +- Note: Both produce identical predictions |
| 120 | + |
| 121 | +**Takeaway:** MAX shines on transformers but PyTorch is faster on smaller workloads (MLP, CNN) on Apple Silicon. |
| 122 | + |
| 123 | +### 🍎 Apple Silicon GPU Status |
| 124 | + |
| 125 | +- ✅ **Element-wise operations working** (first reported MAX Graph GPU inference) |
| 126 | +- ❌ **Matrix operations blocked** - matmul kernel not available |
| 127 | +- Blocks: transformers, MLP, CNN on GPU |
| 128 | + |
| 129 | +## Breaking Changes |
| 130 | + |
| 131 | +None - this is a purely additive release. |
| 132 | + |
| 133 | +## Migration Guide |
| 134 | + |
| 135 | +If upgrading from v0.2.0: |
| 136 | +1. Run `pixi install` to install new package structure |
| 137 | +2. No code changes required - all examples remain compatible |
| 138 | +3. New examples are opt-in |
| 139 | + |
| 140 | +## What's Next (v0.4.0 candidates) |
| 141 | + |
| 142 | +- Larger models: LLaMA, Mistral via MAX Pipeline API |
| 143 | +- Batch inference optimisation |
| 144 | +- Quantisation experiments (INT8/INT4) |
| 145 | +- More GPU work when matmul kernels available |
| 146 | + |
| 147 | +## Installation |
| 148 | + |
| 149 | +```bash |
| 150 | +git clone https://github.com/DataBooth/max-learning |
| 151 | +cd max-learning |
| 152 | +pixi install |
| 153 | + |
| 154 | +# Start with minimal examples |
| 155 | +pixi run python examples/python/01_elementwise/elementwise_minimal.py |
| 156 | +pixi run python examples/python/02_linear_layer/linear_layer_minimal.py |
| 157 | +``` |
| 158 | + |
| 159 | +## Requirements |
| 160 | + |
| 161 | +- MAX 25.1.0 or later |
| 162 | +- Pixi package manager |
| 163 | +- Python 3.11+ |
| 164 | + |
| 165 | +## Contributors |
| 166 | + |
| 167 | +This release was made possible by thorough testing, benchmarking, and documentation work. |
| 168 | + |
| 169 | +## Acknowledgements |
| 170 | + |
| 171 | +- [Modular](https://modular.com) for MAX Engine |
| 172 | +- [DataBooth](https://www.databooth.com.au) for sponsoring this learning exploration |
| 173 | +- Community for early feedback |
| 174 | + |
| 175 | +## Licence |
| 176 | + |
| 177 | +MIT Licence |
| 178 | + |
| 179 | +--- |
| 180 | + |
| 181 | +**Full Changelog:** https://github.com/DataBooth/max-learning/compare/v0.2.0...v0.3.0 |
0 commit comments