Ajuste fino: modelos de OpenAI y sus datos de Confluence

Diseñado para la velocidad: ~ 10 ms de latencia, incluso bajo carga
¡Una forma increíblemente rápida de crear, rastrear e implementar sus modelos!
- Gestiona más de 350 RPS en solo 1 vCPU, sin necesidad de ajustes
- Listo para la producción con soporte empresarial completo
Si ChatGPT es el iPhone, entonces la AppStore aún no se ha creado, y será un conjunto de aplicaciones verticales integradas sobre ella. Cada industria, cada empresa y cada individuo van a crear estas aplicaciones de formas pequeñas y grandes. Empezando por crear un ChatGPT específico para la industria o el sector sanitario, pasando por escribir correos electrónicos de marketing para dominios específicos, responder a las preguntas específicas de la base de conocimientos interna sobre empresas e incluso crear motores de búsqueda personales para responder a preguntas como: ¿cuál es la dirección de John o cuándo es el cumpleaños de mi suegra? En nuestra entrada de blog anterior, escribimos un montón de ejemplos.
¿Por qué ChatGPT no es suficiente por sí solo para estas aplicaciones verticales?
Para entender esto, es importante entender la web clara frente a la web profunda:
- Borrar la web: páginas web de acceso público indexadas por motores de búsqueda, por ejemplo, Wikipedia, libros, publicaciones en redes sociales, etc.
- Web profunda: parte de Internet que está detrás de un sistema de autenticación, por ejemplo, su correo electrónico o plataformas SaaS. Esto constituye el 96% de la web.
Los modelos como ChatGPT se entrenan en un conjunto de datos masivo, pero todo está disponible en la web transparente. Por lo tanto, no puedes hacer una pregunta cuya respuesta dependa de algún elemento de la web profunda, como tu correo electrónico o tus documentos privados. Sin embargo, al aprender de los enormes conjuntos de datos de la web, los modelos como ChatGPT obtienen tanta información sobre el lenguaje y la semántica que les resulta mucho más fácil aprender nueva información a partir de pequeñas cantidades de datos para una tarea específica.
Venga a afinar
El ajuste fino es una técnica poderosa que nos permite aprovechar el conocimiento y el aprendizaje de un modelo previamente entrenado, como ChatGPT, para mejorar el rendimiento del modelo en una nueva tarea al entrenarlo en un conjunto de datos más pequeño y específico para cada tarea. Por ejemplo, supongamos que quieres crear un sistema de respuesta a preguntas para los documentos internos de tu empresa almacenados en Confluence. Puedes transferir todo el contenido de texto de tu confluencia y ajustar un modelo GPT con ellos.
Suena sencillo. ¿Por qué no lo hace todo el mundo?
Si bien OpenAI ha reducido mucha fricción a través de sus API de ajuste, aún requiere un poco de consideración, planificación y esfuerzo en diferentes ejes:
Preparación de datos
Los datos que necesita para ajustar los modelos deben estar en un formato de par específico de finalización rápida.
{«prompt»:<prompt-text>, «finalización»:<ideal generated text>}
Algunos consejos a tener en cuenta:
- No es trivial tomar documentos arbitrarios como los documentos de confluencia empresarial y convertirlos en ejemplos de alta calidad en el formato anterior.
- Necesita unos pocos cientos de indicaciones como mínimo, lo que requiere esfuerzo humano y experiencia en la materia.
- Separadores cuidadosos que marcan el principio y el final de la solicitud y las terminaciones que no aparecen en el texto. También debe asegurarse de que las solicitudes de entrada posteriores utilicen los mismos delimitadores.
- Aumentar el número de ejemplos mejora el rendimiento del modelo.
- Algo tan simple como añadir un espacio antes de que comience la finalización puede mejorar el rendimiento.
Selección de modelo
OpenAI tiene varios modelos que se pueden ajustar y cada uno de ellos tiene ventajas y desventajas que deben tenerse en cuenta:
- Ada: Los modelos más pequeños y rápidos son fáciles de ajustar y funcionan bien en una serie de tareas como la clasificación, la generación de idiomas y la respuesta a preguntas. Dado que tiene menos parámetros, también tiene un rendimiento inferior al de otros y puede comprometer la precisión.
- Curie: Más grande y poderosa que Ada y también es de uso general. Resulta más difícil ajustar conjuntos de datos más pequeños debido a la gran cantidad de parámetros.
- Babbage: Diseñado para tareas de PNL que requieren conocimientos especializados, como derecho o medicina, y se pueden ajustar muy bien. No tiene un propósito general y no es adecuado para afinar conjuntos de datos más grandes o tareas más complejas.
- Davinci: El modelo de uso general más grande y potente. Es muy difícil de entrenar en hardware menos potente y debe usarse para tareas complejas de PNL.
Nota: También puede ajustar de forma incremental un modelo previamente ajustado. Debido a los cambios en las API, el plazo es limitado y los modelos deben haberse ajustado después del 21 de abril de 2022.
Selección de hiperparámetros
Intentamos utilizar las API de OpenAI con parámetros predeterminados y funcionaron muy bien en algunas de las tareas, pero pudimos obtener mejoras de hasta un 40% modificando los hiperparámetros.
- Multiplicador de la tasa de aprendizaje: el valor predeterminado es 0.05, 0.1 o 0.2 según el tamaño final del lote. La tasa de aprendizaje de ajuste fino es la tasa de aprendizaje original utilizada para el entrenamiento previo multiplicada por este multiplicador. La tasa de aprendizaje determina la rapidez con la que el modelo ajusta sus pesos durante el entrenamiento. Una tasa de aprendizaje demasiado alta puede hacer que el modelo converja hacia una solución subóptima, mientras que una tasa de aprendizaje demasiado baja puede provocar que el modelo converja con demasiada lentitud o se quede estancado en un mínimo local. OpenAI recomienda usar tasas de aprendizaje más altas para lotes de mayor tamaño, pero normalmente funcionan entre 0.02 y 0.2.
- Tamaño del lote: el valor predeterminado es ~ 0.2% del número de ejemplos del conjunto de entrenamiento, con un límite de 256. El tamaño del lote determina cuántos ejemplos se procesan en cada iteración de entrenamiento. Un tamaño de lote mayor puede reducir los tiempos de entrenamiento, pero también puede provocar que el modelo se sobreajuste o provocar un mayor uso de memoria. Por lo general, se recomienda utilizar un tamaño de lote lo más grande posible sin provocar un uso excesivo de la memoria.
- Número de épocas: el valor predeterminado es 4. El número de épocas determina cuántas veces se entrenará el modelo en todo el conjunto de datos. Si hay muy pocas épocas, se puede producir un ajuste insuficiente, mientras que si hay demasiadas épocas se puede producir un sobreajuste. Por lo general, se recomienda supervisar el rendimiento del modelo en un conjunto de validación y detener el entrenamiento cuando el rendimiento deje de mejorar.
- Pérdida rápida de peso: el valor predeterminado es 0.01. El peso que se utilizará para perder en el indicador se indica. Esto controla cuánto intenta aprender el modelo para generar la solicitud (en comparación con la finalización, que siempre tiene un peso de 1,0) y puede añadir un efecto estabilizador al entrenamiento cuando el número de finalizaciones es corto. Para las instrucciones cortas, OpenAI recomienda aumentar este número y, para las instrucciones largas, lo mejor es usar un peso pequeño.
- Modelo: el valor predeterminado es curie. La tabla de selección de modelos descrita anteriormente también es un hiperparámetro, pero nos pareció que merecía una mención especial dada la importancia que tiene en este proceso como punto de partida.
Consideración de costos
Los costos de ajuste varían mucho según los parámetros que decida elegir, por lo que es muy importante tener una comprensión sólida.
📌
Para 1 millón de fichas:
- Ada: 0,4$
- Babbage: 0,6 dólares
- Curie: 3 dólares
- Davinci: 30 dólares.
- 1 ficha tiene aproximadamente 4 caracteres o 0,75 palabras.
- Davinci es casi 100 veces más caro que Ada.
- Curie es 10 veces más caro que ADA y es el modelo predeterminado.
- Para ponerlo en perspectiva, Wikipedia tiene aproximadamente 5000 millones de fichas, por lo que ajustar un curie costaría la enorme cantidad de 15 000 dólares. Esta es solo una afirmación académica, ya que estos modelos ya están previamente entrenados en Wikipedia. Por favor, ahorre sus $$.
- La cantidad de fichas de entrenamiento también depende de las épocas de entrenamiento. Básicamente, el total de fichas de entrenamiento = las fichas de tu archivo * el número de épocas.
📌
El uso de modelos ajustados es significativamente más caro (~ 5 veces) que los homólogos previamente entrenados.
Para 1 millón de fichas,
- Ada: 1,6 dólares frente a 0,4 dólares
- Babbage: 2,4 dólares frente a 0,5 dólares
- Curie 12 dólares contra 2 dólares
- DaVinci 120 dólares frente a 20 dólares
Cuando utilizas el modelo, parámetros como bestof y n también afectan al coste, ya que acabas generando varias finalizaciones para una sola solicitud. Considera usar max_response_length para ahorrar costes o reducir el uso de los parámetros best_of y n.
Caso práctico. Ajuste fino con Confluence Docs
Crear un modelo ajustado para nuestro propio conjunto de datos de confluencia no fue trivial. Implicó el siguiente proceso de 4 pasos.

Obtención de datos
Me costó un poco entender cómo leer todos los datos de Confluence a través de sus API, porque Confluence tiene datos enriquecidos con tablas, encabezados y subtítulos, y tuve que convertirlos en texto simple para facilitar su uso. Además, gestionar los permisos y el nivel de acceso adecuado no era algo trivial. Por último, hemos podido crear un formulario muy sencillo en el que puedes introducir la URL, el nombre de usuario y la clave de API y nosotros podemos obtener los datos.
Preprocesamiento de datos
Esta fue la parte más difícil. Aquí probamos varios enfoques:
- División aleatoria de oraciones: en función del número de palabras en las solicitudes y terminaciones
- Regex: Separar las oraciones en función de palabras como- y, pero, sin embargo, etc.
- Chat GPT: Dar contexto a ChatGPT y pedirle que genere preguntas.

Finalmente, seleccionamos la mayoría de las parejas de #3, pero también incluimos una muestra aleatoria de #1 y #2 anteriores. Para nuestro conjunto de datos, generamos más de 50 000 pares de indicaciones y terminaciones, con una longitud media de 17 palabras para el mensaje y 133 palabras para la respuesta, lo que hace un total de 150 palabras por par. Lo ideal sería que este paso necesitara mucha más experimentación.

Ajuste fino del modelo
Experimentamos con diferentes modelos e hiperparámetros y nos dimos cuenta de que Curie tiende a funcionar mejor que Ada o Babbage, pero nos pareció que Ada estaba bien dada la compensación de costos. No probamos Davinci. Tuvimos que modificar la tasa de aprendizaje y establecerla en 0,05, mientras que utilizamos el modelo durante 6 épocas. El coste de entrenar a una tirada de Curie fue de unos 30 dólares y a Ada unos 4 dólares. En general, tras un montón de experimentos, podría habernos costado 400 dólares en créditos de OpenAI para afinarlos; también tuvimos algunos errores.

Probando
Notamos que el modelo ajustado funcionó estrictamente mejor que el modelo original en las preguntas relacionadas con nuestro conjunto de datos internos. Hicimos que nuestro equipo probara unas 100 preguntas impares y las puntuó manualmente. Esto no es científico, pero funcionó para este sencillo caso de uso. Curiosamente, notamos que, en algunos casos, el modelo ajustado funcionó peor que el modelo original para consultas generales. Aún necesitamos depurar lo que está ocurriendo aquí.

Este fue un ejercicio divertido y trabajaremos para experimentar con el ajuste fino de otros conjuntos de datos.
📌
Si quieres algún conjunto de datos específico o quieres que abra esta aplicación para que la uses en tu propia Confluence, ponte en contacto conmigo en nikunj@truefoundry.com
True Foundry es un PaaS de implementación de aprendizaje automático sobre Kubernetes para acelerar los flujos de trabajo de los desarrolladores y, al mismo tiempo, permitirles una flexibilidad total a la hora de probar e implementar modelos, al tiempo que garantiza una seguridad y un control totales para el equipo de Infra. A través de nuestra plataforma, permitimos a los equipos de aprendizaje automático implementar y supervisar modela en 15 minutos con un 100% de confiabilidad, escalabilidad y la capacidad de revertirse en segundos, lo que les permite ahorrar costos y lanzar los modelos a la producción más rápido, lo que permite obtener un verdadero valor empresarial.
TrueFoundry AI Gateway ofrece una latencia de entre 3 y 4 ms, gestiona más de 350 RPS en una vCPU, se escala horizontalmente con facilidad y está listo para la producción, mientras que LitellM presenta una latencia alta, tiene dificultades para superar un RPS moderado, carece de escalado integrado y es ideal para cargas de trabajo ligeras o de prototipos.
La forma más rápida de crear, gobernar y escalar su IA



















.png)


.webp)




.webp)







