Clonar cualquier voz con QWEN, sin gastar usd 2000 en NVIDIA

Convencer al ecosistema de que una GPU Intel también existe para hacer inferencia.

Avatar de Dani Albé
Dani Albé

Hace tiempo quiero generar audio con calidad decente, tipo elevenlabs, pero localmente y a una velocidad razonbable. Y si es posible, clonando una voz, mejor. Sin depender de la nube y sin esperar horas por cada frase. Lamentablemente soy pobre. No tengo una GPU NVIDIA decente y tampoco la idea era pagar por tokens.

Tengo una notebook con GPU Intel Arc, así que pensaba si era posible usarla para acelerar el proceso. Simple no fue, posible, si.

El problema real no es el modelo

Descubri hace meses Qwen3-TTS. Una locura como anda. El problema es el ecosistema alrededor. Casi todo el tooling de inferencia local — desde los tutoriales hasta las librerías que asumen un device por default — está pensado para NVIDIA/CUDA. Si tenés hardware Intel, en el mejor de los casos sos un ciudadano de segunda; en el peor, terminás corriendo todo en CPU sin darte cuenta de que quizas, tenías otra opción. Y en CPU, un modelo de clonación de voz de este tamaño genera audio a una velocidad que lo vuelve insoportable para uso real.

Hay una posible mejora: Intel Extension for PyTorch (IPEX) expone un backend xpu que le habla directamente a la GPU. En teoría, es instalar el paquete correcto y cambiar device_map="cuda" por device_map="xpu". En la práctica, no es tan asi.

El bug puntual

Al cargar el modelo, todo fallaba en un paso específico de transformers: la rutina interna de caching_allocator_warmup, que la librería usa para precalentar el allocator de memoria antes de mover pesos a la GPU. No es un problema de Qwen3-TTS ni de IPEX en sí — es un gap de soporte entre transformers y XPU en GPUs Arc de arquitectura Lunar Lake, que todavía no tengo 100% mapeado en detalle.

Lo que sí tengo es la solución empírica, reproducible, y fea:

transformers.modeling_utils.caching_allocator_warmup = lambda *args, **kwargs: None

Una línea. Le decís a esa función que no haga nada. El modelo carga, el dtype queda en bfloat16, la atención corre con sdpa, y la inferencia pasa a estar donde tiene que estar: en la GPU.

Resultado

Con eso resuelto, la clonación de voz funciona a velocidad utilizable, corriendo entero en la Arc, sin CPU de por medio y sin mandar nada a un servicio de terceros. Documenté el setup completo — entorno virtual, versiones exactas de torch/torchvision/torchaudio+xpu, IPEX, y el script de clonación — en el repo.

No es una solución elegante. Es na línea que evita que una función haga lo que fue escrita para hacer. Pero funciona, y no encontré esto documentado en ningún lado antes de llegar ahí a los ponchazos.

Si tenés una maquina con GPU Arc comun (la mia es una ARC 140V) y querés correr TTS local, ahí está el código. Y si sabés exactamente por qué falla ese warmup en Lunar Lake, contame — todavía me falta esa parte.

Repo: qwen3-tts-intel-xpu

Avatar de Dani Albé

Sobre Dani Albé

Desde el taller hasta la sala de reuniones, disfruto unir estrategia y acción. Líder tecnológico y maker de vocación, creo en aprender haciendo y en convertir ideas en soluciones reales.

0 Comentarios

Aún no hay comentarios. ¡Sé el primero en opinar!

Deja tu Comentario