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.

Sẵn sàng cho pipeline giọng nói

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ướngTênHình dạngMô tả
Đầu vàoinput_ids[1, seq_len]ID của token (Int32)
Đầu vàoattention_mask[1, seq_len]Mask attention (Int32)
Đầu vàokv_cachetheo từng lớpTrạng thái cache key-value
Đầu ralogits[1, 1, 151936]Logits của token kế tiếp (Float16)
Đầu rakv_cache_outtheo từng lớpKV cache đã cập nhật

Các biến thể mô hình

Biến thểLượng tử hóaKích thướcTính toánHuggingFace
Qwen3.5-0.8B ChatINT4418 MBGPU Metal (MLX)aufklarer/Qwen3.5-0.8B-Chat-MLX
Qwen3.5-0.8B ChatINT8981 MBNeural 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 địnhMô tả
temperature0.6Độ ngẫu nhiên (0 = greedy, 1 = sáng tạo)
topK50Giữ K ứng viên hàng đầu
topP0.95Ngưỡng nucleus sampling
maxTokens512Số token tối đa cho phản hồi
repetitionPenalty1.1Phạt token bị lặp lại
disableThinkingfalseBỏ qua chế độ thinking
maxThinkingTokens100Giớ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()
Mẹo quản lý bộ nhớ trên iOS

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ịPrefillDecodeToken/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).