Files
markbaseengine/LAYER_LOADING_ANALYSIS.md
MarkBase Admin ac75faa0cc
CI / build-and-test (push) Has been cancelled
Initial commit: E4B-MarkBase model integration with passing tests
- 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
2026-06-23 18:12:35 +08:00

2.2 KiB
Raw Permalink Blame History

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