Estás en una entrevista para Científico de Investigación en OpenAI. El entrevistador pregunta: "¿Cómo expandirías la longitud del contexto de un LLM de 2K a 128K tokens?" Tú: "Voy a ajustar el modelo con documentos más largos con un contexto de 128K." Entrevista terminada. Esto es lo que te perdiste:
Ampliar la ventana de contexto no se trata solo de matrices más grandes. En un transformador tradicional, expandir los tokens por 8x aumenta las necesidades de memoria en 64x debido a la complejidad cuadrática de la atención. ¡Consulta la imagen a continuación! Entonces, ¿cómo lo gestionamos? continúa...👇
1) Atención Escasa Limita el cálculo de atención a un subconjunto de tokens mediante: - Uso de atención local (los tokens solo prestan atención a sus vecinos). - Permitiendo que el modelo aprenda en qué tokens concentrarse. Pero esto tiene un compromiso entre la complejidad computacional y el rendimiento.
Se utilizó una idea similar en ModernBERT. → Atención global completa cada 3 capas → Atención local (128 tokens) en otros casos Resultado: - Longitud de secuencia 16 veces mayor - Rendimiento mucho mejor - Codificador más eficiente en memoria Simple pero poderoso.
Aquí hay una explicación intuitiva tomada del artículo: Imagínate leyendo un libro. ¿Para 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 con estar consciente del capítulo actual (atención local), siempre que 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 segundo.
2) Atención Rápida Este es un método rápido y eficiente en memoria que mantiene la exactitud de los mecanismos de atención tradicionales, es decir, utiliza atención global pero de manera eficiente. Toda la idea gira en torno a optimizar el movimiento de datos dentro de la memoria de la GPU. ¡Entendamos!
Algunos detalles de fondo: - Un hilo es la unidad más pequeña de ejecución. - Varios hilos forman un bloque. Además: - Los hilos en un bloque comparten una memoria rápida (pero escasa) llamada SRAM. - Todos los bloques comparten una memoria global llamada HBM (abundante pero lenta). Revisa 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 la salida a HBM Repetir para todas las capas. Revisa 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 aceleración de hasta 7.6x en comparación con los métodos de atención estándar. Consulta esto 👇
3) Atención Escasa de DeepSeek (DSA) El nuevo modelo V3.2 de DeepSeek introduce la Atención Escasa de DeepSeek (DSA), que reduce la complejidad de O(L²) a O(Lk), donde k es fijo. Cómo funciona: Un indexador ligero de Lightning puntúa qué tokens realmente importan para cada consulta. Pequeño número de cabezas, funciona en FP8, computacionalmente barato. Luego, un mecanismo de selección recupera solo las entradas clave-valor top-k. La clave es que solo se seleccionan 2048 tokens por consulta, independientemente de la longitud del contexto. Así que el costoso cálculo de atención ocurre en este pequeño subconjunto, no en la secuencia completa de 128K.
A 128K de contexto, los costos de prellenado bajan de ~$0.65 a ~$0.35 por millón de tokens. Y la decodificación baja de ~$2.4 a ~$0.8. Y el rendimiento se mantiene igual. En algunas pruebas de contexto largo, V3.2 en realidad obtiene una puntuación más alta. La atención dispersa no es nueva. Pero hacer que funcione sin perder calidad es difícil. ¿Cuáles son algunas otras técnicas para aumentar las longitudes de contexto de los LLMs?
243,31K