Tłumaczenie automatyczne · Oryginał angielski
Qwen3.5 Chat (On- Device LLM)
Qwen3.5-0.8B jest hybrydowym modelu DeltaNet (liniowa uwaga) + GathedUwaga z 24 warstwy (18 DeltaNet + 6 Uwaga), oznaczona ilościowo INT4 zamiast MLX (Metal GPU) oraz INT8 zamiast CoreML (Neural Engine). Biega Mac przez MLX lub na iPhone i Mac przez CoreML z generacją tokena strumieniowego. Przeznaczony do gazociągów głosowych, w których urządzenie pokładowe LLM zapewnia "mózg" pomiędzy ASR oraz TTS.
Qwen3.5 Chat integruje się z VoicePipeline SpeechCore jako komponentem LLM w ASR → LLM ® łańcuchy TTS. Hybrydowa architektura DeltaNet zapewnia efektywną liniową uwagę dla długich kontekstów.
Szybki 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 jest modelem hybrydowym z 24 warstwy: 18 Warstwy DeltaNet (uwaga liniowa z powtarzaniem się zasady delta i RMSNormGated) oraz 6 Warstwy GathedWatch (standardowy skalowany dot-produkt uwagi). MLX backend uruchamia wniosek na Metal GPU z ciężarem sejfów. CoreML backend wykorzystuje architekturę dual- model (prefill + decode) zoptymalizowany dla Neural Engine. Obie obsługują pamięci podręcznej KV z szybkim buforowaniem i konfigurowalnym pobieraniem próbek (temperatura, top- k, top-p, kara powtarzania).
Wzór I / O
| Kierunek | Nazwa | Kształt | Opis |
|---|---|---|---|
| Wejście | input_ids | [1, seq _ len] | Token ID (Int32) |
| Wejście | attention_mask | [1, seq _ len] | Maska uwagi (Int32) |
| Wejście | kv_cache | warstwa permanentna | Stan pamięci podręcznej o wartości klawiszowej |
| Wyjście | logits | [1, 1, 151936] | Logity next- token (Float16) |
| Wyjście | kv_cache_out | warstwa permanentna | Aktualizacja pamięci podręcznej KV |
Warianty modelu
| Wariant | Ilościowanie | Rozmiar | Oblicz | 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 |
Konfiguracja pobierania próbek
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 | Domyślne | Opis |
|---|---|---|
temperature | 0.6 | Przypadkowość (0 = chciwość, 1 = kreatywność) |
topK | 50 | Zachowaj najlepszych kandydatów K |
topP | 0.95 | Próg pobierania próbek Nucleus |
maxTokens | 512 | Dekeny odpowiedzi maks. a. |
repetitionPenalty | 1.1 | Kara powtarzanych żetonów |
disableThinking | false | Pomiń tryb myślenia |
maxThinkingTokens | 100 | Trzonek myślący żetony |
Rozmowa wielokierunkowa
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
Zarządzanie pamięcią
// 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, rozładunku LLM przed TTS Zaproszenie jest wolne ~418 MB (INT4 MLX) lub ~981 MB (INT8 CoreML), zapobiegając zakańczaniu jetsam podczas pełnego biegu ASR → LLM → TTS rurociągi.
Wydajność
| Urządzenie | Prefill | Dekodowanie | Tokeny / sek |
|---|---|---|---|
| M2 Max | ~ 50 ms | ~ 65ms / tok | - 15 toków. |
| iPhone 16 Pro | ~ 1,5 s | ~ 450ms / tok | - 2,2 tok / s |
Konwersja
Wagi MLX są konwertowane z oryginalnego punktu kontrolnego Qwen3.5-0.8B przy użyciu skryptu konwersji MLX. Modele CoreML używają oddzielnego skryptu konwersji dla wdrożenia Neural Engine, które są dostępne na HuggingFace aufklarer / Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) oraz aufklarer / Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).