Qwen3.5 Chat (LLM ngay trên thiết bị)
Qwen3.5-0.8B là mô hình lai DeltaNet (attention tuyến tính) + GatedAttention với 24 lớp (18 DeltaNet + 6 GatedAttention), được lượng tử hóa xuống INT4 cho MLX (GPU Metal) và INT8 cho CoreML (Neural Engine). Mô hình chạy trên Mac qua MLX, hoặc trên iPhone và Mac qua CoreML với sinh token theo dạng streaming. Được thiết kế cho pipeline giọng nói, nơi LLM chạy trên thiết bị đóng vai trò "bộ não" giữa ASR và TTS.
Qwen3.5 Chat tích hợp với VoicePipeline của SpeechCore như thành phần LLM trong chuỗi ASR → LLM → TTS. Kiến trúc lai DeltaNet cung cấp attention thời gian tuyến tính hiệu quả cho ngữ cảnh dài.
Bắt đầu nhanh
import Qwen3Chat
let chat = try await Qwen35MLXChat.fromPretrained()
// Single response
let response = try chat.generate("What is Swift?", systemPrompt: "Answer briefly.")
print(response)
// Streaming tokens
let stream = chat.chatStream("Tell me a joke", systemPrompt: "Be funny.")
for try await token in stream {
print(token, terminator: "")
}
Kiến trúc
Qwen3.5-0.8B là mô hình lai với 24 lớp: 18 lớp DeltaNet (attention tuyến tính với hồi quy gated delta rule và RMSNormGated) và 6 lớp GatedAttention (scaled dot-product attention chuẩn). Backend MLX chạy suy luận trên GPU Metal với trọng số safetensors. Backend CoreML sử dụng kiến trúc hai mô hình (prefill + decode) tối ưu cho Neural Engine. Cả hai đều hỗ trợ KV cache kèm prompt caching và sampling có thể cấu hình (temperature, top-k, top-p, repetition penalty).
Đầu vào / đầu ra của mô hình
| Hướng | Tên | Hình dạng | Mô tả |
|---|---|---|---|
| Đầu vào | input_ids | [1, seq_len] | ID của token (Int32) |
| Đầu vào | attention_mask | [1, seq_len] | Mask attention (Int32) |
| Đầu vào | kv_cache | theo từng lớp | Trạng thái cache key-value |
| Đầu ra | logits | [1, 1, 151936] | Logits của token kế tiếp (Float16) |
| Đầu ra | kv_cache_out | theo từng lớp | KV cache đã cập nhật |
Các biến thể mô hình
| Biến thể | Lượng tử hóa | Kích thước | Tính toán | HuggingFace |
|---|---|---|---|---|
| Qwen3.5-0.8B Chat | INT4 | 418 MB | GPU Metal (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 |
Cấu hình sampling
let config = ChatSamplingConfig(
temperature: 0.7,
topK: 40,
topP: 0.9,
maxTokens: 128,
repetitionPenalty: 1.1,
disableThinking: false,
maxThinkingTokens: 50
)
let response = try chat.generate("Explain gravity", sampling: config)
| Tham số | Mặc định | Mô tả |
|---|---|---|
temperature | 0.6 | Độ ngẫu nhiên (0 = greedy, 1 = sáng tạo) |
topK | 50 | Giữ K ứng viên hàng đầu |
topP | 0.95 | Ngưỡng nucleus sampling |
maxTokens | 512 | Số token tối đa cho phản hồi |
repetitionPenalty | 1.1 | Phạt token bị lặp lại |
disableThinking | false | Bỏ qua chế độ thinking |
maxThinkingTokens | 100 | Giới hạn token thinking |
Hội thoại nhiều lượt
let chat = try await Qwen35MLXChat.fromPretrained()
let r1 = try chat.generate("My name is Alex", systemPrompt: "Remember the user's name.")
print(r1) // "Nice to meet you, Alex!"
let r2 = try chat.generate("What's my name?")
print(r2) // "Your name is Alex!"
chat.resetConversation() // Clear history and KV cache
Quản lý bộ nhớ
// 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()
Trên iPhone, giải phóng LLM trước khi suy luận TTS sẽ giải phóng khoảng ~418 MB (INT4 MLX) hoặc ~981 MB (INT8 CoreML), giúp tránh bị jetsam chấm dứt tiến trình khi chạy pipeline đầy đủ ASR → LLM → TTS.
Hiệu năng
| Thiết bị | Prefill | Decode | Token/giây |
|---|---|---|---|
| M2 Max | ~50ms | ~65ms/tok | ~15 tok/s |
| iPhone 16 Pro | ~1.5s | ~450ms/tok | ~2.2 tok/s |
Chuyển đổi
Trọng số MLX được chuyển đổi từ checkpoint gốc của Qwen3.5-0.8B bằng script chuyển đổi MLX. Mô hình CoreML dùng một script chuyển đổi riêng để triển khai trên Neural Engine. Các trọng số đã chuyển đổi sẵn có trên HuggingFace tại aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) và aufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).