Un entorno de ejecución de IA local reserva memoria después de una solicitud para que los tensores futuros puedan reutilizar bloques del dispositivo sin asumir repetidamente los costes de asignación y sincronización.
El resultado visible puede parecer una fuga: el uso de la GPU cae a cero, la respuesta está completa, pero el proceso sigue ocupando la mayor parte de la memoria del acelerador. Parte de esa huella puede corresponder a pesos del modelo activos o al estado KV, mientras que otra parte pertenece a un asignador de memoria en caché, al contexto de ejecución, a la captura de gráficos, al espacio de trabajo de una biblioteca o a una política de mantenimiento activo del modelo. Las secciones siguientes distinguen entre asignaciones activas y reservas reutilizables, y muestran cuándo la memoria persistente es normal, innecesaria o indicio de una fuga real.
La asignación en el dispositivo es lo bastante costosa como para almacenarla en caché
Los tensores de una solicitud se crean y liberan repetidamente. Devolver cada bloque al controlador puede introducir sincronización y obligar a la siguiente solicitud a reconstruir la misma distribución de memoria.
El asignador CUDA de PyTorch separa los bloques del asignador en caché de los tensores que siguen asignados activamente.
Mantener los bloques libres dentro del proceso mejora la latencia de las solicitudes repetidas, pero otro servicio de IA no puede utilizar esos bytes hasta que el asignador los libere al controlador.
La memoria asignada, reservada y libre en el dispositivo son métricas distintas
La memoria asignada pertenece a tensores activos. La memoria reservada está gestionada por el asignador del entorno de ejecución y puede incluir tanto asignaciones activas como bloques reutilizables actualmente sin uso.
Por tanto, un entorno de ejecución puede mostrar una diferencia de memoria reservada incluso después de destruir los tensores temporales.
Las herramientas del dispositivo, como nvidia-smi, muestran la huella del proceso visible para el controlador, no qué bloques están lógicamente libres dentro del framework.
El modelo y el entorno de ejecución pueden permanecer activos intencionadamente
El proceso puede conservar los pesos del modelo, el estado del tokenizador, los kernels, los gráficos de ejecución y los contextos del acelerador listos, porque descargarlos convertiría la siguiente solicitud en un arranque en frío.
La explicación de ZimaSpace sobre la permanencia del modelo muestra por qué un servicio activo consume memoria incluso cuando ningún usuario está generando tokens en ese momento.
Se trata de un compromiso deliberado entre capacidad y latencia. La memoria está inactiva desde el punto de vista del cómputo, pero sigue siendo valiosa como estado listo para usar.
La fragmentación puede dejar bloques reservados difíciles de reutilizar
Un grupo puede contener suficientes bytes sin usar en total, pero los tamaños de sus bloques pueden no coincidir con los de la siguiente solicitud. Los prompts variables, las dimensiones de las imágenes, los lotes y los cambios de modelo pueden crear un patrón de reserva fragmentado.
GMLake estudia la fragmentación del asignador causada por tamaños de asignación irregulares.
En ese caso, la memoria retenida no es útil de forma activa ni está disponible para otros procesos, y reiniciar el proceso puede restaurar temporalmente una distribución más limpia.
Mide si la huella se estabiliza o crece
Ejecuta repetidamente la misma solicitud fija y registra la memoria asignada, reservada, de la caché KV, de los pesos del modelo y libre en el dispositivo después de cada finalización.
Un punto máximo estable sugiere un comportamiento normal de almacenamiento en caché o mantenimiento activo. Una huella que crece con cada solicitud idéntica y nunca reutiliza los bloques antiguos sugiere una fuga, una caché sin límite, una sesión retenida o una variación de la carga de trabajo.
Prueba los controles de liberación de la caché solo después de confirmar qué estado eliminan. Vaciar los bloques sin uso del asignador no descarga los pesos activos del modelo, y descargar el modelo puede perjudicar el tiempo de respuesta.
En un servidor doméstico con varios servicios, define un presupuesto de memoria y una política de inactividad para cada entorno de ejecución, de modo que la reserva de un servicio no impida silenciosamente que otro se inicie.
Centro de Tecnología e IA
Más para leer

¿Por qué las predicciones del hogar inteligente son menos precisas después de los cambios estacionales en la rutina?
Las rutinas estacionales cambian la relación entre el tiempo, los sensores, la ocupación y las acciones deseadas, lo que vuelve obsoleto un modelo entrenado...

¿Por qué un NVR doméstico no registra eventos breves cuando el seguimiento de objetos está activado?
El seguimiento necesita suficientes detecciones para iniciar y confirmar una trayectoria, por lo que un objeto que aparece brevemente puede desaparecer antes de que...

¿Por qué cambian las etiquetas de las fotos generadas por IA después de actualizar el modelo?
Una actualización del modelo cambia la representación y la clasificación utilizadas para asignar etiquetas, por lo que la misma foto puede cruzar diferentes límites...

