Qwen3.5 Chat (LLM auf dem Gerät)

Qwen3.5-0.8B ist ein hybrides Modell aus DeltaNet (lineare Attention) + GatedAttention mit 24 Schichten (18 DeltaNet + 6 GatedAttention), quantisiert auf INT4 für MLX (Metal-GPU) und INT8 für CoreML (Neural Engine). Läuft auf dem Mac über MLX oder auf iPhone und Mac über CoreML mit Streaming-Token-Erzeugung. Entwickelt für Sprach-Pipelines, in denen ein LLM auf dem Gerät als "Gehirn" zwischen ASR und TTS dient.

Bereit für Sprach-Pipelines

Qwen3.5 Chat integriert sich als LLM-Komponente in ASR → LLM → TTS-Ketten in die SpeechCore-VoicePipeline. Die hybride DeltaNet-Architektur bietet effiziente lineare Attention für lange Kontexte.

Schnellstart

import Qwen3Chat

let chat = try await Qwen35MLXChat.fromPretrained()

// Einzelne Antwort
let response = try chat.generate("What is Swift?", systemPrompt: "Answer briefly.")
print(response)

// Token-Streaming
let stream = chat.chatStream("Tell me a joke", systemPrompt: "Be funny.")
for try await token in stream {
    print(token, terminator: "")
}

Architektur

Qwen3.5-0.8B ist ein hybrides Modell mit 24 Schichten: 18 DeltaNet-Schichten (lineare Attention mit Gated-Delta-Rule-Rekurrenz und RMSNormGated) und 6 GatedAttention-Schichten (standardmäßige Scaled-Dot-Product-Attention). Das MLX-Backend führt die Inferenz auf der Metal-GPU mit safetensors-Gewichten aus. Das CoreML-Backend verwendet eine Dual-Model-Architektur (Prefill + Decode), optimiert für die Neural Engine. Beide unterstützen KV-Cache mit Prompt-Caching und konfigurierbares Sampling (Temperature, top-k, top-p, Repetition Penalty).

Modell-I/O

RichtungNameShapeBeschreibung
Eingabeinput_ids[1, seq_len]Token-IDs (Int32)
Eingabeattention_mask[1, seq_len]Attention-Maske (Int32)
Eingabekv_cachepro SchichtKey-Value-Cache-Zustand
Ausgabelogits[1, 1, 151936]Next-Token-Logits (Float16)
Ausgabekv_cache_outpro SchichtAktualisierter KV-Cache

Modellvarianten

VarianteQuantisierungGrößeComputeHuggingFace
Qwen3.5-0.8B ChatINT4418 MBMetal-GPU (MLX)aufklarer/Qwen3.5-0.8B-Chat-MLX
Qwen3.5-0.8B ChatINT8981 MBNeural Engine (CoreML)aufklarer/Qwen3.5-0.8B-Chat-CoreML

Sampling-Konfiguration

let config = ChatSamplingConfig(
    temperature: 0.7,
    topK: 40,
    topP: 0.9,
    maxTokens: 128,
    repetitionPenalty: 1.1,
    disableThinking: false,
    maxThinkingTokens: 50
)
let response = try chat.generate("Explain gravity", sampling: config)
ParameterStandardBeschreibung
temperature0,6Zufälligkeit (0 = greedy, 1 = kreativ)
topK50Behält die Top-K-Kandidaten
topP0,95Nucleus-Sampling-Schwelle
maxTokens512Maximale Antwort-Tokens
repetitionPenalty1,1Bestraft wiederholte Tokens
disableThinkingfalseThinking-Modus überspringen
maxThinkingTokens100Begrenzt Thinking-Tokens

Mehrstufiges Gespräch

let chat = try await Qwen35MLXChat.fromPretrained()

let r1 = try chat.generate("My name is Alex", systemPrompt: "Remember the user's name.")
print(r1)  // "Nice to meet you, Alex!"

let r2 = try chat.generate("What's my name?")
print(r2)  // "Your name is Alex!"

chat.resetConversation()  // Historie und KV-Cache leeren

Speicherverwaltung

// Speicherzustand prüfen
print(chat.isLoaded)        // true
print(chat.memoryFootprint) // 438304768 (~418 MB)

// Speicher bei Druck freigeben
chat.unload()
print(chat.isLoaded)        // false

// Bei Bedarf neu laden
let chat = try await Qwen35MLXChat.fromPretrained()
Tipp zu iOS-Speicher

Auf dem iPhone gibt das Entladen des LLM vor der TTS-Inferenz ~418 MB (INT4 MLX) oder ~981 MB (INT8 CoreML) frei und verhindert jetsam-Terminierung beim Ausführen vollständiger ASR → LLM → TTS-Pipelines.

Leistung

GerätPrefillDecodeTokens/Sek.
M2 Max~50 ms~65 ms/Token~15 Tokens/s
iPhone 16 Pro~1,5 s~450 ms/Token~2,2 Tokens/s

Konvertierung

MLX-Gewichte werden aus dem ursprünglichen Qwen3.5-0.8B-Checkpoint mit dem MLX-Konvertierungsskript konvertiert. CoreML-Modelle verwenden ein separates Konvertierungsskript für die Neural-Engine-Bereitstellung. Vorkonvertierte Gewichte sind auf HuggingFace unter aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) und aufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB) verfügbar.