Strojový překlad · Anglický originál
Qwen3.5 Chat (On- Device LLM)
Qwen3.5-0.8B je hybridní DeltaNet (lineární pozornost) + GatedRetence model s 24 vrstvy (18 DeltaNet + 6 GatedAdvisory), kvantifikovaný na INT4 pro MLX (Metal GPU) a INT8 pro CoreML (Neural Engine). Běží Mac prostřednictvím MLX nebo na iPhone a Mac prostřednictvím CoreML s streaming token generací. Určeno pro hlasové potrubí, kde on-zařízení LLM poskytuje "mozek" mezi ASR a TTS.
Qwen3.5 Chat integruje s SpeechCore VoicePipeline jako LLM složka v ASR → LLM › TTS řetězce. Hybridní DeltaNet architektura poskytuje efektivní lineartime pozornost pro dlouhé kontexty.
Rychlý start
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: "")
}
Architektura
Qwen3.5-0.8B je hybridní model s 24 vrstvy: 18 DeltaNet vrstvy (lineární pozornost s blokované delta pravidlo opakování a RMSNormGated) a 6 GatedRecenze vrstvy (standardní měřítko dot- produkt pozornost). MLX backend běží inference na Metal GPU s vahami safetensorů. CoreML backend využívá architekturu dvojitého modelu (předplň + dekódování) optimalizovanou pro Neural Engine. Oba podporují KV cache s rychlým cachováním a konfigurovatelným vzorkováním (teplota, top- k, top-p, opakovaný trest).
Vzor I / O
| Směr | Název | Tvar | Popis |
|---|---|---|---|
| Vstup | input_ids | [1, seq _ len] | Token ID (Int32) |
| Vstup | attention_mask | [1, seq _ len] | Pozor maska (Int32) |
| Vstup | kv_cache | per- vrstva | Stav cache key- value |
| Výstup | logits | [1, 1, 151936] | Next- token logits (Float16) |
| Výstup | kv_cache_out | per- vrstva | Aktualizovaná KV cache |
Vzor Variantů
| Varianta | Kvantizace | Velikost | Vypočítejte | 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 |
Nastavení odběru vzorků
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
)
| Parametr | Výchozí | Popis |
|---|---|---|
temperature | 0.6 | Náhoda (0 = chamtivost, 1 = kreativita) |
topK | 50 | Udržujte top K kandidáty |
topP | 0.95 | Prahová hodnota pro odběr vzorků z jaderných materiálů |
maxTokens | 512 | Maximální reakční tokeny |
repetitionPenalty | 1.1 | Penalizovat opakované žetony |
disableThinking | false | Režim přeskočení myšlení |
maxThinkingTokens | 100 | Kapsle pro přemýšlení |
Víceotáčivý rozhovor
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
Správa paměti
// 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()
Na iPhone, vykládání LLM před TTS inference frees ~418 MB (INT4 MLX) nebo ~981 MB (INT8 CoreML), zabránění vypovězení jetsamu při plném provozu ASR → LLM → TTS potrubí.
Výkonnost
| Zařízení | Náplň | Decode | Tokens / sec |
|---|---|---|---|
| M2 Max | ~ 50ms | ~ 65ms / tok | ~ 15 tok / s |
| iPhone 16 Pro | ~ 1.5s | ~ 450ms / tok | ~ 2.2 tok / s |
Převod
Váhy MLX jsou převedeny z původního kontrolního bodu Qwen3.5-0.8B pomocí konverzního skriptu MLX. CoreML modely používají samostatný konverzní skript pro nasazení Neural Engine, předkonvertované váhy jsou dostupné na HuggingFace na aufklarer / Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) a aufklarer / Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).