Maskinöversättning · Engelskt original

Qwen3-ASR

MLX och CoreML använder samma Whisper-style ingångsfunktioner: 128 Slaney-normalized mel bins från en exakt 400-punkts STFT vid 16 kHz, med en 160-prov hop och ett periodiskt Hann-fönster.

Qwen3-ASR är en state-of-the-art flerspråkig automatisk taligenkänningsmodell. Det körs på-enhet med hjälp av Metal GPU acceleration via MLX, med 4-bit, 5-bit, eller 8-bit kvantisering för effektiv minnesanvändning. Finns i 0.6B och 1.7B parameter varianter. 5-bit är den nya noggrannheten / minnet söt plats - se Benchmarks.

Pipeline

Qwen3-ASR inferenspipeline processer ljud genom fyra steg:

StegBeskrivning
LjudindataRått ljud samplas om till 16 kHz mono
Mel-spektrogram128-bin mel filterbank funktioner extraherade från vågformen
Ljudkodare18-lagers transformator med block uppmärksamhet, processer mel ramar in i ljudinbäddningar
Textavkodare28-skikt Qwen3 transformator med grupperad fråga uppmärksamhet (GQA) och roterande positionsinbäddningar (RoPE), genererar autoregressivt texttokens

Prestanda

BackendRTFHögsta minnesanvändningAnmärkningar
Qwen3-ASR 1.7B MLX 5-bitars0.0271,92 GBWER 1,32% (ny noggrannhetsledare)
Qwen3-ASR 1.7B MLX 8-bit0.0332.7 GBWER 1.52%
Qwen3-ASR 0,6B MLX 8-bitars0.0151.3 GBWER 1.82%
Qwen3-ASR 0,6B MLX 5-bit0.0141.03 GBWER 1,74% (near-8-bit vid ~4-bit RAM)
Qwen3-ASR 0,6B MLX 4-bitars0.0121.0 GBWER 2.20%
Qwen3-ASR 0,6B CoreML INT80.0981.4 GBWER 3,02% (chunked-attn rebuild)

Apple M5 Pro, 48 GB LibriSpeech test-clean n=200, isolerad per-engine. RTF < 1,0 = snabbare än realtid.

Modellvarianter

ModellBackendStorlekHuggingFace
Qwen3-ASR-0.6B (4-bitars)MLX680 MBaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B (5-bit)MLX1.0 GBaufklarer/Qwen3-ASR-0.6B-MLX-5bit
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-bitars)MLX2.1 GBaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B (5-bitars)MLX2.3 GBaufklarer/Qwen3-ASR-1.7B-MLX-5bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 GBaufklarer/Qwen3-ASR-1.7B-MLX-8bit

CLI Användning

Transkribera en ljudfil med standard Qwen3-ASR modell:

.build/release/speech transcribe recording.wav

Alternativ

# Use the larger 1.7B model
.build/release/speech transcribe recording.wav --model 1.7b

# Specify language
.build/release/speech transcribe recording.wav --language en

# Streaming mode with partial results
.build/release/speech transcribe recording.wav --stream --partial

Swift API

Använda Qwen3ASR modul för att transkribera ljudprogrammatiskt:

import Qwen3ASR

// Load the model (downloads from HuggingFace on first use)
let model = try await Qwen3ASRModel.fromPretrained()

// Transcribe audio samples (16 kHz mono Float)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)

CoreML Encoder (Neural Engine)

Kör ljudkodaren på Neural Engine via CoreML, med textavkodaren på GPU genom MLX. Denna hybridmetod sänker strömförbrukningen och frigör GPU för samtidiga arbetsbelastningar.

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/speech transcribe recording.wav --engine qwen3-coreml

INT8 palettiserad (180 MB, kosin likhet & gt; 0.999) är standard. En INT4 variant (90 MB) är också tillgänglig för storleksbegränsade utplaceringar.

Streaming Mode

Streaming läge använder VAD (detektering av röstaktivitet) för att segmentera ljud i bitar och transkribera dem stegvis. Detta är användbart för långa inspelningar eller realtidsbehandling.

# Stream with default segment size
.build/release/speech transcribe recording.wav --stream

# Control maximum segment duration
.build/release/speech transcribe recording.wav --stream --max-segment 15

# Show partial (in-progress) results as they arrive
.build/release/speech transcribe recording.wav --stream --partial

--max-segment flaggan kontrollerar den maximala bitlängden på några sekunder. --partial flaggan möjliggör delvis resultatutgång, visar ord som de avkodas.

Stödda format

Qwen3-ASR accepterar följande ljudformat. All ingång skickas automatiskt till 16 kHz mono internt.

Viktigt

Modeller hämtas från HuggingFace vid första användning och cachad i ~/Library/Caches/qwen3-speech/. 4-bitars 0,6B-modellen är ca 1,5 GB.

Kooperativ avbokning

För MLX transkription, Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) kastar CancellationError när uppgiftsavbokning observeras före funktionsutvinning, kodning, dekoderprefill eller ett avkodningssteg. GPU-arbete som redan lämnats in kan avslutas. transcribe och transcribeBatch API behåller sitt icke-kastande beteende och ignorerar uppgiftsavbokning. speech-server använder annulleringsmedveten ingångspunkt för Qwen3-ASR.

MLX cachebudget

Laddar Qwen3-ASR gränsar processen bred MLX pool av återanvändbar Metal buffertar: min(1 GiB, RAM / 8) för 0,6B och min(4 GiB, RAM / 4) för 1,7B. Övrt MLX delar denna pool till

Den effektiva gränsen är den lägsta av caller befintliga MLX.Memory.cacheLimit och varje laddad ASR instansens tak. Instanser kan lossa i någon ordning; den sista lossningen eller instansförstöringen återställer uppringarens budget. En tätare gräns som ställs av uppmaningen medan modeller är laddade bevaras.

Single-input transkription rensar återanvändbara buffertar när dess dekoder returnerar eller kastar, inklusive avbokning inuti avkodaren. Aktiva matriser och modellvikter förblir laddade. Den giriga transcribeBatch dekoder behåller den bundna poolen mellan satser. No API optioner eller CLI flaggor förändring.

Att rensa buffertpoolen sänker behållet minne men kräver nya tilldelningar på senare förfrågningar, så korta förfrön kan ta längre tid. Väntar på inlämnat dekoderarbete för att slutföra gör rensningen deterministisk, inklusive avbokning. Faktiskt latens- och processminne beror på hårdvara, modell och ljud.

Valfri modell ägande

SpeechRuntime tillhandahåller delad lastning, avbokningsbar FIFO-antagning och serialiserad avrättning. Qwen3ASRRuntime väljer MLX eller full CoreML genom explicita deskriptorer; inhemska API och CLI-flaggor finns tillgängliga.

Ljudservern har ett genomförandetillstånd genom varje fullständig förfrågan, inklusive strömmat utgång, med upp till 32 förfrågningar som väntar. ASR fel ger HTTP-fel eller WebSocket felhändelser; giltiga tomma utskrifter förblir framgångsrika. Playback bevarar överflödesprover. Cachade modeller och pending uppspelningsljud upptar fortfarande minne.

Hanterade CoreML transkription frigör tillfälliga buffertar efter varje begäran, inklusive upprepade samtal från en bakgrundsuppgift.

import Qwen3ASRRuntime

let runtime = Qwen3ASRRuntime(descriptor: Qwen3ASRDescriptors.small)
let text = try await runtime.transcribe(audio: samples, sampleRate: 16000)
try await runtime.unload()