1 points par GN⁺ 2023-09-25 | 1 commentaires | Partager sur WhatsApp
  • Jeremy Howard aborde les modèles de langage avec une approche centrée sur le code plutôt que sur la théorie, en parcourant les usages concrets depuis l’API OpenAI jusqu’aux modèles open source locaux
  • Les modèles de langage ne prédisent pas des mots, mais des tokens ; ils passent par le pré-entraînement, l’instruction tuning et le RLHF, ce qui les rend plus adaptés aux questions-réponses et à l’exécution de tâches
  • GPT-4 est un choix solide en septembre 2023, mais il est faible sur lui-même, les URL et les informations postérieures à sa date de coupure des connaissances ; les custom instructions influencent fortement la qualité des réponses
  • L’API OpenAI ne conserve pas l’état de la conversation : il faut donc envoyer à chaque fois l’historique complet de la conversation ; les appels de fonctions permettent d’y connecter des outils comme l’exécution de Python
  • L’exécution locale est possible avec Hugging Face Transformers, Llama 2, la quantification GPTQ, le RAG, le fine-tuning avec Axolotl, MLC, llama.cpp, etc., mais elle s’accompagne de contraintes liées au GPU, au format de prompt et aux limites d’évaluation

Les modèles de langage sont des systèmes de compression qui prédisent des tokens

  • Un modèle de langage fonctionne en prédisant le mot suivant d’une phrase ou en complétant les mots manquants
    • L’exemple consiste à donner à text-davinci-003 d’OpenAI une phrase contenant « panda breeding facility » et « live frogs », puis à générer la suite
    • Sur nat.dev, on peut tester plusieurs modèles de langage et voir les probabilités des prochains tokens candidats
  • L’unité réelle de prédiction n’est pas le mot, mais le token
    • Un token peut être un mot entier, un fragment de mot, un signe de ponctuation, un nombre, etc.
    • Avec tiktoken, on peut encoder une chaîne en un tableau d’identifiants de tokens avec le même tokenizer que les modèles de la famille GPT, puis la décoder à nouveau
    • Dans l’exemple, « they are splashing » est découpé en fragments de mots incluant les espaces
  • Le pré-entraînement consiste à entraîner un réseau de neurones à prédire le mot suivant dans des documents Internet ou des phrases de Wikipedia
    • L’apprentissage illustré consiste par exemple à prédire Hitchcock après Alfred dans une phrase Wikipedia sur « The Birds »
    • Pour bien prédire le mot suivant, le modèle doit apprendre en interne des connaissances sur le monde : objets, périodes, films, réalisateurs, noms de personnes, etc.
  • Howard considère la prédiction du mot suivant comme une forme de compression
    • Il faut compresser beaucoup d’informations dans les paramètres du réseau de neurones pour bien prédire le mot suivant
    • Le lien entre compression et intelligence est une idée discutée depuis longtemps

Du pré-entraînement à l’instruction tuning et au RLHF

  • Howard présente ULMFiT comme l’idée de base derrière l’utilisation des modèles de langage
    • ULMFiT est un algorithme créé par Howard en 2017, puis formalisé dans un article début 2018 avec Sebastian Ruder
    • L’exemple d’origine consistait à pré-entraîner un modèle de langage avec Wikipedia
  • Le flux d’apprentissage se divise en trois étapes
    • Pré-entraînement du modèle de langage : apprendre des connaissances générales via la prédiction du mot suivant
    • Fine-tuning du modèle de langage : réapprendre la prédiction du mot suivant sur des documents plus proches de la tâche finale
    • Fine-tuning du classifieur : ajuster le modèle pour la tâche finale
  • Dans les modèles de langage modernes, la deuxième étape prend surtout la forme d’un instruction tuning
    • Le modèle est ajusté avec des données contenant des questions, consignes ou requêtes et les réponses associées
    • OpenOrca et la FLAN collection sont mentionnés comme exemples de jeux de données
    • OpenOrca contient environ 4 Go de données de questions, contextes et réponses
  • La troisième étape utilise souvent le RLHF
    • Des humains ou de meilleurs modèles choisissent la meilleure réponse parmi plusieurs propositions
    • Un exemple compare deux réponses à une question du type « 5 idées pour retrouver sa passion pour sa carrière »
  • Selon le contexte, l’expression « modèle de langage » peut désigner un modèle uniquement pré-entraîné, un modèle instruction-tuned ou un modèle passé aussi par le RLHF
    • Un modèle purement pré-entraîné est généralement peu utile seul, et son intérêt augmente avec le fine-tuning
    • Howard indique qu’il existe aujourd’hui aussi un débat sur la possibilité que le seul instruction tuning suffise

Bien utiliser GPT-4 et connaître ses limites

  • Howard recommande fortement GPT-4 comme meilleur modèle de langage en septembre 2023
    • Dans ChatGPT, un abonnement à 20 dollars par mois permet d’utiliser largement GPT-4
    • L’API OpenAI a une tarification séparée au token
  • Face aux affirmations selon lesquelles GPT-4 ne saurait pas raisonner, il estime qu’en entrant directement certains exemples issus d’articles ou d’Internet, le modèle répond souvent correctement
    • Les exemples incluent un problème sur le moment de la vie ou de la mort de Mabel, un problème avec Sally et ses frères et sœurs, et un problème de position d’une tasse, d’un dé à coudre et d’un diamant
    • Howard dit que, lorsqu’il vérifiait des exemples trouvés en ligne affirmant que GPT-4 échouait, cela fonctionnait dans la grande majorité des cas
  • Le modèle n’est pas un système entraîné à toujours donner la bonne réponse
    • Le pré-entraînement consiste à prédire le mot suivant le plus plausible, et Internet contient aussi des fictions, des blagues et des affirmations fausses
    • Dans le RLHF, les réponses plus confiantes ont pu être préférées, et les évaluateurs n’ont pas forcément su distinguer suffisamment les mauvaises réponses
  • Les custom instructions aident à améliorer la qualité des réponses
    • On peut préfixer toutes les requêtes avec des consignes comme « raisonne bien », « indique-le s’il peut ne pas y avoir de bonne réponse » ou « commence par expliquer le contexte en quelques phrases »
    • Le modèle génère un mot à la fois, et le contenu généré est réinjecté dans l’entrée ; générer davantage de mots lui permet donc de faire davantage de calcul
    • Des règles personnelles, comme commencer par VV pour obtenir une réponse concise, sont aussi utilisées comme exemples
  • GPT-4 a aussi des limites claires
    • Pendant l’entraînement, le modèle n’a pas eu l’occasion de connaître des informations comme la façon dont il a été entraîné ou la longueur de son contexte
    • Il ne connaît pas bien le contenu des URL et peut l’inventer si on le lui demande
    • Les connaissances de pré-entraînement de GPT-4 s’arrêtent à septembre 2021
    • Si l’on modifie légèrement une énigme classique familière, il peut être attiré par le schéma existant et répondre de travers
      • Un exemple modifie les contraintes de l’énigme de la traversée de rivière avec le chou, la chèvre et le loup
      • Après une mauvaise réponse, essayer de corriger le modèle par la conversation peut continuer à échouer ; il vaut mieux modifier le prompt précédent avec la fonction edit du chat

Connecter des outils avec l’API OpenAI et les appels de fonctions

  • L’API OpenAI permet d’appeler des modèles de langage de façon programmatique depuis Python, entre autres
    • Après pip install openai, l’exemple appelle un modèle comme gpt-3.5-turbo avec ChatCompletion.create
    • Le message system joue un rôle similaire aux custom instructions de ChatGPT
    • Dans l’exemple, le prompt système décrit un « Aussie LLM » utilisant de l’argot australien et des analogies, puis pose la question « What is money? »
  • Les conversations via l’API ne conservent pas d’état persistant côté serveur
    • Pour poser une question de suivi, il faut renvoyer l’historique complet de la conversation
    • Même si l’utilisateur modifie arbitrairement une réponse précédente de l’assistant, le modèle continuera à répondre en se fondant sur cet historique
    • Dans l’exemple, on fait comme si l’assistant avait dit que « money is like kangaroos », puis on lui demande de poursuivre cette analogie
  • Le coût varie selon le modèle et le nombre de tokens
    • En moyenne, les tokens sont un peu plus nombreux que les mots : environ 1⅓ token pour un mot
    • L’exemple mentionne un écart de prix de l’ordre de 0.0015 dollar pour GPT-3.5 contre 0.03 dollar pour GPT-4
    • Une réponse d’environ 150 tokens revient à quelque 0.0003 dollar avec GPT-3.5
    • La page d’usage d’OpenAI permet de consulter sa consommation
  • Les nouveaux comptes API peuvent avoir un rate limit faible
    • Des limites basses, comme 3 requêtes par minute, sont données en exemple pour les utilisateurs gratuits ou payants durant les premières 48 heures
    • En cas d’erreur de rate limit, il faut du code Python qui lit la valeur retry-after, attend, puis réessaie
  • Le function calling permet d’indiquer au modèle les outils qu’il peut utiliser
    • On ne transmet pas la fonction Python elle-même, mais un schéma JSON avec le nom, la description et les paramètres de la fonction
    • La docstring de la fonction devient l’information clé permettant au modèle de déterminer l’usage de l’outil
    • Dans l’exemple de la fonction sums, le modèle ne répond pas directement à 6+3 : il renvoie le nom de l’appel de fonction et ses arguments
    • Si l’on fournit une fonction python comme outil, le modèle génère du code pour calculer 12!, l’utilisateur le vérifie puis l’exécute, et le résultat est réinjecté dans la conversation
    • Cette approche permet de construire soi-même un interpréteur de code simple dans Jupyter

Modèles locaux, RAG et options de fine-tuning

  • Utiliser des modèles de langage en local nécessite généralement un GPU
    • Kaggle peut fournir des notebooks équipés de deux anciens GPU
    • Colab peut offrir de meilleurs GPU et davantage de RAM, avec plus d’options via un abonnement mensuel
    • Des options de location de GPU comme RunPod, Lambda Labs et Vast.ai sont mentionnées
    • Les tâches sensibles ne sont pas adaptées à une exécution sur « l’ordinateur d’un inconnu »
  • Pour choisir un GPU, la vitesse et la capacité mémoire comptent plus que la puissance de calcul
    • Une GTX 3090 d’occasion est mentionnée autour de 700 dollars sur eBay
    • La RTX 4090 est un GPU plus récent, mais pas clairement meilleure que la 3090 pour les modèles de langage
    • 24 Go peuvent être insuffisants pour de nombreuses tâches ; deux 3090 sont présentées comme une option autour de 1 500 dollars
    • Une A6000 avec 48 Go de RAM coûte environ 5 000 dollars
    • Les Mac avec beaucoup de RAM, notamment le M2 Ultra, ne sont pas mauvais pour exécuter des modèles existants, mais restent plus lents que les cartes Nvidia
  • L’écosystème Hugging Face est l’outil central pour expérimenter avec des modèles locaux
    • Transformers permet de charger des modèles pré-entraînés ou fine-tunés publiés sur Hugging Face
    • Les classements sont utiles comme référence, mais peuvent mal refléter l’usage réel, et il peut exister des problèmes de leakage lorsque les données de benchmark se retrouvent dans le jeu d’entraînement
    • Sur un GPU personnel courant, les modèles 13B ou 7B sont plus réalistes que les 70B
  • La famille Llama 2 et la quantification font partie des principaux exemples
    • Llama 2 7B de Meta est un modèle uniquement pré-entraîné, sans instruction tuning ni RLHF, donc pas immédiatement adapté aux questions-réponses
    • Charger un modèle 7B en 16 bits nécessite environ 14 Go rien que pour les poids
    • Le cast en 8 bits peut réduire la mémoire, mais peut être plus lent
    • bfloat16 est plus rapide, mais nécessite davantage de RAM
    • Les modèles quantifiés GPTQ sont optimisés avec une précision plus faible, ce qui réduit les déplacements mémoire ; dans l’exemple, un modèle 13B GPTQ s’exécute même plus vite qu’un 7B
    • TheBloke est mentionné comme une personne qui optimise des modèles populaires en GPTQ et les publie sur Hugging Face
  • Les modèles instruction-tuned doivent impérativement respecter leur format de prompt
    • Les modèles instruction-tuned basés sur Llama 2 comme Stable Beluga doivent utiliser exactement le format de prompt indiqué sur la page du modèle
    • OpenOrca Platypus 13B GPTQ possède aussi un format de prompt spécifique, vérifié puis structuré sous forme de fonction
    • En respectant le format, on peut obtenir de meilleures réponses à des questions comme « Who is Jeremy Howard? », même si des hallucinations restent possibles
  • Le RAG sert à exploiter des informations récentes ou des documents privés
    • Il consiste à rechercher les documents utiles à une question, puis à les joindre comme contexte pour que le modèle réponde
    • En ajoutant les 613 mots de la page Wikipedia de Jeremy Howard comme contexte, le modèle génère une réponse plus proche d’une biographie exacte en 100 mots
    • sentence-transformers transforme documents et questions en vecteurs d’embeddings, puis calcule leur similarité pour sélectionner les documents pertinents
    • S’il y a des milliers ou des millions de documents, on utilise une base de données vectorielle pour pré-calculer les embeddings
    • H2O GPT est cité comme exemple open source permettant d’uploader des PDF en local et d’effectuer du RAG
    • Pour les questions de suivi, il faut être prudent : si le modèle de recherche ne connaît pas le contexte précédent, il peut trouver des documents hors sujet
  • Le fine-tuning est une façon de modifier le comportement du modèle lui-même
    • Le jeu de données d’exemple contient un schéma de base de données, des questions en langage naturel et le SQL correct correspondant
    • La bibliothèque Hugging Face datasets permet de charger le jeu de données
    • Avec Axolotl, on copie l’exemple Llama 2 et on crée une configuration YAML pour SQL afin d’entraîner le modèle
    • Après environ une heure d’entraînement avec la commande accelerate launch axolotl, un répertoire q_lora_out est créé
    • Q signifie quantize, et LoRA est une technique qui facilite l’entraînement avec des modèles plus petits et des GPU plus modestes
    • Après l’entraînement, en fournissant un schéma et une question, le modèle génère un SQL correct de la forme SELECT count(hosts), theme ... GROUP BY theme
  • Il existe aussi des options pour Mac et d’autres runtimes
    • MLC est un projet permettant d’exécuter des modèles de langage sur iPhone, Android, navigateur web, etc.
    • Un exemple montre l’exécution d’un modèle 7B quantifié sur Mac répondant à « What is the meaning of life? », à environ 9,6 tokens/s
    • llama.cpp utilise le format gguf et peut aussi être appelé via un wrapper Python
    • Si l’on connaît bien les GPU Nvidia et Python, il est préférable d’utiliser PyTorch et l’écosystème Hugging Face
  • L’environnement de développement des modèles de langage évolue rapidement et reste encore précoce : l’installation et les cas limites sont délicats, mais c’est une période passionnante pour les programmeurs Python
    • On peut poser des questions ou partager son expérience dans le canal generative du Discord fast.ai

1 commentaires

 
GN⁺ 2023-09-25
Commentaires Hacker News
  • Je viens de la mettre en ligne et je suis surpris qu’elle soit déjà sur HN.
    J’ai pas mal d’attentes pour cette vidéo. J’ai essayé de condenser autant d’informations essentielles que possible dans une présentation de 90 minutes, avec pour objectif de pouvoir pointer les développeurs vers un seul endroit quand ils demandent « dis-moi tout ce que je dois savoir sur les LLM ».
    Malgré tout, il y a forcément des choses que j’ai oubliées ou des passages qui manquent de clarté. C’est une première tentative, et je prévois d’en faire un cours complet un jour ; donc, après avoir regardé la vidéo, dites-moi les questions qui vous restent ou les concepts que vous pensez que j’aurais dû aborder.
    Je vais bientôt devoir aller dormir ; il est tard en Australie, donc je ne pourrai peut-être pas répondre à beaucoup de questions avant le matin. Mais je viendrai bien consulter cette page au réveil, et j’ajouterai demain dans la description YouTube des liens vers les articles pertinents.
    Je n’ai pas traité les questions d’éthique ou de politique. Non pas parce qu’elles ne sont pas importantes, mais parce que j’ai choisi, dans cette présentation, de me concentrer entièrement sur les questions techniques.

  • Excellent. Le notebook à suivre en parallèle de la vidéo est ici : https://github.com/fastai/lm-hackers/blob/main/lm-hackers.ip...
    La structure du projet était aussi très bonne. Il inclut du bidouillage avec l’API OpenAI, une imitation de Code Interpreter faite avec les OpenAI functions, l’exécution d’un LLM en local avec un modèle Hugging Face, et même, dans les 10 dernières minutes, un exemple de fine-tuning pour créer un modèle texte-SQL.

  • Merci pour la vidéo. C’est le meilleur tutoriel d’utilisation des LLM que j’aie vu jusqu’ici.
    Dans https://youtu.be/jkrNMKz9pWU?si=Dvz-Hs4InJXNozhi&t=3278, en parlant des cas d’usage appropriés des modèles locaux et de GPT-4, il dit : « avec le fine-tuning, on peut créer un modèle particulièrement fort sur le type de problème que l’on doit résoudre, et dans ce genre de cas, il est tout à fait possible d’obtenir de meilleures performances que GPT-4 ».
    À ce sujet, j’ai une idée à laquelle je réfléchis depuis un moment. On peut imaginer un chatbot s’appuyant en coulisses sur plusieurs « petits » modèles, par exemple des modèles à 7 milliards de paramètres. Chaque modèle serait fine-tuné pour une tâche précise ; un tel système pourrait-il surpasser GPT-4 ?
    L’idée générale serait la suivante. On envoie le contexte/prompt à un « modèle routeur », qui détermine quel modèle expert est le mieux placé pour répondre ou compléter. Ensuite, le système transmet le contexte/prompt à cet expert et renvoie sa réponse. S’il n’existe pas de modèle expert approprié, il utilise un LLM généraliste avec instruction tuning.
    Si un petit modèle fine-tuné pour une tâche précise peut, en théorie, faire mieux que GPT-4, alors un ensemble de ces petits modèles pourrait peut-être, globalement, dépasser GPT-4.

    • Sambanova vient justement de lancer quelque chose de similaire. C’est une démo d’un modèle MoE à 1 000 milliards de paramètres tournant sur leur nouvelle puce, avec une architecture composée de 150 modèles llama2 à 7 milliards de paramètres réentraînés chacun pour devenir expert d’un sujet différent. L’un est expert en « droit », un autre en « physique », etc.
      La vidéo est ici [1] https://sambanova.ai/launch2023
      Un peu plus bas, ils le comparent au modèle Falcon à 180 milliards de paramètres exécuté sur des GPU de HuggingFace. Les résultats du MoE sont non seulement d’une qualité comparable, mais aussi extrêmement rapides, quasiment instantanés. Le fait de pouvoir remplacer les modèles experts ou les réentraîner avec de nouvelles données est aussi un gros avantage, ce qui n’est évidemment pas facile avec un modèle unique de 180 milliards plus monolithique.
    • C’est logique. En fait, il existe déjà plusieurs projets open source qui construisent ce genre de modèles. Un bon exemple est ici : https://github.com/XueFuzhao/OpenMoE/
    • Cherche mixture of experts sur Google. D’après des fuites non vérifiées, GPT-4 utiliserait déjà cette approche.
  • C’est aussi impressionnant que la vidéo vienne de la personne qui a écrit l’article ayant lancé tout ce mouvement.

  • Excellente vidéo, que j’ai partagée au travail. D’un point de vue pratique, c’est probablement l’introduction la plus complète à ce sujet que je connaisse.
    J’ai particulièrement aimé la section « les posts viraux affirmant que GPT ne sait pas faire X ne sont pas reproductibles ». J’espère qu’elle aidera les gens autour de moi à apprendre à aborder cette technologie avec esprit critique.

  • Excellente vidéo. J’y ai appris quelques nouvelles astuces que je pourrai utiliser.
    Rien que le fait d’essayer des choses permet de découvrir de nouveaux usages.
    J’en ai eu un bon exemple récemment. Je devais convertir une feuille de calcul contenant des adresses en GeoJSON pour l’utiliser comme couche cartographique, et comme j’étais d’humeur très paresseuse, j’ai voulu voir à quel point ChatGPT s’en sortirait.
    Première étape : je lui ai donné une paire latitude/longitude et demandé de convertir le format degrés/minutes en décimal ; il a montré le calcul sans problème. Ensuite, je lui ai donné toute la colonne latitude/longitude en lui demandant de ne pas afficher les calculs, et la sortie était correcte.
    Puis j’ai créé un exemple de structure JSON avec des espaces réservés, et je lui ai dit que j’allais lui fournir les données et qu’il devait remplir les espaces réservés avec les noms de colonnes. Après avoir collé les données, il a généré un JSON parfait.
    Ce qui était intéressant, c’est qu’il a refait la conversion latitude/longitude sans instruction supplémentaire, et qu’il a aussi incrémenté un attribut id que je n’avais pas mentionné. Assez impressionnant.

  • Jeremy est quelqu’un que j’admire, et pour quelqu’un qui est né et vit dans le Queensland, cela rappelle que le talent de niveau mondial existe vraiment tout autour de nous.
    Bien sûr, il y a probablement beaucoup de gens comme ça dans tous les domaines, mais Jeremy est l’une des personnes que je connais et que je respecte profondément.