Qwen3-ASR

Qwen3-ASR — это современная многоязычная модель автоматического распознавания речи. Она работает на устройстве с ускорением на Metal GPU через MLX и использует 4-битную квантизацию для эффективного расхода памяти. Доступна в вариантах на 0.6B и 1.7B параметров.

Пайплайн

Пайплайн инференса Qwen3-ASR обрабатывает аудио в четыре этапа:

ЭтапОписание
АудиовходИсходное аудио ресемплируется в моно 16 кГц
Мел-спектрограмма128-канальные признаки мел-фильтрбанка, извлечённые из сигнала
Аудиоэнкодер18-слойный трансформер с блочным вниманием, преобразует мел-фреймы в аудиоэмбеддинги
Текстовый декодер28-слойный трансформер Qwen3 с grouped-query attention (GQA) и rotary position embeddings (RoPE), авторегрессивно генерирует текстовые токены

Производительность

БэкендRTFПиковая памятьПримечания
MLX (GPU)~0.06~2.2 ГБПо умолчанию, самый быстрый односетевой вариант
CoreML + MLX (гибрид)~0.09~400 МБ (энкодер)Энкодер на Neural Engine, декодер на GPU

M2 Max, 64 ГБ. RTF < 1.0 = быстрее реального времени.

Варианты модели

МодельБэкендРазмерHuggingFace
Qwen3-ASR-0.6B (4-bit)MLX680 МБaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B (8-bit)MLX1.0 ГБaufklarer/Qwen3-ASR-0.6B-MLX-8bit
Qwen3-ASR-0.6B (CoreML INT8)CoreML180 МБaufklarer/Qwen3-ASR-CoreML
Qwen3-ASR-1.7B (4-bit)MLX2.1 ГБaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 ГБaufklarer/Qwen3-ASR-1.7B-MLX-8bit

Использование CLI

Транскрибировать аудиофайл моделью Qwen3-ASR по умолчанию:

.build/release/audio transcribe recording.wav

Опции

# Использовать более крупную модель 1.7B
.build/release/audio transcribe recording.wav --model 1.7b

# Указать язык
.build/release/audio transcribe recording.wav --language en

# Потоковый режим с частичными результатами
.build/release/audio transcribe recording.wav --stream --partial

Swift API

Используйте модуль Qwen3ASR, чтобы транскрибировать аудио программно:

import Qwen3ASR

// Загрузить модель (при первом использовании скачивается с HuggingFace)
let model = try await Qwen3ASRModel.loadFromHub()

// Транскрибировать аудиофайл
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.text)

Энкодер на CoreML (Neural Engine)

Запускайте аудиоэнкодер на Neural Engine через CoreML, а текстовый декодер — на GPU через MLX. Такой гибридный подход снижает энергопотребление и освобождает GPU для параллельных задач.

import Qwen3ASR

let encoder = try await CoreMLASREncoder.fromPretrained()
let model = try await Qwen3ASRModel.fromPretrained()
let text = try model.transcribe(
    audio: samples, sampleRate: 16000,
    coremlEncoder: encoder
)
# CLI
.build/release/audio transcribe recording.wav --engine qwen3-coreml

Палетизированный INT8 (180 МБ, косинусное сходство > 0.999) используется по умолчанию. Также доступен вариант INT4 (90 МБ) для развёртываний с ограничениями по размеру.

Потоковый режим

Потоковый режим использует VAD (детекцию голосовой активности), чтобы разбивать аудио на фрагменты и транскрибировать их инкрементально. Это удобно для длинных записей или обработки в реальном времени.

# Потоковый режим с размером сегмента по умолчанию
.build/release/audio transcribe recording.wav --stream

# Ограничить максимальную длительность сегмента
.build/release/audio transcribe recording.wav --stream --max-segment 15

# Показывать промежуточные (частичные) результаты по мере поступления
.build/release/audio transcribe recording.wav --stream --partial

Флаг --max-segment задаёт максимальную длительность сегмента в секундах. Флаг --partial включает вывод частичных результатов, показывая слова по мере их декодирования.

Поддерживаемые форматы

Qwen3-ASR принимает следующие аудиоформаты. Вся входная дорожка автоматически ресемплируется в моно 16 кГц.

Важно

Модели скачиваются с HuggingFace при первом использовании и кэшируются в ~/Library/Caches/qwen3-speech/. 4-битная модель 0.6B весит примерно 1.5 ГБ.