1 puntos por GN⁺ 2023-09-25 | 1 comentarios | Compartir por WhatsApp
  • Jeremy Howard aborda los modelos de lenguaje con un enfoque centrado en el código más que en la teoría, recorriendo el flujo de uso real desde la API de OpenAI hasta modelos open source locales
  • Los modelos de lenguaje no predicen palabras sino tokens, y tras pasar por preentrenamiento, ajuste por instrucciones y RLHF se vuelven más aptos para responder preguntas y ejecutar tareas
  • GPT-4 sigue siendo una opción muy potente a septiembre de 2023, pero es débil respecto a sí mismo, las URL y la información posterior a su corte de conocimiento, y las custom instructions influyen mucho en la calidad de las respuestas
  • La API de OpenAI no guarda el estado de la conversación, así que hay que enviar el historial completo de la conversación cada vez, y mediante llamadas a funciones se le pueden conectar herramientas como ejecución de Python
  • La ejecución local es posible con Hugging Face Transformers, Llama 2, cuantización GPTQ, RAG, ajuste fino con Axolotl, MLC y llama.cpp, pero viene acompañada de límites de GPU, formato de prompts y evaluación

Los modelos de lenguaje son sistemas de compresión que predicen tokens

  • Los modelos de lenguaje funcionan prediciendo la siguiente palabra de una oración o rellenando una palabra faltante
    • Como ejemplo, se introduce en text-davinci-003 de OpenAI una frase que incluye “panda breeding facility” y “live frogs”, y se genera la oración que sigue
    • En nat.dev se pueden probar varios modelos de lenguaje y ver la probabilidad de los candidatos al siguiente token
  • La unidad real de predicción no es la palabra, sino el token
    • Un token puede ser una palabra completa, parte de una palabra, un signo de puntuación o un número
    • Con tiktoken se puede codificar una cadena como un arreglo de IDs de tokens usando el mismo tokenizador que los modelos GPT y luego decodificarla de nuevo
    • En el ejemplo, “they are splashing” se divide en partes de palabra que incluyen espacios
  • El preentrenamiento es el proceso de entrenar una red neuronal para acertar la siguiente palabra en documentos de internet o frases de Wikipedia
    • Se usa como ejemplo una frase de Wikipedia sobre “The Birds”, donde el modelo aprende a poner Hitchcock después de Alfred
    • Para predecir bien la siguiente palabra, el modelo necesita aprender internamente conocimiento del mundo sobre objetos, tiempo, películas, directores y nombres de personas
  • Howard ve la predicción de la siguiente palabra como una forma de compresión
    • Para predecir bien la siguiente palabra, hay que comprimir mucha información dentro de los parámetros de la red neuronal
    • La relación entre compresión e inteligencia es una idea discutida desde hace mucho tiempo

Del preentrenamiento al ajuste por instrucciones y RLHF

  • Howard presenta ULMFiT como una idea base para el uso de modelos de lenguaje
    • ULMFiT es un algoritmo creado por Howard en 2017 y plasmado en un paper a inicios de 2018 junto con Sebastian Ruder
    • El ejemplo original era preentrenar un modelo de lenguaje con Wikipedia
  • El flujo de entrenamiento se divide en tres etapas
    • Preentrenamiento del modelo de lenguaje: aprende conocimiento general prediciendo la siguiente palabra
    • Ajuste fino del modelo de lenguaje: vuelve a entrenarse para predecir la siguiente palabra con documentos más cercanos a la tarea final
    • Ajuste fino del clasificador: adapta el modelo a la tarea final
  • En los modelos de lenguaje modernos, la segunda etapa suele usarse como ajuste por instrucciones
    • El modelo se ajusta con datos de preguntas, instrucciones, solicitudes y sus respuestas
    • Se mencionan como datasets de ejemplo OpenOrca y FLAN collection
    • OpenOrca incluye alrededor de 4 GB de datos de preguntas, contexto y respuestas
  • En la tercera etapa se usa con frecuencia RLHF
    • Una persona o un modelo mejor elige la mejor respuesta entre varias respuestas posibles
    • Se muestra como ejemplo una comparación entre dos respuestas a una pregunta como “5 ideas para recuperar la pasión por tu carrera”
  • La expresión “modelo de lenguaje” puede referirse, según el contexto, tanto a un modelo solo preentrenado como a uno ajustado por instrucciones o incluso pasado por RLHF
    • Un modelo puramente preentrenado por sí solo suele tener poca utilidad, y gana mucha más al ajustarse
    • Howard comenta que hoy también existe debate sobre si en algunos casos basta con el ajuste por instrucciones

Cómo usar bien GPT-4 y cuáles son sus límites

  • Howard recomienda con fuerza GPT-4 como el mejor modelo de lenguaje a septiembre de 2023
    • En ChatGPT se puede pagar 20 dólares al mes para usar mucho GPT-4
    • La API de OpenAI tiene una estructura de cobro aparte por token
  • Sobre la afirmación de que GPT-4 no puede razonar, considera que al probar directamente algunos ejemplos de papers o de internet, muchas veces sí acertaba
    • Aparecen como ejemplos el problema del momento de la muerte de Mabel, el problema de Sally y los hermanos, y el problema de la ubicación de la copa, el dedal y el diamante
    • Howard dice que al revisar ejemplos en internet donde supuestamente GPT-4 fallaba, muchas veces en realidad sí podía resolverlos
  • El modelo no es un sistema entrenado para dar siempre la respuesta correcta
    • El preentrenamiento consiste en acertar la siguiente palabra más plausible, y en internet también hay ficción, bromas y errores
    • En RLHF puede haberse favorecido respuestas más seguras, y quienes evaluaron quizá no distinguían bien las respuestas incorrectas
  • Las custom instructions ayudan a mejorar la calidad de las respuestas
    • Se pueden anteponer a cada consulta instrucciones como “razonas bien”, “di si puede no haber una respuesta correcta” o “primero explica unas cuantas oraciones de contexto”
    • El modelo genera una palabra a la vez, y como vuelve a incluir lo generado en la entrada, al generar más palabras puede hacer más cómputo
    • También se usa como ejemplo una regla personal para que responda de forma concisa si el prompt empieza con VV
  • GPT-4 también tiene límites claros
    • El modelo no tuvo ocasión de conocer durante el entrenamiento información sobre cómo fue entrenado o cuál es su longitud de contexto
    • No conoce bien el contenido de las URL y, si se le pregunta, puede inventarlo
    • El conocimiento de preentrenamiento de GPT-4 llega hasta septiembre de 2021
    • Si se modifica apenas un rompecabezas clásico que conoce bien, puede dejarse llevar por el patrón previo y responder mal
      • Se usa como ejemplo una variante del acertijo de cruzar el río con la col, la cabra y el lobo con restricciones cambiadas
      • Si da una respuesta incorrecta y luego se intenta corregir en la conversación, puede seguir fallando, así que conviene usar la función de edit del chat para corregir el prompt anterior

Conectar herramientas con la API de OpenAI y llamadas a funciones

  • La API de OpenAI permite invocar modelos de lenguaje desde programas en Python y otros entornos
    • Se usa como ejemplo pip install openai seguido de ChatCompletion.create para llamar a modelos como gpt-3.5-turbo
    • El mensaje system cumple un papel parecido al de las custom instructions de ChatGPT
    • En el ejemplo se usa un prompt de sistema de “Aussie LLM” que habla con jerga australiana y metáforas, y luego se pregunta “What is money?”
  • En las conversaciones por API no se guarda estado persistente en el servidor
    • Para hacer preguntas de seguimiento, hay que volver a enviar el historial completo de la conversación
    • Aunque el usuario modifique arbitrariamente una respuesta previa del assistant, el modelo seguirá respondiendo con base en ese historial de conversación
    • En el ejemplo se finge que el assistant dijo “money is like kangaroos” y luego se le pide que continúe explicando esa metáfora
  • El costo depende del modelo y de la cantidad de tokens
    • En promedio hay algo más de tokens que de palabras; aproximadamente 1⅓ tokens equivalen a una palabra
    • En el ejemplo se menciona una diferencia de precio de alrededor de 0.0015 dólares para GPT-3.5 frente a 0.03 dólares para GPT-4
    • Una respuesta de unas 150 tokens se calcula en alrededor de 0.0003 dólares en GPT-3.5
    • El uso puede revisarse en la página de usage de OpenAI
  • Las cuentas nuevas de la API pueden tener un rate limit bajo
    • Como ejemplo, se menciona un límite bajo como 3 solicitudes por minuto para usuarios gratuitos durante las primeras 48 horas o incluso para algunos usuarios de pago
    • Si aparece un error de rate limit, hace falta código en Python que lea el valor retry-after, espere y vuelva a intentar
  • Con function calling se le pueden informar al modelo las herramientas disponibles
    • No se pasa la función de Python en sí, sino su nombre, descripción y parámetros mediante un esquema JSON
    • La descripción de la función, en su docstring, es la información clave para que el modelo decida para qué sirve la herramienta
    • En el ejemplo de la función sums, el modelo no responde directamente 6+3, sino que devuelve el nombre de la llamada y sus argumentos
    • Si se ofrece una función python como herramienta, el modelo puede generar código para calcular el factorial de 12 y, después de que el usuario lo revise, ejecutar el resultado e incorporarlo de vuelta a la conversación
    • De esta forma se puede construir un intérprete de código simple dentro de Jupyter

Modelos locales, RAG y opciones de ajuste fino

  • Para usar modelos de lenguaje localmente, por lo general hace falta una GPU
    • Kaggle puede ofrecer notebooks con dos GPUs antiguas
    • Colab puede ofrecer mejores GPUs y más RAM, con más opciones si se paga una suscripción mensual
    • Se mencionan opciones de renta de GPU como RunPod, Lambda Labs y Vast.ai
    • Para trabajos sensibles, no es adecuado ejecutarlos en “la computadora de un desconocido”
  • Al elegir GPU, importa más la velocidad y capacidad de memoria que el rendimiento de cómputo bruto
    • Se menciona una GTX 3090 usada en eBay por alrededor de 700 dólares
    • La RTX 4090 es una GPU más nueva, pero para modelos de lenguaje no resulta claramente mejor que la 3090
    • Puede que 24 GB no alcancen para muchas tareas, así que se propone como opción usar dos 3090 por unos 1,500 dólares
    • Una A6000 con 48 GB de RAM ronda los 5,000 dólares
    • Las Mac con mucha RAM, en especial la M2 Ultra, no están mal para correr modelos existentes, pero son más lentas que las tarjetas Nvidia
  • El ecosistema de Hugging Face es la herramienta central para experimentar con modelos locales
    • Con Transformers se pueden cargar modelos preentrenados y ajustados alojados en Hugging Face
    • El leaderboard sirve como referencia, pero puede no coincidir bien con la utilidad real, y puede haber problemas de leakage cuando datos de benchmark se mezclan con el set de entrenamiento
    • En un entorno típico con GPU personal, los modelos de 13B o 7B son más realistas que los de 70B
  • La familia Llama 2 y la cuantización se usan como ejemplos principales
    • Llama 2 7B de Meta es un modelo solo preentrenado, sin ajuste por instrucciones ni RLHF, así que no es adecuado para preguntas y respuestas de forma inmediata
    • Cargar un modelo de 7B en 16 bits requiere alrededor de 14 GB solo para los pesos
    • Convertirlo a 8 bits puede reducir memoria, pero puede ser más lento
    • bfloat16 es más rápido, pero requiere más RAM
    • Los modelos cuantizados con GPTQ están optimizados con menor precisión para reducir movimiento de memoria, y en el ejemplo incluso un modelo GPTQ de 13B corre rápido
    • Se menciona a TheBloke como alguien que optimiza modelos populares con GPTQ y los publica en Hugging Face
  • En los modelos ajustados por instrucciones, hay que respetar obligatoriamente el formato del prompt
    • Un modelo ajustado por instrucciones basado en Llama 2 como Stable Beluga requiere usar exactamente el formato de prompt indicado en su página del modelo
    • OpenOrca Platypus 13B GPTQ también requiere revisar su formato de prompt específico y armarlo en una función
    • Si se respeta el formato, se pueden obtener mejores respuestas a preguntas como “Who is Jeremy Howard?”, aunque todavía puede haber alucinaciones
  • RAG es una forma de aprovechar información reciente o documentos privados
    • Se recuperan documentos que ayuden a responder la pregunta y se agregan como contexto para que el modelo responda
    • Al poner como contexto las 613 palabras de la página de Wikipedia de Jeremy Howard, se genera una biografía de 100 palabras mucho más cercana a la correcta
    • sentence-transformers convierte documentos y preguntas en vectores de embedding, y calcula similitud para elegir documentos relacionados
    • Si hay miles o millones de documentos, se usa una base de datos vectorial para dejar los embeddings preparados de antemano
    • H2O GPT se menciona como un ejemplo open source que permite subir PDFs y hacer RAG localmente
    • En preguntas de seguimiento, si el modelo de recuperación no conoce el contexto previo, puede traer documentos irrelevantes, así que hay que tener cuidado
  • El ajuste fino es una forma de cambiar el comportamiento del modelo mismo
    • El dataset de ejemplo contiene esquema de base de datos, preguntas en lenguaje natural y SQL correcto como respuesta
    • El dataset se carga con la librería datasets de Hugging Face
    • Con Axolotl se copia un ejemplo de Llama 2 y se crea una configuración YAML para SQL antes de entrenar
    • Tras alrededor de una hora de entrenamiento con el comando accelerate launch axolotl, se crea el directorio q_lora_out
    • Q significa quantize, y LoRA es una técnica que ayuda a entrenar con modelos más pequeños y GPUs más modestas
    • Después del entrenamiento, al ingresar el esquema y la pregunta, el modelo genera SQL correcto del tipo SELECT count(hosts), theme ... GROUP BY theme
  • También hay opciones en Mac y otros runtimes
    • MLC es un proyecto para ejecutar modelos de lenguaje en iPhone, Android y navegadores web, entre otros
    • Se muestra un ejemplo en Mac ejecutando un modelo cuantizado de 7B para responder “What is the meaning of life?” a unos 9.6 tokens/s
    • llama.cpp usa el formato gguf y también puede invocarse mediante un wrapper de Python
    • Si ya estás familiarizado con Python y GPUs Nvidia, conviene usar PyTorch y el ecosistema de Hugging Face
  • El entorno de desarrollo para modelos de lenguaje cambia rápido y sigue en una etapa temprana, así que la instalación y los casos borde pueden ser complicados, pero es un momento interesante para programadores de Python
    • En el canal generative del Discord de fast.ai se pueden hacer preguntas o compartir experiencias

1 comentarios

 
GN⁺ 2023-09-25
Opiniones en Hacker News
  • Lo acabo de publicar y me sorprendió que ya estuviera en HN.
    Tengo bastantes expectativas puestas en este video. Intenté meter la mayor cantidad posible de información esencial que se me ocurrió en una presentación de 90 minutos, y el objetivo era crear un único lugar al que pudiera apuntar cuando los desarrolladores preguntaran “dime todo lo que necesito saber sobre los LLM”.
    Aun así, seguro hay cosas que omití o partes que no quedaron claras. Es mi primer intento y planeo ampliarlo algún día a un curso completo, así que me gustaría que, después de ver el video, me compartan las preguntas que les queden o los conceptos que creen que debería haber cubierto.
    Pronto tengo que irme a dormir; en Australia ya es tarde, así que quizá no pueda responder muchas preguntas hasta la mañana. De todos modos, cuando me despierte voy a revisar esta página, y mañana agregaré enlaces a los papers relevantes en la descripción de YouTube.
    No cubrí temas de ética ni de políticas. No porque no sean importantes, sino porque en esta presentación decidí enfocarme por completo en los temas técnicos.

  • Excelente. El notebook para seguir junto con el video está aquí: https://github.com/fastai/lm-hackers/blob/main/lm-hackers.ip...
    La estructura del proyecto también estuvo muy buena. Incluye hacking de la API de OpenAI, una imitación de Code Interpreter hecha con OpenAI functions, ejecución de LLM locales con modelos de Hugging Face y, en los últimos 10 minutos, un ejemplo de fine-tuning para crear un modelo de texto a SQL.

  • Gracias por el video. Es el mejor tutorial sobre uso de LLM que he visto hasta ahora.
    En https://youtu.be/jkrNMKz9pWU?si=Dvz-Hs4InJXNozhi&t=3278, hablando de los casos de uso adecuados para modelos locales y GPT-4, dice: “con fine-tuning puedes crear un modelo especialmente fuerte en el tipo de problema que necesitas resolver, y en esos casos es perfectamente posible lograr un rendimiento mejor que GPT-4”.
    En relación con eso, hay una idea en la que vengo pensando desde hace un tiempo. Uno podría imaginar un chatbot con varios modelos “pequeños” detrás, por ejemplo modelos de 7 mil millones de parámetros. Cada modelo estaría ajustado con fine-tuning para una tarea específica; ¿podría un sistema así superar a GPT-4?
    La idea general sería esta: enviar el contexto/prompt a un “modelo enrutador”, y que ese modelo determine qué modelo experto puede responder o completar mejor. Luego el sistema pasa el contexto/prompt a ese modelo experto y devuelve su respuesta. Si no hay un modelo experto adecuado, usa un LLM generalista con instruction tuning.
    Si un modelo pequeño ajustado para una tarea específica puede, en teoría, ser mejor que GPT-4, entonces quizá un conjunto de esos modelos pequeños también podría superar a GPT-4 en conjunto.

    • Sambanova acaba de lanzar algo parecido. Es una demo de un modelo MoE de 1 billón de parámetros que corre en su nuevo chip, con una arquitectura en la que reentrenaron 150 modelos llama2 de 7 mil millones de parámetros para que cada uno sea experto en distintos temas. Uno es experto en “derecho”, otro en “física”, y así.
      El video está aquí [1] https://sambanova.ai/launch2023
      Si bajas un poco, lo comparan con un modelo Falcon de 180 mil millones de parámetros que corre en GPUs de HuggingFace. El resultado del MoE no solo tiene una calidad similar, sino que además es increíblemente rápido y responde casi de inmediato. Otra gran ventaja es que se pueden reemplazar los modelos expertos o reentrenarlos con datos nuevos, algo que por supuesto no es fácil con un modelo más monolítico de 180 mil millones.
    • Tiene sentido. De hecho, ahora mismo hay varios proyectos open source creando modelos de ese tipo. Un buen ejemplo está aquí: https://github.com/XueFuzhao/OpenMoE/
    • Busca en Google mezcla de expertos (mixture of experts). Según filtraciones no verificadas, GPT-4 ya usa ese enfoque.
  • También es impresionante que sea un video de la persona que escribió el paper que inició toda esta corriente.

  • Es un video excelente, así que lo compartí también en el trabajo. Desde un punto de vista práctico, probablemente sea el material introductorio más completo que conozco sobre este tema.
    Me gustó especialmente la sección “los posts virales que dicen que GPT no puede hacer X no son reproducibles”. Espero que ayude a la gente a mi alrededor a aprender a pensar de forma crítica cuando vea esta tecnología.

  • Excelente video. Aprendí algunos trucos nuevos que podré usar en adelante.
    Con solo probar cosas, uno termina descubriendo nuevos usos.
    Hace poco tuve un buen ejemplo. Tenía que convertir una hoja de cálculo con direcciones a GeoJSON para usarla como capa de mapa, pero estaba con mucha flojera y quise ver qué tan bien lo manejaba ChatGPT.
    Como primer paso, le di un par de latitud/longitud y le pedí que convirtiera el formato de grados/minutos a decimal; mostró el cálculo sin problema. Después le di toda la columna de latitud/longitud y le dije que no mostrara el proceso de cálculo, y el resultado salió bien.
    Luego creé una estructura JSON de ejemplo con marcadores de posición y le dije que le daría los datos para que llenara los marcadores según los nombres de las columnas. Al pegar los datos, generó el JSON perfectamente.
    Lo interesante fue que, sin instrucciones aparte, volvió a hacer la conversión de latitud/longitud, y además incrementó un atributo id que yo ni siquiera había mencionado. Fue bastante impresionante.

  • Jeremy es alguien a quien admiro, y como alguien que nació y vive en Queensland, me recuerda que el talento de nivel mundial realmente existe en todos lados a nuestro alrededor.
    Claro que habrá muchas personas así en todos los campos, pero Jeremy es una de las personas que conozco y admiro profundamente.