Casos de estudio

La caja local que se quedó sin VRAM al mes dos

La planificación de capacidad para inferencia autohospedada suele contar los pesos y olvidar todo lo demás que debe vivir en la misma tarjeta. La brecha entre esos dos números es lo que se agota primero.

Cómo se presenta

Un modelo autohospedado se despliega en hardware dimensionado a partir de un cálculo sencillo: recuento de parámetros multiplicado por bytes por parámetro, con espacio sobrante. Funciona en pruebas. Dos meses después, comienza a devolver errores bajo carga, luego vuelve a un modelo mucho más pequeño, luego sirve una solicitud a la vez.

La tarjeta no ha cambiado. Lo que ha cambiado es todo lo demás que compite por la misma memoria.

Qué ocupa realmente la tarjeta

Los pesos son el término que todos planean y, en un servidor ocupado, a menudo no son el mayor consumidor.

La caché de clave-valor. Esto crece con solicitudes concurrentes y con longitud de contexto, y es el término que convierte un modelo fijo en una huella variable. Las conversaciones largas y los contextos recuperados grandes multiplican su tamaño. Es el culpable habitual y la omisión habitual.

Memoria de activación y sobrecarga de tiempo de ejecución. Las asignaciones del framework, las optimizaciones del grafo y las piscinas de memoria no son gratuitas, y varían con el modo de ejecución, el tamaño del lote y la cantidad de secuencias concurrentes en vuelo.

Fragmentación. Asignar y liberar bloques de tamaño variable durante semanas deja espacios que no se pueden reutilizar. Un servidor que funcionaba cómodamente el primer día puede fallar al asignar una solicitud idéntica al día sesenta sin cambios en el perfil de carga.

Todo lo demás en el host. Un modelo de incrustación, un rerankeador, un codificador de visión, un agente de monitoreo, una implementación experimental. Cada uno es pequeño en aislamiento y el conjunto de ellos no lo es.

Dimensionar sin sorpresas

  • Dimensione para el pico que realmente pueda justificar, no para el promedio. El modo de fallo es un pico, y los picos son lo que los usuarios recuerdan.
  • Límite la longitud del contexto en el servidor en lugar de por convención. Un contexto ilimitado es una caché ilimitada, y un cliente que reenvía la historia cada turno encontrará el límite por usted.
  • Cuantice deliberadamente en lugar de por defecto. Es una palanca real en el hardware que posee, pero mida la calidad en su propio conjunto de evaluación antes y después — el intercambio no es uniforme en todas las tareas.
  • Reserve espacio de cabeza para las cargas de trabajo no modelo y escriba la reserva, para que el rerankeador planeado para el próximo trimestre tenga dónde vivir.
  • Seguimiento de la memoria con el tiempo, no solo al inicio. Un deslizamiento lento hacia arriba es fragmentación o una fuga, y se descubrirá mediante una interrupción si nadie está mirando.
  • Defina un modo degradado con anticipación — menos solicitudes concurrentes, un contexto más corto, un modelo más pequeño — y adjúntelo a un umbral explícito en lugar de improvisar durante un incidente.

El cálculo que nadie escribe

El artefacto útil no es la hoja de dimensionamiento inicial, es el registro de en qué se gastó el espacio de cabeza. El hardware que se aprovisionó con espacio de sobra deja de tener espacio de sobra una experimentación a la vez, y cada decisión individual parece razonable cuando se toma. Mantener la lista de reservas junto con la implementación convierte una serie de pequeñas aprobaciones en un presupuesto visible.

Qué hacer con esto

  • Dimensionar la caché de clave-valor, no solo los pesos
  • Un contexto ilimitado es una huella de memoria ilimitada
  • Vigilar la memoria durante semanas — la fragmentación se manifiesta como una interrupción, no como una alerta