Traducere automată · Originalul în engleză
Qwen3.5 Chat (On-Device LLM)
Qwen3.5-0.8B este un model hibrid DeltaNet (atentie liniara) + GateAttention cu 24 straturi (18 DeltaNet + 6 GateAttention), cuantizată la INT4 pentru MLX (Metal GPU) și INT8 pentru CoreML (Neural Engine) Rulează pe Mac prin MLX sau pe iPhone și Mac prin CoreML Proiectat pentru conducte de voce, unde un dispozitiv de conectare LLM oferă "creierul" între ASR şi TTS.
Qwen3.5 Chat se integrează cu SpeechCore VoicePipeline ca componenta LLM în ASR → LLM→ Lanţuri TTS. Arhitectura hibridă DeltaNet oferă o atenţie liniară eficientă pentru contexte lungi.
Start rapid
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: "")
}
Arhitectură
Qwen3.5-0.8B este un model hibrid cu 24 straturi: 18 Straturi DeltaNet (atentie liniara cu repetitie a regulii delta portata si RMSNormGated) si 6 Straturi de prindere Gated (atentie standard punct-produs). MLX backend ruleaza deductie pe Metal GPU cu greutăţi de siguranţă. CoreML suport foloseste o arhitectura dual-model (prefill + decod) optimizat pentru Neural Engine. Ambele suport KV cache cu cache-ul prompt și eșantionare configurabilă (temperatura, top-k, top-p, penalizare de repetiție).
Model I/O
| Direcţie | Nume | Forma | Descriere |
|---|---|---|---|
| Intrare | input_ids | [1, continuă_ len] | ID-uri pentru token (Int32) |
| Intrare | attention_mask | [1, continuă_ len] | Masca de atentie (Int32) |
| Intrare | kv_cache | perstrat | Starea cache-ului cu valoare-cheie |
| Ieșire | logits | [1, 1, 151936] | Logite next-token (Float16) |
| Ieșire | kv_cache_out | perstrat | Cache KV actualizat |
Model Variante
| Variantă | Cuantificare | Dimensiune | Calculează | HuggingFace |
|---|---|---|---|---|
| Qwen3.5-0.8B Chat | INT4 | 418 MO | Metal GPU (MLX) | aufklarer/Qwen3.5-0.8B-Chat-MLX |
| Qwen3.5-0.8B Chat | INT8 | 981 MO | Neural Engine (CoreML) | aufklater/Qwen3.5-0.8B-Chat-CoreML |
Configurare eșantionare
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
)
| Parametru | Implicit | Descriere |
|---|---|---|
temperature | 0.6 | Aleatoritate (0 = lacom, 1 = creativ) |
topK | 50 | Păstrați candidații K de top |
topP | 0.95 | Prag de eșantionare Nucleus |
maxTokens | 512 | Jetoane de răspuns maxim |
repetitionPenalty | 1.1 | Penalizează jetoanele repetate |
disableThinking | fals | Sari peste modul de gândire |
maxThinkingTokens | 100 | Jetoane de gândire cu capac |
Conversație multi-turn
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
Managementul memoriei
// 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()
Pe iPhone, descărcarea LLM Înainte TTS Inference frees418 MB (INT4 MLX) sau ~981 MB (INT8 CoreML), prevenirea terminarii jetsam la rularea completă ASR → LLM → TTS conducte.
Performanță
| Dispozitiv | Prefill | Decodează | Tokeni/sec |
|---|---|---|---|
| M2 Max | ~50ms | ~65ms/tok | ~15 tone/s |
| iPhone 16 Pro | ~1,5s | ~450ms/tok | ~2.2 tone/s |
Conversie
MLX Greutățile sunt convertite din original Qwen3.5-0.8B punctul de control folosind MLX Script de conversie. CoreML modele utiliza un script de conversie separat pentru Neural Engine implementare. Greutăți preconvertite sunt disponibile pe HuggingFace la aufklaer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) și aufklaer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).