El increíble mundo interior de los modelos de lenguaje LLM (I)
El concepto de 'modelo' ¿Alguna vez habéis escuchado o leído frases del tipo 'es un alumno modélico' o 'es un modelo a seguir'? Un modelo es un nombre que está atado a unas características definidas. Si establecemos que un 'TEF' es algo que debe pesar aproximadamente un kilo, ser de baquelita, brillante, poseer un disco con diez números y en su interior lleva un sistema de cobre… estoy designando un conjunto de atributos que lleva el nombre de 'TEF'. Acabamos de bautizar un modelo. ¡Hurra! Ahora tomemos un objeto del mundo real. Por ejemplo, un piano. Los pianos llevan algo de cobre en los entresijos de metal. Puede que sus teclas o elementos plásticos lleven algo de baquelita. Por lo general no llevan un dial con diez números (si acaso un pad, en modelos modernos). Pero pesa más de un kilo, mucho más. Brillo... sí, nuestro piano posee el negro piano característico de los pianos de color negro... ¿Cómo es de parecido el piano a nuestro modelo 'TEF'? Hay muchas formas de saberlo. Una de ellas es poner los atributos comentados en un espacio vectorial y usar una función para ver 'cuánto' de cerca están esos atributos respecto a los que marca el modelo. A saber: Ahora tenemos dos vectores: Modelo TEF: [1,1,1,1,1] El piano: [0, 0.2, 0.8, 0, 1] Hay varias formas de calcular la similitud: distancia Manhattan, coseno, etc... Intuitivamente, el piano es un (a ojo alzado) 40% un modelo TEF. Es decir, queda algo lejos de ser un buen TEF. Ahora nos vamos al desván y recogemos un teléfono de baquelita de los antiguos, pero en vez de dial, encontramos uno de esos que ya llevaban botones (Modelo Heraldo con teclado). Calculemos el parecido: El parecido es de un... ¡80%! Es más, porque hemos sido inflexibles con el atributo 'Disco con diez números', porque si hubiéramos puesto (modelo más flexible) 'Que lleve diez números' y en otra categoría o atributo 'Que lleve dial', entonces la distancia con nuestro ideal llegaría casi al 90% de afinidad con el modelo 'TEF'. Pues con este ejemplo sencillo que hemos contado ya sabes lo que es un modelo, a grandes rasgos, en machine learning. El modelo de red neuronal Se entrena una red neuronal con datos de entrada: fotos de pianos. Miles, cientos de miles… qué digo: ¡Millones de fotos de pianos! Se descomponen en vectores y se encuentra un conjunto de atributos después de muchas fotos capaz de representar a la mayoría de pianos cuando salen en fotos. La red neuronal es eso: de miles a millones e incluso billones de vectores que poseen valores determinados después de haber sido entrenada viendo fotos de pianos. Esos ajustes es lo que denominamos los pesos de la red neuronal. Y a la red neuronal entrenada para detectar pianos en fotos la llamamos modelo. Le lanzas diez fotos de gatos y, entre ellas, una de un gato tocando el piano. La red convertirá las fotos en vectores, esos vectores pasarán por sus distintas capas (como si chocaran en un pinball) y terminarán con una puntuación que nos dirá si hay o no un piano. Si hemos hecho bien el trabajo de entrenarla, solo la foto del gato tocando el piano obtendrá una puntuación lo suficientemente alta como para dar positivo. Es más. Si solo le hubiésemos proporcionado fotos de pianos de color negro, nuestro modelo dudaría si le pasamos un piano de cualquier otro color. Vería sus formas, daría una buena puntuación, pero descartaría que fuese un piano porque sus pesos le dicen que un piano no puede ser de otro color que no sea negro. ■ Es lo que en machine learning se denomina sobreentremiento o overfitting. Sino aportamos variedad en el conjunto de datos corremos el riesgo de alejar el resto de los atributos demasiado del modelo. Y, ojo, que si lo que le proporcionamos son fotos muy variadas donde aparece de todo, ocurre el fenómeno contrario: el subajuste o underfitting. Aquí la red neuronal se preguntaría: 'Bien, muchas fotos pero, ¿qué quieres que aprenda exactamente?' En este último caso, sería capaz de confundir un piano con un helicóptero. Pero, ¿exactamente qué es un modelo cuando hablamos de LLM? Perfecto. Ya tenemos una idea de lo que es conceptualmente un modelo. Ahora vamos a ver exactamente de qué hablamos cuando hablamos de los LLM (los modelos especializados en lenguaje). ■ LLM significa Large Language Model o, en español, Modelo grande de lenguaje, modelo extenso de lenguaje, modelo de lenguaje a gran escala... Elige tu sabor favorito. Lo que está claro es que es un modelo, es grande y modela el lenguaje humano. ¿Por qué los llamamos grandes? Bien. ¿Recordáis cuando hablamos más arriba de atributos? Que debía tener cobre, brillar, baquelita... ¿Cuántos parámetros contamos? ¿Cinco? Eso es un micromodelo minúsculo. Ahora imaginad un modelo con miles de millones de parámetros (billones americanos). Inmenso ¿verdad? Por eso es grande. Porque hay una interrelación entre los pesos (atributos) que es descomunal, inabarcable para realizar siquiera un intento de calcular a mano la distancia entre dos palabras. Pero hoy tenemos ordenadores (o computadoras) con procesadores y capacidad de memoria que eran inimaginables hace años. A esto, vamos a sumar la computación distribuida. No hay parangón. Todo es inmenso. ■ Por eso en los últimos añado la IA ha avanzado tanto, resurgiendo de uno de sus inviernos directamente a un tórrido verano de 40º a la sombra. ¿Podemos entrenar modelos con un portátil modesto? Por supuesto que puedes, pero... no van a tener billones de parámetros. Entrenar un modelo supone procesar (tokenizar y vectorizar) millones y millones de documentos: todo el conocimiento que se pueda. Es una tarea hercúlea. Se tardan meses en entrenar un LLM actual. Y la factura ronda los millones de euros. Es necesario disponer de mucha energía y de procesadores extremadamente potentes funcionando de forma acompasada durante mucho tiempo. Pero, si somos más comedidos en nuestras aspiraciones, sí que podemos entrenar un modelo pequeño que no necesite más que unos millones de parámetros. Por ejemplo, procesar la Wikipedia al completo podría tardar unos pocos días en una GPU media. Eso sí, no le pidamos grandes conversaciones con el atardecer de fondo y razonamiento filosófico de túnica blanca, claro. ■ La alternativa a eso es tomar un modelo actual, sólido, fiable y reentrenarlo para especializarlo en alguna materia de interés. Es lo que llamamos fine-tuning y que veremos de forma práctica en futuros artículos. ¿Dónde están los modelos y como los evaluamos o clasificamos? Bueno, ya habrás usado varios modelos como ChatGPT, Claude, etc. Esos son modelos privados. Puedes usarlos, pero no están disponibles para descargarlos y hacerlos correr en tu propia máquina (además de que sería técnicamente imposible, debido a que el hardware que usan está lejos de las posibilidades del usuario medio). La buena noticia es que existen muchísimos modelos que sí puedes descargar y usar. Ya hablamos de cómo hacerlo en estos artículos, o en este otro. Ahora vamos a ponernos las gafas técnicas y hablar de los tipos de modelos que nos podemos encontrar y hablando de encontrar, vamos a ir a buscarlos al lugar donde se reúnen: el país de HuggingFace. En esta comunidad podemos encontrar modelos, conjuntos de datos para entrenar o hacer fine-tuning, artículos, papers, documentación, librerías, foros, etc. Un auténtico bazar dónde para fortuna de muchos, podemos dejar nuestra cartera en casa porque casi todo tiene una licencia permisiva o es de fuente abierta. De hecho, hay tanta oferta que podemos marearnos fácilmente y perdernos por las transitadas calles en las que nuevos modelos aparecen a una velocidad que nada tiene que envidiar al ecosistema Javascript. Fijémonos: Actualmente, y creciendo, hay casi 1,7 millones de modelos. Como para no perdernos... También (recuadro rojo de la izquierda, en la imagen) tenemos distintos tipos de modelos respecto a su propósito. Es decir, tenemos modelos que están especializados en tareas relativas a la visión por computador: Clasificación de imágenes (¡nuestros pianos!), de vídeo, descripción de imagen o video, generación de imagen o video, etc. Además de los modelos especializados en media, tenemos los clásicos especializados en texto o procesamiento del lenguaje natural: Clasificación de texto, generación de texto, traducción y más funciones. Luego tenemos los más manitas: modelos multimodales que incluyen o agregan la funcionalidad de varios modelos y unifican su uso. —Por ejemplo, subes una imagen y 'hablas' con el modelo acerca de ella. Por un lado, tienes un modelo que procesa la imagen, hace una descripción en texto y luego otra 'cabeza' toma esa descripción y chatea contigo acerca de ella. La ilusión es que parece que es una IA que lo hace todo, pero no es así. 1,7 millones de modelo, pero tiene truco... Bien, antes de nada. De la asombrosa cifra de 1,7 millones tenemos que hacer una criba. Existen modelos bastante 'antiguos', superados ya por nuevas versiones de éstos y cuya fecha de corte (fecha de los datos de entrenamiento) es ya considerada obsoleta. Quitando versiones antiguas, también debemos dividir la cifra resultante por variaciones de modelos basadas en fine-tuning: Tomas Llama 3.2 y lo reentrenas para que se especialice y lo publicas en HuggingFace; ya tienes un 'nuevo' modelo. —Por ejemplo, el modelo estrella de Facebook, Llama, posee a partir de esta versión: adaptaciones, fine-tunings, merges con otros modelos y distintas cuantizaciones. Una gran familia de primos y hermanos. Observad los números: También habrás escuchado los modelos 'distill' o destilados. Básicamente es un procedimiento por el cual transferimos el conocimiento o comportamiento de un modelo 'grande' a uno más pequeño, con lo cual nos ahorramos parte del proceso de entrenamiento (y sus costes) y el resultado es un modelo más práctico en consumo y requerimientos. Además de eso, de un mismo modelo puedes tener varias versiones, fijaos en esta tabla del modelo PHI2-GGUF: Eso que veis de 2-bit, 3-bit, 4-bit es la cuantización del modelo. ¿Qué es la cuantización? ¿Recordáis cuando hablamos de vectores, etc.? No nos vamos a poner en plan matemático pero es la 'precisión' de los pesos de las capas de la red neuronal del modelo. Veamos un ejemplo: Una persona se sube a una báscula y marca 74,365777543423 kg Es precisa la báscula ¿verdad? Ahora supongamos que no queremos tanta precisión, vamos a cuantizar a 8-bits: Su peso sería de 74,366 kg. Venga, demasiado preciso aun, bajemos más la cuantización, pongamos 4-bits. Ahora su peso marca 74,4 kg. Pues todavía podemos bajar más, 2-bits: Y ahora almacenaremos que el peso de esa persona es de 70 Kg. ¿Qué ha pasado aquí? → A medida que hemos bajado la cuantización hemos perdido precisión en el peso de la persona, pero hemos ganado en espacio de almacenamiento. En pocas palabras: hemos comprimido el espacio necesario que necesita el modelo para funcionar a costa de una pérdida de precisión. Imagen creada con Sora. Los parámetros Otra medida que debemos tener en cuenta son los parámetros del modelo. Por muy cuantizado que tengamos un modelo, si este posee demasiados billones (americanos) de parámetros no podremos encajarlo en la memoria RAM de un portátil medio. El modelo que mostré antes tiene 2,78 billones de parámetros. Su cuantización a 8-bit tiene un tamaño en disco de 2,96 GB, mientras que si reducimos la cuantización a 2-bit rebajamos el tamaño a 1,17 GB. Pero claro, si intentamos hacer lo mismo con un modelo de, por ejemplo, 70 billones de parámetros... ocurre esto: Fijaos que mi máquina (16 gigas de RAM) no puede ni con las cuantizaciones más agresivas (3 bits) porque su tamaño excede al de la RAM total (no hablemos ya de la RAM disponible...). Es decir, por mucho que cuanticemos hay un límite y no podremos cargar un modelo de 70 billones en una RAM modesta. ■ PARTE II Telefónica Tech El increíble mundo interior de los modelos de lenguaje LLM (II) 11 de junio de 2025
10 de junio de 2025