← Laboratorio

Un asistente de código que no llegó a nacer

Abandonado · Empezado , actualizado

Quise entrenar un asistente de código en mi propio PC con Soup, sobre todo para aprender la técnica. La técnica funcionó, el asistente nunca encontró para qué servir y lo abandoné.

Fig. 1Banco de capas

Arrastra para girarlo.Capa 4/12 en la tarjeta · memoria 4/6 · nada a la salida

Dibujo de un banco de pruebas. El estante es la RAM de 32 GB del PC y el hueco estrecho, la memoria de vídeo de 6 GB, y el cargador pasa las capas del modelo por turnos, que es lo que hace el layer streaming de Soup. La técnica funcionó y dio el mismo resultado que el método normal, pero nunca hubo un entregable, así que a la salida no llega nada. El número de bandejas y lo que ocupa cada una son del dibujo. La casilla en teja recuerda que Windows se queda con parte de la tarjeta. Al apagarlo se vacía el estante.

Soup promete entrenar un modelo de lenguaje de 8B en una tarjeta gráfica de 4 GB con un solo fichero de configuración. Mi PC tiene 6 GB de memoria de vídeo y 32 GB de RAM, así que las cuentas parecían salir. El plan era montar un asistente de código propio, un modelo que ayudara a programar desde mi propio equipo, y el objetivo de verdad era aprender la técnica.

Exámenes en una caja sin red

Antes de entrenar nada hay que saber de dónde se parte, y eso pide exámenes. Preparamos unos exámenes que ejecutan el código de cada respuesta dentro de un contenedor sin red, como quien corrige exámenes en un aula sin ventanas. Tres modelos sin entrenar sacaron su nota de partida en dos pruebas públicas y en un examen mío de diez preguntas.

Nota de partida de la fase 0
ModeloHumanEval+MBPP+Examen propio
Qwen2.5-Coder 1.5B44,5 %66,1 %4/10
Qwen2.5-Coder 3B65,9 %71,4 %Sin medir
Qwen2.5-Coder 7B70,7 %79,1 %9/10
Son modelos sin entrenar, medidos en mi equipo. El código de cada respuesta se ejecutó en un contenedor sin red.

El 3B rinde casi como el 7B con menos de la mitad de tamaño, y esa fue la primera lección, que hay que medir antes de suponer que más grande es mejor.

Después vinieron los datos de entrenamiento. De 200.000 ejemplos quedaron unos 62.000 buenos, y quitamos 62 que se parecían demasiado a los exámenes, porque un alumno que ha visto las preguntas no demuestra nada. Ahí apareció la segunda lección. Nuestros conjuntos «normal» y «alta calidad» también se diferenciaban en el tipo de problemas, y un experimento solo vale si compara cosas que se diferencian en una sola variable. Lo detectamos antes de entrenar.

La memoria que la tarjeta no tiene

La función estrella de Soup, el layer streaming, es la que promete meter un modelo de 8B en una tarjeta de 4 GB, y funciona. En mi PC dio exactamente el mismo resultado que el método normal. Lo frágil es todo lo que la rodea. Hubo que sortear varios fallos de Soup y de las piezas que usa, y uno de ellos copiaba 1 GB a la tarjeta en cada palabra generada.

Y la memoria real es menor que la nominal. Windows se queda con parte de la tarjeta, hay partes del modelo que no se comprimen, y el Linux que corre dentro de Windows guarda ficheros en RAM que dentro cuentan como libres y para Windows están ocupados. Esto último paró dos veces las pruebas.

Un especialista sin oficio

Con la técnica aprendida quedaba la pregunta que debería haber ido primero. Un modelo pequeño y local no compite como generalista con las herramientas grandes, y solo tiene sentido como especialista en una tarea estrecha. Así que cambiamos de rumbo hacia droneobservatory, el código de EODI, y medimos su gasto real.

Tampoco compensaba. El gasto es de unos 39 USD al mes, y el 80 % lo hace el modelo experto con las fichas de noticia, que son la tarea más difícil y necesitan el texto de los artículos, que no se guarda. Sustituir todo el modelo base ahorraría como mucho unos 5 USD al mes. Lo que más ahorraría allí no es entrenar nada, sino revisar las reglas que mandan fichas al experto, las de «crítico» y «poca seguridad», y esa mejora sigue pendiente.

La técnica salió bien. Lo que nunca apareció fue un entregable que justificara seguir, y sin saber qué se quiere entregar ni para qué, los experimentos acaban siendo pruebas sueltas y no hay manera de saber cuándo parar. Así que paré.

Bitácora

  1. Abandono

    Fin · Abandonado,

    Abandoné el proyecto al no encontrar un entregable que mereciera la pena.

  2. Cambio de rumbo hacia droneobservatory

    Giro · Terminado,

    Al ver que un asistente de código pequeño no me iba a ser útil, cambiamos de rumbo hacia droneobservatory y medimos su gasto real. Las cuentas están más arriba, en el texto.

  3. Datos de entrenamiento

    Datos · Terminado,

    Preparamos los datos de entrenamiento. De 200.000 ejemplos quedaron unos 62.000 buenos, y quitamos 62 que se parecían demasiado a los exámenes.

  4. Exámenes y nota de partida

    Fase 0 · Terminado,

    La fase 0 se completó entera. Los exámenes ejecutan el código en una caja sin red, y tres modelos sin entrenar sacaron su nota de partida, que es la de la tabla.

  5. Un asistente propio en mi PC

    Plan · Terminado,

    Planteamos un asistente de código propio en mi PC, que tiene 6 GB de memoria de vídeo y 32 GB de RAM. El objetivo principal era aprender la técnica.

  6. Evaluación de Soup

    Soup · Terminado,

    Soup es una herramienta para entrenar modelos de lenguaje con un solo fichero de configuración. Su función estrella, el layer streaming, permite entrenar un modelo de 8B en una tarjeta de 4 GB. Nos pareció interesante, aunque con muchas funciones poco probadas.