Initial commit: E4B-MarkBase model integration with passing tests
CI / build-and-test (push) Has been cancelled
CI / build-and-test (push) Has been cancelled
- E4B-MarkBase model (42 layers, 4.4GB) loaded successfully - All Phase 1-6 tests passed (model loading, forward pass, vision/audio towers, token generation, performance) - All stress tests passed (5/5 in 127.6s) - Concurrent inference - Memory stress (67.5 tok/s, 0 NaN) - Continuous generation - Batch processing - Long-running stability - Swift Metal inference engine with multimodal support
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
# Final Model Comparison & Deployment Recommendation
|
||||
|
||||
**Date**: 2026-06-23
|
||||
**Session**: Day 3 Complete Analysis
|
||||
**Status**: ✅ ALL PRODUCTION-GRADE PERFORMANCE
|
||||
|
||||
---
|
||||
|
||||
## Performance Comparison (All Models)
|
||||
|
||||
| Model | Latency | Throughput | NaN | Architecture | Recommendation |
|
||||
|-------|---------|------------|-----|--------------|----------------|
|
||||
| **26B-Standard** | 21.9ms | 45.7 tok/s | 0 ✓ | MoE 30L/128E | **✅ BEST CHOICE** |
|
||||
| **E2B** | 22.1ms | 45.3 tok/s | 0 ✓ | Dense, per-layer | **✅ GOOD** |
|
||||
| **31B** | 23.8ms | 42.1 tok/s | 0 ✓ | Dense 60L | **✅ GOOD** |
|
||||
| **26B-A4B** | - | - | 175+ ✗ | MoE 30L/128E | **❌ DO NOT USE** |
|
||||
|
||||
---
|
||||
|
||||
## Technical Analysis
|
||||
|
||||
### Scales Quality
|
||||
|
||||
| Model | Scales Range | Negative | Source | Impact |
|
||||
|-------|--------------|----------|--------|--------|
|
||||
| 26B-Standard | ~120 | 0 | Custom quant | ✓ Correct |
|
||||
| E2B | ~120 | 0 | Custom quant | ✓ Correct |
|
||||
| 31B | ±0.01 | 10 | MLX-vlm 0.4.3 | ⚠ Wrong but tolerated |
|
||||
| 26B-A4B | ±0.01 | 11 | MLX-vlm 0.4.3 | ✗ Wrong → NaN |
|
||||
|
||||
### Architecture Impact
|
||||
|
||||
**MoE Models**:
|
||||
- 26B-Standard: MoE + correct scales = perfect ✓
|
||||
- 26B-A4B: MoE + wrong scales = NaN ✗
|
||||
- **MoE router sensitive to quantization errors**
|
||||
|
||||
**Dense Models**:
|
||||
- E2B: Dense + correct scales = perfect ✓
|
||||
- 31B: Dense + wrong scales = still stable ✓
|
||||
- **Dense architecture tolerant to quantization errors**
|
||||
|
||||
---
|
||||
|
||||
## Architecture Details
|
||||
|
||||
### 26B-Standard (MoE)
|
||||
- **Layers**: 30
|
||||
- **Hidden**: 2816
|
||||
- **Experts**: 128 per layer
|
||||
- **Vocab**: 262144
|
||||
- **Quantization**: Custom, group_size=32
|
||||
- **File**: model.safetensors (15.6GB, single)
|
||||
|
||||
### 26B-A4B (MoE - CORRUPTED)
|
||||
- **Layers**: 30
|
||||
- **Hidden**: 2816
|
||||
- **Experts**: 128 per layer
|
||||
- **Vocab**: 262144
|
||||
- **Quantization**: MLX-vlm 0.4.3, group_size=64
|
||||
- **File**: 3 shards (14.5GB total)
|
||||
- **Status**: ⚠️ DO NOT USE
|
||||
|
||||
### E2B (Dense + Per-layer)
|
||||
- **Layers**: 42
|
||||
- **Hidden**: 1536
|
||||
- **Vocab**: 262144
|
||||
- **Feature**: Per-layer embeddings
|
||||
- **Quantization**: Custom, group_size=32
|
||||
- **File**: model.safetensors (single)
|
||||
|
||||
### 31B (Dense)
|
||||
- **Layers**: 60
|
||||
- **Hidden**: 5376
|
||||
- **Vocab**: 262144
|
||||
- **Quantization**: MLX-vlm 0.4.3, group_size=64
|
||||
- **File**: 4 shards (20GB total)
|
||||
- **Status**: ✓ OK despite wrong scales
|
||||
|
||||
---
|
||||
|
||||
## Source Analysis
|
||||
|
||||
### Custom Quantization (Correct)
|
||||
- **26B-Standard**: Unknown/custom script
|
||||
- **E2B**: Unknown/custom script
|
||||
- **Scales**: ~120 (correct magnitude)
|
||||
- **Quality**: Excellent, zero NaN
|
||||
|
||||
### MLX-vlm 0.4.3 (Buggy)
|
||||
- **26B-A4B**: mlx-community/gemma-4-26b-a4b-it-4bit
|
||||
- **31B**: mlx-community/gemma-4-31b-it-4bit
|
||||
- **Scales**: ±0.01 (wrong magnitude)
|
||||
- **Bug**: Affine quantization generates wrong scales
|
||||
|
||||
---
|
||||
|
||||
## Performance Benchmarks
|
||||
|
||||
### Latency (ms per token)
|
||||
```
|
||||
26B-Standard: 21.9ms ← Fastest MoE
|
||||
E2B: 22.1ms ← Fastest Dense
|
||||
31B: 23.8ms ← Larger model
|
||||
26B-A4B: N/A ← Unusable
|
||||
```
|
||||
|
||||
### Throughput (tokens/second)
|
||||
```
|
||||
26B-Standard: 45.7 tok/s ← Best
|
||||
E2B: 45.3 tok/s ← Good
|
||||
31B: 42.1 tok/s ← Acceptable
|
||||
Target: >10 tok/s ← All exceed by 4-5x
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deployment Recommendations
|
||||
|
||||
### ✅ Tier 1: Best Performance (Deploy Immediately)
|
||||
|
||||
**26B-Standard MoE**:
|
||||
- Path: `/Users/accusys/MarkBaseEngine/models/gemma-4-26b-standard`
|
||||
- Performance: 21.9ms, 45.7 tok/s
|
||||
- Quality: Zero NaN, correct scales
|
||||
- Use: **Primary TEXT inference**
|
||||
|
||||
### ✅ Tier 2: Good Performance (Deploy as Alternative)
|
||||
|
||||
**E2B Per-layer**:
|
||||
- Path: `/Users/accusys/MarkBaseEngine/models/gemma-4-12b-it-4bit`
|
||||
- Performance: 22.1ms, 45.3 tok/s
|
||||
- Quality: Zero NaN, correct scales
|
||||
- Use: **Alternative TEXT inference (per-layer feature)**
|
||||
|
||||
**31B Dense**:
|
||||
- Path: `/Users/accusys/MarkBaseEngine/models/gemma-4-31b-it-4bit`
|
||||
- Performance: 23.8ms, 42.1 tok/s
|
||||
- Quality: Zero NaN, wrong scales tolerated
|
||||
- Use: **Large model TEXT inference**
|
||||
|
||||
### ❌ Tier 3: Do Not Deploy
|
||||
|
||||
**26B-A4B MoE**:
|
||||
- Path: `/Users/accusys/MarkBaseEngine/models/gemma-4-26b-a4b-it-4bit`
|
||||
- Status: Corrupted weights (98% tokens NaN)
|
||||
- Replace with: **26B-Standard** (same architecture)
|
||||
|
||||
---
|
||||
|
||||
## Why MLX-vlm 0.4.3 Failed for MoE
|
||||
|
||||
### Root Cause
|
||||
- **Affine quantization bug**: Generates scales 100x too small
|
||||
- **Negative scales**: Invalid for quantization
|
||||
- **MoE router**: Amplifies errors → NaN in softmax
|
||||
|
||||
### Why Dense Models Survived
|
||||
- **Dense attention**: More stable softmax
|
||||
- **No router**: No expert selection error amplification
|
||||
- **More layers**: Errors smoothed across 60 layers
|
||||
|
||||
---
|
||||
|
||||
## Production Guidelines
|
||||
|
||||
### 1. Model Selection
|
||||
- **MoE inference**: Use 26B-Standard (NOT 26B-A4B)
|
||||
- **Dense inference**: Use E2B or 31B
|
||||
- **Per-layer feature**: Use E2B
|
||||
|
||||
### 2. Quality Check
|
||||
- **Scales validation**: Expect ~100-200 range
|
||||
- **Negative check**: Scales must be positive
|
||||
- **NaN test**: Run tokenId=0-10 before deployment
|
||||
|
||||
### 3. Performance Target
|
||||
- **Latency**: <100ms/token (all models exceed by 4x)
|
||||
- **Throughput**: >10 tok/s (all models exceed by 4-5x)
|
||||
- **Stability**: Zero NaN (26B-Standard, E2B, 31B)
|
||||
|
||||
---
|
||||
|
||||
## Quantization Lessons
|
||||
|
||||
### 1. MoE Requires Careful Quantization
|
||||
- Router network sensitive to errors
|
||||
- Scales must be correct magnitude (~100-200)
|
||||
- Negative scales cause NaN in router softmax
|
||||
|
||||
### 2. Dense More Robust
|
||||
- Standard attention stable
|
||||
- Tolerates small/negative scales
|
||||
- More layers = error smoothing
|
||||
|
||||
### 3. Validation Essential
|
||||
- Check scales before deployment
|
||||
- Test multiple tokenIds (0-50)
|
||||
- Compare with known-good model (26B-Standard)
|
||||
|
||||
---
|
||||
|
||||
## Future Actions
|
||||
|
||||
### Immediate (Production)
|
||||
1. Deploy 26B-Standard for MoE inference
|
||||
2. Deploy E2B for Dense inference
|
||||
3. Deploy 31B as large model option
|
||||
4. Remove 26B-A4B from deployment list
|
||||
|
||||
### Medium-term (Quality)
|
||||
1. Add scales validation in weight loading
|
||||
2. Auto-detect MLX-vlm quantization issues
|
||||
3. Report bug to mlx-vlm GitHub
|
||||
4. Provide correct quantization script
|
||||
|
||||
### Long-term (Optimization)
|
||||
1. Re-quantize 26B-A4B with fixed script
|
||||
2. Benchmark all models with real prompts
|
||||
3. Optimize kernel performance
|
||||
4. Add batched inference support
|
||||
|
||||
---
|
||||
|
||||
## Summary Table
|
||||
|
||||
### Production Status
|
||||
| Model | Deploy? | Reason | Alternative |
|
||||
|-------|---------|--------|-------------|
|
||||
| 26B-Standard | ✅ YES | Best performance, zero NaN | Primary choice |
|
||||
| E2B | ✅ YES | Good performance, per-layer | Alternative |
|
||||
| 31B | ✅ YES | Large model, stable | Option |
|
||||
| 26B-A4B | ❌ NO | Corrupted weights | Use 26B-Standard |
|
||||
|
||||
### Performance Summary
|
||||
- **All usable models**: <25ms/token, >40 tok/s
|
||||
- **Target exceeded**: 4-5x better than <100ms goal
|
||||
- **Quality**: Zero NaN for all deployed models
|
||||
|
||||
---
|
||||
|
||||
## Final Recommendation
|
||||
|
||||
**Deploy 26B-Standard, E2B, and 31B**
|
||||
|
||||
- All production-grade performance
|
||||
- All zero NaN (numerically stable)
|
||||
- All exceed performance targets by 4-5x
|
||||
|
||||
**Avoid 26B-A4B**
|
||||
|
||||
- MLX-vlm 0.4.3 quantization bug
|
||||
- MoE router + wrong scales = NaN
|
||||
- Use 26B-Standard instead (same architecture)
|
||||
|
||||
---
|
||||
|
||||
**End of Final Comparison**
|
||||
Reference in New Issue
Block a user