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
51 lines
1.5 KiB
Swift
51 lines
1.5 KiB
Swift
// Simple test to verify multimodal inference works
|
|
import MarkBase
|
|
|
|
let modelDir = "/Users/accusys/MarkBaseEngine/models/E4B-MarkBase"
|
|
|
|
print("Loading model...")
|
|
let engine = try E4BEngine(autoCompile: true)
|
|
let model = try E4BModel(modelDir: modelDir, engine: engine, maxContextLength: 512)
|
|
let tokenizer = try TokenizerFactory.load(modelDir: modelDir)
|
|
let sampler = Sampler()
|
|
|
|
print("✓ Model loaded")
|
|
print(" Layers: \(model.numHiddenLayers)")
|
|
print(" Vocab: \(model.vocabSize)")
|
|
|
|
// Test text generation
|
|
print("\n=== Test 1: Text Generation ===")
|
|
let prompt = "Hello"
|
|
let tokens = tokenizer.encode(text: prompt)
|
|
print("Prompt: '\(prompt)'")
|
|
print("Tokens: \(tokens)")
|
|
|
|
// Reset KV cache
|
|
for cache in model.kvCaches {
|
|
cache.reset()
|
|
}
|
|
|
|
// Generate
|
|
print("Generating...")
|
|
var generated = tokens
|
|
for i in 0..<10 {
|
|
let pos = generated.count - 1
|
|
let logits = try model.forward(tokenId: generated.last!, position: pos)
|
|
let nextToken = sampler.sample(logits: logits, temperature: 0.7, topK: 50, topP: 0.95, filterUnusedTokens: true)
|
|
generated.append(nextToken)
|
|
let tokenStr = tokenizer.decode(tokens: [nextToken])
|
|
print(" \(i+1): \(nextToken) '\(tokenStr)'")
|
|
}
|
|
|
|
print("\nOutput: '\(tokenizer.decode(tokens: generated))'")
|
|
|
|
// Test multimodal
|
|
print("\n=== Test 2: Multimodal ===")
|
|
let mm = try MultimodalModel(modelDir: modelDir, engine: engine, maxContextLength: 512)
|
|
print("Multimodal model loaded")
|
|
|
|
if let tower = mm.visionTowerFull {
|
|
print("Vision tower: \(tower.config.numHiddenLayers) layers")
|
|
}
|
|
|