Tu portátil ahora puede «hacer IA». Bien. La pregunta real es si puede hacer tu IA: de forma fiable, rápida, sin cocerse por dentro y sin convertir el SSD en un monumento a la amplificación de escrituras.
Si gestionas flotas, construyes aplicaciones o simplemente quieres que tu máquina cara se note como una mejora y no como un experimento de marketing, necesitas separar la pegatina («¡NPU dentro!») de los cambios arquitectónicos que realmente mueven la aguja: ancho de banda de memoria, comportamientos de memoria unificada, envolventes térmicas, latencia de almacenamiento bajo IO mixto, madurez de drivers y cómo se comportan las tuberías de inferencia bajo gestión de potencia.
Qué significa realmente “PC con IA” (y qué no)
En 2026, “PC con IA” es una categoría de producto construida alrededor de una afirmación arquitectónica: una máquina cliente puede ejecutar inferencia de ML significativa localmente, en tiempo real, con potencia aceptable, con latencia aceptable y con una pila de software que la gente normal pueda instalar sin invocar a un exorcista de drivers.
La definición de marketing es más simple: existe una NPU (unidad de procesamiento neuronal) y el SO tiene funciones de IA. Eso no es falso, es solo incompleto en formas que te perjudican.
Aquí está la definición operativa que realmente predice si tus usuarios estarán contentos:
- Diversidad de cómputo: CPU, GPU, NPU y a veces bloques DSP pueden ejecutar partes de la tubería.
- Comportamiento de memoria: ¿puedes mantener pesos, caché KV y activaciones residentes sin paginación, swap o bloqueos?
- Realidad de IO: ¿puedes cargar modelos rápido, cachearlos sensatamente y evitar destrozar la latencia con escrituras en segundo plano?
- Térmicas y potencia: ¿el rendimiento se mantiene estable tras 5–15 minutos, o se desploma?
- Madurez del software: ¿el runtime elige automáticamente el dispositivo y los tipos de datos correctos, o “ayuda” equivocándose?
Lo que un PC con IA no es: una garantía de que toda carga de trabajo “IA” será más rápida, más barata o más segura en el dispositivo. Algunas cargas van mejor en un servidor con GPUs grandes, mucha memoria y térmicas aburridas. Otras van mejor en el navegador con un modelo pequeño. Algunas no deberían existir.
Una regla útil: si tu carga está limitada por la capacidad de memoria (modelos grandes) o por el ancho de banda (muchos tokens/segundo), tu “PC con IA” vive o muere por el diseño de memoria y las térmicas, no por la existencia de un logo de NPU.
Los cambios reales de arquitectura detrás del hype
Ignora los eslóganes. Los cambios de arquitectura son la única razón por la que esta categoría es real. Pero esos cambios no siempre están donde apuntan los anuncios.
1) Más cómputo heterogéneo, con un impuesto del scheduler
La silicona cliente moderna es un pequeño centro de datos con gabardina: núcleos de alto rendimiento, núcleos de eficiencia, GPU integrada y ahora una NPU con sus propios patrones de acceso a memoria y pila de drivers.
Esa heterogeneidad es poderosa, pero crea un nuevo modo de fallo: la carga se programa en el motor “equivocado”, o rebota entre motores, arrastrando datos de un lado a otro como un niño remolcando ladrillos.
2) Los límites de potencia y térmicos son ahora restricciones arquitectónicas de primera clase
El rendimiento que ves en una gráfica de benchmark suele ser “batería fresca, chasis frío, ventiladores optimistas”. El uso real es “llamada de Zoom, 14 pestañas del navegador, protección endpoint y el portátil en una manta”.
Las cargas de IA son sostenidas. Las cargas sostenidas exponen la verdad: límites de potencia, comportamiento del VRM y curvas de throttling térmico.
3) La jerarquía de memoria importa más que los TOPS brutos
El marketing de PC con IA adora los TOPS porque es un número limpio. Pero la mayoría de las tuberías de inferencia están limitadas por:
- Ancho de banda de memoria: qué tan rápido se mueven pesos y caché KV.
- Capacidad de memoria: ¿puede el modelo caber sin paginación o streaming?
- Comportamiento de caché: ¿estás thrashing L3 o usándolo eficientemente?
- Rutas DMA: ¿la NPU accede la memoria eficientemente o por una pajita estrecha?
4) La latencia de almacenamiento vuelve a ser visible para el usuario
Pasamos años entrenando a los usuarios para ignorar el disco. “El SSD lo arregló”. Luego empezamos a cargar modelos de varios gigabytes, intercambiar cachés, escribir logs y persistir embeddings localmente.
De repente, un NVMe lento bajo carga mixta hace que tu “asistente AI instantáneo” se sienta como un módem dial-up con ambición.
5) El perímetro de seguridad se desplaza al endpoint
La inferencia local reduce el riesgo de exfiltración de datos en algunos casos. También mueve la IP del modelo, prompts y datos derivados potencialmente sensibles a los endpoints.
Eso cambia tu modelo de amenazas: cifrado de disco, arranque seguro, aislamiento de credenciales y “¿dónde viven las cachés?” se vuelven preguntas de arquitectura, no notas a pie de política.
NPUs: cuándo ayudan, cuándo no y por qué
Las NPUs son silicio real, no un timo. El timo es pretender que son universalmente útiles.
Las NPUs brillan cuando la carga coincide con su diseño: álgebra lineal densa, kernels previsibles, precisión limitada (INT8/INT4) y modelos estables que los proveedores pueden optimizar.
Las NPUs se esfuerzan cuando:
- Necesitas flexibilidad: operadores personalizados, arquitecturas raras, modelos que evolucionan rápidamente.
- Necesitas grandes huellas de memoria: cachés KV grandes o longitudes de contexto amplias.
- Necesitas ergonomía para desarrolladores: depurar es más difícil, la herramienta varía, el soporte de kernels va atrasado.
- Necesitas rendimiento máximo: GPUs integradas o discretas aún dominan muchos escenarios de inferencia en cliente.
La forma práctica de pensarlo:
- GPU es el “motor de matemáticas rápido” de propósito general con toolchains maduros y generalmente mayor ancho de banda.
- NPU es el “aparato eficiente para inferencia” que puede ser asombroso para modelos soportados y terrible para todo lo demás.
- CPU es la capa de “respaldo y orquestación”. También es el lugar donde terminas cuando los drivers fallan a las 2 a.m.
Tu objetivo en producción no es adorar un acelerador. Tu objetivo es controlar la selección de dispositivo, validar la estabilidad del rendimiento y proporcionar una ruta de respaldo segura.
Broma corta #1: Una demo de NPU que solo ejecuta un modelo es como una tostadora que solo tuesta una marca de pan. Técnicamente impresionante, operativamente insultante.
La memoria manda: ancho de banda, capacidad, realidades tipo NUMA
Si quieres entender por qué los PC con IA se sienten rápidos o lentos, deja de preguntar “¿cuántos TOPS?” y empieza a preguntar:
¿cuántos bytes por segundo puedo alimentar al cómputo?
Capacidad: ¿puedes mantener el modelo residente?
Un modelo cuantizado que cabe en RAM funciona como una máquina. Un modelo que apenas cabe funciona como un comité.
Una vez que empiezas a paginar, efectivamente estás haciendo inferencia a través de un dispositivo de almacenamiento. Eso no es “IA local”. Eso es “NVMe-como-RAM”, que es una elección de vida.
Para flotas empresariales, esto se vuelve una pregunta de política de compras. Si tu objetivo incluye LLMs locales por encima de tamaños pequeños, debes tratar la capacidad de RAM como un requisito estricto, no como algo deseable.
Ancho de banda: tokens/segundo suele ser una historia de memoria
La inferencia Transformer tira de pesos repetidamente y actualiza caché KV. El ancho de banda importa. GPUs integradas y NPUs compiten con la CPU por acceso a memoria, y algunos diseños manejan eso mejor que otros.
Si la memoria del sistema es compartida y el SO está ocupado, tu “aceleración de IA” puede convertirse en “contención de IA”.
Latencia: la IA interactiva castiga los stalls
Los humanos notan el jitter. Si tu asistente se pausa a mitad de frase porque el portátil decidió aparcar núcleos o vaciar cachés, la experiencia está rota aunque el rendimiento medio parezca correcto.
Los picos de latencia provienen de la gestión de potencia, throttling térmico, presión de memoria y programación de drivers.
Memoria unificada es conveniente hasta que no lo es
Los diseños de memoria unificada reducen copias, simplifican la programación y facilitan “usar la GPU”. Pero la memoria unificada también significa contención unificada.
Si haces inferencia mientras el navegador acelera con la GPU y el SO anima ventanas, puedes terminar con bloqueo por orden de llegada en memoria y colas de GPU.
Almacenamiento e IO: el cuello de botella silencioso que arruina la “IA local”
El almacenamiento vuelve a estar en la ruta crítica. No porque los SSDs hayan empeorado —porque las cargas se han vuelto más pesadas y más espasmódicas.
Los flujos de trabajo de IA local tiran de archivos grandes (pesos del modelo), crean cachés (tokenizers, kernels compilados, cachés de atención para algunas apps) y a veces persisten embeddings.
Tiempo de carga del modelo: la primera impresión es un benchmark de IO
Los usuarios juzgan el rendimiento del “PC con IA” en los primeros diez segundos: hacen clic, esperan a que cargue el modelo, ven girar el ventilador y se preguntan por qué el portátil está pensando tan duro.
El rendimiento secuencial importa, pero también la latencia bajo IO mixto. Si Defender o EDR están escaneando e indexando, las cargas de modelos pueden volverse impredecibles.
Amplificación de escritura y resistencia del SSD: no es glamuroso, pero es real
Algunas herramientas de IA local escriben agresivamente: descargas repetidas, extracción, churn de caché, logs, telemetría, tensores temporales volcados a disco cuando la RAM está ajustada.
Si gestionas flotas, deberías preocuparte por la resistencia del SSD y los contadores SMART —no porque fallen a diario, sino porque las fallas llegan en lotes y en el peor momento.
Sobrecarga de sistema de archivos y cifrado: mídelo, no especules
El cifrado en endpoints es innegociable en la mayoría de organizaciones. La sobrecarga de cifrado suele estar bien en CPUs modernas, pero puede aparecer durante IO sostenido más inferencia.
La postura correcta: medir con trazas realistas y luego decidir si necesitas ajustar ubicaciones de caché, patrones de IO o empaquetado de modelos.
La pila de software: runtimes, drivers y el impuesto del “it depends”
Los PC con IA se venden como electrodomésticos. No lo son. Son ecosistemas: scheduler del SO, firmware, drivers, runtime de inferencia y código de la app.
Si alguna capa está inmadura, obtienes la experiencia clásica: “Va rápido en mi máquina” (es decir: una máquina, una versión de driver, una temperatura ambiente).
La selección de dispositivo es una decisión de producto
Si tu app se ejecuta a veces en CPU, a veces en GPU y a veces en NPU, eso no es flexibilidad. Es ruleta.
Proporciona toggles explícitos, valores por defecto sensatos y telemetría que te diga qué dispositivo se usó y por qué.
La cuantización es una elección de arquitectura, no solo de modelo
La cuantización INT8/INT4 puede desbloquear NPUs y mejorar el rendimiento, pero también puede:
- reducir la calidad de formas sutiles que rompen flujos empresariales (resúmenes, extracción o generación de código)
- crear cargas de soporte (kernels diferentes por dispositivo)
- cambiar patrones de memoria (pesos más pequeños, pero diferente alineación y comportamiento de caché)
Drivers y firmware: donde vive la realidad del “PC con IA”
Las actualizaciones de firmware pueden cambiar el comportamiento de potencia, los timings de memoria y la estabilidad del acelerador. Las actualizaciones de drivers pueden cambiar la disponibilidad y el rendimiento de kernels.
Trátalos como dependencias de producción. Rastrear versiones. Escalonar despliegues. Mantener planes de reversión.
Una cita que aún mantiene relevancia en el mundo del endpoint AI:
«La esperanza no es una estrategia.» — Vince Lombardi
Datos interesantes y contexto histórico (corto, concreto, útil)
- TOPS se volvió marketing dominante porque comprime “capacidad de inferencia” en un número, similar a las guerras de GHz de principios de los 2000.
- Los SoC móviles llevaron NPUs años antes que los PC, y las primeras victorias fueron aburridas: pipelines de cámara, disparadores de voz y mejora fotográfica —no chatbots.
- Las eras MMX y luego AVX de Intel fueron momentos anteriores de “PC con IA”: nuevas instrucciones vectoriales prometían aceleración, pero el software tardó años en ponerse al día.
- Las GPUs se volvieron motores de ML por accidente: se construyeron para gráficos y luego se reutilizaron para álgebra matricial. Ese accidente produjo la madurez de tooling que las NPUs aún persiguen.
- El reconocimiento de voz en el dispositivo fue una de las primeras cargas de inferencia cliente reales a escala, impulsada por latencia y privacidad.
- El empuje del Neural Engine de Apple normalizó la idea de que los dispositivos cliente pueden tener bloques dedicados a inferencia —y que la integración con el SO importa tanto como el silicio.
- La cuantización no es nueva: se usa en procesamiento de señales y ML embebido desde hace años; la novedad es aplicarla a LLMs a escala de consumo.
- La adopción de NVMe ocultó una década de patrones de IO descuidados; los modelos locales grandes están reexponiendo esos patrones bajo expectativas reales de usuarios.
Guía de diagnóstico rápido: encuentra el cuello de botella en minutos
Cuando alguien dice “la IA local va lenta”, no debatas arquitectura en una pizarra. Ejecuta un triage rápido. Buscas la clase de cuello de botella: cómputo, memoria, almacenamiento o térmico/potencia.
Primero: identifica qué motor está ejecutando realmente el trabajo
- ¿La inferencia está en CPU, GPU o NPU?
- ¿Está cayendo en fallback por operadores no soportados, precisión equivocada o configuración del runtime?
Segundo: comprueba throttling térmico y límites de potencia
- ¿La frecuencia cae tras unos minutos?
- ¿El sistema está en batería o en un perfil de baja potencia?
Tercero: revisa la presión de memoria y la paginación
- ¿El modelo cabe en RAM/VRAM/memoria unificada?
- ¿Hay fallos de página mayores durante la inferencia?
Cuarto: verifica la latencia de almacenamiento bajo carga
- ¿La carga del modelo es lenta solo en la primera ejecución (caché fría) o en cada ejecución?
- ¿Escaneos en segundo plano, indexado o herramientas de sincronización están golpeando el disco?
Quinto: valida versiones de la pila de software y riesgo de regresión
- ¿Cambios de versión de drivers?
- ¿Actualizaciones de runtime?
- ¿Cambios de firmware?
Broma corta #2: Si la solución es “reinstalar drivers”, felicidades —estás haciendo computación artesanal.
Tareas prácticas: comandos, salidas, qué significa y qué decides
Estas son enfocadas a Linux porque es la manera más limpia de mostrar la verdad arquitectónica con herramientas confiables. La misma lógica aplica en otros sistemas.
Ejecútalas en una máquina de pruebas mientras reproduces el problema: carga del modelo, latencia del primer token, generación sostenida y carga concurrente “usuario normal” (navegador + llamada de vídeo).
Task 1: Confirmar topología de CPU y comportamiento de frecuencia
cr0x@server:~$ lscpu | egrep 'Model name|CPU\\(s\\)|Thread|Core|Socket|MHz'
Model name: AMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics
CPU(s): 16
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 1
CPU MHz: 1896.000
La salida significa: Estás viendo conteos de núcleos/hilos y una instantánea de frecuencia actual. Si MHz está bajo durante la carga, estás en throttling o en un perfil de ahorro de energía.
Decisión: Si la CPU MHz se mantiene baja durante la inferencia, revisa perfiles de potencia y térmicas antes de culpar al modelo.
Task 2: Vigilar frecuencia de CPU y señales de throttling en tiempo real
cr0x@server:~$ sudo turbostat --Summary --interval 2
...
PkgWatt CorWatt RAMWatt Avg_MHz Busy% Bzy_MHz CPU%c1 CPU%c6
12.34 8.21 1.05 1420 68.2 2080 3.10 24.80
19.10 12.80 1.10 980 75.5 1300 2.50 40.20
La salida significa: Una caída en Avg_MHz y Bzy_MHz mientras Busy% sigue alto indica a menudo límites de potencia/térmicos. Estados C altos durante la carga pueden señalar rarezas de scheduling.
Decisión: Si MHz se derrumba tras un breve pico, trátalo como problema térmico/potencia. Mejora refrigeración, plan de potencia y límites sostenidos.
Task 3: Comprobar presencia de GPU y binding del driver
cr0x@server:~$ lspci -nnk | egrep -A3 'VGA|3D|Display'
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf]
Subsystem: Lenovo Device [17aa:3a6f]
Kernel driver in use: amdgpu
Kernel modules: amdgpu
La salida significa: Confirma qué driver de kernel está activo. Un driver genérico o módulo ausente suele significar ausencia de aceleración.
Decisión: Si el driver no es el esperado, deja de hacer benchmarks. Arregla los drivers primero.
Task 4: Medir utilización de GPU durante la inferencia
cr0x@server:~$ radeontop -d - -l 3
Dumping to stdout. Press Ctrl+C to exit.
gpu 72.11% ee 0.00% vgt 41.20% ta 55.90% sx 36.10% sh 68.30%
gpu 10.02% ee 0.00% vgt 2.10% ta 3.90% sx 1.80% sh 8.20%
gpu 69.44% ee 0.00% vgt 39.00% ta 51.00% sx 31.50% sh 64.10%
La salida significa: Los picos de uso de GPU se correlacionan con cómputo de inferencia en GPU. Si está plano cercano a cero, probablemente estás en CPU/NPU o detenido en otro lugar.
Decisión: Si la GPU está inactiva mientras la CPU está caliente, confirma la selección de dispositivo en la configuración del runtime/app.
Task 5: Identificar nodos de dispositivo NPU (presencia no es uso)
cr0x@server:~$ ls -l /dev | egrep 'accel|dri|kfd'
drwxr-xr-x 2 root root 120 Jan 13 09:12 dri
crw-rw---- 1 root render 236, 0 Jan 13 09:12 kfd
La salida significa: En muchos sistemas, los aceleradores exponen nodos de dispositivo (por ejemplo, /dev/dri, /dev/kfd). Esto solo demuestra que la plomería existe.
Decisión: Si faltan nodos de dispositivo, no esperes que el runtime “encuentre la NPU”. Arregla la pila de kernel/driver.
Task 6: Revisar presión de memoria y actividad de swap
cr0x@server:~$ free -h
total used free shared buff/cache available
Mem: 32Gi 26Gi 1.2Gi 1.1Gi 4.8Gi 3.9Gi
Swap: 8.0Gi 2.6Gi 5.4Gi
La salida significa: Poca memoria disponible más uso de swap indica paginación. Para inferencia interactiva, eso suele ser catastrófico para la latencia.
Decisión: Si hay swap durante la inferencia, reduce el tamaño del modelo, aumenta la RAM o cambia las expectativas de carga de trabajo. No ajustes alrededor de ello.
Task 7: Detectar fallos de página mayores mientras se ejecuta la inferencia
cr0x@server:~$ pidstat -r -p 24531 1 5
Linux 6.5.0 (ai-laptop) 01/13/2026 _x86_64_ (16 CPU)
09:20:01 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
09:20:02 PM 1000 24531 1200.00 45.00 2600M 1800M 5.6 llama-run
09:20:03 PM 1000 24531 950.00 60.00 2600M 1820M 5.7 llama-run
La salida significa: majflt/s son fallos mayores que requieren IO a disco. Si ese número es distinto de cero durante la generación, estás atascado por almacenamiento.
Decisión: Fallos mayores durante la inferencia en estado estable significan “el modelo no cabe” o “el sistema está bajo presión de memoria”. Arregla la memoria primero.
Task 8: Medir latencia de disco bajo carga mixta
cr0x@server:~$ iostat -xz 1 3
Linux 6.5.0 (ai-laptop) 01/13/2026 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
32.14 0.00 5.12 9.80 0.00 52.94
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s w_await wareq-sz aqu-sz %util
nvme0n1 85.0 92160.0 2.0 2.3 18.40 1084.2 44.0 16384.0 22.10 372.4 2.10 88.0
La salida significa: r_await y w_await muestran latencia media. Await alto con %util alto significa que la unidad está saturada o atascada por contención.
Decisión: Si await salta durante inferencia/carga de modelo, busca IO en segundo plano (clientes de sync, escaneos AV) y considera reubicar cachés o poner modelos en staging.
Task 9: Identificar procesos que golpean el disco
cr0x@server:~$ sudo iotop -b -n 3 -o
Total DISK READ: 95.20 M/s | Total DISK WRITE: 18.10 M/s
PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1832 be/4 root 0.00 B/s 12.40 M/s 0.00 % 9.20 % updatedb.mlocate
24531 be/4 cr0x 92.10 M/s 1.20 M/s 0.00 % 6.10 % llama-run --model /data/models/...
La salida significa: Muestra los hogs de IO. Si trabajos de indexado o herramientas de sync compiten con cargas de modelos, los usuarios lo sentirán.
Decisión: Si “tareas en segundo plano útiles” solapan con la inferencia, prográmalas o limita su uso. No le digas a los usuarios “simplemente espera”.
Task 10: Confirmar tipo de sistema de archivos y opciones de montaje (rendimiento + fiabilidad)
cr0x@server:~$ findmnt -no SOURCE,FSTYPE,OPTIONS /data
/dev/nvme0n1p3 ext4 rw,relatime,discard,errors=remount-ro
La salida significa: Estás viendo el FS y opciones. Algunas opciones (como discard agresivo) pueden afectar la latencia en ciertos discos y kernels.
Decisión: Si ves picos de latencia y discard está activado, prueba con fstrim programado en su lugar. Mide, no sigas folclore.
Task 11: Comprobar salud NVMe e indicadores de desgaste
cr0x@server:~$ sudo smartctl -a /dev/nvme0 | egrep 'Percentage Used|Data Units Written|Media and Data Integrity Errors|Power Cycles'
Percentage Used: 6%
Data Units Written: 18,442,113 [9.44 TB]
Media and Data Integrity Errors: 0
Power Cycles: 122
La salida significa: “Percentage Used” es un indicador grosero de desgaste. Si sube rápido en una flota puede indicar churn de caché o mal comportamiento de herramientas.
Decisión: Si el desgaste crece inesperadamente, audita cachés/logs, reubica rutas con muchas escrituras y define políticas de retención.
Task 12: Verificar margen térmico y flags de throttling
cr0x@server:~$ sudo sensors
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +92.5°C
amdgpu-pci-0300
Adapter: PCI adapter
edge: +88.0°C
junction: +101.0°C
La salida significa: Temperaturas cercanas a límites de plataforma dispararán throttling. Las temperaturas junction importan para cargas GPU sostenidas.
Decisión: Si las temperaturas son altas durante inferencia, valida la estabilidad del rendimiento a lo largo del tiempo. Considera políticas de refrigeración, docking o límites de carga.
Task 13: Observar uso por proceso y rarezas de scheduling
cr0x@server:~$ top -H -p 24531 -b -n 1 | head -n 15
top - 21:23:10 up 3:41, 1 user, load average: 12.44, 10.90, 8.12
Threads: 42 total, 16 running, 26 sleeping, 0 stopped, 0 zombie
%Cpu(s): 72.0 us, 6.0 sy, 0.0 ni, 9.0 id, 13.0 wa, 0.0 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24531 cr0x 20 0 2620.0m 1.8g 12800 R 340.0 5.8 3:12.11 llama-run
24560 cr0x 20 0 2620.0m 1.8g 12800 R 195.0 5.8 1:28.32 llama-run
La salida significa: Alto wa (IO wait) indica contención de almacenamiento. Varios hilos calientes sugieren inferencia ligada a CPU.
Decisión: Si IO wait es alto, persigue almacenamiento. Si la CPU se satura sin actividad GPU/NPU, arregla el uso de dispositivos o acepta los límites de la CPU.
Task 14: Cronometrar carga del modelo y latencia del primer token (barato pero revelador)
cr0x@server:~$ /usr/bin/time -f "elapsed=%e user=%U sys=%S" ./llama-run --model /data/models/q4.gguf --prompt "hello" --tokens 1
hello
elapsed=7.82 user=1.21 sys=0.88
La salida significa: Si elapsed es alto pero el tiempo CPU user es bajo, estás esperando IO o sobrecarga de inicialización (compilación de kernels, warmup de caché).
Decisión: Si la primera ejecución es lenta y la segunda rápida, pre-calienta cachés o envía artefactos precompilados. Si cada ejecución es lenta, arregla almacenamiento/contención de AV.
Tres micro-historias corporativas desde el terreno
Micro-historia 1: El incidente por una suposición errónea (“NPU significa que es rápido”)
Una compañía mediana desplegó un asistente de “notas de reunión” local en portátiles de directivos. El argumento era simple: el audio se queda en el dispositivo, transcripción y resumen se ejecutan localmente y nada sensible toca la nube. Seguridad lo amó. Compras lo aprobó. La demo lo adoró.
La primera semana llegaron tickets de soporte con un patrón ordenado: “El asistente congela mi portátil durante las llamadas”. Algunos usuarios informaron ventiladores a tope, otros que la app “a veces funciona, a veces se arrastra”. El equipo asumió que la NPU manejaba la carga y se centró en bugs de UI.
Un SRE finalmente perfiló una máquina mientras reproducía el problema. El runtime estaba cayendo silenciosamente al CPU porque un operador de preprocesamiento no era soportado por el backend NPU. La NPU existía, pero la tubería no la usaba. Mientras tanto la CPU ya estaba ocupada con la conferencia y la protección endpoint.
La solución no fue heroica. Dividieron la tubería: operadores soportados en NPU, operadores no soportados en GPU y la CPU solo orquestó. También añadieron una auto-prueba de arranque que informaba qué dispositivo se había seleccionado y por qué. Los tickets cayeron rápido, no porque la NPU mejorase, sino porque se eliminó la suposición.
La lección: “tiene una NPU” no es lo mismo que “tu carga usa la NPU”. Si no verificas la selección de dispositivo en producción, estás haciendo computación basada en fe.
Micro-historia 2: La optimización que salió mal (caching de modelos como amplificador de escrituras)
Otra organización construyó un asistente interno para desarrolladores que descargaba modelos y embeddings localmente para reducir costes de servidor. Un ingeniero bienintencionado introdujo una función de “caching agresivo”: prefetch de múltiples variantes de modelos y mantenerlos actualizados en segundo plano para que los devs siempre tuvieran lo último.
Funcionó —en una máquina dev. En la flota, los portátiles empezaron a mostrar tasas de fallo más altas por “problemas de rendimiento de almacenamiento” y las quejas de batería se dispararon. Algunas máquinas incluso tocaron umbrales SMART de desgaste mucho antes de lo esperado. Nadie lo vinculó con el asistente porque este “no estaba en ejecución” cuando ocurrieron las fallas.
El culpable fue el gestor de caché. Corría como servicio en segundo plano, despertando por cambios de red, verificando hashes, reescribiendo blobs grandes y produciendo una tormenta de pequeñas actualizaciones de metadatos. No era solo ancho de banda; era latencia y despertares constantes que impedían estados de sueño profundo.
El rollback fue sencillo: detener actualizaciones en segundo plano, cachear solo un modelo por clase objetivo e implementar un store direccionado por contenido con deduplicación y políticas de retención. También movieron cachés a una ubicación excluida de ciertas operaciones de indexado, coordinando cuidadosamente con seguridad.
La lección: “Optimizar cacheando” puede ser una trampa en endpoints. Puedes cambiar coste de servidor por desgaste de SSD, drenaje de batería y furia de usuarios. La factura llega después, con intereses.
Micro-historia 3: La práctica aburrida pero correcta que salvó el día (despliegues escalonados de drivers)
Una empresa global estandarizó un conjunto de portátiles con capacidad AI. El rendimiento era aceptable y algunas apps estaban afinadas para GPU y NPU. Luego llegó una actualización de drivers —silenciosamente— por la vía normal de actualizaciones. A la mañana siguiente, una región reportó que la inferencia local se cerraba intermitentemente.
En una organización menos disciplinada, esto se vuelve caos: todos actualizan, todos rompen y el canal de incidentes se convierte en una reposición en vivo de negación. Este equipo tenía una práctica sosa y hermosa: despliegues escalonados con canarios, más un dashboard que correlacionaba fallos de app con versiones de driver.
El anillo canario se iluminó en horas. Congelaron el despliegue, fijaron la versión anterior y aplicaron una política que bloqueó la versión problemática hasta que una release arreglada fue validada. La mayoría de empleados no lo notó; el único drama fue un PM ligeramente molesto.
El postmortem encontró una regresión en una ruta de compilación de kernel para un operador cuantizado. El resultado clave no fue un parche ingenioso: fue que la disciplina de versiones evitó dolor a escala de flota.
La lección: la IA en endpoints depende de drivers como los servidores dependen de kernels. Trátalos con el mismo respeto: anillos, métricas, reversión y registro documental.
Errores comunes: síntoma → causa raíz → arreglo
1) Síntoma: “El primer token tarda una eternidad; los siguientes van bien”
- Causa raíz: Carga e inicialización del modelo (IO, descompresión, compilación de kernels, warmup de caché).
- Arreglo: Precalienta en inactividad, envía kernels precompilados cuando sea posible, mantiene modelos locales con caching sensato y mide rutas frías vs calientes explícitamente.
2) Síntoma: “Rápido 30 segundos, luego cada vez más lento”
- Causa raíz: Throttling térmico o aplicación de límites de potencia bajo carga sostenida.
- Arreglo: Valida rendimiento sostenido; ajusta perfil de potencia; asegura refrigeración adecuada; considera modelos más pequeños o reducir tasas de batch/tokens.
3) Síntoma: “CPU al máximo, GPU inactiva, NPU supuestamente presente”
- Causa raíz: Fallback de backend por operadores no soportados, dtype equivocado, falta de soporte de driver/runtime o mala configuración.
- Arreglo: Registra la selección de dispositivo, falla cerrando para backends no soportados, añade checks de capacidad en runtime y fija versiones conocidas como buenas.
4) Síntoma: “El sistema se entrecorta, el audio se rompe durante la inferencia local”
- Causa raíz: Contención de recursos compartidos (scheduling CPU, ancho de banda de memoria, contención de colas GPU) con cargas en tiempo real.
- Arreglo: Reserva núcleos, prioriza hilos de audio, limita utilización de inferencia o descarga a otro motor; evita ejecutar inferencia pesada durante llamadas.
5) Síntoma: “Las cargas de modelos son muy inconsistentes entre máquinas idénticas”
- Causa raíz: IO en segundo plano (escaneos AV/EDR, indexado, sync), versiones diferentes de firmware/driver o distintos niveles de llenado del disco que afectan el comportamiento del SSD.
- Arreglo: Controla tareas en segundo plano, estandariza versiones, monitoriza salud del SSD y mantén espacio libre suficiente para GC del SSD.
6) Síntoma: “Regresiones de calidad tras una ‘actualización de rendimiento’”
- Causa raíz: Cuantización más agresiva, kernels distintos o cambio en tokenización/variante del modelo.
- Arreglo: Trata la cuantización como un cambio de producto: pruebas A/B, suites de regresión y un toggle de “modo calidad”.
7) Síntoma: “La batería se desploma cuando se activan funciones de IA, incluso en reposo”
- Causa raíz: Servicios de modelo en segundo plano despertando con frecuencia, bucles de verificación de caché, telemetría o procesamiento continuo de sensores.
- Arreglo: Añade backoff, agrupa trabajo, desactiva actualizaciones en segundo plano con batería y mide despertares e IO a lo largo del tiempo.
8) Síntoma: “El desgaste del SSD aumenta más rápido de lo esperado”
- Causa raíz: Churn de caché, descargas/extracciones repetidas de modelos, stores de embeddings sin retención, logging excesivo.
- Arreglo: Caches direccionados por contenido con dedupe, límites de retención, menos reescrituras y limpieza periódica. Monitoriza SMART a escala de flota.
Listas de verificación / plan paso a paso
Checklist A: Comprar o estandarizar “PC con IA” para una empresa
- Define cargas objetivo (transcripción, resumen, asistente de código, mejora de imágenes) y si son interactivas o por lotes.
- Establece una política mínima de RAM basada en los tamaños de modelo que realmente desplegarás, no en lo que cabe en una diapositiva.
- Exige pruebas de rendimiento sostenido (ejecuciones de 10–20 minutos) bajo carga de usuario realista, no solo un pase de benchmark único.
- Valida comportamiento de almacenamiento: tiempo de carga en frío, latencia bajo IO mixto y disponibilidad de reportes de salud del SSD.
- Requiere gobernanza de versiones: capacidad de fijar y revertir drivers/firmware y de escalonar cambios en anillos.
- Revisión del modelo de seguridad: dónde viven los modelos, prompts/cachés/logs, requisitos de cifrado y cómo se purgan datos al desactivar cuentas.
Checklist B: Lanzar una función de inferencia en dispositivo
- Haz explícita la selección de dispositivo y regístrala: CPU/GPU/NPU, dtype y razones de fallback.
- Construye una sonda de capacidad al inicio: operadores soportados, disponibilidad de memoria, versiones de driver/runtime.
- Mide rutas fría y caliente: latencia del primer token y tokens/segundo sostenidos, por separado.
- Diseña cachés intencionalmente: qué cachear, dónde, política de expulsión y presupuesto de escrituras.
- Planifica fallos: caché corrupta, descargas parciales, regresiones de drivers—manejarlas con gracia.
- Respeta la concurrencia: limita inferencia, cede a tareas en tiempo real y compórtate bien con batería.
Checklist C: Operaciones de flota para PC con IA (aburrido, correcto, efectivo)
- Inventario: RAM, tipo de almacenamiento, firmware, versiones de driver, presencia de aceleradores.
- Despliegues por anillos para actualizaciones de SO, drivers y cambios en runtimes de inferencia.
- Telemetría accionable: dispositivo usado, tokens/seg, latencia primer token, eventos OOM, contadores de throttling térmico si están disponibles.
- Chequeos de salud de almacenamiento endpoint: desgaste SMART, umbrales de espacio libre, muestreo de latencia IO.
- Runbooks: pasos claros para “lento”, “crash”, “drenaje de batería”, “modelo no carga”.
Preguntas frecuentes
1) ¿Una NPU siempre es más rápida que una GPU para LLM locales?
No. Las NPUs pueden ser más eficientes en potencia para modelos y precisiones soportadas, pero las GPUs suelen ganar en throughput y madurez de herramienta. Mide tu tubería exacta.
2) ¿Por qué TOPS no se correlaciona con tokens/seg?
TOPS mide pico de matemáticas en condiciones ideales. Tokens/seg depende de ancho de banda de memoria, comportamiento de caché, eficiencia de kernels, longitud de secuencia y throttling. Tu cuello de botella rara vez es “matemáticas”.
3) ¿Qué especificación de hardware debo priorizar para un estándar empresarial “PC con IA”?
Capacidad de RAM y comportamiento de potencia sostenida primero, luego latencia de almacenamiento bajo carga, y después capacidad GPU/NPU. Un acelerador rápido con memoria insuficiente es generador de decepciones.
4) Si el modelo cabe en RAM, ¿estoy a salvo de caídas de rendimiento?
Más seguro, no a salvo. Todavía puedes golpear contención de ancho de banda, throttling térmico o contención de colas GPU. “Cabe en RAM” evita los peores picos de latencia por paginación.
5) ¿Debemos ejecutar modelos desde almacenamiento en red para ahorrar disco?
Evítalo para inferencia interactiva. La latencia de red y el jitter se filtrarán directo a la experiencia de usuario. Si debes hacerlo, stagea localmente con checks de integridad y límites de retención.
6) ¿La inferencia local mejora automáticamente la privacidad?
Reduce la exposición a exfiltración por red, pero aumenta la huella de datos en el endpoint. Prompts, cachés y artefactos derivados siguen necesitando políticas, cifrado y limpieza.
7) ¿Por qué portátiles idénticos rinden distinto?
Versiones de firmware y drivers, servicios en segundo plano, nivel de llenado del SSD, variación en la pasta térmica y perfiles de potencia. “Mismo SKU” no es “mismas condiciones de ejecución”.
8) ¿Cuál es la razón más común por la que la “aceleración NPU” no ocurre silenciosamente?
Operadores no soportados o dtypes no soportados, seguido de mala configuración del runtime. Si tu telemetría no registra razones de fallback, no lo encontrarás rápido.
9) ¿La cuantización siempre vale la pena?
Para muchos escenarios on-device, sí —porque reduce huella de memoria y habilita aceleradores. Pero puede perjudicar la calidad. Trátalo como una compensación de producto, no como un predeterminado.
10) ¿Cuál es la forma más simple de saber si estoy limitado por IO durante la inferencia?
Observa fallos de página mayores (pidstat -r) y IO wait (iostat/top). Si cualquiera está alto durante generación en estado estable, no estás limitado por cómputo.
Conclusión: qué hacer a continuación (y qué dejar de hacer)
La categoría PC con IA no es falsa. El hype solo está dirigido a la capa equivocada. El cambio de arquitectura no es “hay una NPU”. El cambio es que los endpoints ahora ejecutan cargas sostenidas y hambrientas de memoria que hacen que térmicas, IO y disciplina de drivers vuelvan a importar.
Siguientes pasos prácticos:
- Deja de comprar por TOPS. Compra por rendimiento sostenido, RAM y cargas validadas.
- Instrumenta la selección de dispositivo. Si no puedes probar uso CPU vs GPU vs NPU, no puedes operarlo.
- Ejecuta benchmarks fríos/calientes. La carga del modelo es experiencia de usuario. Trátala como métrica de primera clase.
- Mide y gestiona IO. Servicios en segundo plano y churn de caché te sabotean en silencio.
- Adopta despliegues por anillos para drivers/firmware. Esto marca la diferencia entre “regresión menor” e “incidente de flota”.
- Presupuesta memoria. Si la hoja de ruta asume modelos locales más grandes, la RAM no es opcional. Es la arquitectura.
Si despliegas IA en dispositivo en el mundo real, tu trabajo es volverlo aburrido. Aburrido significa latencia predecible, rendimiento estable tras diez minutos y una máquina que sigue comportándose como portátil. Esa es la verdadera característica “PC con IA”.