Cómo detectamos tu GPU y puntuamos la IA local

Cómo detectamos tu hardware, puntuamos los modelos y de dónde salen los números.

Cómo funciona

Todo se ejecuta en tu navegador. Cuando visitas el sitio, usamos APIs del navegador para detectar tu GPU, CPU y memoria — y después calculamos qué modelos de IA pueden correr en tu hardware y a qué velocidad. No se envía ningún dato a un servidor. Todo se calcula en el cliente.

IMPORTANTE — Todos los resultados son estimaciones. Las APIs del navegador dan información limitada del hardware — los nombres de GPU pueden ser imprecisos, los valores de RAM son aproximados y los números de ancho de banda vienen de hojas de especificaciones y no de mediciones reales. El rendimiento real depende de muchos factores que no podemos medir desde un navegador: throttling térmico, procesos en segundo plano, versiones de drivers, presión de memoria del sistema operativo y más. Usa las puntuaciones como una guía general, no como una garantía.

Detectar
Identificar GPU
Puntuar
S
Calificación

Detección de hardware

Usamos tres APIs del navegador para identificar tu hardware. No hace falta instalar nada ni extensiones.

WebGL — Identificación de GPU

Creamos un canvas WebGL oculto y consultamos la extensión WEBGL_debug_renderer_info para obtener el nombre y fabricante de la GPU. Esto nos dice exactamente qué GPU tienes.

// Get GPU renderer string
const canvas = document.createElement("canvas");
const gl = canvas.getContext("webgl2");
const ext = gl.getExtension("WEBGL_debug_renderer_info");
const gpu = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
// → "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090, ...)"
// → "Apple M4 Pro GPU"

WebGPU — Información de arquitectura

Si tu navegador soporta WebGPU, solicitamos un adapter para obtener detalles adicionales del dispositivo y su arquitectura.

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;
// info.device → "nvidia geforce rtx 4090"
// info.architecture → "ampere"

Navigator — CPU y RAM

Usamos navigator.hardwareConcurrency para el número de núcleos de CPU y navigator.deviceMemory para la RAM aproximada. También ejecutamos un benchmark corto de CPU (~30ms) para estimar el rendimiento de un solo núcleo.

const cores = navigator.hardwareConcurrency; // → 16
const ram = navigator.deviceMemory;         // → 8 (GB, approximate)

Base de datos de GPUs

Una vez identificamos tu GPU, la buscamos en una base de datos integrada de ~40 GPUs (NVIDIA, AMD, Intel) y ~12 chips Apple Silicon. Cada entrada contiene la capacidad de VRAM y el ancho de banda de memoria — los dos números que más importan para correr modelos de IA localmente.

// Example entries from the GPU database
const GPU_DB = {
  "RTX 4090":    { vram: 24,  bw: 1008 }, // GB/s
  "RTX 4060":    { vram: 8,   bw: 272  },
  "RX 7900 XTX": { vram: 24,  bw: 960  },
};

const APPLE_DB = {
  "m4 max":   { ram: 36,  bw: 546 },
  "m4 pro":   { ram: 24,  bw: 273 },
  "m4":       { ram: 16,  bw: 120 },
};

Requisitos de VRAM

Cada modelo en nuestra base de datos tiene requisitos de VRAM precalculados para cada nivel de cuantización. La fórmula es directa:

VRAM (GB) = Parámetros × Bits por peso ÷ 8 ÷ 1024³ + Overhead

Añadimos una constante de 0.5 GB para overhead de runtime (motor de inferencia, contexto CUDA/Metal) más un 10% de margen de seguridad para caché KV y buffers de runtime. Por ejemplo, un modelo de 70B en Q4_K_M (4-bit) necesita aproximadamente 70 × 4 ÷ 8 = 35 GB × 1.1 + 0.5 ≈ 39 GB.

// How we calculate VRAM for each quantization
// Adds ~0.5 GB overhead for KV cache + inference runtime
const RUNTIME_OVERHEAD = 0.5; // GB

function makeQuants(paramsBillions) {
  const base = paramsBillions;
  return [
    { name: "Q2_K",   vram: round(base * 0.35 + RUNTIME_OVERHEAD) },
    { name: "Q4_K_M", vram: round(base * 0.55 + RUNTIME_OVERHEAD) },
    { name: "Q6_K",   vram: round(base * 0.75 + RUNTIME_OVERHEAD) },
    { name: "Q8_0",   vram: round(base * 0.95 + RUNTIME_OVERHEAD) },
    { name: "F16",    vram: round(base * 1.85 + RUNTIME_OVERHEAD) },
  ];
}

Algoritmo de puntuación

La puntuación (0–100) combina tres factores para responder: "¿Qué tan bien correrá este modelo en tu hardware?"

Velocidad (tok/s)55%
Margen de memoria35%
Bonus de calidad~10%

Puntuación de velocidad (peso 55%)

Tokens por segundo estimados según el ancho de banda de memoria de tu GPU y el tamaño en VRAM del modelo:

const efficiency = isAppleSilicon ? 0.65 : 0.70;
const toksPerSec = (bandwidthGBs / modelVRAM) * efficiency;

// Speed → Score mapping
80+ tok/s → 100 pts     // Instant
40+ tok/s →  85 pts     // Fast
20+ tok/s →  65 pts     // Good
10+ tok/s →  45 pts     // Usable
 5+ tok/s →  25 pts     // Slow
 <5  tok/s →  10 pts     // Painful

Margen de memoria (peso 35%)

Cuánta memoria disponible consume el modelo. Menor uso = más espacio para contexto, batching y otros procesos:

const memPct = (modelVRAM / totalMemory) * 100;

// Memory usage → Score mapping
 ≤30% → 100 pts     // Plenty of room
 ≤50% →  80 pts     // Comfortable
 ≤70% →  55 pts     // Moderate
 ≤85% →  30 pts     // Tight
 >85% →  10 pts     // Very tight

Bonus de calidad (~10%)

Un pequeño bonus para modelos más grandes, ya que suelen producir mejor output. Limitado a 15 puntos para que no domine la puntuación:

const qualityBonus = Math.min(15, Math.log2(paramsBillions + 1) * 2.5);
// 7B → ~7.5 pts, 70B → ~15 pts (capped)

Penalización por ajuste justo

Si un modelo apenas cabe en memoria (estado = "tight"), toda la puntuación se multiplica por 0.65. Esto penaliza a los modelos que técnicamente caben pero que tendrán problemas de swapping y gestión de contexto.

Escala de calificación

La puntuación final se traduce en una etiqueta de estado:

EstadoPuntuaciónSignificado
Corre genial85–100Inferencia rápida, mucho margen
Corre bien70–84Buena velocidad, ajuste cómodo
Decente55–69Usable pero no ideal
Ajuste justo40–54Lento, ventana de contexto limitada
Apenas corre20–39Espera un output muy lento
Demasiado pesado0–19No cabrá en tu memoria

Clasificación de ajuste

Antes de puntuar, clasificamos cada modelo en uno de tres estados según la memoria:

CORRE BIEN

Apple Silicon: El modelo usa ≤ 52.5% de la memoria unificada (75% usable × 70%)

GPU dedicada: El modelo usa ≤ 85% de la VRAM

JUSTO

Apple Silicon: El modelo usa entre 52.5% y 75% de la memoria unificada

GPU dedicada: El modelo usa entre 85% y 110% de la VRAM

NO CORRE

El modelo excede la memoria disponible — no cargará o hará swap a disco, quedando inutilizable.

Estimación de tokens/s

Estimamos la velocidad de inferencia usando un modelo simple limitado por ancho de banda. La inferencia de LLMs está casi completamente limitada por la velocidad a la que puedes leer los pesos desde memoria — el cómputo raramente es el cuello de botella.

tok/s ≈ Ancho de banda de memoria (GB/s) ÷ VRAM del modelo (GB) × Eficiencia

La eficiencia es 0.70 para GPUs dedicadas y 0.65 para Apple Silicon (la memoria unificada tiene algo más de overhead). Esto da una estimación conservadora — el rendimiento real puede variar ±20% según el tamaño de batch, la longitud de contexto y el formato de cuantización.

Fuentes de datos

La información de los modelos se recopila de múltiples fuentes y se cura manualmente:

API de HuggingFace— Descargas, likes y metadatos del modelo. Obtenidos en build time vía la API.
Ollama Library— Pull counts y tags/variantes disponibles para modelos distribuidos a través de Ollama.
Model cards, papers y anuncios oficiales para el número de parámetros, detalles de arquitectura y longitudes de contexto.
Especificaciones de GPU de las hojas de datos oficiales de los fabricantes (NVIDIA, AMD, Intel, Apple) para los números de VRAM y ancho de banda.

Estadísticas de HuggingFace

Obtenemos los conteos de descargas y likes de HuggingFace en build time usando su API pública:

// Fetch model stats from HuggingFace API
const res = await fetch(
  `https://huggingface.co/api/models/${repoId}`
);
const data = await res.json();
// data.downloads → 2_450_000
// data.likes     → 12_500

Apple Silicon: memoria unificada

Los Mac con Apple Silicon comparten memoria entre CPU y GPU (arquitectura de memoria unificada). Esto significa que el modelo puede usar hasta ~75% de la RAM total — mucho más que las GPUs dedicadas, que están limitadas a su VRAM. Un MacBook Pro con 36 GB puede correr modelos que necesitan ~27 GB, mientras que un PC con una GPU de 8 GB no puede. Tenemos esto en cuenta en nuestros cálculos tratando Apple Silicon como un único pool con un tope usable del 75%.

Privacidad y transparencia

Toda la detección de hardware y puntuación ocurre en tu navegador. No se envía ningún dato a un servidor. El nombre de la GPU, la RAM y los resultados de benchmark nunca salen de tu dispositivo. El sitio está construido con Astro y no envía JavaScript a las páginas que no lo necesitan.