ai 7 min • intermediate

Realiza esta evaluación mañana: una guía paso a paso para comparaciones VLM equivalentes

Desde digests de contenedores y semillas hasta VLMEvalKit, esquemas JSON y ablaciones Vision-RAG, una guía práctica para resultados reproducibles

Por AI Research Team
Realiza esta evaluación mañana: una guía paso a paso para comparaciones VLM equivalentes

Ejecuta esta Evaluación Mañana: Un Manual Paso a Paso para Comparaciones de VLM Exactas

Incluso pequeñas inconsistencias—32 píxeles aquí, una secuencia de paradas diferente allá—pueden alterar las puntuaciones de los modelos de visión-lenguaje (VLM) por varios puntos en los principales benchmarks. Con las APIs también introduciendo variabilidad del lado del servidor, muchas afirmaciones de “estado del arte” no se replican en una segunda pasada. Si necesitas resultados creíbles y listos para auditorías mañana, debes bloquear las versiones de modelos, normalizar entradas, fijar la decodificación y ejecutar el mismo arnés en todos los modelos.

Este artículo es un manual práctico y completo para ejecutar una evaluación de VLM exacta usando herramientas comunitarias y artefactos reproducibles. Fijaremos IDs de modelo y puntos finales (por ejemplo, GLM-Image a través de la API de ZhipuAI junto con GPT-4o, Claude y Gemini ), estandarizaremos las indicaciones y semillas, y utilizaremos VLMEvalKit y LMMS-Eval para la orquestación y la puntuación oficial. Aprenderás exactamente cómo configurar contenedores deterministas y GPUs, implementar un régimen de indicaciones y decodificación neutrales, preprocesar imágenes y vídeos de manera consistente, y ejecutar un conjunto de benchmarks equilibrado (MMBench, MM-Vet, MMMU, VQA/GQA, COCO, RefCOCO, TextVQA/TextCaps/DocVQA/ChartQA, NLVR2/ScienceQA, y MSRVTT-QA/NExT-QA) con estadísticas robustas y archivo limpio [18–38]. También cubriremos la aplicación de esquemas JSON, ablaciones Vision‑RAG, seguimiento de latencia/costo, y errores comunes.

Detalles de Arquitectura/Implementación

Lista de verificación de preparación

  • Bloquear IDs de modelos exactos y puntos finales de API antes de cualquier puntuación; volver a validar justo antes de la corrida completa. Por ejemplo: ZhipuAI GLM-Image en la Plataforma Abierta de Zhipu, la familia GPT-4o de OpenAI, Anthropic Claude 3.5 Vision, y los modelos de Google Gemini Vision. Registrar los límites de tokens contexto/visión y cualquier modo de llamada de JSON/herramienta [2–4][8–9].
  • Congelar conjuntos de datos y divisiones desde sus fuentes oficiales: MMBench, MM-Vet, MMMU, VQA v2, GQA, COCO con las herramientas de subtítulos COCO, la familia RefCOCO, TextVQA/TextCaps, DocVQA/InfographicVQA, ChartQA, NLVR2, ScienceQA, MSRVTT-QA, NExT-QA, POPE/CHAIR/ImageNet-C para robustez [36–38].
  • Publicar digests de imágenes de contenedores y activaciones de determinismo; pruebas unitarias de preprocesamiento para detectar desvíos.

Configuración del entorno

  • SO base: imagen de Ubuntu LTS con CUDA/cuDNN fijados. Registrar las versiones del controlador/toolkit de CUDA para reproducibilidad.
  • GPU: Una A100 80GB o H100 80GB, MIG deshabilitado, límites de potencia registrados.
  • Contenedores: Descarga por digest y registra en tu manifiesto de ejecución. Prefiere referencias inmutables de Docker y desactiva actualizaciones automáticas de capas.

Ejemplo de descarga/ejecución de Docker por digest:

docker pull nvcr.io/nvidia/pytorch@sha256:<digest>
docker run --gpus all --rm \
 -e CUDA_VISIBLE_DEVICES=0 \
 -e CUBLAS_WORKSPACE_CONFIG=:4096:8 \
 -e CUDNN_DETERMINISTIC=1 \
 -v $PWD:/workspace \
 nvcr.io/nvidia/pytorch@sha256:<digest> bash

Cambios de determinismo

  • Semillas: establecer en Python, NumPy y PyTorch; controlar el determinismo de CUDA/cuDNN donde esté disponible.
  • cuDNN: habilitar algoritmos de convolución deterministas; aceptar posibles compensaciones de velocidad.
  • cuBLAS: establecer CUBLAS_WORKSPACE_CONFIG a un espacio de trabajo pequeño y fijo para estabilizar la selección de GEMM.
import os, random, numpy as np, torch
os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8"
os.environ["CUDNN_DETERMINISTIC"] = "1"
random.seed(1337)
np.random.seed(1337)
torch.manual_seed(1337)
torch.cuda.manual_seed_all(1337)
torch.use_deterministic_algorithms(True)

Plantillas de indicaciones y decodificación

  • Indicación del sistema neutral (idéntica en todos los modelos): “Eres un asistente de visión-lenguaje útil y preciso. Sigue las instrucciones exactamente. Si no estás seguro, di ‘no estoy seguro’. Evita afirmaciones no soportadas.”
  • Configuraciones de decodificación por defecto: temperatura=0.2, top_p=0.9 (top_k desactivado a menos que sea necesario), y secuencias de parada fijas. Mantener un máximo de tokens de salida por tarea constante.
  • Modo JSON o llamadas a funciones/herramientas si el proveedor lo ofrece para reducir violaciones de esquema [8–9].

Detalles del flujo de entrada

  • Política de cambio de tamaño: limitar el lado largo a 2048 px, preservar el aspecto con encuadre; registrar todos los parámetros de preprocesamiento. Si un modelo tiene límites internos más bajos, usar mosaico determinista con superposición y unión para que ningún modelo sea penalizado por su límite nativo.
  • Indicaciones de múltiples imágenes: enumerar índices fijos y preservar el orden.
  • Vídeo corto: muestrear K=8 o 16 cuadros espaciados uniformemente para modelos que aceptan múltiples imágenes; registrar índices de cuadros para que las entradas sean idénticas en todos los modelos.

Operaciones robustas de API

  • Registrar todas las cargas de solicitud/respuesta, encabezados, el punto final regional elegido, marcas de tiempo e ID de modelo/versión.
  • Usar claves de idempotencia, retroceso exponencial y jitter; aleatorizar el orden de las solicitudes para reducir artefactos de tiempo del día.

Ejecución del benchmark

  • Usar arneses comunitarios para evitar errores propios: VLMEvalKit y LMMS-Eval cubren muchos conjuntos de datos, scripts oficiales y plantillas estandarizadas. Verificar rangos relativos con las tablas de clasificación de OpenCompass para verificar el manejo y las divisiones.
  • Para cada conjunto de datos, cumplir con la evaluación oficial: herramientas de subtítulos COCO (CIDEr, SPICE, BLEU-4, METEOR, ROUGE-L); precisión para tareas de clasificación/QA según definiciones oficiales (por ejemplo, MMBench/MMMU/VQA/GQA/NLVR2/ScienceQA) [20–22]. La familia RefCOCO reporta IoU≥0.5 para la localización; restringir comparaciones a modelos que produzcan cuadros y marcar otros como “no soportado”.

Funciones no soportadas y formato de respuestas

  • Si un modelo no puede generar cuadros delimitadores o llamadas a herramientas, marca esa tarea como “no soportada” en lugar de penalizarla.
  • Evitar cadenas de pensamiento a menos que se permita de manera uniforme. Limitarse a respuestas cortas donde los benchmarks requieran exactitud.

Programación de múltiples semillas y almacenamiento

  • Repetir ítems generativos para múltiples semillas (por ejemplo, 5×) para estimar la varianza manteniendo fijas las configuraciones de decodificación.
  • Convenciones de carpetas: datasets//// para salidas brutas; logs/ para solicitudes/respuestas/latencia; costs/ para contabilidad de tokens; telemetry/ para métricas de hardware.

Puntuación y estadísticas

  • Usar scripts oficiales donde se proporcionen.
  • Reportar CIs al 95% a través de bootstrap no paramétrico (percentil o BCa).
  • Usar pruebas pareadas: McNemar para precisión; pruebas de permutación pareadas para métricas continuas. Aplicar Benjamini-Hochberg para comparaciones múltiples.

Salidas estructuradas y aplicación de esquemas

  • Proporcionar un esquema JSON estricto para tareas que requieran estructura (extracción, localización, llamadas a herramientas). Si la API soporta el modo JSON o llamadas a funciones, habilitarlo. Rastrear tasas de JSON inválido e implementar reintentos con retroceso.

Herramientas y localización

  • Probar el éxito de las llamadas a funciones con utilidades simples (calculadora, post-procesamiento OCR) para medir la fiabilidad de la integración.
  • Para detección/localización, Florence-2 es una fuerte referencia abierta, normalizar el JSON de cuadros a un formato común para evaluación de IoU.

Evaluación Vision-RAG

  • Fijar embeddings y el índice de recuperación en todos los modelos. Ejecutar una ablación: recuperación APAGADA vs ENCENDIDA para medir ganancias incrementales atribuibles a RAG en lugar del VLM base.

Perfilado de eficiencia y contabilidad de costos

  • Medir tiempo-al-primer-token (TTFT) y tiempo-al-último-token (TLTT); reportar p50/p90/p99 de latencia bajo concurrencia 1/8/32, en modos de streaming y no streaming. Registrar VRAM/CPU RAM y potencia promedio para ejecuciones en premisas.
  • Calcular costos por conjunto de datos usando precios oficiales del proveedor y contabilidad de tokens de visión; verificar con facturas o paneles de control.

Reporte y archivo

  • Publicar resultados por categoría con intervalos de confianza, deltas estadísticamente significativos (por ejemplo, vs GLM-Image como referencia), visualizaciones de latencia/rendimiento y costo por conjunto de datos.
  • Archivar todos los artefactos: indicaciones, semillas, configuraciones, digests de contenedores, versiones de arneses, registros de solicitudes y predicciones brutas.

Tablas de Comparación

Arneses comunitarios y alcance

ArnésConjuntos de datos cubiertos (ejemplos)Integración de puntuación oficialSoporte de videoSalidas estructuradasNotas
VLMEvalKitMMBench, VQA/GQA, COCO, RefCOCO, TextVQA, ChartQASí (por ejemplo, herramientas de subtítulos COCO)Parcial vía cuadros múltiples de imagenPuede aplicar formatos a través de indicacionesMantenido activamente; adaptadores amplios de modelo
LMMS-EvalMMMU, ScienceQA, NLVR2, Tareas de textoLimitadoEsquema vía plantillasFuerte para suites de razonamiento/alineamiento
OpenCompass LBResultados agregados por suitesN/AN/AN/AUsar para verificar rangos relativos

Cambios de determinismo (en-premisa/modelos abiertos)

CapaConfiguraciónCómo
Python/NumPySemillas aleatoriasrandom.seed, np.random.seed
PyTorchtorch.manual_seed; algoritmos deterministastorch.use_deterministic_algorithms(True)
cuDNNConvoluciones deterministasCUDNN_DETERMINISTIC=1
cuBLASEspacio de trabajo fijoCUBLAS_WORKSPACE_CONFIG=:4096:8
ContenedoresEntorno inmutableDescargar/ejecutar por digest; registrar imagen SHA

Conjunto de benchmarks y métricas

CategoríaConjuntos de datosMétricas principales
Percepción/razonamiento centralMMBench, MM-Vet, MMMU, VQA v2, GQAPrecisión; puntuación de rúbrica (MM-Vet) [18–22]
SubtitulaciónSubtítulos COCOCIDEr, SPICE, BLEU-4, METEOR, ROUGE-L
LocalizaciónRefCOCO/+/gPrecisión IoU≥0.5
OCR/doc/gráficoTextVQA, TextCaps, DocVQA, InfographicVQA, ChartQAPrecisión/EM/F1 dependiendo de la tarea [25–30]
Múltiples imágenes/vídeoNLVR2, ScienceQA, MSRVTT-QA, NExT-QAPrecisión [32–35]
RobustezPOPE, CHAIR, ImageNet-CTasas de alucinación; curvas de degradación [36–38]

Mejores Prácticas

  • Fijar todo, publicar todo. IDs de modelos/puntos finales, digests de contenedores, versiones de CUDA/cuDNN, SHAs de arneses, semillas e indicaciones deben vivir en un manifiesto de ejecución.
  • Mantener idénticas las entradas. Limitar el lado largo a 2048 px con encuadre; si los límites difieren, hacer mosaico de manera determinista y unir consistentemente.
  • Estandarizar la decodificación. temperatura=0.2, top_p=0.9, secuencias de parada fijas y tokens máximos; evitar la cadena de pensamiento a menos que se permita de manera uniforme.
  • Tratar características no compatibles con justicia. Marcar RefCOCO como “no soportado” para modelos solo de texto; no encajar cuadros de texto en IoU.
  • Medir incertidumbre. Ejecuciones con múltiples semillas para tareas generativas; bootstrap de CIs al 95% con SciPy. Usar pruebas pareadas y corrección BH.
  • Aplicar estructura. Usar modo JSON o llamadas a funciones cuando esté disponible; medir la tasa de JSON inválido y reintentar con retroceso.
  • Instrumentar todo. Registrar TTFT/TLTT, p50/p90/p99, concurrencia 1/8/32, streaming versus no streaming, VRAM/CPU/potencia. Para APIs, capturar región y marcas de tiempo para diagnosticar variabilidad.
  • Costear con recibos. Calcular $ esperado usando páginas de precios del proveedor, luego verificar facturas/paneles de control.
  • Línea base de localización. Incluir Florence-2 para detección de vocabulario abierto y normalizar JSON de cuadros.
  • Verificación de rangos. Comparar tus ordenamientos relativos con OpenCompass para detectar errores en el manejo de conjuntos de datos.
  • Seguridad en evaluación. Rastrear toxicidad a través de un clasificador de terceros y registrar comportamiento de rechazo en indicaciones sensibles. Mantener y reportar campos de procedencia de imagen donde estén presentes (C2PA).

Ejemplos Prácticos

1) VLMEvalKit en una línea para Subtítulos COCO y VQA v2

# Ejemplo: evaluar un adaptador de modelo en Subtítulos COCO y VQA v2
vlmeval \
 --model openai:gpt-4o \
 --datasets coco_caption,vqa_v2 \
 --temperature 0.2 --top_p 0.9 --max_tokens 64 \
 --image_long_side 2048 --letterbox true \
 --seeds 1337,1338,1339,1340,1341 \
 --json_mode true \
 --out_dir runs/2026-01-15/coco_vqa_gpt4o

2) Aplicación estricta de esquema JSON (Python)

from jsonschema import validate, ValidationError
schema = {
 "type": "object",
 "properties": {
 "answer": {"type": "string"},
 "confidence": {"type": "number", "minimum": 0, "maximum": 1}
 },
 "required": ["answer"]
}

def call_with_retries(client, prompt, schema, retries=2):
 for attempt in range(retries+1):
 resp = client.generate(prompt, json_mode=True) # Modo JSON si se soporta 
 try:
 validate(resp, schema)
 return resp
 except ValidationError:
 if attempt == retries:
 raise

3) Muestreo consistente de cuadros para QA de vídeo

def sample_frames(total_frames, K=8):
 # espacio uniforme inclusivo de los puntos finales
 return [round(i*(total_frames-1)/(K-1)) for i in range(K)]

Usar el mismo K e índices para todos los modelos que aceptan entradas de múltiples imágenes; registrarlos junto con las predicciones.

4) cURL con idempotencia y registro

curl https://api.openai.com/v1/chat/completions \
 -H "Authorization: Bearer $OPENAI_API_KEY" \
 -H "Idempotency-Key: $(uuidgen)" \
 -H "Content-Type: application/json" \
 -d @payload.json \
 -o logs/$(date +%s)-resp.json

Registrar región (si es seleccionable), marcas de tiempo y el ID de modelo devuelto. Repetir de manera similar para ZhipuAI, Anthropic y Google endpoints.

5) Puntuación de COCO con herramientas oficiales

python eval_coco.py \
 --annotations annotations/captions_val2017.json \
 --results runs/.../coco_predictions.json \
 --metrics CIDEr SPICE BLEU METEOR ROUGE \
 --bootstrap 10000 # CI percentil 

6) Línea base Florence-2 para localización

python florence2_infer.py \
 --images data/refcoco/val/*.jpg \
 --task grounding \
 --out runs/florence2/refcoco_boxes.json # normalizado [x0,y0,x1,y1]

Comparar precisión IoU≥0.5 con las salidas VLM (solo donde el VLM emite cuadros).

Conclusión

Las comparaciones replicables de VLM no se tratan de indicaciones ingeniosas; se tratan de controles. Bloquea los IDs de modelos y ambientes, unifica el preprocesamiento a

una caja de 2048 px con mosaico determinista, fija la decodificación y las semillas, y deja que los arneses establecidos ejecuten las métricas oficiales. Mide la incertidumbre con CIs de bootstrap, rastrea la latencia y el costo bajo concurrencia controlada, y archiva cada artefacto para que otros puedan reproducir tus números. Si sigues este manual, producirás resultados que aguantarán el escrutinio de pares y se traducirán en decisiones de despliegue confiables.

Puntos clave:

  • Congela modelos, conjuntos de datos, contenedores, semillas e indicaciones; registra cada interacción de API y detalle del entorno.
  • Aplica pipelines de entrada idénticos, parámetros de decodificación y esquemas de salidas estructuradas en todos los modelos.
  • Usa VLMEvalKit/LMMS‑Eval con puntuación oficial y ejecuciones de múltiples semillas; reporta CIs al 95% y pruebas pareadas.
  • Perfile TTFT/TLTT y concurrencia; calcula costos desde páginas del proveedor y verifica con facturas.
  • Publica todo: predicciones brutas, registros, configuraciones y digests de contenedores.

Próximos pasos:

  • Crea una plantilla de manifiesto de ejecución y compromete tu primera configuración fijada hoy.
  • Ejecuta una prueba con 100 muestras en dos modelos para validar indicaciones, esquemas y registros.
  • Escala al conjunto completo con programación de múltiples semillas, luego reporta CIs y deltas significativos.

Mirando hacia adelante, espera que los arneses añadan un uso más profundo de herramientas, suites de vídeo más ricas, y verificaciones de procedencia por defecto; hasta entonces, este manual es tu camino más corto hacia evaluaciones de VLM exactas que otros realmente puedan reproducir. ✅

Fuentes y Referencias

open.bigmodel.cn
ZhipuAI Open Platform (API) Primary API reference to pin GLM-Image model IDs, endpoints, and request/response handling for reproducible evaluations.
platform.openai.com
OpenAI Models (GPT-4o and others) Documents model IDs, capabilities, and limits needed for consistent prompting/decoding and logging across runs.
platform.openai.com
OpenAI Vision Guide Provides guidance on image inputs, JSON mode, and multimodal prompting to standardize evaluation inputs and outputs.
platform.openai.com
OpenAI Function/Tool Calling Supports structured outputs and tool-calling evaluations with enforced JSON schemas and reduced hallucination.
docs.anthropic.com
Anthropic Claude Vision Docs Defines Claude Vision model usage and constraints to align prompts, decoding, and capability checks across models.
ai.google.dev
Google Gemini API Models Specifies Gemini Vision model IDs and features for consistent endpoint pinning and capability documentation.
ai.google.dev
Google Gemini Vision Guide Details image handling and multimodal prompting needed to standardize preprocessing and templates for Gemini.
openai.com
OpenAI API Pricing Used to compute dataset-level and per-request cost accounting and to cross-check observed costs.
docs.anthropic.com
Anthropic Pricing Provides official rates for cost estimation and sensitivity analysis across datasets and regions.
ai.google.dev
Google Gemini Pricing Provides pricing inputs for reproducible cost accounting of multimodal evaluations.
github.com
Microsoft Florence-2 GitHub Open grounding/detection baseline used to normalize box JSON and compare IoU against VLM outputs.
github.com
MMBench (OpenCompass/MMBench) Official benchmark and scripts for broad multimodal reasoning with per-category breakdowns.
mm-vet.github.io
MM-Vet Benchmark Open-ended generative evaluation with rubric-based scoring used to complement closed-form QA.
mmmu-benchmark.github.io
MMMU Benchmark Expert multi-discipline reasoning benchmark providing category-level diagnostics in the suite.
visualqa.org
VQA v2 Dataset Core visual question answering dataset with official splits and scoring used in the evaluation.
cs.stanford.edu
GQA Dataset Compositional scene understanding benchmark required for standardized QA evaluation.
cocodataset.org
COCO Dataset (Captions) Standard captioning dataset whose official toolkit yields comparable text-generation metrics.
github.com
COCO Caption Evaluation Toolkit Official scoring scripts for CIDEr/SPICE/BLEU/METEOR/ROUGE used with bootstrap CIs.
textvqa.org
TextVQA OCR-in-the-wild QA dataset included to assess text reading and reasoning capabilities.
textvqa.org
TextCaps Reading-aware captioning dataset included to evaluate OCR-conditioned generation.
docvqa.org
DocVQA Document VQA suite measuring layout- and page-aware comprehension for structured tasks.
infographicvqa.github.io
InfographicVQA Tests visually dense, infographic-style document reasoning and extraction.
chartqa.github.io
ChartQA Chart understanding benchmark used to evaluate quantitative reasoning over plots.
github.com
RefCOCO/RefCOCO+/RefCOCOg (refer) Official references for referring expression grounding tasks with IoU≥0.5 evaluation.
lil.nlp.cornell.edu
NLVR2 Multi-image compositional reasoning dataset requiring fixed index enumeration and ordering.
scienceqa.github.io
ScienceQA Image subset used to evaluate instruction following and short-form reasoning with visuals.
github.com
MSRVTT-QA Short-video QA dataset used with fixed frame sampling policies for fairness.
github.com
NExT-QA Temporal reasoning over video clips with standardized frame sampling across models.
github.com
POPE Object hallucination stress test to quantify spurious mentions in VLM outputs.
arxiv.org
Object Hallucination in Image Captioning (CHAIR) Metric and analysis for hallucinated objects in generated captions.
github.com
ImageNet-C (Corruptions) Corruption suite for measuring robustness and degradation curves under distribution shift.
github.com
VLMEvalKit Community harness providing dataset adapters, standardized prompts, and official scorers.
opencompass.org.cn
OpenCompass Leaderboards (Multimodal) External reference to sanity-check relative rankings and dataset handling.
github.com
LMMS-Eval Evaluation harness for multimodal reasoning suites complementary to VLMEvalKit.
pytorch.org
PyTorch Reproducibility/Randomness Authoritative guidance on seeds, deterministic algorithms, and CUDA/cuDNN controls.
docs.scipy.org
SciPy Bootstrap CI Statistical method for computing non-parametric 95% confidence intervals over items.
c2pa.org
C2PA Specification Standard for provenance metadata used to test preservation and reporting in safety/trust checks.
developers.perspectiveapi.com
Perspective API Third-party classifier used to quantify toxicity rates during safety evaluations.
www.nvidia.com
NVIDIA A100 Hardware reference for reproducible on-prem benchmarking and power/memory telemetry.
www.nvidia.com
NVIDIA H100 Hardware reference for reproducible on-prem benchmarking and power/memory telemetry.
docs.docker.com
Docker Docs Source for pulling containers by digest and documenting immutable environments.
docs.nvidia.com
NVIDIA CUDA Docs Reference for CUDA/cuBLAS/cuDNN behaviors and determinism environment variables.

Advertisement