Maskinoversættelse · Engelsk original
Qwen3.5 Chat (On- Device LLM)
Qwen3.5-0.8B er en hybrid DeltaNet (lineær opmærksomhed) + GatedOpmærknings model med 24 lag (18 DeltaNet + 6 GatedAldo), kvantificeret til INT4 til MLX (Metal GPU) og INT8 til CoreML (Neural Engine). Kører videre Mac via MLX eller på iPhone og Mac via CoreML med streaming token generation. Designet til voice pipelines, hvor en on- enhed LLM giver "hjernen" mellem ASR og TTS.
Qwen3.5 Chat integrerer med SpeechCore VoicePipeline som LLM komponent i ASR → LLM R. TTS kæder. hybrid DeltaNet arkitektur giver effektiv lineartid opmærksomhed for lange sammenhænge.
Hurtig 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: "")
}
Arkitektur
Qwen3.5-0.8B er en hybrid model med 24 lag: 18 DeltaNet lag (lineær opmærksomhed med gated delta regel gentagelse og RMSNormGated) og 6 GatedOpmærksomhed lag (standard skaleret dot- produkt opmærksomhed). MLX bagenden kører inferens på Metal GPU med safetensorer vægte. CoreML backend bruger en dualmodel arkitektur (prefill + decode) optimeret til Neural Engine. Begge understøtter KV cache med hurtig caching og konfigurerbar prøvetagning (temperatur, top- k, top- p, repetition straight).
Model I / O
| Retning | Navn | Form | Varebeskrivelse |
|---|---|---|---|
| Input | input_ids | [1, ff _ len] | Token-id 'er (Int32) |
| Input | attention_mask | [1, ff _ len] | Opmærksomhed maske (Int32) |
| Input | kv_cache | per- lag | Key- value- cache tilstand |
| Output | logits | [1, 1, 151936] | Next- token logits (Float16) |
| Output | kv_cache_out | per- lag | Opdateret KV cache |
Model Variants
| Variant | Kvantificering | Størrelse | Beregn | 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 |
Konfiguration af prøveudtagning
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 | Varebeskrivelse |
|---|---|---|
temperature | 0.6 | Tilfældighed (0 = grådighed, 1 = kreativ) |
topK | 50 | Hold top K kandidater |
topP | 0.95 | Tærskel for udtagning af prøver af nucleus |
maxTokens | 512 | Maks. respons- tokens |
repetitionPenalty | 1.1 | Penalisér gentagne tokens |
disableThinking | falsk | Skip tænketilstand |
maxThinkingTokens | 100 | Koste til kortlægning af huler |
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
Hukommelseshåndtering
// 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, aflæsning af LLM før TTS inference frees ~418 MB (INT4 MLX) eller ~981 MB (INT8 CoreML), forhindre jetsam opsigelse, når du kører fuld ASR → LLM → TTS rørledninger.
Præstation
| Enhed | Præcille | DecodeCity in Italy | Tokens / sek. |
|---|---|---|---|
| M2 Max | ~ 50ms | ~ 65ms / tok | ~ 15 tok / s |
| iPhone 16 Pro | ~ 1,5 s | ~ 450 ms / tok | ~ 2.2 tok / s |
Konvertering
MLX vægte konverteres fra det oprindelige Qwen3.5-0.8B checkpoint ved hjælp af MLX konverteringsscript. CoreML modeller bruger en separat konvertering script til Neural Engine implementering. Prækonverterede vægte er tilgængelige på HuggingFace på aufklarer / Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) og aufklarer / Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).