Automatische vertaling · Engels origineel
Qwen3.5 Chat (op apparaat LLM)
Qwen3.5-0.8B is een hybride DeltaNet (lineaire aandacht) + GatedAttention model met 24 lagen (18 DeltaNet + 6 GatedAttention), gequantiseerd tot INT4 voor MLX (Metal GPU) en INT8 voor CoreML (Neural Engine). Mac via MLX of op iPhone en Mac via CoreML met streaming token generatie. Ontworpen voor spraakleidingen waar een op-apparaat LLM levert de "hersenen" tussen ASR en TTS.
Qwen3.5 Chat integreert met de SpeechCore VoicePipeline als LLM component in ASR → LLM →TTS ketens. De hybride DeltaNet architectuur zorgt voor efficiënte lineaire aandacht voor lange contexten.
Snel starten
import Qwen3Chat
let chat = try await Qwen35MLXChat.fromPretrained()
// Single response
let response = try chat.generate(messages: [
ChatMessage(role: .system, content: "Answer briefly."),
ChatMessage(role: .user, content: "What is Swift?")
])
print(response)
// Streaming tokens
let stream = chat.generateStream(messages: [
ChatMessage(role: .system, content: "Be funny."),
ChatMessage(role: .user, content: "Tell me a joke")
])
for try await token in stream {
print(token, terminator: "")
}
Architectuur
Qwen3.5-0.8B is een hybride model met 24 lagen: 18 DeltaNet-lagen (lineaire aandacht met gated delta regel herhaling en RMSNormGated) en 6 GatedAttention lagen (standaard geschaalde punt-product aandacht). De MLX backend loopt gevolg op de Metal GPU met safetensors gewichten. De CoreML backend gebruikt een dual-model architectuur (prefill + decode) geoptimaliseerd voor de Neural Engine. Beide ondersteunen KV cache met snelle cache en configureerbare sampling (temperatuur, top-k, top-p, herhalingsstraf).
Model I/O
| Richting | Naam | Vorm | Omschrijving |
|---|---|---|---|
| Invoer | input_ids | [1, se_len] | Token ID's (Int32) |
| Invoer | attention_mask | [1, se_len] | Attentiemasker (Int32) |
| Invoer | kv_cache | per laag | Status sleutelwaarde-cache |
| Uitvoer | logits | [1, 1, 151936] | Logits van volgende tonen (Float16) |
| Uitvoer | kv_cache_out | per laag | Bijgewerkte KV-cache |
Model Varianten
| Variant | Kwantisering | Grootte | Berekenen | HuggingFace |
|---|---|---|---|---|
| Qwen3.5-0.8B Chat | INT4 | 418 MB | Metal GPU (MLX) | aufklarer/Qwen3.5-0.8B-Chat-MLX |
| Qwen3.5-0.8B Chat | INT8 | 981 MB | Neural Engine (CoreML) | aufklarer/Qwen3.5-0.8B-Chat-CoreML |
Steekproefconfiguratie
let config = ChatSamplingConfig(
temperature: 0.7,
topK: 40,
topP: 0.9,
maxTokens: 128,
repetitionPenalty: 1.1
)
let response = try chat.generate(
messages: [ChatMessage(role: .user, content: "Explain gravity")],
sampling: config
)
| Parameter | Standaard | Omschrijving |
|---|---|---|
temperature | 0.6 | Willekeurigheid (0 = hebzuchtig, 1 = creatief) |
topK | 50 | Top K-kandidaten behouden |
topP | 0.95 | Drempelwaarde voor nucleusbemonstering |
maxTokens | 512 | Maximale respons tokens |
repetitionPenalty | 1.1 | Herhaalde tokens straffen |
disableThinking | onwaar | Denkmodus overslaan |
maxThinkingTokens | 100 | Cap-denktekens |
Multi-turn gesprek
let chat = try await Qwen35MLXChat.fromPretrained()
let history = [
ChatMessage(role: .system, content: "Remember the user's name."),
ChatMessage(role: .user, content: "My name is Alex"),
ChatMessage(role: .assistant, content: "Nice to meet you, Alex!"),
ChatMessage(role: .user, content: "What's my name?")
]
let response = try chat.generate(messages: history)
print(response) // "Your name is Alex!"
chat.resetState() // Clear inference state for a new conversation
Geheugenbeheer
// Check memory state
print(chat.isLoaded) // true
print(chat.memoryFootprint) // 438304768 (~418 MB)
// Free memory under pressure
chat.unload()
print(chat.isLoaded) // false
// Reload when needed
let chat = try await Qwen35MLXChat.fromPretrained()
Op iPhone, het lossen van de LLM voor TTS gevolggeving vrij ~418 MB (INT4 MLX) of981 MB (INT8 CoreML), het voorkomen van jetsam beëindiging bij vollopen ASR → LLM → TTS pijpleidingen.
Prestaties
| Apparaat | Voorvulling | Decoderen | Tokens/sec |
|---|---|---|---|
| M2 Max | ~50ms | ~65ms/tok | ~15 tok/s |
| iPhone 16 Pro | ~1.5s | ~450ms/tok | ~2,2 ton/s |
Omrekening
MLX gewichten worden omgezet van het originele Qwen3.5-0.8B controlepunt met behulp van het MLX conversie script. CoreML modellen gebruiken een aparte conversie script voor Neural Engine implementatie. Voorgeconverteerde gewichten zijn beschikbaar op HuggingFace op aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) en aufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).