Biblioteca de Python de NVIDIA para comprimir las cachés KV de los LLM durante la inferencia, con métodos de compresión modulares basados en Hugging Face transformers.
mit-han-lab/streaming-llm
Código de investigación de StreamingLLM, un método que permite a los LLM preentrenados procesar flujos de texto prácticamente ilimitados conservando tokens sumidero de atención y una ventana de tokens recientes.
- Estrellas
- 7,276
- Forks
- 402
- Issues abiertos
- 50
- Último commit
- hace 2 años
¿Qué es?
StreamingLLM es un proyecto de investigación de MIT Han Lab que acompaña al artículo de ICLR 2024 sobre modelos de lenguaje eficientes para flujos continuos con sumideros de atención. Aborda dos problemas del uso prolongado de LLM en varias rondas: el costo de memoria de almacenar en caché los estados Key y Value de todo el historial durante la decodificación, y el deterioro de las respuestas cuando las entradas superan la longitud de secuencia usada durante el entrenamiento.
El método observa que conservar los estados KV de los primeros tokens, que actúan como sumideros de atención, junto con una ventana deslizante de tokens recientes, recupera en gran medida el rendimiento de la atención por ventana convencional. La ventana de contexto del modelo no aumenta: los tokens intermedios simplemente se descartan, por lo que el modelo trabaja con texto reciente sin reiniciar la caché. El repositorio incluye una demo de chatbot con Llama para flujos continuos y código para evaluar la perplejidad; actualmente abarca Llama-2, MPT, Falcon y Pythia.
El proyecto es una publicación de código que acompaña al artículo, no una biblioteca de propósito general. La configuración se realiza con conda, una versión fijada de transformers y una instalación local en modo develop.
Funciones clave
- 01Conserva en la caché KV los tokens iniciales que actúan como sumideros de atención junto con una ventana de tokens recientes.
- 02Permite que los modelos procesen entradas mucho más largas que su longitud de entrenamiento, sin ajuste fino.
- 03Incluye un script de demo de chatbot con Llama para flujos continuos.
- 04Ofrece código para evaluar la perplejidad.
- 05Es compatible con Llama-2, MPT, Falcon y Pythia.
Casos de uso
- Ejecutar un chatbot de larga duración o un asistente diario que deba seguir respondiendo durante muchas rondas de conversación.
- Estudiar el comportamiento de los sumideros de atención y la gestión de la caché KV en la investigación con LLM.
- Reproducir los resultados de perplejidad del artículo de StreamingLLM.
Inicio rápido
- 1
Crea y activa un entorno conda con Python 3.8
conda create -yn streaming python=3.8 - 2
Activa el entorno
conda activate streaming - 3
Instala PyTorch y las dependencias de Python con versiones fijadas
pip install torch torchvision torchaudio - 4
Ejecuta la demostración del chatbot Llama en streaming en la GPU 0
CUDA_VISIBLE_DEVICES=0 python examples/run_streaming_llama.py --enable_streaming
Antes de usarlo
- La configuración requiere una versión antigua específica de Python (3.8) y una versión fijada de transformers (4.33.0).
- La demostración requiere una GPU y utiliza modelos preentrenados, como Llama-2, que debes obtener por separado.
- El modelo solo presta atención a los tokens recientes y a los attention sinks, por lo que no amplía el contexto ni ofrece memoria a largo plazo.
- El último push del repositorio fue en julio de 2024, por lo que el mantenimiento es limitado.
En colecciones
Temas
Preguntas frecuentes
- ¿Qué es streaming-llm?
- Código de investigación de StreamingLLM, un método que permite a los LLM preentrenados procesar flujos de texto prácticamente ilimitados conservando tokens sumidero de atención y una ventana de tokens recientes. StreamingLLM es un proyecto de investigación de MIT Han Lab que acompaña al artículo de ICLR 2024 sobre modelos de lenguaje eficientes para flujos continuos con sumideros de atención. Aborda dos problemas del uso prolongado de LLM en varias rondas: el costo de memoria de almacenar en caché los estados Key y Value de todo el historial durante la decodificación, y el deterioro de las respuestas cuando las entradas superan la longitud de secuencia usada durante el entrenamiento.
- ¿streaming-llm es gratuito? ¿Qué licencia tiene?
- streaming-llm es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿streaming-llm sigue mantenido?
- Sin commits en más de 6 meses. El último commit de streaming-llm fue el 11 jul 2024.
- ¿Para qué puedo usar streaming-llm?
- Ejecutar un chatbot de larga duración o un asistente diario que deba seguir respondiendo durante muchas rondas de conversación. Estudiar el comportamiento de los sumideros de atención y la gestión de la caché KV en la investigación con LLM. Reproducir los resultados de perplejidad del artículo de StreamingLLM.
- ¿Cómo se instala streaming-llm?
- Crea y activa un entorno conda con Python 3.8: conda create -yn streaming python=3.8 Activa el entorno: conda activate streaming Instala PyTorch y las dependencias de Python con versiones fijadas: pip install torch torchvision torchaudio Ejecuta la demostración del chatbot Llama en streaming en la GPU 0: CUDA_VISIBLE_DEVICES=0 python examples/run_streaming_llama.py --enable_streaming
- ¿Dónde consigo streaming-llm?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/mit-han-lab/streaming-llm
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Un gestor de memoria para la KV-cache en sistemas de serving de LLM que asigna memoria GPU bajo demanda mediante las API de memoria virtual de CUDA, sin PagedAttention.
SGLang es un framework de inferencia de código abierto para servir modelos de lenguaje, visión y difusión en diversas plataformas GPU, TPU y CPU.
Biblioteca de Python de Microsoft que comprime prompts de LLM y la KV cache hasta 20 veces al eliminar tokens no esenciales, con una pérdida mínima de rendimiento.
Una capa de gestión de KV cache que almacena, comparte y reutiliza cachés de atención de LLM entre motores de serving para reducir el tiempo hasta el primer token.
Un entorno de investigación unificado para comparar métodos de compresión, recuperación, combinación y cuantización de KV cache en inferencia de LLM con contextos largos.