{"schemaVersion":1,"id":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser","title":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","description":"Una exploración práctica de la WebNN API, accediendo a NPUs y GPUs desde el browser para inferencia ML, ejecución de modelos ONNX, comparaciones reales de benchmarks con WASM y WebGPU, y patrones de IA que preservan la privacidad manteniendo los datos en el dispositivo.","language":"es","datePublished":"2025-12-14","dateModified":null,"contentFormat":"text/markdown","content":"AI/ML\n\n# WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device\n\n2025-12-144 min lectura\n\nLucio Durán\nEngineering Manager & AI Solutions Architect\n\nTambién disponible en: [English](<https://lucioduran.com/blog/webnn-api-hardware-accelerated-ml-browser>)\n\n## Ejecución de Modelos ONNX\n\nEl camino práctico a WebNN es a través de ONNX Runtime Web:\n\n```javascript\nimport * as ort from 'onnxruntime-web';\n\nasync function runInference(imageData) {\n const session = await ort.InferenceSession.create(\n 'mobilenet_v3_small_int8.onnx',\n {\n executionProviders: [\n {\n name: 'webnn',\n deviceType: 'npu',\n powerPreference: 'default',\n },\n ],\n fallbackExecutionProviders: ['wasm'],\n },\n );\n\n const tensor = new ort.Tensor('float32', preprocessImage(imageData), [1, 3, 224, 224]);\n\n const startTime = performance.now();\n const results = await session.run({ input: tensor });\n const elapsed = performance.now() - startTime;\n\n console.log(`Tiempo de inferencia: ${elapsed.toFixed(2)}ms`);\n\n const probabilities = softmax(results.output.data);\n return getTopK(probabilities, 5);\n}\n\nfunction preprocessImage(imageData) {\n const canvas = new OffscreenCanvas(224, 224);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(imageData, 0, 0, 224, 224);\n\n const pixels = ctx.getImageData(0, 0, 224, 224).data;\n const float32 = new Float32Array(3 * 224 * 224);\n\n const mean = [0.485, 0.456, 0.406];\n const std = [0.229, 0.224, 0.225];\n\n for (let i = 0; i < 224 * 224; i++) {\n float32[i] = (pixels[i * 4] / 255 - mean[0]) / std[0];\n float32[i + 224 * 224] = (pixels[i * 4 + 1] / 255 - mean[1]) / std[1];\n float32[i + 2 * 224 * 224] = (pixels[i * 4 + 2] / 255 - mean[2]) / std[2];\n }\n\n return float32;\n}\n```\n\n## Benchmarks Reales\n\nSe benchmarkearon tres modelos en diferentes backends en dos máquinas:\n\n**Máquina 1: Intel Core Ultra 7 (Meteor Lake), 16GB RAM, Chrome 126**\n\n| Modelo | WASM (CPU) | WebGPU | WebNN (NPU) | WebNN (GPU) |\n| --- | --- | --- | --- | --- |\n| MobileNetV3-Small (INT8) | 18ms | 4.2ms | 2.8ms | 3.1ms |\n| MobileNetV3-Large (FP32) | 45ms | 8.5ms | , | 7.2ms |\n| ResNet-50 (INT8) | 125ms | 15ms | 11ms | 12ms |\n| DistilBERT (INT8, seq=128) | 340ms | 42ms | 28ms | 35ms |\n\n**Máquina 2: Apple M3 Pro, 18GB RAM, Chrome 126**\n\n| Modelo | WASM (CPU) | WebGPU | WebNN (GPU)\\* |\n| --- | --- | --- | --- |\n| MobileNetV3-Small (INT8) | 12ms | 3.8ms | 3.2ms |\n| ResNet-50 (INT8) | 95ms | 12ms | 10ms |\n\n\\*WebNN en macOS usa el delegado CoreML, que routea al ANE (Apple Neural Engine).\n\n## Patrones de IA que Preservan la Privacidad\n\nEl caso de uso más convincente para inferencia on-device no es el performance, es la privacidad:\n\n```javascript\nasync function analyzeSkinLesion(image) {\n const session = await getOrCreateSession('dermnet_classifier_int8.onnx');\n const tensor = preprocessDermatologyImage(image);\n\n // Inferencia local, la imagen nunca se manda a un server\n const results = await session.run({ input: tensor });\n\n // Solo el resultado de clasificación se manda al server\n await reportClassification(results.classification, {\n confidence: results.confidence,\n });\n\n return results;\n}\n```\n\nEste patrón se ha aplicado exitosamente en clasificación de documentos para aplicaciones de legal tech. Los documentos se procesan con OCR localmente (usando Tesseract.js), después se clasifican con un modelo DistilBERT corriendo a través de WebNN. El contenido del documento nunca sale del dispositivo.\n\n## Optimización de Modelos para On-Device\n\n```python\n# Paso 1: Exportar a ONNX desde PyTorch\ntorch.onnx.export(model, dummy_input, \"model_fp32.onnx\", opset_version=17)\n\n# Paso 2: Cuantizar a INT8\nfrom onnxruntime.quantization import quantize_dynamic, QuantType\nquantize_dynamic(\"model_fp32.onnx\", \"model_int8.onnx\", weight_type=QuantType.QInt8)\n\n# Paso 3: Optimizar grafo para WebNN\nimport onnxoptimizer\nmodel = onnx.load(\"model_int8.onnx\")\noptimized = onnxoptimizer.optimize(model, [\n 'eliminate_deadend',\n 'fuse_bn_into_conv',\n 'fuse_consecutive_transposes',\n])\nonnx.save(optimized, \"model_int8_optimized.onnx\")\n```\n\nResultado: MobileNetV3-Small pasa de 14.3MB (FP32) a 3.8MB (INT8 cuantizado). Lo suficientemente pequeño para cachear en un Service Worker.\n\n## Para Cerrar\n\nWebNN cierra la brecha entre \"ML en el browser es un juguete\" y \"ML en el browser es viable en producción.\" El hardware está, NPUs vienen en cada laptop nueva Intel y Qualcomm. La API está, Chrome la soporta hoy. Los modelos están, modelos ONNX cuantizados corren a frame rates interactivos.\n\nLos case es de uso donde esto más importa: aplicaciones sensibles a privacidad donde los datos no pueden salir del dispositivo, aplicaciones sensibles a latencia donde los round-trips de red son inaceptables, y aplicaciones offline-capable que necesitan ML sin conectividad.\n\nPara todo lo demás, llamar a una API sigue siendo más simple. Pero el conjunto de \"todo lo demás\" se está achicando rápido.\n\n## Preguntas frecuentes\n\n### ¿Qué es WebNN y cómo difiere de correr ML en WebAssembly?\n\nWebNN es una API del browser que da acceso directo a aceleradores ML de hardware, NPUs, GPUs y DSPs. ML basado en WASM (como ONNX Runtime Web con backend WASM) corre en la CPU usando bytecode portable. WebNN es típicamente 5-20x más rápido porque usa silicio dedicado diseñado para operaciones matriciales, con kernels optimizados provistos por el driver del fabricante del hardware.\n\n### ¿Qué browsers soportan WebNN en 2026?\n\nChrome 124+ y Edge 124+ incluyen con soporte WebNN. Firefox lo tiene detrás de un flag. Safari no tiene timeline público. El soporte de NPU específicamente requiere hardware compatible, Intel Meteor Lake/Arrow Lake, Qualcomm Snapdragon X Elite, o Apple M-series (a través del delegado CoreML).\n\n### ¿Es la inferencia on-device realmente práctica para aplicaciones de producción?\n\nPara modelos bajo 50MB (cuantizados), absolutamente. Clasificación de imágenes, embeddings de texto, análisis de sentimiento, detección de poses, todo corre fluido on-device. Para LLMs, on-device todavía está limitado a modelos pequeños (\\< 1B parámetros). Los principales case es de uso en producción son aplicaciones sensibles a privacidad (análisis de imágenes médicas, procesamiento de documentos) y las sensibles a latencia (efectos de video en tiempo real, predicción de input).\n\n## Tips\n\n1. **Tip:** Siempre verificar soporte de WebNN con ` navigator.ml ` antes de intentar usarlo, y caé back a ONNX Runtime Web (backend WASM) cuando no esté disponible. A principios de 2026, solo browsers basados en Chromium incluyen WebNN, y el soporte de NPU depende del hardware.\n2. **Tip:** Cuantizá tus modelos ONNX a INT8 antes de deployar a WebNN. El path de NPU está optimizado para operaciones enteras, los benchmarks muestran un speedup de 4.2x en un modelo MobileNetV3 yendo de FP32 a INT8 en un NPU Intel Meteor Lake.\n3. **Tip:** Utilizar el tipo de dispositivo ` 'npu' ` para workloads sostenidos y ` 'gpu' ` para inferencia en ráfagas. Los NPUs son eficientes en energía pero tienen mayor latencia de dispatch inicial. Para una sola clasificación de imagen, GPU gana. Para procesar un stream de video frame-por-frame, NPU gana por lejos en vida de batería.\n\n- webnn\n- machine-learning\n- browser-ml\n- npu\n- onnx\n- inferencia-on-device\n- webgpu\n- privacidad\n- edge-ai\n- aceleracion-hardware\n\n[Volver al Blog](<https://lucioduran.com/es/blog>)","headings":[{"level":1,"text":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#title"},{"level":2,"text":"Ejecución de Modelos ONNX","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#ejecucin-de-modelos-onnx"},{"level":2,"text":"Benchmarks Reales","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#benchmarks-reales"},{"level":2,"text":"Patrones de IA que Preservan la Privacidad","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#patrones-de-ia-que-preservan-la-privacidad"},{"level":2,"text":"Optimización de Modelos para On-Device","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#optimizacin-de-modelos-para-on-device"},{"level":2,"text":"Para Cerrar","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#para-cerrar"},{"level":2,"text":"Preguntas frecuentes","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#questions"},{"level":3,"text":"¿Qué es WebNN y cómo difiere de correr ML en WebAssembly?","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-1"},{"level":3,"text":"¿Qué browsers soportan WebNN en 2026?","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-2"},{"level":3,"text":"¿Es la inferencia on-device realmente práctica para aplicaciones de producción?","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-3"},{"level":2,"text":"Tips","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#article-tips"}],"sections":[{"heading":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","level":1,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser","content":"AI/ML"},{"heading":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","level":1,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#title","content":"2025-12-144 min lectura\n\nLucio Durán\nEngineering Manager & AI Solutions Architect\n\nTambién disponible en: [English](<https://lucioduran.com/blog/webnn-api-hardware-accelerated-ml-browser>)"},{"heading":"Ejecución de Modelos ONNX","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#ejecucin-de-modelos-onnx","content":"El camino práctico a WebNN es a través de ONNX Runtime Web:\n\n```javascript\nimport * as ort from 'onnxruntime-web';\n\nasync function runInference(imageData) {\n const session = await ort.InferenceSession.create(\n 'mobilenet_v3_small_int8.onnx',\n {\n executionProviders: [\n {\n name: 'webnn',\n deviceType: 'npu',\n powerPreference: 'default',\n },\n ],\n fallbackExecutionProviders: ['wasm'],\n },\n );\n\n const tensor = new ort.Tensor('float32', preprocessImage(imageData), [1, 3, 224, 224]);\n\n const startTime = performance.now();\n const results = await session.run({ input: tensor });\n const elapsed = performance.now() - startTime;\n\n console.log(`Tiempo de inferencia: ${elapsed.toFixed(2)}ms`);\n\n const probabilities = softmax(results.output.data);\n return getTopK(probabilities, 5);\n}\n\nfunction preprocessImage(imageData) {\n const canvas = new OffscreenCanvas(224, 224);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(imageData, 0, 0, 224, 224);\n\n const pixels = ctx.getImageData(0, 0, 224, 224).data;\n const float32 = new Float32Array(3 * 224 * 224);\n\n const mean = [0.485, 0.456, 0.406];\n const std = [0.229, 0.224, 0.225];\n\n for (let i = 0; i < 224 * 224; i++) {\n float32[i] = (pixels[i * 4] / 255 - mean[0]) / std[0];\n float32[i + 224 * 224] = (pixels[i * 4 + 1] / 255 - mean[1]) / std[1];\n float32[i + 2 * 224 * 224] = (pixels[i * 4 + 2] / 255 - mean[2]) / std[2];\n }\n\n return float32;\n}\n```"},{"heading":"Benchmarks Reales","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#benchmarks-reales","content":"Se benchmarkearon tres modelos en diferentes backends en dos máquinas:\n\n**Máquina 1: Intel Core Ultra 7 (Meteor Lake), 16GB RAM, Chrome 126**\n\n| Modelo | WASM (CPU) | WebGPU | WebNN (NPU) | WebNN (GPU) |\n| --- | --- | --- | --- | --- |\n| MobileNetV3-Small (INT8) | 18ms | 4.2ms | 2.8ms | 3.1ms |\n| MobileNetV3-Large (FP32) | 45ms | 8.5ms | , | 7.2ms |\n| ResNet-50 (INT8) | 125ms | 15ms | 11ms | 12ms |\n| DistilBERT (INT8, seq=128) | 340ms | 42ms | 28ms | 35ms |\n\n**Máquina 2: Apple M3 Pro, 18GB RAM, Chrome 126**\n\n| Modelo | WASM (CPU) | WebGPU | WebNN (GPU)\\* |\n| --- | --- | --- | --- |\n| MobileNetV3-Small (INT8) | 12ms | 3.8ms | 3.2ms |\n| ResNet-50 (INT8) | 95ms | 12ms | 10ms |\n\n\\*WebNN en macOS usa el delegado CoreML, que routea al ANE (Apple Neural Engine)."},{"heading":"Patrones de IA que Preservan la Privacidad","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#patrones-de-ia-que-preservan-la-privacidad","content":"El caso de uso más convincente para inferencia on-device no es el performance, es la privacidad:\n\n```javascript\nasync function analyzeSkinLesion(image) {\n const session = await getOrCreateSession('dermnet_classifier_int8.onnx');\n const tensor = preprocessDermatologyImage(image);\n\n // Inferencia local, la imagen nunca se manda a un server\n const results = await session.run({ input: tensor });\n\n // Solo el resultado de clasificación se manda al server\n await reportClassification(results.classification, {\n confidence: results.confidence,\n });\n\n return results;\n}\n```\n\nEste patrón se ha aplicado exitosamente en clasificación de documentos para aplicaciones de legal tech. Los documentos se procesan con OCR localmente (usando Tesseract.js), después se clasifican con un modelo DistilBERT corriendo a través de WebNN. El contenido del documento nunca sale del dispositivo."},{"heading":"Optimización de Modelos para On-Device","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#optimizacin-de-modelos-para-on-device","content":"```python\n# Paso 1: Exportar a ONNX desde PyTorch\ntorch.onnx.export(model, dummy_input, \"model_fp32.onnx\", opset_version=17)\n\n# Paso 2: Cuantizar a INT8\nfrom onnxruntime.quantization import quantize_dynamic, QuantType\nquantize_dynamic(\"model_fp32.onnx\", \"model_int8.onnx\", weight_type=QuantType.QInt8)\n\n# Paso 3: Optimizar grafo para WebNN\nimport onnxoptimizer\nmodel = onnx.load(\"model_int8.onnx\")\noptimized = onnxoptimizer.optimize(model, [\n 'eliminate_deadend',\n 'fuse_bn_into_conv',\n 'fuse_consecutive_transposes',\n])\nonnx.save(optimized, \"model_int8_optimized.onnx\")\n```\n\nResultado: MobileNetV3-Small pasa de 14.3MB (FP32) a 3.8MB (INT8 cuantizado). Lo suficientemente pequeño para cachear en un Service Worker."},{"heading":"Para Cerrar","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#para-cerrar","content":"WebNN cierra la brecha entre \"ML en el browser es un juguete\" y \"ML en el browser es viable en producción.\" El hardware está, NPUs vienen en cada laptop nueva Intel y Qualcomm. La API está, Chrome la soporta hoy. Los modelos están, modelos ONNX cuantizados corren a frame rates interactivos.\n\nLos case es de uso donde esto más importa: aplicaciones sensibles a privacidad donde los datos no pueden salir del dispositivo, aplicaciones sensibles a latencia donde los round-trips de red son inaceptables, y aplicaciones offline-capable que necesitan ML sin conectividad.\n\nPara todo lo demás, llamar a una API sigue siendo más simple. Pero el conjunto de \"todo lo demás\" se está achicando rápido."},{"heading":"Preguntas frecuentes","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#questions","content":""},{"heading":"¿Qué es WebNN y cómo difiere de correr ML en WebAssembly?","level":3,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-1","content":"WebNN es una API del browser que da acceso directo a aceleradores ML de hardware, NPUs, GPUs y DSPs. ML basado en WASM (como ONNX Runtime Web con backend WASM) corre en la CPU usando bytecode portable. WebNN es típicamente 5-20x más rápido porque usa silicio dedicado diseñado para operaciones matriciales, con kernels optimizados provistos por el driver del fabricante del hardware."},{"heading":"¿Qué browsers soportan WebNN en 2026?","level":3,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-2","content":"Chrome 124+ y Edge 124+ incluyen con soporte WebNN. Firefox lo tiene detrás de un flag. Safari no tiene timeline público. El soporte de NPU específicamente requiere hardware compatible, Intel Meteor Lake/Arrow Lake, Qualcomm Snapdragon X Elite, o Apple M-series (a través del delegado CoreML)."},{"heading":"¿Es la inferencia on-device realmente práctica para aplicaciones de producción?","level":3,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#question-3","content":"Para modelos bajo 50MB (cuantizados), absolutamente. Clasificación de imágenes, embeddings de texto, análisis de sentimiento, detección de poses, todo corre fluido on-device. Para LLMs, on-device todavía está limitado a modelos pequeños (\\< 1B parámetros). Los principales case es de uso en producción son aplicaciones sensibles a privacidad (análisis de imágenes médicas, procesamiento de documentos) y las sensibles a latencia (efectos de video en tiempo real, predicción de input)."},{"heading":"Tips","level":2,"url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#article-tips","content":"1. **Tip:** Siempre verificar soporte de WebNN con ` navigator.ml ` antes de intentar usarlo, y caé back a ONNX Runtime Web (backend WASM) cuando no esté disponible. A principios de 2026, solo browsers basados en Chromium incluyen WebNN, y el soporte de NPU depende del hardware.\n2. **Tip:** Cuantizá tus modelos ONNX a INT8 antes de deployar a WebNN. El path de NPU está optimizado para operaciones enteras, los benchmarks muestran un speedup de 4.2x en un modelo MobileNetV3 yendo de FP32 a INT8 en un NPU Intel Meteor Lake.\n3. **Tip:** Utilizar el tipo de dispositivo ` 'npu' ` para workloads sostenidos y ` 'gpu' ` para inferencia en ráfagas. Los NPUs son eficientes en energía pero tienen mayor latencia de dispatch inicial. Para una sola clasificación de imagen, GPU gana. Para procesar un stream de video frame-por-frame, NPU gana por lejos en vida de batería.\n\n- webnn\n- machine-learning\n- browser-ml\n- npu\n- onnx\n- inferencia-on-device\n- webgpu\n- privacidad\n- edge-ai\n- aceleracion-hardware\n\n[Volver al Blog](<https://lucioduran.com/es/blog>)"}],"links":[{"text":"English","url":"https://lucioduran.com/blog/webnn-api-hardware-accelerated-ml-browser"},{"text":"Volver al Blog","url":"https://lucioduran.com/es/blog"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"BlogPosting","@id":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser#article","mainEntityOfPage":{"@type":"WebPage","@id":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser"},"headline":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","description":"Una exploración práctica de la WebNN API, accediendo a NPUs y GPUs desde el browser para inferencia ML, ejecución de modelos ONNX, comparaciones reales de benchmarks con WASM y WebGPU, y patrones de IA que preservan la privacidad manteniendo los datos en el dispositivo.","datePublished":"2025-12-14","author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"publisher":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"image":"https://lucioduran.com/favicons/og-default.png","url":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser","inLanguage":"es","isPartOf":{"@id":"https://lucioduran.com/blog#blog"},"articleSection":"AI/ML","keywords":"webnn, machine-learning, browser-ml, npu, onnx, inferencia-on-device, webgpu, privacidad, edge-ai, aceleracion-hardware","wordCount":600,"timeRequired":"PT4M","workTranslation":[{"@type":"BlogPosting","inLanguage":"en","url":"https://lucioduran.com/blog/webnn-api-hardware-accelerated-ml-browser"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https://lucioduran.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://lucioduran.com/es/blog"},{"@type":"ListItem","position":3,"name":"WebNN API: ML Acelerado por Hardware en el Browser, Acceso a NPU y Benchmarks Reales de Inferencia On-Device","item":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser"}]},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"¿Qué es WebNN y cómo difiere de correr ML en WebAssembly?","acceptedAnswer":{"@type":"Answer","text":"WebNN es una API del browser que da acceso directo a aceleradores ML de hardware, NPUs, GPUs y DSPs. ML basado en WASM (como ONNX Runtime Web con backend WASM) corre en la CPU usando bytecode portable. WebNN es típicamente 5-20x más rápido porque usa silicio dedicado diseñado para operaciones matriciales, con kernels optimizados provistos por el driver del fabricante del hardware."}},{"@type":"Question","name":"¿Qué browsers soportan WebNN en 2026?","acceptedAnswer":{"@type":"Answer","text":"Chrome 124+ y Edge 124+ incluyen con soporte WebNN. Firefox lo tiene detrás de un flag. Safari no tiene timeline público. El soporte de NPU específicamente requiere hardware compatible, Intel Meteor Lake/Arrow Lake, Qualcomm Snapdragon X Elite, o Apple M-series (a través del delegado CoreML)."}},{"@type":"Question","name":"¿Es la inferencia on-device realmente práctica para aplicaciones de producción?","acceptedAnswer":{"@type":"Answer","text":"Para modelos bajo 50MB (cuantizados), absolutamente. Clasificación de imágenes, embeddings de texto, análisis de sentimiento, detección de poses, todo corre fluido on-device. Para LLMs, on-device todavía está limitado a modelos pequeños (< 1B parámetros). Los principales case es de uso en producción son aplicaciones sensibles a privacidad (análisis de imágenes médicas, procesamiento de documentos) y las sensibles a latencia (efectos de video en tiempo real, predicción de input)."}}]}]}],"contentHash":"d7450f99d5cd5e4fbdd99e5ff5dc0b66dc4709b0fbc5bb89674ebe736323ce7f","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/es/blog/webnn-api-hardware-accelerated-ml-browser","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":51708,"contentBytes":7423}}
