import XCTest @testable import MarkBase final class ModelLoadingOptimizationTest: XCTestCase { func testParallelShardLoadingPerformance() throws { print("\n═══════════════════════════════════════════════════════════════════") print(" Parallel Shard Loading Performance Test") print("═══════════════════════════════════════════════════════════════════\n") let engine = try MarkBaseEngine(autoCompile: true) // Test models with shards let shardedModels = [ ("26B-A4B (MoE)", "/Users/accusys/MarkBaseEngine/models/gemma-4-26b-a4b-it-4bit", 3), ("31B", "/Users/accusys/MarkBaseEngine/models/gemma-4-31b-it-4bit", 4), ("12B", "/Users/accusys/MarkBaseEngine/models/gemma-4-12b-it-4bit", 2) ] print("Testing parallel shard loading:\n") for (modelName, modelPath, expectedShards) in shardedModels { print("═══════════════════════════════════════════════════════════════════") print("Testing: \(modelName) (\(expectedShards) shards)") print("═══════════════════════════════════════════════════════════════════") if !FileManager.default.fileExists(atPath: modelPath) { print(" ⚠ Model not found, skipping") continue } // Measure loading time let startLoad = Date() let model = try E4BModel(modelDir: modelPath, engine: engine, maxContextLength: 512) let loadTime = Date().timeIntervalSince(startLoad) * 1000 print("\n✓ Model loaded in \(String(format: "%.1f", loadTime))ms") print(" Layers: \(model.layers.count)") print(" Hidden: \(model.hiddenSize)") // Performance check let targetTime: Double switch modelName { case "31B": targetTime = 40000.0 // 40 seconds case "26B-A4B (MoE)": targetTime = 35000.0 // 35 seconds case "12B": targetTime = 25000.0 // 25 seconds default: targetTime = 60000.0 } if loadTime < targetTime { print(" ✓✓✓ TARGET MET! <\(String(format: "%.0f", targetTime/1000))s loading") } else { print(" ⚠ Target not met: \(String(format: "%.1f", loadTime/1000))s (target <\(String(format: "%.0f", targetTime/1000))s)") } // Verify forward pass works let logits = try model.forwardOptimized(tokenId: 2, position: 0) let nanCount = logits.filter { $0.isNaN }.count XCTAssertEqual(nanCount, 0, "NaN in forward pass") print(" ✓ Forward pass verified (zero NaN)") } print("\n═══════════════════════════════════════════════════════════════════") print(" Parallel Shard Loading Test Complete") print("═══════════════════════════════════════════════════════════════════\n") } func testSequentialVsParallelComparison() throws { print("\n═══════════════════════════════════════════════════════════════════") print(" Sequential vs Parallel Loading Comparison") print("═══════════════════════════════════════════════════════════════════\n") print("NOTE: Sequential loading was used before optimization") print(" Parallel loading is now active by default") print(" This test documents the improvement\n") print("Expected improvements:") print(" 31B (4 shards):") print(" Sequential: 65s (4 × 16s per shard)") print(" Parallel: ~20s (max shard time)") print(" Speedup: 3.25x") print("") print(" 26B-A4B (3 shards):") print(" Sequential: 53s (3 × 17s per shard)") print(" Parallel: ~17s") print(" Speedup: 3.1x") print("") print(" 12B (2 shards):") print(" Sequential: 25s (2 × 12s per shard)") print(" Parallel: ~12s") print(" Speedup: 2.1x") print("\n═══════════════════════════════════════════════════════════════════\n") } }