Initial commit: E4B-MarkBase model integration with passing tests
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:
MarkBase Admin
2026-06-23 18:12:35 +08:00
commit ac75faa0cc
301 changed files with 63426 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
#!/usr/bin/env swift
import Foundation
import Metal
print("=== Test Metal Basic ===")
print("Start time: \(Date())")
fflush(stdout)
do {
// Try to create Metal device
guard let device = MTLCreateSystemDefaultDevice() else {
print("ERROR: Cannot create Metal device")
exit(1)
}
print("Metal device: \(device.name)")
fflush(stdout)
guard let commandQueue = device.makeCommandQueue() else {
print("ERROR: Cannot create command queue")
exit(1)
}
print("Command queue created")
fflush(stdout)
// Try a simple compute operation
let source = """
#include <metal_stdlib>
using namespace metal;
kernel void simple_add(device const float* a [[buffer(0)]],
device const float* b [[buffer(1)]],
device float* result [[buffer(2)]],
uint id [[thread_position_in_grid]]) {
result[id] = a[id] + b[id];
}
"""
let library = try device.makeLibrary(source: source, options: nil)
print("Library compiled")
fflush(stdout)
guard let function = library.makeFunction(name: "simple_add") else {
print("ERROR: Cannot create function")
exit(1)
}
print("Function created")
fflush(stdout)
let pipeline = try device.makeComputePipelineState(function: function)
print("Pipeline created")
fflush(stdout)
// Create buffers
let count = 1024
guard let bufferA = device.makeBuffer(length: count * MemoryLayout<Float>.stride),
let bufferB = device.makeBuffer(length: count * MemoryLayout<Float>.stride),
let bufferResult = device.makeBuffer(length: count * MemoryLayout<Float>.stride) else {
print("ERROR: Cannot create buffers")
exit(1)
}
// Fill buffers
let ptrA = bufferA.contents().bindMemory(to: Float.self, capacity: count)
let ptrB = bufferB.contents().bindMemory(to: Float.self, capacity: count)
for i in 0..<count {
ptrA[i] = Float(i)
ptrB[i] = Float(i * 2)
}
// Execute
guard let commandBuffer = commandQueue.makeCommandBuffer(),
let encoder = commandBuffer.makeComputeCommandEncoder() else {
print("ERROR: Cannot create command buffer/encoder")
exit(1)
}
encoder.setComputePipelineState(pipeline)
encoder.setBuffer(bufferA, offset: 0, index: 0)
encoder.setBuffer(bufferB, offset: 0, index: 1)
encoder.setBuffer(bufferResult, offset: 0, index: 2)
let gridSize = MTLSize(width: count, height: 1, depth: 1)
let threadGroupSize = MTLSize(width: min(count, pipeline.maxTotalThreadsPerThreadgroup), height: 1, depth: 1)
encoder.dispatchThreads(gridSize, threadsPerThreadgroup: threadGroupSize)
encoder.endEncoding()
print("Command buffer committed")
fflush(stdout)
commandBuffer.commit()
commandBuffer.waitUntilCompleted()
print("Command buffer completed")
fflush(stdout)
// Verify result
let ptrResult = bufferResult.contents().bindMemory(to: Float.self, capacity: count)
print("Result[0] = \(ptrResult[0]), expected 0")
print("Result[1] = \(ptrResult[1]), expected 3")
print("Result[100] = \(ptrResult[100]), expected 300")
fflush(stdout)
print("Test completed successfully!")
} catch {
print("ERROR: \(error)")
exit(1)
}