ac75faa0cc
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
2.2 KiB
2.2 KiB
Layer Construction Performance Analysis
Current Observations
From test results:
31B Total Load: 64s
Shard Loading: 1.3ms ✓✓✓ (极快)
Layer Construction: 63s ← Bottleneck
Layer Breakdown:
- 60 layers
- Each layer ~1.05s
- MoE layers: 128 experts × ~1.05s = 134.4s (major bottleneck!)
## Analysis
The bottleneck is clearly in **layer construction**, not shard loading.
**Key Operations**:
1. **Weight Reading** - File IO operations
- Each weight requires reading from disk
- MoE: 128 experts × 3 files per expert
- Sequential reads are major bottleneck
2. **Buffer Creation** - Memory allocation
- MTLBuffer creation is relatively fast
- But needs to allocate large buffers
3. **Layer Initialization** - Object creation
- Creating E4BLayer objects
- Setting up quantization parameters
## Next Steps
**Priority 1: Parallel Weight Loading**
- Goal: Reduce weight loading from ~63s to ~20s
- Approach:
1. Pre-identify all weights needed for layer construction
2. Use DispatchGroup to load weights in parallel
3. Store weights in temporary arrays
4. Build layers after all weights loaded
**Expected Improvement**: 3x speedup (63s → 20s)
**Priority 2: MoE Expert Loading Optimization**
- Goal: Reduce MoE expert loading from 134s to 30s
- Approach:
1. Parallel expert loading
2. Batch expert creation
3. Optimize expert weight reading
**Expected Improvement**: 4.5x speedup (134s → 30s)
**Priority 3: Memory Allocation Optimization**
- Goal: Optimize MTLBuffer creation
- Approach:
1. Pre-allocate large buffers
2. Reuse buffers across layers
3. Minimize buffer copies
**Expected Improvement**: 10-15% speedup
## Implementation Priority
**Phase 1** (Immediate): Parallel Weight Loading
- Highest ROI (3x speedup)
- Easiest to implement
- Quick verification
**Phase 2** (Short-term): MoE Expert Loading
- Medium ROI (4.5x speedup)
- More complex
- Requires careful coordination
**Phase 3** (Long-term): Memory Optimization
- Lower ROI (10-15%)
- Most complex
- Requires architecture changes
## Decision
Starting with **Phase 1**: Parallel Weight Loading
- Quick wins
- Clear bottleneck
- Easy to measure and verify