Descripción completa de un LLM
Cómo funciona Llama 3.1 405B
En el libro, prometimos una descripción más completa de un LLM llamado Llama 3.1 405B. A continuación presentamos esa descripción para los curiosos y con el fin de comprender realmente hasta qué punto las IA modernas se cultivan y no se fabrican. (Véase también: ¿De qué sirve el conocimiento sobre los LLM?)
La siguiente explicación es bastante detallada, y asumiremos (aquí, pero no en el resto de los recursos en línea) que tienes algunos conocimientos técnicos, aunque no ningún conocimiento especializado, sobre IA. Si empiezas a leer esta sección y no te resulta útil, puedes saltártela.
Por lo general, no se publican los detalles sobre cómo se entrenan los modelos de lenguaje más capaces, ni tampoco el código. Pero hay excepciones. Uno de los sistemas más potentes cuya arquitectura y pesos se habían hecho públicos, en el momento de redactar este libro a finales de 2024, era Llama 3.1 405B, creado por la división de IA de Meta. El «405B» hace referencia a los 405 000 millones de parámetros de la arquitectura, rellenados por 405 000 millones de pesos.
¿Por qué estamos analizando este modelo de IA en particular? Llama 3.1 405B es de «pesos abiertos»,* lo que significa que puedes descargar tú mismo esos 405 000 millones de números inescrutables (junto con el esqueleto de código, mucho más pequeño y escrito por humanos, que realiza operaciones aritméticas con los 405 000 millones de números y, por lo tanto, ejecuta la IA). Esto nos permite hacer afirmaciones sobre su diseño con cierta confianza.†
En fin, hablemos de cómo están organizados esos 405 000 millones de números inescrutables, de cómo se configuraron, incluso antes del entrenamiento, de tal manera que los ingenieros de Meta tenían la expectativa correcta de que ajustar esos números iniciales aleatorios en la dirección de una mejor predicción del siguiente token (fragmento de palabra), dado el entrenamiento con más de 15,6 billones de tokens, crearía una IA capaz de hablar.
El primer paso es dividir todas las palabras de todos los idiomas compatibles en tokens.
El siguiente paso es convertir cada uno de estos tokens en un «vector» de números. Llama utiliza vectores de 16 384 números por token de diccionario estándar. Tiene 128 256 tokens en su vocabulario.
Para convertir cada token en un vector, a cada token posible se le asigna un peso para cada posición posible en el vector. Es así como obtenemos nuestra primera porción de miles de millones de parámetros:
Dos mil millones de parámetros menos. ¡Quedan 403 000 millones por delante!
Para que quede claro: ningún humano le dice a Llama qué significan los tokens, inventa el vector de 16 384 números al que se traduce una palabra ni sabe qué significa el vector de números para cualquier palabra. Los dos mil millones de parámetros llegaron allí mediante descenso de gradiente. Los números se ajustan, junto con otros parámetros que presentaremos, para aumentar la probabilidad asignada al siguiente token verdadero.‡
Supongamos que Llama comienza analizando un bloque de 1000 palabras, como un fragmento de un ensayo. (O más bien, 1000 tokens. Pero a partir de ahora, para simplificar, a veces diremos simplemente «palabras»).
Para cada una de esas palabras, buscamos esa palabra en el diccionario del LLM y cargamos su lista de 16 384 números inescrutables en la memoria. (Inicialmente, esos números se establecieron al azar, al comienzo del entrenamiento; luego se ajustaron mediante descenso de gradiente).
1000 palabras × (16 384 números / palabra) = 16 384 000 números en total. A esto lo llamamos «activaciones» en la primera «capa» de los cálculos de Llama (es decir, su cognición, su actividad mental).
Puedes imaginarlas dispuestas en un rectángulo plano en el suelo de 1000 números de largo (la longitud de los datos de entrada) por 16 384 números de ancho (los números por palabra en la primera capa). Aquí tienes uno de esos vectores, en el que el color de cada píxel corresponde al número del vector:

(No son los artefactos más fáciles de interpretar).
Ten en cuenta también que hay dos números diferentes aquí que no deben confundirse:
- El número de parámetros que determinan el comportamiento de esta capa (es decir, los 2 101 248 000 números almacenados en el diccionario).
- El número de activaciones o números utilizados en el razonamiento en la primera capa cuando se introducen mil palabras (eso supone 16 384 000 números para el primer paso en el procesamiento de una consulta de 1000 palabras).
Ahora tenemos nuestra enorme matriz de números que representa nuestra consulta en todo su esplendor, y podemos empezar a utilizarla.
Lo primero es algo llamado «[normalización] (https://en.wikipedia.org/wiki/Normalization_(aprendizaje automático))», que ocurre muchas veces durante el procesamiento de un LLM. Es similar a la normalización en estadística, pero con un giro de aprendizaje automático. Ese giro es que, después de normalizar los datos dentro de cada fila, se multiplica un parámetro específico aprendido llamado «escala» por cada columna. Estos números de escala, como todos los demás parámetros que discutiremos, se aprenden durante el entrenamiento. Además, la normalización de capas se produce docenas de veces, y cada vez tiene un nuevo lote de parámetros de escala, por lo que la normalización tiene en cuenta muchísimos parámetros a lo largo del LLM. Específicamente, 16 384 parámetros por normalización. (Si tienes curiosidad por saber más detalles sobre el tipo de normalización que utiliza Llama 3.1 405B, se llama RMSNorm).
Quizás estés pensando: «Vaya, hay mucho preprocesamiento», y tienes razón. De hecho, hemos pasado por alto algunos de los puntos más delicados, por lo que hay aún más de lo que parece, y ahora estamos llegando a la característica más distintiva de los LLM: la capa de «atención».
La «atención» es el motivo de todo el revuelo que han causado los «transformadores» (si tienes suficiente edad como para recordar el revuelo que causó su invención). Los LLM son una especie de «transformador»; los transformadores se presentaron en un artículo de 2017 titulado «[Attention Is All You Need] (https://arxiv.org/abs/1706.03762)». A este artículo, más que a ningún otro, se le atribuye el éxito de los LLM. Una capa de «atención» funciona así:
Tomamos cada uno de los 1000 vectores de 16 384 activaciones y transformamos cada vector de 16 384 activaciones:
- en 8 claves, cada una de ellas un vector de 128 activaciones
- en 8 valores, cada uno de ellos un vector de 128 activaciones
- y en 128 consultas, cada una un vector de 128 activaciones
El «paso de atención» situado encima de cada token consiste en emparejar cada una de las 128 consultas con las 8 claves —viendo cuál de las 8 claves se parece más o coincide mejor con esa consulta— y cargar una mezcla de los 8 valores, donde los valores de las claves que mejor coinciden tienen mayor peso en la mezcla.
Esto permite, a grandes rasgos, que cada una de las activaciones situadas encima de un token cree un conjunto de «consultas», que luego exploran las «claves» situadas encima de todos los demás tokens. Cuando la consulta de un token coincide mejor con una clave, recupera el valor correspondiente con mayor intensidad, para pasarlo a los cálculos posteriores situados encima de ese token.
Por ejemplo, la palabra «right» podría activar una consulta diseñada para examinar palabras vecinas y ver si alguna de ellas está relacionada con direcciones espaciales o, alternativamente, con creencias, para determinar si la palabra «right» significa derecha como en «right-handed» o correcto como en «right answer». (De nuevo, todo eso se aprende mediante descenso de gradiente; nada de ello está programado por humanos que piensen en los diferentes significados que puede tener la palabra inglesa «right»).§
Las capas de atención en un LLM son bastante grandes, con un gran número de parámetros en cada una. Llama 3.1 405b, en particular, tiene 126 capas de atención de este tipo (solo hemos descrito la primera de ellas), y cada una de las 126 tiene 570 425 344 parámetros, distribuidos entre matrices de consulta, clave, valor y salida.¶
Una vez completada la subcapa de atención, y obtenemos una matriz del mismo tamaño que la inicial (en nuestro ejemplo, 16 384 por 1000), realizamos algo que se denomina «conexión residual». Básicamente, se toman los datos de entrada originales de la subcapa (en este caso, la enorme matriz con la que empezamos) y se suma a lo que hayamos obtenido. Esto evita que cualquier subcapa cambie demasiado en cualquier paso dado (y tiene otras propiedades técnicas útiles).
A continuación, el resultado se pasa por lo que se denomina una «red de propagación hacia adelante». La variante utilizada por Llama 3.1 405B se basa en una operación denominada «SwiGLU». SwiGLU fue descubierta por algunos investigadores que probaron entrenar con distintas fórmulas variantes para ver cuáles funcionaban mejor, de las cuales su artículo original decía (como también hemos señalado en otra parte):
No ofrecemos ninguna explicación de por qué estas arquitecturas parecen funcionar; atribuimos su éxito, como todo lo demás, a la benevolencia divina.
Como todas las redes de propagación hacia adelante, SwiGLU básicamente expande nuestra matriz de 16 384 por 10 000 a una matriz aún más grande, realiza algunas transformaciones en ella y luego la comprime de nuevo. Concretamente, cada fila pasa de tener 16 384 columnas a 53 248 columnas, y luego regresa a 16 384.
Ahora que hemos terminado con la subcapa de propagación hacia adelante, volvemos a realizar la conexión residual, sumando lo que teníamos al principio con lo que hayamos obtenido.
Ha sido un camino largo, pero ahora hemos transformado muy ligeramente nuestra gigantesca matriz.
Todos esos pasos juntos constituyen una sola «capa». Llama tiene 126 capas, por lo que repetiremos todos estos pasos (normalización, mecanismo de atención, conexión residual, red de propagación hacia adelante y conexión residual de nuevo) 125 veces.
Al final de las 126 capas, obtenemos una matriz del mismo tamaño que la inicial; en nuestro ejemplo, 16 384 por 1000. Cada fila de esta matriz se puede proyectar en un nuevo vector de 128 256 números, uno por cada token del diccionario completo del modelo. Estos números pueden ser positivos o negativos, pero se puede utilizar una práctica función llamada softmaxing para convertirlos todos en probabilidades, cuya suma es uno. Esas probabilidades son la predicción de Llama sobre qué token vendrá a continuación.
Ahora es posible hacer que Llama genere un nuevo token. Una forma de hacerlo es tomar el token al que Llama le ha dado la mayor probabilidad, aunque también se pueden cambiar las cosas tomando ocasionalmente tokens que, según él, son un poco menos probables.‖
Si estás ejecutando Llama de forma normal, como en una interfaz de chatbot, todo este proceso ha generado un único token. Ese token se coloca al final de los datos de entrada y repetimos todo desde cero para el siguiente token. Así que haríamos todos los pasos comentados anteriormente, excepto que ahora nuestra matriz tiene 1001 filas. Luego, otro token más tarde, 1002, y así sucesivamente.
Hemos omitido muchos detalles, pero básicamente así es cómo funciona Llama 3.1 405B.
Los LLM son grandes
Hablemos un poco sobre el enorme tamaño de Llama 3.1 405B.
Para que Llama pueda procesar un texto de 1000 palabras (o más bien 1000 tokens), se necesitan alrededor de 810 billones de cálculos.#
Si 810 billones te parece mucho, ten en cuenta que la mayoría de los 405 000 millones de parámetros de Llama se utilizan en alguna operación aritmética cada vez que se procesa cualquier palabra.**
Si Llama se está entrenando con un lote de 1000 tokens, cada uno de los 1000 tokens se comparará con la siguiente palabra real y las pérdidas se propagarán mediante descenso de gradiente, para determinar cómo el ajuste de los 405 000 millones de parámetros compartidos habría cambiado las probabilidades asignadas a las respuestas verdaderas en todos los casos. Esto requerirá mucho más poder de cómputo y muchos más números.
Durante el entrenamiento de los 405 000 millones de parámetros de Llama con 15,6 billones de tokens, se necesitaron alrededor de 38 cuatrillones de cálculos, es decir, 38 seguido de 24 ceros.
Si, por el contrario, Llama ha terminado el entrenamiento y se ejecuta en modo de inferencia (es decir, si está generando texto nuevo, como en un chat con un usuario), las probabilidades solo se calcularán por encima del último token, como si se predijera cuál sería la siguiente palabra si la IA estuviera leyendo un texto producido por humanos.
A continuación, un esqueleto de código escrito por humanos que rodea a Llama seleccionará la respuesta que Llama considera más probable.††
¡Y así es como se consigue que una computadora empiece a hablar contigo! No es tan inteligente como las IA comerciales de 2025, pero sigue hablando más o menos como una persona.
Para lidiar con mil palabras, un Llama utiliza 405 000 millones de pequeños parámetros inescrutables en 810 billones de cálculos, cálculos matemáticamente dispuestos en rectángulos, cubos y formas de dimensiones superiores.
A veces llamamos a estas disposiciones «matrices gigantes e inescrutables», porque si te fijas en algunos de los parámetros de Llama, incluso los más simples almacenados en el sencillo diccionario que se encuentra en la base de la vasta pila de capas, los primeros parámetros de la palabra «right» tienen este aspecto:
:::Teletipo
[-0.00089263916015625, 0.01092529296875,
0.00102996826171875, -0.004302978515625,
-0.00830078125, -0.0021820068359375,
-0.005645751953125, -0.002166748046875,
-0.00141143798828125, -0.00482177734375,
0.005889892578125, 0.004119873046875,
-0.007537841796875, -0.00823974609375,
0.00848388671875, -0.000965118408203125,
-0.00003123283386230469, -0.004608154296875,
0.0087890625, -0.0096435546875,
-0.0048828125, -0.00665283203125,
0.0101318359375, 0.004852294921875,
-0.0024871826171875, -0.0126953125,
0.006622314453125, 0.0101318359375,
-0.01300048828125, -0.006256103515625,
-0.00537109375, 0.005859375,
:::
…y así sucesivamente hasta alcanzar los 16 384 números. En cuanto a lo que significan estos números, nadie en la faz de la Tierra lo sabe actualmente.
Yo (Soares) cronometré el tiempo que tardaba en recitar en voz alta los primeros treinta y dos números con seis dígitos significativos. Me llevó dos minutos y cuatro segundos. Recitar todos los parámetros de la palabra «right», incluso con esa abreviatura, me llevaría más de diecisiete horas. Al terminar de recitarlos, seguiría sin saber más que antes sobre lo que significa la palabra «right» para Llama.
Recitar todos los parámetros de Llama, hablando a 150 palabras por minuto y sin parar nunca para comer, beber o dormir, le llevaría a un humano 5133 años. Recitar todas las activaciones correspondientes a mil palabras en el diccionario de tokens de Llama llevaría setenta y seis días seguidos. Escribir todos los cálculos utilizados para procesar un solo token para una entrada de 1000 palabras llevaría, si escribieras 150 cálculos por minuto sin tomar ningún descanso, más de diez millones de años.
¡Y eso solo para generar una sílaba! Escribir una oración completa llevaría mucho más tiempo.
Y si hicieras personalmente todos esos cálculos con tu propio cerebro, al final de los (al menos) diez millones de años que te llevaría, no sabrías más que antes sobre lo que Llama había estado pensando antes de pronunciar su siguiente palabra. No sabrías más de los pensamientos de Llama de lo que una neurona sabe sobre un cerebro humano.
En ese mundo imaginario donde aún no has muerto de viejo, ser capaz de realizar un cálculo local individual no significa que tu propio cerebro sepa algo sobre lo que Llama está pensando o cómo lo está pensando.
Si pusieras los 405 000 millones de parámetros de Llama en una hoja de cálculo de Excel en una pantalla de computadora de tamaño normal, la hoja de cálculo tendría el tamaño de 6250 campos de fútbol americano, 4000 campos de fútbol o la mitad de Manhattan.
Si tuvieras una moneda de cinco centavos por cada cálculo de nuestro ejemplo de 1000 tokens, tendrías 810 billones de monedas de cinco centavos. Si quisieras depositarlas en el banco, necesitarías 203 millones de camiones para llevarlas, cada uno con un peso de casi 20 toneladas.
Llama 3.1 405B todavía no es tan grande como un cerebro humano. (Un cerebro humano tiene alrededor de 100 billones de sinapsis).
Sin embargo, 405B aparentemente puede hablar como una persona.
Y si alguien te pasa el brazo por los hombros y te confiesa con tono cínico que en realidad todo son números, ten en cuenta que estamos hablando de una cantidad realmente enorme de números.
Una neurona humana puede entenderse como «solo» química, si estudias bioquímica y las sustancias químicas que se unen a otras sustancias químicas y hacen que los pequeños destellos de despolarización eléctrica viajen por el cerebro humano. Pero es mucha química. Y resulta que cosas muy simples, en cantidades suficientemente grandes, dispuestas de cierta manera, pueden hacer aterrizar cohetes en la Luna.
Una precaución similar se aplica a un modelo de lenguaje a gran escala. El calificativo «a gran escala» no es solo por aparentar.
* Algunas personas se refieren a los modelos de peso abierto como modelos «de código abierto». Esta descripción no nos parece del todo correcta. Meta publicó los pesos finales, pero no publicó el programa informático exacto con el que se entrenó a Llama 3.1, ni la enorme colección de datos con la que se entrenó a Llama. Por lo tanto, aunque estuvieras dispuesto a gastar millones de dólares para hacerlo, no podrías ejecutar el programa que Meta utilizó para cultivar Llama 3.1. Meta no publicó el programa de cultivo de la IA, solo la IA ya cultivada y ajustada.
† Al momento de terminar de escribir esto, en el verano de 2025, ya existen sistemas de pesos abiertos más inteligentes con menos parámetros que Llama 3.1 405B, e incluso sistemas de pesos abiertos más inteligentes con aún más parámetros. Pero cuando empezamos a redactar el libro, 405B era uno de los modelos más grandes e inteligentes cuyos pesos se habían liberado de forma irrevocable, y cuya arquitectura y tamaño se conocían con exactitud. Eso es lo que nuestro capítulo del libro prometía explicar en el suplemento en línea. Además, 405B es más sencillo que los sistemas abiertos de 2025. En realidad, no querríamos sustituirlo por un LLM más reciente con apenas 77 mil millones de parámetros. El sistema más moderno de «mezcla de expertos» sería algo más difícil de explicar.
‡ Por cierto, esto no cuenta para el total de parámetros, pero la arquitectura subyacente de los LLM no diferencia de forma nativa entre las palabras que aparecen antes y después, por lo que se realiza una transformación con funciones trigonométricas en los datos de entrada para que el LLM determine el orden de las palabras. Si quieres leer sobre el tema, el término clave es «codificación posicional». Sin embargo, los detalles no son muy importantes para nuestros fines, así que no profundizaremos en ello.
§ Usando vectores más pequeños, así se vería la correspondencia entre una consulta y dos pares clave-valor. Las claves y las consultas deben tener el mismo tamaño para que funcione.
¶ Como otro apunte sobre la capa de atención, Llama utiliza el «enmascaramiento causal», que significa que las consultas de cada token solo pueden fijarse en las claves anteriores a él. Básicamente, esto se debe a que cada token intenta predecir en última instancia qué token viene a continuación; ¡mirar hacia adelante sería hacer trampa!
‖ La elección de cuánta aleatoriedad emplear en la selección de un token se denomina, a grandes rasgos, la «temperatura» a la que se producen los tokens.
# Técnicamente, «operaciones de coma flotante», el principal tipo de cálculo matemático que realizan las computadoras.
** La excepción a esta regla es el diccionario de 2100 millones de parámetros y 128 256 palabras; solo se utilizan 16 384 de esos parámetros por token. Y las arquitecturas más modernas para los LLM a gran escala intentan utilizar solo una cuarta u octava parte de sus parámetros para procesar cada token; Llama 3.1 405B fue uno de los últimos modelos a gran escala en no intentarlo.
†† O, para darle un poco de sabor, el esqueleto a menudo puede elegir una palabra a la que Llama le asigna una probabilidad un poco menor.