Qwen3-ASR

Qwen3-ASR es un modelo de reconocimiento automático del habla multilingüe de última generación. Se ejecuta en el dispositivo con aceleración GPU Metal mediante MLX, con cuantización de 4 bits para un uso eficiente de memoria. Disponible en variantes de 0.6B y 1.7B parámetros.

Pipeline

El pipeline de inferencia de Qwen3-ASR procesa el audio en cuatro etapas:

EtapaDescripción
Entrada de audioAudio en bruto remuestreado a 16 kHz mono
Espectrograma melCaracterísticas del banco de filtros mel de 128 bins extraídas de la forma de onda
Codificador de audioTransformer de 18 capas con atención por bloques, procesa los fotogramas mel en embeddings de audio
Decodificador de textoTransformer Qwen3 de 28 capas con atención de consulta agrupada (GQA) y embeddings de posición rotatorios (RoPE), genera tokens de texto de forma autorregresiva

Rendimiento

BackendRTFMemoria picoNotas
MLX (GPU)~0.06~2.2 GBPor defecto, el modelo único más rápido
CoreML + MLX (híbrido)~0.09~400 MB (codificador)Codificador en Neural Engine, decodificador en GPU

M2 Max, 64 GB. RTF < 1.0 = más rápido que tiempo real.

Variantes del modelo

ModeloBackendTamañoHuggingFace
Qwen3-ASR-0.6B (4-bit)MLX680 MBaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B (8-bit)MLX1.0 GBaufklarer/Qwen3-ASR-0.6B-MLX-8bit
Qwen3-ASR-0.6B (CoreML INT8)CoreML180 MBaufklarer/Qwen3-ASR-CoreML
Qwen3-ASR-1.7B (4-bit)MLX2.1 GBaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 GBaufklarer/Qwen3-ASR-1.7B-MLX-8bit

Uso de CLI

Transcribe un archivo de audio con el modelo Qwen3-ASR por defecto:

.build/release/audio transcribe recording.wav

Opciones

# Usar el modelo más grande de 1.7B
.build/release/audio transcribe recording.wav --model 1.7b

# Especificar el idioma
.build/release/audio transcribe recording.wav --language en

# Modo streaming con resultados parciales
.build/release/audio transcribe recording.wav --stream --partial

API Swift

Usa el módulo Qwen3ASR para transcribir audio programáticamente:

import Qwen3ASR

// Carga el modelo (descarga desde HuggingFace en el primer uso)
let model = try await Qwen3ASRModel.loadFromHub()

// Transcribe un archivo de audio
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.text)

Codificador CoreML (Neural Engine)

Ejecuta el codificador de audio en el Neural Engine mediante CoreML, con el decodificador de texto en GPU mediante MLX. Este enfoque híbrido reduce el consumo de energía y libera la GPU para cargas de trabajo concurrentes.

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 con paleta (180 MB, similitud coseno > 0.999) es la opción por defecto. También está disponible una variante INT4 (90 MB) para despliegues con restricciones de tamaño.

Modo streaming

El modo streaming usa VAD (detección de actividad vocal) para segmentar el audio en chunks y transcribirlos de forma incremental. Es útil para grabaciones largas o procesamiento en tiempo real.

# Streaming con tamaño de segmento por defecto
.build/release/audio transcribe recording.wav --stream

# Controlar la duración máxima del segmento
.build/release/audio transcribe recording.wav --stream --max-segment 15

# Mostrar resultados parciales (en progreso) a medida que llegan
.build/release/audio transcribe recording.wav --stream --partial

El flag --max-segment controla la duración máxima del chunk en segundos. El flag --partial habilita la salida de resultados parciales, mostrando palabras a medida que se decodifican.

Formatos soportados

Qwen3-ASR acepta los siguientes formatos de audio. Toda la entrada se remuestrea automáticamente a 16 kHz mono internamente.

Importante

Los modelos se descargan desde HuggingFace en el primer uso y se almacenan en caché en ~/Library/Caches/qwen3-speech/. El modelo 0.6B de 4 bits ocupa aproximadamente 1.5 GB.