Estás en una entrevista de científico investigador en OpenAI. El entrevistador pregunta: "¿Cómo expandiría la longitud del contexto de un LLM de 2K a 128K tokens?" Tú: "Ajustaré el modelo en documentos más largos con contexto de 128K" Entrevista terminada. Esto es lo que te perdiste:
Extender la ventana de contexto no se trata solo de matrices más grandes. En un transformador tradicional, expandir tokens en 8 veces aumenta las necesidades de memoria en 64 veces debido a la complejidad cuadrática de la atención. ¡Consulte la imagen a continuación! Entonces, ¿cómo lo gestionamos? continuar... 👇
1) Atención escasa Limita el cálculo de la atención a un subconjunto de tokens mediante: - Usar la atención local (las fichas atienden solo a sus vecinos). - Dejar que el modelo aprenda en qué tokens enfocarse. Pero esto tiene una compensación entre la complejidad computacional y el rendimiento.
Una idea similar se utilizó en ModernBERT. → Atención global completa cada 3ª capa → Atención local (128 fichas) de lo contrario Resultado: - Longitud de secuencia 16 veces mayor - Rendimiento mucho mejor - El codificador más eficiente en memoria Simple pero poderoso. 👇
Aquí hay una explicación intuitiva tomada del artículo: Imagínate leyendo un libro. Por cada oración que lees, ¿necesitas ser plenamente consciente de toda la trama para entender la mayor parte de ella (atención global completa)? ¿O es suficiente conciencia del capítulo actual (atención local), siempre y cuando de vez en cuando pienses en su importancia para la trama principal (atención global)? En la gran mayoría de los casos, es lo último.
2) Atención flash Se trata de un método rápido y eficiente en memoria que conserva la exactitud de los mecanismos de atención tradicionales, es decir, utiliza la atención global pero de forma eficiente. Toda la idea gira en torno a la optimización del movimiento de datos dentro de la memoria de la GPU. ¡Entendamos!
Algunos detalles de fondo: - Un hilo es la unidad de ejecución más pequeña. - Varios hilos forman un bloque. Además: - Los subprocesos de un bloque comparten una memoria rápida (pero escasa) llamada SRAM. - Todos los bloques comparten una memoria global llamada HBM (abundante pero lenta). Mira esto 👇
La atención mueve grandes matrices entre SRAM y HBM: Para calcular QK: - distribuir matrices a los hilos - calcular, y - enviar el producto a HBM Para calcular softmax: - distribuir el producto a los hilos - calcular, y - enviar salida a HBM Repita para todas las capas. Mira esto 👇
La atención flash implica optimizaciones a nivel de hardware en las que utiliza SRAM para almacenar en caché los resultados intermedios. De esta manera, reduce los movimientos redundantes, ofreciendo una velocidad de hasta 7,6 veces sobre los métodos de atención estándar. Mira esto 👇
147.75K