Skip to content

Instantly share code, notes, and snippets.

@mateolafalce
Last active May 15, 2026 22:12
Show Gist options
  • Select an option

  • Save mateolafalce/35fc35c6a115314298b0651f35332f5f to your computer and use it in GitHub Desktop.

Select an option

Save mateolafalce/35fc35c6a115314298b0651f35332f5f to your computer and use it in GitHub Desktop.
Seleccion de modelos de IA para correr localmente usando el motor de inferencia VLLM en la placa RTX 3070 (8 GB VRAM)

Modelos 2026 (VLLM)

  • Selección de modelos de IA para correr localmente en una RTX 3070 (8 GB de VRAM).
  • Se verificó que todos los modelos listados a continuación pueden ejecutarse en nuestro hardware.
  • La carpeta /modelos contiene los archivos docker-compose correspondientes a cada modelo para su despliegue.
  • El motor de inferencia utilizado es vllm.

Listado

  1. Qwen3.5-9B
  2. Llama 3.1 8B
  3. Gemma 4 E4B
  4. Qwen 3 8B
  5. Mistral 7B Instruct v0.3
  6. DeepSeek-R1-Distill-Llama-8B
  7. Qwen 2.5 7B Instruct
  8. Phi-4 Mini
  9. Granite 4.1 8B Instruct

Comparativa entre modelos

Identidad y capacidades

Modelo Params Tipo Cuantización Licencia
Qwen3.5-9B 9B Reasoning (thinking) BnB 4-bit Apache 2.0
Llama 3.1 8B 8B Instruct BnB 4-bit Llama 3.1
Gemma 4 E4B ~4B Instruct + Visión BnB 4-bit Gemma ToS
Qwen3-VL 8B 8B Instruct (VL en modo texto) BnB 4-bit Apache 2.0
Mistral 7B v0.3 7B Instruct BnB INT8 Apache 2.0
DeepSeek-R1-Distill 8B Reasoning destilado BnB 4-bit MIT
Qwen2.5-7B Instruct 7B Instruct AWQ Marlin 4-bit Apache 2.0
Phi-4 Mini 3.8B Instruct BnB INT8 MIT
Granite 4.1 8B 8B Instruct AWQ INT4 (Marlin) Apache 2.0

Huella de VRAM (cómo entra en 8 GB)

Modelo Pesos KV-cache CPU offload Idle total
Qwen3.5-9B 4.54 GiB 1.38 GiB 3.0 GB 7.18 GiB
Llama 3.1 8B 5.65 GiB 0.70 GiB 7.24 GiB
Gemma 4 E4B ~2.5 GiB ~3.0 GiB 2.0 GB ~7.59 GiB
Qwen3-VL 8B 6.21 GiB ~1.05 GiB 7.26 GiB
Mistral 7B v0.3 4.17 GiB 2.32 GiB 6.99 GiB
DeepSeek-R1-Distill 5.65 GiB 0.86 GiB 6.97 GiB
Qwen2.5-7B Instruct 5.20 GiB 1.35 GiB 6.97 GiB
Phi-4 Mini 2.87 GiB 3.70 GiB 7.07 GiB
Granite 4.1 8B 5.09 GiB 1.53 GiB 6.98 GiB

Rendimiento operativo

Modelo Contexto KV total Concurrencia Generación Init (cacheado)
Qwen3.5-9B 8,192 11,088 ~4 3.7 tok/s ~3 min
Llama 3.1 8B 4,096 5,728 ~1 28.8 tok/s ~36 s
Gemma 4 E4B 2,048 ~4 ~45 tok/s ~4 s
Qwen3-VL 8B 2,048 4,992 ~2 22.8 tok/s ~4 s
Mistral 7B v0.3 4,096 18,960 ~4 28 tok/s ~15 s
DeepSeek-R1-Distill 6,144 7,008 ~1 3.8 tok/s ~24 s
Qwen2.5-7B Instruct 8,192 25,328 ~3 ~70 tok/s ~15 s
Phi-4 Mini 8,192 30,272 ~3 30 tok/s ~13 s
Granite 4.1 8B 8,192 10,032 ~1 ~47 tok/s ~8 s

Detalle de cada modelo (en nuestra GPU)

Qwen3.5-9B

Identidad del modelo

Campo Valor
Modelo Qwen/Qwen3.5-9B
Arquitectura Híbrido: Gated DeltaNet (atención lineal) + Gated Attention
Parámetros 9B
Capas 32 / Dimensión oculta 4096
Licencia Apache 2.0
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,359 MiB (~7.18 GiB)
VRAM libre (idle) 483 MiB
VRAM para pesos del modelo 4.54 GiB (cuantizado a 4-bit)
VRAM para KV-cache 1.38 GiB
CPU offload (pesos en RAM) 3.0 GB
Temperatura GPU (idle) 44 °C
Potencia consumida (idle) 21.7 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 8,192 tokens
KV-cache total disponible 11,088 tokens
Concurrencia máxima (8192 tokens/req) ~4 requests simultáneos
Throughput de generación ~3.7 tokens/s
Throughput de prompt (prefill) ~2.3 tokens/s
Tiempo de carga del modelo 10.4 segundos
Tiempo de inicialización total ~3 minutos (incluye profiling de KV-cache de ~90 s)

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes 4-bit
dtype en GPU float16
gpu-memory-utilization 0.90
Chunked prefill activado
Vision Encoder desactivado (--language-model-only)
CUDA Graphs desactivados (--enforce-eager)
Reasoning parser qwen3

Capacidades del modelo

  • Thinking mode (por defecto): genera razonamiento interno en <think>...</think> antes de responder, expuesto en el campo reasoning de la API. Puede desactivarse por request.
  • API compatible con OpenAI: /v1/chat/completions, /v1/models, /health.
  • Tarea soportada: generación de texto.
  • Contexto nativo del modelo: 262,144 tokens (limitado a 8,192 en este despliegue por restricciones de VRAM).

Notas de operación

  • En idle, el modelo ocupa el 89% de la VRAM disponible; no hay margen para otro proceso de GPU en el mismo host.
  • La velocidad de generación (~3.7 tokens/s) es consistente con BitsAndBytes 4-bit usando --enforce-eager en hardware consumer. Para mayor throughput, se requeriría AWQ/GPTQ con CUDA Graphs o hardware con más VRAM.
  • El arranque requiere ~3 minutos; el healthcheck en http://localhost:8005/health responde 200 OK solo después de que finaliza el profiling del KV-cache.

Llama 3.1 8B

Identidad del modelo

Campo Valor
Modelo meta-llama/Llama-3.1-8B
Arquitectura LlamaForCausalLM (Transformer decoder, GQA)
Parámetros 8B
Capas 32 / Dimensión oculta 4096
Licencia Meta Llama 3.1 Community License (repo gateado)
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,419 MiB (~7.24 GiB)
VRAM libre (idle) 773 MiB
VRAM para pesos del modelo 5.65 GiB (cuantizado a 4-bit)
VRAM para KV-cache 0.7 GiB
Temperatura GPU (idle) 44 °C
Potencia consumida (idle) 21 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 4,096 tokens
KV-cache total disponible 5,728 tokens
Concurrencia máxima (4096 tokens/req) ~1 request simultáneo
Throughput de generación ~28.8 tokens/s
Throughput de prompt (prefill) ~1.6 tokens/s (promedio ventana 10 s)
Tiempo de carga del modelo 4.56 segundos
Tiempo de inicialización total ~36 segundos

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes 4-bit
dtype en GPU float16
gpu-memory-utilization 0.90
Chunked prefill activado
CUDA Graphs desactivados (--enforce-eager)
Attention backend FlashAttention v2

Capacidades del modelo

  • Modelo base (no instruct): optimizado para completar texto, no para seguir instrucciones de chat. Para uso conversacional se recomienda Llama-3.1-8B-Instruct.
  • API compatible con OpenAI: /v1/completions, /v1/chat/completions, /v1/models, /health.
  • Tarea soportada: generación de texto.
  • Contexto nativo del modelo: 131,072 tokens (limitado a 4,096 en este despliegue por restricciones de VRAM).

Notas de operación

  • Los pesos en 4-bit ocupan 5.65 GiB, más que el Qwen3.5-9B (4.54 GiB) a pesar de tener menos parámetros, porque el modelo original es bfloat16 y se convierte a float16 antes de cuantizar.
  • --enforce-eager es obligatorio: los CUDA graphs requieren ~1 GiB adicional que dejaría la KV-cache en 0.14 GiB (insuficiente para arrancar).
  • El contexto se limitó a 4,096 tokens (vs 8,192 del Qwen) porque el modelo base consume más VRAM por peso.
  • La velocidad de generación (~28.8 tokens/s) es notablemente mayor que Qwen3.5-9B (~3.7 tokens/s) al ser un modelo base sin overhead de reasoning.
  • El arranque es rápido (~36 s) porque los pesos ya están cacheados en el volumen Docker.

Gemma 4 E4B

Identidad del modelo

Campo Valor
Modelo google/gemma-4-E4B-it
Arquitectura Gemma4ForConditionalGeneration (Vision-Language Transformer)
Parámetros ~4B
Licencia Gemma Terms of Service (repo gateado)
Servidor vLLM fork vllm/vllm-openai:gemma4 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) ~7,773 MiB (~7.59 GiB)
VRAM libre (idle) ~419 MiB
VRAM para pesos del modelo ~2.5 GiB (cuantizado a 4-bit)
VRAM para KV-cache ~3.0 GiB
CPU offload (pesos en RAM) 2.0 GB
Temperatura GPU (idle) ~45 °C
Potencia consumida (idle) ~22 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 2,048 tokens
Concurrencia máxima (2048 tokens/req) ~4 requests simultáneos
Throughput de generación ~45 tokens/s
Tiempo de carga del modelo ~4 segundos (pesos cacheados)
Tiempo de inicialización total ~2-5 minutos (arranque frío)

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes 4-bit
dtype en GPU float16
gpu-memory-utilization 0.95
max-model-len 2,048
CPU offload 2 GB (--cpu-offload-gb 2)
Multimodal --limit-mm-per-prompt '{"image":1,"video":0,"audio":0}'
CUDA Graphs desactivados (--enforce-eager)
Runtime patch sí (ver Notas de operación)

Capacidades del modelo

  • Modelo multimodal (texto + imagen): acepta hasta 1 imagen por request vía la API de chat de OpenAI. Video y audio están desactivados para conservar VRAM.
  • API compatible con OpenAI: /v1/chat/completions, /v1/models, /health.
  • Tarea soportada: generación de texto, seguimiento de instrucciones, comprensión de imágenes.
  • Contexto nativo del modelo: 128,000 tokens (limitado a 2,048 en este despliegue por restricciones de VRAM).

Notas de operación

  • El entrypoint aplica un patch en gpu_model_runner.py que elimina un assert que bloqueaba el CPU offload al reinicializar el batch multimodal — bug conocido upstream (vLLM PR #18298). El patch es idempotente; cuando upstream lo integre, el log mostrará Already patched or not found.
  • El flag --cpu-offload-gb 2 es necesario para caber en 8 GB de VRAM; sin él el servidor termina con OOM durante el profiling de la KV-cache.
  • Sin --limit-mm-per-prompt '{"image":1,"video":0,"audio":0}' el servidor falla con OOM porque el encoder visual reserva memoria adicional en el profiling.
  • --enforce-eager es obligatorio: bitsandbytes no es compatible con CUDA Graphs.
  • El primer arranque descarga los pesos en BF16 (~2-5 min); los reinicios con pesos cacheados en el volumen Docker cargan el modelo en ~4 s.
  • Se requiere aceptar la licencia Gemma en hf.co/google/gemma-4-E4B-it antes de descargar.

Qwen 3 8B

Identidad del modelo

Campo Valor
Modelo Qwen/Qwen3-VL-8B-Instruct
Arquitectura Qwen3VLForConditionalGeneration (Vision-Language Transformer)
Parámetros ~8B
Capas 28 / Dimensión oculta 3584
Licencia Apache 2.0
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,435 MiB (~7.26 GiB)
VRAM libre (idle) 757 MiB
VRAM para pesos del modelo 6.21 GiB (cuantizado a 4-bit)
VRAM para KV-cache ~1.05 GiB
Temperatura GPU (idle) 48 °C
Potencia consumida (idle) 22.1 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 2,048 tokens
KV-cache total disponible 4,992 tokens
Concurrencia máxima (2048 tokens/req) ~2 requests simultáneos
Throughput de generación ~22.8 tokens/s
Tiempo de carga del modelo 4.4 segundos (pesos cacheados)
Tiempo de inicialización total ~2-5 minutos en arranque frío

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes 4-bit
dtype en GPU bfloat16
gpu-memory-utilization 0.95
max-model-len 2,048
max-num-seqs 4
Chunked prefill activado
CUDA Graphs desactivados (--enforce-eager)
Vision Encoder deshabilitado (--limit-mm-per-prompt '{"image":0,"video":0}')

Capacidades del modelo

  • Modelo multimodal en modo texto: Qwen3-VL-8B-Instruct es un modelo vision-language (texto + imagen + video), pero se ejecuta en modo texto únicamente para caber en 8 GB de VRAM. El encoder visual se deshabilita durante el profiling de memoria y la inferencia.
  • API compatible con OpenAI: /v1/chat/completions, /v1/completions, /v1/models, /health.
  • Tarea soportada: generación de texto, seguimiento de instrucciones.
  • Contexto nativo del modelo: 256,000 tokens (limitado a 2,048 en este despliegue por restricciones de VRAM).

Notas de operación

  • Los pesos en 4-bit ocupan 6.21 GiB — el mayor footprint de todos los modelos desplegados — dejando solo ~1.05 GiB para KV-cache. Eso limita el contexto máximo a 2,048 tokens.
  • Sin --limit-mm-per-prompt '{"image":0,"video":0}' el servidor falla con OOM durante determine_available_memory porque el encoder visual consume ~576 MiB adicionales en el profiling.
  • La velocidad de generación (~22.8 tokens/s) es intermedia: superior a Qwen3.5-9B con reasoning (~3.7 tokens/s), pero inferior a Llama 3.1 8B base (~28.8 tokens/s) y Mistral INT8 (~28 tokens/s).
  • --enforce-eager y --trust-remote-code son obligatorios: bitsandbytes no es compatible con CUDA Graphs y la arquitectura Qwen3-VL requiere código remoto.
  • El primer arranque descarga ~18 GB de pesos originales en BF16 (~2-5 min); los reinicios con pesos cacheados en ~/.cache/huggingface cargan el modelo en ~4 seg.

Mistral 7B Instruct v0.3

Identidad del modelo

Campo Valor
Modelo mistralai/Mistral-7B-Instruct-v0.3
Arquitectura MistralForCausalLM (Transformer decoder, GQA, Sliding Window Attention)
Parámetros 7B
Capas 32 / Dimensión oculta 4096
Licencia Apache 2.0
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,159 MiB (~6.99 GiB)
VRAM libre (idle) 683 MiB
VRAM para pesos del modelo 4.17 GiB (cuantizado a INT8)
VRAM para KV-cache 2.32 GiB
Temperatura GPU (idle) 46 °C
Potencia consumida (idle) 21.81 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 4,096 tokens
KV-cache total disponible 18,960 tokens
Concurrencia máxima (4096 tokens/req) ~4 requests simultáneos
Throughput de generación ~28 tokens/s
Tiempo hasta primer token (TTFT) ~0.26 s (promedio)
Tiempo de carga del modelo 4.55 segundos (pesos cacheados)
Tiempo de inicialización total ~15 segundos (profile + warmup KV-cache)

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes INT8
dtype en GPU float16
gpu-memory-utilization 0.90
Chunked prefill activado
Prefix cache activado
CUDA Graphs desactivados (--enforce-eager)

Capacidades del modelo

  • Modelo instruct (fine-tuned con SFT): responde instrucciones y mantiene conversaciones coherentes en múltiples idiomas. El modelo base (Mistral-7B-v0.3) no sigue instrucciones; esta variante es la correcta para chat y Q&A.
  • API compatible con OpenAI: /v1/chat/completions, /v1/completions, /v1/models, /health.
  • Tarea soportada: generación de texto, seguimiento de instrucciones, chat.
  • Contexto nativo del modelo: 32,768 tokens (limitado a 4,096 en este despliegue por restricciones de VRAM).

Notas de operación

  • La cuantización INT8 (vs 4-bit de otros modelos) resulta en mayor velocidad de generación (~28 tokens/s) a costa de mayor VRAM por peso. Los 4.17 GiB de pesos dejan 2.32 GiB para KV-cache — más del doble que Llama 3.1 8B con 4-bit (0.7 GiB).
  • Con 18,960 tokens de KV-cache disponibles, soporta ~4 requests simultáneos de 4,096 tokens, igual que Qwen3.5-9B pero con 7x más throughput de generación.
  • --enforce-eager es obligatorio: la cuantización bitsandbytes no es compatible con CUDA Graphs en este hardware.
  • El primer arranque descarga ~14 GB de pesos (~4 minutos); los reinicios subsiguientes cargan desde ~/.cache/huggingface en ~15 s.

DeepSeek-R1-Distill-Llama-8B

Identidad del modelo

Campo Valor
Modelo deepseek-ai/DeepSeek-R1-Distill-Llama-8B
Arquitectura LlamaForCausalLM (destilado de DeepSeek-R1 vía knowledge distillation)
Parámetros 8B
Capas 32 / Dimensión oculta 4096
Licencia MIT
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,141 MiB (~6.97 GiB)
VRAM libre (idle) 1,051 MiB
VRAM para pesos del modelo 5.65 GiB (cuantizado a 4-bit)
VRAM para KV-cache 0.86 GiB
Temperatura GPU (idle) 48 °C
Potencia consumida (idle) 22 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 6,144 tokens
KV-cache total disponible 7,008 tokens
Concurrencia máxima (6144 tokens/req) ~1 request simultáneo
Throughput de generación ~3.8 tokens/s
Throughput de prompt (prefill) ~1.2 tokens/s
Tiempo de carga del modelo 4.43 segundos (pesos cacheados)
Tiempo de inicialización total ~24 segundos

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes 4-bit
dtype en GPU bfloat16
gpu-memory-utilization 0.90
max-model-len 6,144
max-num-seqs 8
Chunked prefill activado
Prefix cache activado
CUDA Graphs desactivados (--enforce-eager)
Attention backend FlashAttention v2
HTTP keep-alive timeout 300 s (VLLM_HTTP_TIMEOUT_KEEP_ALIVE=300)

Capacidades del modelo

  • Modelo de razonamiento (reasoning): genera cadena de pensamiento en <think>...</think> antes de la respuesta final. No existe variante base separada: el proceso de destilación desde DeepSeek-R1 produce directamente un modelo instruction-following con razonamiento integrado.
  • API compatible con OpenAI: /v1/chat/completions, /v1/models, /health.
  • Tarea soportada: generación de texto, razonamiento paso a paso, seguimiento de instrucciones.
  • Contexto nativo del modelo: 131,072 tokens (limitado a 6,144 en este despliegue por restricciones de VRAM).

Notas de operación

  • Los pesos en 4-bit ocupan 5.65 GiB — igual que Llama 3.1 8B, ya que comparten la misma arquitectura base. Esto deja solo 0.86 GiB para KV-cache.
  • El contexto se limitó a 6,144 tokens (en lugar del máximo nativo de 131,072): con --max-model-len 8192 el servidor falla al arrancar porque la KV-cache necesaria (1.0 GiB) supera la disponible (0.86 GiB). vLLM reportó el límite real: 7,008 tokens de KV-cache, suficientes para 6,144 tokens de contexto con margen.
  • El flag --timeout-keep-alive no existe en vLLM 0.19.x; el timeout de 5 minutos se configura mediante la variable de entorno VLLM_HTTP_TIMEOUT_KEEP_ALIVE=300, relevante para respuestas largas con cadenas de razonamiento extendidas.
  • La velocidad de generación (~3.8 tokens/s) incluye los tokens de la cadena de pensamiento (<think>), que en preguntas complejas puede ser extensa. El throughput neto de la respuesta visible es mayor.
  • --enforce-eager es obligatorio: bitsandbytes no es compatible con CUDA Graphs.
  • --trust-remote-code es necesario por la arquitectura personalizada del modelo.
  • Temperatura recomendada: 0.5–0.7 para equilibrar creatividad y coherencia en el razonamiento.

Qwen 2.5 7B Instruct

Identidad del modelo

Campo Valor
Modelo Qwen/Qwen2.5-7B-Instruct-AWQ
Arquitectura Qwen2ForCausalLM (Transformer decoder, GQA)
Parámetros 7B
Capas 28 / Dimensión oculta 3584
Licencia Apache 2.0
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,139 MiB (~6.97 GiB)
VRAM libre (idle) 703 MiB
VRAM para pesos del modelo 5.2 GiB (AWQ Marlin 4-bit)
VRAM para KV-cache 1.35 GiB
Temperatura GPU (idle) 44 °C
Potencia consumida (idle) 21.87 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 8,192 tokens
KV-cache total disponible 25,328 tokens
Concurrencia máxima (8192 tokens/req) ~3 requests simultáneos
Throughput de generación ~70 tokens/s
Throughput de prompt (prefill) ~4.7 tokens/s (promedio ventana 10 s)
Tiempo de carga del modelo ~105 segundos (primera vez, incluye descarga)
Tiempo de inicialización total (primera vez) ~2 minutos 20 segundos
Tiempo de inicialización total (pesos cacheados) ~15 segundos

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización AWQ Marlin 4-bit
dtype en GPU float16
gpu-memory-utilization 0.90
max-model-len 8,192
max-num-seqs 8
Chunked prefill activado
Prefix cache activado
CUDA Graphs desactivados (--enforce-eager)
HTTP keep-alive timeout 300 s (VLLM_HTTP_TIMEOUT_KEEP_ALIVE=300)

Capacidades del modelo

  • Modelo instruct puro de texto: Qwen2.5-7B-Instruct es un modelo de lenguaje de texto puro (no multimodal). Sigue instrucciones, mantiene conversaciones coherentes y soporta múltiples idiomas incluyendo español.
  • API compatible con OpenAI: /v1/chat/completions, /v1/completions, /v1/models, /health.
  • Nombre en la API: qwen2.5-7b-instruct
  • Tarea soportada: generación de texto, seguimiento de instrucciones, chat, Q&A.
  • Contexto nativo del modelo: 128,000 tokens (limitado a 8,192 en este despliegue por restricciones de VRAM).

Notas de operación

  • La cuantización AWQ Marlin es notablemente más rápida que BitsAndBytes 4-bit: ~70 tokens/s vs ~3-28 tokens/s de otros modelos en este hardware. El kernel Marlin optimiza específicamente el acceso a memoria para pesos AWQ en arquitecturas Ampere (RTX 30xx).
  • Con 25,328 tokens de KV-cache disponibles, tiene el mayor pool de contexto activo de todos los modelos desplegados.
  • A diferencia de los modelos con BitsAndBytes, AWQ descarga pesos ya cuantizados desde HuggingFace (~4 GB). Esto elimina el paso de cuantización en carga y explica el tiempo de inicialización más corto con pesos cacheados (~15 s).
  • --enforce-eager se mantiene para limitar el consumo de VRAM; el kernel AWQ Marlin alcanza buen rendimiento sin CUDA Graphs.
  • --trust-remote-code es necesario para cargar el tokenizador Qwen2.5.
  • El timeout HTTP keep-alive se configura vía la variable de entorno VLLM_HTTP_TIMEOUT_KEEP_ALIVE=300 (el flag --timeout-keep-alive fue eliminado en vLLM 0.19.x).

Phi-4 Mini Instruct

Identidad del modelo

Campo Valor
Modelo microsoft/Phi-4-mini-instruct
Arquitectura Phi3ForCausalLM (Transformer decoder, GQA)
Parámetros 3.8B
Capas 32 / Dimensión oculta 3072
Licencia MIT
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,247 MiB (~7.07 GiB)
VRAM libre (idle) 595 MiB
VRAM para pesos del modelo 2.87 GiB (cuantizado a INT8)
VRAM para KV-cache 3.7 GiB
Temperatura GPU (idle) 45 °C
Potencia consumida (idle) 21.84 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 8,192 tokens
KV-cache total disponible 30,272 tokens
Concurrencia máxima (8192 tokens/req) ~3 requests simultáneos
Throughput de generación ~30 tokens/s
Tiempo hasta primer token (TTFT) ~0.10 s (promedio)
Tiempo de carga del modelo ~5 segundos (pesos cacheados)
Tiempo de inicialización total ~13 segundos (pesos cacheados)

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización BitsAndBytes INT8
dtype en GPU bfloat16
gpu-memory-utilization 0.90
max-model-len 8,192
max-num-seqs 8
Chunked prefill activado
Prefix cache activado
CUDA Graphs desactivados (--enforce-eager)
Vision Encoder deshabilitado (--limit-mm-per-prompt '{"image":0}')

Capacidades del modelo

  • Modelo instruct (fine-tuned con SFT + RLHF): responde instrucciones y mantiene conversaciones en múltiples idiomas. Optimizado para razonamiento y calidad de respuesta en tareas de chat y Q&A.
  • API compatible con OpenAI: /v1/chat/completions, /v1/completions, /v1/models, /health.
  • Tarea soportada: generación de texto, seguimiento de instrucciones, chat, razonamiento.
  • Contexto nativo del modelo: 131,072 tokens con LongRoPE (limitado a 8,192 en este despliegue por restricciones de VRAM).

Notas de operación

  • Los pesos en INT8 ocupan 2.87 GiB — el footprint más bajo de todos los modelos instruct desplegados — liberando 3.7 GiB para KV-cache y permitiendo 8,192 tokens de contexto con ~3 requests simultáneos.
  • Aunque Phi-4-mini-instruct es un modelo vision-language, se ejecuta en modo texto únicamente con --limit-mm-per-prompt '{"image":0}' para conservar VRAM.
  • El contexto nativo es 131,072 tokens gracias a LongRoPE (sobre una ventana base de 4,096 tokens); vLLM genera un warning al respecto que es esperado y no afecta el funcionamiento.
  • La velocidad de generación (~30 tokens/s) es la más alta entre los modelos instruct del setup, ligeramente superior a Mistral 7B Instruct INT8 (~28 tokens/s) pese a tener menos parámetros.
  • --enforce-eager y --trust-remote-code son obligatorios: bitsandbytes no es compatible con CUDA Graphs y la arquitectura Phi-4 requiere código remoto.
  • El primer arranque descarga los pesos BF16 (~2 minutos); los reinicios con pesos cacheados en ~/.cache/huggingface inicializan en ~13 segundos.

Granite 4.1 8B Instruct

Identidad del modelo

Campo Valor
Modelo cyankiwi/granite-4.1-8b-AWQ-INT4 (base: ibm-granite/granite-4.1-8b-instruct)
Arquitectura GraniteForCausalLM (Transformer decoder, GQA)
Parámetros 8B
Capas 40 / Dimensión oculta 4096
Attention heads 32 / KV heads 8 (GQA)
Licencia Apache 2.0
Servidor vLLM v0.19.1 (API compatible con OpenAI)

Consumo de recursos (GPU)

Métrica Valor
GPU NVIDIA GeForce RTX 3070
VRAM total 8,192 MiB
VRAM ocupada (idle) 7,149 MiB (~6.98 GiB)
VRAM libre (idle) 1,043 MiB
VRAM para pesos del modelo 5.09 GiB (AWQ INT4 / compressed-tensors Marlin)
VRAM para KV-cache 1.53 GiB
Temperatura GPU (idle) 48 °C
Potencia consumida (idle) 22.2 W / 270 W máx.
Utilización GPU (idle) 0%

Capacidad y rendimiento (medido en vivo)

Métrica Valor
Contexto máximo (configurado) 8,192 tokens
KV-cache total disponible 10,032 tokens
Concurrencia máxima (8192 tokens/req) ~1 request simultáneo
Throughput de generación ~47 tokens/s
Tiempo hasta primer token (TTFT) ~0.06 s (warm)
Tiempo de carga del modelo 4.18 segundos (pesos cacheados)
Tiempo de inicialización total ~8 segundos (pesos cacheados)

Configuración del servidor

Parámetro Valor
Puerto 8005
Cuantización AWQ INT4 (compressed-tensors, kernel Marlin WNA16)
dtype en GPU float16 (cast desde bfloat16)
gpu-memory-utilization 0.90
max-model-len 8,192
max-num-seqs 8
Chunked prefill activado
Prefix cache activado
CUDA Graphs desactivados (--enforce-eager)

Capacidades del modelo

  • Modelo instruct de IBM: entrenado para seguir instrucciones, chat y tareas empresariales. Es el sucesor de la familia Granite 3.x con mejoras en razonamiento y seguimiento de instrucciones.
  • API compatible con OpenAI: /v1/chat/completions, /v1/models, /health.
  • Nombre en la API: granite-4.1-8b-instruct
  • Tarea soportada: generación de texto, seguimiento de instrucciones, chat, Q&A.
  • Contexto nativo del modelo: 131,072 tokens (limitado a 8,192 en este despliegue por restricciones de VRAM).

Notas de operación

  • El modelo usa cuantización compressed-tensors (WNA16) con el kernel MarlinLinearKernel, que es el mismo backend de alto rendimiento que usa Qwen2.5-7B AWQ. Esto explica los ~47 tok/s — muy superiores a modelos con BitsAndBytes (~3–30 tok/s).
  • vLLM auto-detecta la cuantización desde el quantization_config del model card. Pasar --quantization awq explícitamente falla porque el método registrado es compressed-tensors, no awq.
  • El modelo original es bfloat16; vLLM lo castea a float16 automáticamente (la RTX 3070 no tiene soporte nativo eficiente para bfloat16).
  • Con 10,032 tokens de KV-cache, la concurrencia real es ~1 request de 8,192 tokens. Para mayor concurrencia conviene reducir --max-model-len a 4,096 (duplicaría el pool de KV-cache).
  • El primer arranque descarga ~5.1 GB de pesos ya cuantizados desde HuggingFace (sin paso de cuantización en carga). Los reinicios con pesos cacheados inicializan en ~8 s.
  • --trust-remote-code es necesario para cargar la arquitectura GraniteForCausalLM.
  • --enforce-eager es obligatorio para operar dentro del presupuesto de VRAM de 8 GB.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment