Maskinöversättning · Engelskt original
Qwen3.5 Chatt (On-Device LLM)
Qwen3.5-0.8B är en hybrid DeltaNet (linjär uppmärksamhet) + GatedAttention modell med 24 lager (så)18 DeltaNet + 6 GatedAttention), kvantiserad till INT4 för MLX (Metal GPU) och INT8 för CoreML (Neural Engine) Körs på Mac via via MLX eller på iPhone och Mac via via CoreML med streaming token generation. Designad för röstledningar där en on-device LLM ger "hjärnan" mellan ASR och TTS.
Qwen3.5 Chat integreras med SpeechCore VoicePipeline som LLM-komponenten i ASR LLM → TTS kedjor. Hybrid DeltaNet-arkitekturen ger effektiv linjärtidsuppmätning för långa sammanhang.
Snabbstart
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: "")
}
Arkitektur
Qwen3.5-0.8B är en hybridmodell med 24 Lager: 18 DeltaNet lager (linjär uppmärksamhet med gated delta regel återkommande och RMSNormGated) och 6 GatedAttention skikt (standardskalad dot-produkt uppmärksamhet). MLX backend kör inferens på Metal GPU med säkrare vikter. CoreML backend använder en dual-modell arkitektur (prefill + decode) optimerad för Neural EngineBåda stöder KV cache med snabb cachning och konfigurerbar provtagning (temperatur, top-k, top-p, repetition straff).
Modell I/O
| Riktning | Namnnamn | Shape | Beskrivning |
|---|---|---|---|
| Input | input_ids | [1, seq_len] | Token IDs (Int32) |
| Input | attention_mask | [1, seq_len] | Uppmärksamhetsmask (Int32) |
| Input | kv_cache | per-layer | Key-value Cache State |
| Output | logits | [1, 1, 151936] | Next-token logits (Float16) |
| Output | kv_cache_out | per-layer | Uppdaterad KV-cache |
Modellvarianter
| Variant | Kvantisering | Storlek | Beräkning | 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 |
Sampling Configuration
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 | Standard | Beskrivning |
|---|---|---|
temperature | 0.6 | Slumpmässighet (0 = girighet, 1 = kreativ) |
topK | 50 | Håll topp K kandidater |
topP | 0.95 | Nucleus provtagning tröskelvärde |
maxTokens | 512 | Max svar tokens |
repetitionPenalty | 1.1 | Penalize upprepade tokens |
disableThinking | falska lögner | Skip Think Mode |
maxThinkingTokens | 100 | Cap Think Tokens |
Multi-turn Conversation
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
Memory Management
// 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()
På iPhone, lossning av LLM innan före TTS Inference Frees418 MB (MB)INT4 MLXeller ~981 MB (MB)INT8 CoreML), förhindra jetsam uppsägning när du kör full ASR → LLM → TTS pipelines.
Prestanda
| Enhet | Prefill | Decode | Tokens/Sec |
|---|---|---|---|
| M2 Max | ~50ms | ~65ms/tok | ~15 tok/s |
| iPhone 16 Pro | ~1.5S | ~450ms/tok | ~2.2 tok/s |
Konvertering
MLX vikter omvandlas från den ursprungliga Qwen3.5-0.8B checkpoint med MLX konverteringsskript. CoreML modeller använder en separat omvandling skript för Neural Engine utplacering. Förkonverterade vikter finns på HuggingFace vid ZXQXZ på aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) och aufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).