Tabla de benchmarks completa: rendimiento de Whisper en Apple Silicon (M1–M5)
| Chip | Tiny | Base | Small | Medium | Large-v3 |
|---|---|---|---|---|---|
| M1 | 32× | 20× | 12× | 5× | — |
| M1 Pro | 38× | 24× | 16× | 7× | — |
| M1 Max | 45× | 30× | 22× | 10× | — |
| M1 Ultra | 55× | 38× | 28× | 14× | — |
| M2 | 36× | 23× | 14× | 6× | — |
| M2 Pro | 42× | 28× | 20× | 9× | — |
| M2 Max | 50× | 35× | 26× | 12× | — |
| M2 Ultra | 60× | 42× | 32× | 17× | — |
| M3 | 40× | 26× | 16× | 7× | — |
| M3 Pro | 46× | 32× | 22× | 10× | — |
| M3 Max | 55× | 40× | 30× | 14× | — |
| M4 | 44× | 30× | 18× | 8× | — |
| M4 Pro | 50× | 36× | 26× | 12× | — |
| M4 Max | 60× | 44× | 34× | 16× | — |
| M5 (base) | 48× | 34× | 22× | 10× | — |
| M5 Pro | 55× | 40× | 30× | 14× | — |
| M5 Max | 65× | 48× | 38× | 18× | — |
×N tiempo real = N segundos de audio transcritos en 1 segundo. Benchmarks vía whisper.cpp con aceleración Metal. Todos los M1 Pro+ pueden ejecutar large-v3 en tiempo real o más rápido.
Tamaños de modelos Whisper: ¿cuál deberías usar?
| Modelo | Parámetros | Tamaño en disco | Uso de RAM | WER en inglés | Ideal para |
|---|---|---|---|---|---|
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
| — | — | — | — | — | — |
WER (tasa de error de palabras) en el conjunto de prueba inglés de LibriSpeech. Large-v3-turbo y distil-large-v3 son el punto óptimo para tiempo real en la mayoría de los Macs: calidad cercana a large-v3 a 4–6× la velocidad.
Metal vs Core ML vs Apple Neural Engine: ¿qué backend elegir?
Apple Silicon ofrece tres rutas de aceleración para Whisper. Cada una tiene sus ventajas y desventajas.
Metal (vía whisper.cpp) — Recomendado: Usa el framework GPU Apple Metal, compatible con todos los chips de la serie M, 10–12× tiempo real en large-v3 (M5 Pro), configuración vía make WHISPER_METAL=1. Ideal para: la mayoría de usuarios, la configuración más sencilla, rendimiento probado.
Core ML (vía formato Apple Core ML) — Avanzado: Usa el framework de aprendizaje automático de Apple, puede apuntar al Neural Engine (ANE) para algunas operaciones, 15–20% más rápido en algunas cargas de trabajo, requiere conversión del modelo (10–15 min de configuración). Ideal para: usuarios avanzados que buscan la máxima velocidad.
Apple Neural Engine (ANE) — Uso limitado: Acelerador de IA dedicado en todos los chips de la serie M, no accesible directamente (debe ir a través de Core ML), Whisper no aprovecha completamente el ANE por incompatibilidad de arquitectura, funciona mejor con modelos pequeños (tiny, base). Ideal para: Whisper tiny/base en laptops con batería.
Matriz de decisión: Primera configuración → Metal (whisper.cpp). Máxima velocidad en large-v3 → Metal (whisper.cpp). Laptop con batería, modelo base → Core ML con ANE. Servidor de producción → Metal (probado, confiable). Transcripción en tiempo real → Metal con modo streaming. Despliegue cloud en instancias Mac → Metal (contenedorizable).
- Metal (whisper.cpp): Más rápido, amplia compatibilidad, configuración más sencilla
- Core ML: Optimización con Neural Engine, ganancia de velocidad del 15–20% en algunas cargas (requiere conversión)
- Apple Neural Engine: Beneficio limitado para modelos grandes, ideal para tiny/base en laptops
Configuración: whisper.cpp con aceleración Metal
- 1Instalar dependencias
Why it matters: xcode-select --install (herramientas Xcode) brew install ffmpeg (conversión de audio) - 2Clonar y compilar whisper.cpp con Metal
Why it matters: git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp make WHISPER_METAL=1 ./main -h | grep -i metal - 3Descargar un modelo
Why it matters: bash ./models/download-ggml-model.sh small (466 MB, tiempo real) bash ./models/download-ggml-model.sh large-v3 (3 GB, mejor calidad) bash ./models/download-ggml-model.sh large-v3-turbo (1,6 GB, equilibrado) - 4Transcribir un archivo de audio
Why it matters: ./main -m models/ggml-large-v3.bin -f /ruta/al/audio.wav ./main -m models/ggml-large-v3.bin -f audio.wav -oj (JSON) ./main -m models/ggml-large-v3.bin -f audio.wav -l en (especificar idioma) - 5Convertir audio no-WAV primero
Why it matters: ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav ./main -m models/ggml-large-v3.bin -f output.wav
Transcripción en streaming en tiempo real (micrófono en vivo)
Para transcripción en vivo desde el micrófono: asistentes de voz, transcripción de reuniones, herramientas de accesibilidad.
Opción 1: modo stream de whisper.cpp
./stream -m models/ggml-small.bin --step 500 --length 5000
# --step 500: procesar cada 500ms
# --length 5000: mantener los últimos 5 segundos de contexto
Opción 2: Python con faster-whisper (ver bloque de código a continuación)
Latencia en M5 Pro: modelo small ~200ms, large-v3-turbo ~400–600ms, large-v3 ~800ms–1,2s de retraso respecto al tiempo real.
import sounddevice as sd
import numpy as np
from faster_whisper import WhisperModel
model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8")
buffer = []
chunk_duration = 3
sample_rate = 16000
def callback(indata, frames, time, status):
buffer.append(indata.copy())
if len(buffer) * 1024 / sample_rate >= chunk_duration:
audio = np.concatenate(buffer).flatten().astype(np.float32)
segments, _ = model.transcribe(audio, beam_size=5)
for segment in segments:
print(segment.text)
buffer.clear()
with sd.InputStream(callback=callback, channels=1, samplerate=sample_rate):
print("Listening... (Ctrl+C to stop)")
while True:
sd.sleep(1000)Pipeline de asistente de voz: Whisper + Ollama + Piper TTS
Código completo para un asistente de voz local que funciona íntegramente en Apple Silicon.
import sounddevice as sd
import numpy as np
import requests
import subprocess
from faster_whisper import WhisperModel
WHISPER_MODEL = "large-v3-turbo"
OLLAMA_URL = "http://localhost:11434/api/chat"
LLM_MODEL = "llama3.1:8b"
SAMPLE_RATE = 16000
whisper = WhisperModel(WHISPER_MODEL, device="cpu", compute_type="int8")
def record_audio(duration=5):
print("Listening...")
audio = sd.rec(int(duration * SAMPLE_RATE),
samplerate=SAMPLE_RATE,
channels=1,
dtype=np.float32)
sd.wait()
return audio.flatten()
def transcribe(audio):
segments, _ = whisper.transcribe(audio, beam_size=5)
return " ".join([seg.text for seg in segments])
def llm_respond(user_text):
response = requests.post(OLLAMA_URL, json={
"model": LLM_MODEL,
"messages": [{"role": "user", "content": user_text}],
"stream": False
})
return response.json()["message"]["content"]
def speak(text):
subprocess.run(
["piper", "--model", "en_US-amy-medium.onnx"],
input=text.encode(),
check=True
)
while True:
audio = record_audio(duration=5)
user_text = transcribe(audio)
print(f"You: {user_text}")
if not user_text.strip():
continue
response = llm_respond(user_text)
print(f"AI: {response}")
speak(response)Mejor configuración de Whisper según el modelo de Mac
| Configuración Mac | Modelo recomendado | Múltiplo de tiempo real | Caso de uso |
|---|---|---|---|
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
| — | — | — | — |
Para asistente de voz en tiempo real: usa small o large-v3-turbo para la menor latencia. Para transcripción de reuniones/podcasts: usa large-v3 para máxima precisión (retraso de 1–2 segundos aceptable). Los precios pueden variar según tu país.
Whisper local vs servicios de transcripción en la nube
| Métrica | Whisper local (M5 Pro) | Google Speech-to-Text | OpenAI Whisper API | AssemblyAI |
|---|---|---|---|---|
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
| — | — | — | — | — |
Costo mensual (8 horas/día): Whisper local $0, Google $345, OpenAI $86, AssemblyAI $156. Los precios pueden variar según tu país. Para trabajo sensible a la privacidad (médico, legal, periodismo), Whisper local es la única opción. Para transcripción de alto volumen (más de $100/mes en la nube), un Mac local se amortiza en 12 meses.
¿Whisper es más rápido que las APIs en la nube?
Local en M5 Pro: 10× tiempo real (latencia 100ms). APIs en la nube: 100–500ms de latencia por la red. El local es más rápido y gratuito.
¿Puede Whisper manejar múltiples hablantes?
Sí, las marcas de tiempo separan a los hablantes. Usa herramientas de post-procesamiento o diarización para identificar la identidad de cada hablante.
¿Qué idiomas admite?
99 idiomas con detección automática. La precisión varía según el idioma: inglés al 2,5% WER, otros idiomas al 5–15% WER.
¿Qué modelo Whisper tiene la mejor relación velocidad/calidad?
Large-v3-turbo o distil-large-v3. Ambos logran ~95% de la precisión de large-v3 a 4–6× la velocidad. Recomendados para la mayoría de los casos de uso en tiempo real.
¿Puede Whisper manejar inglés con acento o hablantes no nativos?
Sí, pero el WER aumenta. Inglés nativo: ~2,5%. Acento fuerte/no nativo: 5–12%. Large-v3 maneja mejor los acentos que los modelos más pequeños.
¿Funciona Whisper para podcasts y transcripción de música?
Podcasts: sí, excelente para contenido hablado. Música con letra: deficiente — Whisper está entrenado para voz. Usa modelos especializados para música.
¿Qué tan preciso es Whisper con terminología técnica?
Variable. Términos técnicos comunes: bueno. Términos muy especializados: puede transcribir incorrectamente. Usa la opción --prompt con el vocabulario esperado para mejorar la precisión.
¿Puedo ejecutar múltiples instancias de Whisper en un Mac?
Sí, limitado por la memoria. M5 Pro 36GB: 2 instancias de large-v3 simultáneas. M5 Max 128GB: 4–6 instancias o una instancia más LLM/TTS.