
Un grand modèle de langage (LLM) est un algorithme d'apprentissage profond capable de reconnaître, de résumer, de traduire, de prédire et de générer du texte et d'autres contenus sur la base des connaissances acquises à partir d'énormes ensembles de données d'apprentissage. Les modèles de langage utilisent des méthodes statistiques pour prédire le prochain élément de langage naturel dans une séquence, en déterminant efficacement le mot suivant en fonction des mots précédents. Les LLM sont des modèles de langage basés sur des réseaux neuronaux formés sur d'énormes ensembles de données comportant des centaines de millions à plus d'un trillion de paramètres. La taille des LLM et leurs données d'entraînement améliorent la qualité des modèles, mais posent des problèmes d'infrastructure, car ils nécessitent de vastes ressources informatiques. Les plus grands et les plus puissants LLM sont basés sur une architecture de transformateur en raison de son efficacité de calcul lors du traitement de séquences en parallèle. Leur utilisation s'étend au-delà des applications de traitement du langage naturel (traduction, assistants d'IA, chatbots, etc.), avec des cas d'utilisation dans les soins de santé, le développement de logiciels et de nombreux autres domaines.
Guidance vous permet de contrôler les modèles de langage modernes de manière plus efficace et efficiente que le prompting ou le chaînage traditionnel. Les programmes Guidance vous permettent d'entrelacer la génération, le prompting et le contrôle logique en un seul flux continu correspondant à la façon dont le modèle de langage traite réellement le texte. Il a été démontré que des structures de sortie simples telles que la Chain of Thought et ses nombreuses variantes (par exemple ART, Auto-CoT, etc.) améliorent les performances du LLM. L'avènement de LLM plus puissants comme GPT-4 permet une structure encore plus riche, et Guidance rend cette structure plus facile et plus abordable.
Caractéristiques :
Installation
Diffusion live
Accélérez votre cycle de développement en diffusant des modèles complexes et des générations live dans votre carnet de notes. À première vue, Guidance ressemble à un langage de création de modèles, et tout comme les modèles Handlebars standard, vous pouvez faire de l'interpolation de variables (par exemple {{proverbe}}) et du contrôle logique. Mais contrairement aux langages de templating standard, les programmes Guidance ont un ordre d'exécution linéaire bien défini qui correspond directement à l'ordre des jetons tel qu'il est traité par le modèle de langage. Cela signifie qu'à tout moment de l'exécution, le modèle de langage peut être utilisé pour générer du texte (à l'aide de la commande {{gen}}) ou pour prendre des décisions concernant le flux de contrôle logique. Cette imbrication de la génération et de l'invite permet d'obtenir une structure de sortie précise qui produit des résultats clairs et analysables.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Après avoir exécuté un programme, toutes les variables générées sont désormais facilement accessibles :
Dialogue de chat
Guidance prend en charge les modèles de dialogue basés sur l'API, tels que GPT-4, ainsi que les modèles de dialogue ouverts, tels que Vicuna, grâce à une API unifiée basée sur des balises de rôle (par exemple {{#system}}...{{/system}}). Cela permet de développer des dialogues interactifs qui combinent des modèles riches et un contrôle logique avec des modèles de chat modernes.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Accélération du traitement par Guidance
Lorsque plusieurs générations ou instructions de flux de contrôle dirigées par le LLM sont utilisées dans un seul programme Guidance, il est possible d'améliorer de manière significative la performance de l'inférence en réutilisant de manière optimale les caches de clés/valeurs au fur et à mesure que l'on progresse dans l'invite. Cela signifie que Guidance ne demande au LLM que de générer le texte vert ci-dessous, et non le programme entier. Cela réduit de moitié le temps d'exécution de cette invite par rapport à une approche de génération standard.
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
L'invite ci-dessus prend typiquement un peu plus de 2,5 secondes pour se terminer sur un GPU A6000 en utilisant LLaMA 7B. Si nous devions exécuter la même invite adaptée pour être un appel de génération unique (la pratique standard aujourd'hui), cela prendrait environ 5 secondes (dont 4 pour la génération de jetons et 1 pour le traitement de l'invite). Cela signifie que l'accélération effectuée par Guidance permet de multiplier par deux la vitesse d'exécution de cette invite par rapport à l'approche standard. Dans la pratique, le facteur d'accélération exact dépend du format de votre invite spécifique et de la taille de votre modèle (les modèles plus grands en bénéficient davantage). Pour l'instant, l'accélération n'est prise en charge que pour les Transformers LLM.
Caractéristiques :
- Syntaxe simple et intuitive, basée sur le modèle Handlebars.
- Structure de sortie riche avec de multiples générations, sélections, conditionnelles, utilisation d'outils, etc.
- Diffusion semblable à un playground dans les carnets Jupyter/VSCode.
- Mise en cache intelligente des générations basée sur les seeds.
- Prise en charge des modèles de chat basés sur les rôles (par exemple ChatGPT).
- Intégration facile avec les modèles Hugging Face, y compris l'accélération de Guidance pour des gains de vitesse par rapport au prompting standard, le token healing pour optimiser les limites du prompt, et les guides de motifs regex pour faire respecter les formats.
Installation
Code : | Sélectionner tout |
pip install guidance
Diffusion live
Accélérez votre cycle de développement en diffusant des modèles complexes et des générations live dans votre carnet de notes. À première vue, Guidance ressemble à un langage de création de modèles, et tout comme les modèles Handlebars standard, vous pouvez faire de l'interpolation de variables (par exemple {{proverbe}}) et du contrôle logique. Mais contrairement aux langages de templating standard, les programmes Guidance ont un ordre d'exécution linéaire bien défini qui correspond directement à l'ordre des jetons tel qu'il est traité par le modèle de langage. Cela signifie qu'à tout moment de l'exécution, le modèle de langage peut être utilisé pour générer du texte (à l'aide de la commande {{gen}}) ou pour prendre des décisions concernant le flux de contrôle logique. Cette imbrication de la génération et de l'invite permet d'obtenir une structure de sortie précise qui produit des résultats clairs et analysables.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import guidance # set the default language model used to execute guidance programs guidance.llm = guidance.llms.OpenAI("text-davinci-003") # define a guidance program that adapts a proverb program = guidance("""Tweak this proverb to apply to model instructions instead. {{proverb}} - {{book}} {{chapter}}:{{verse}} UPDATED Where there is no guidance{{gen 'rewrite' stop="\\n-"}} - GPT {{gen 'chapter'}}:{{gen 'verse'}}""") # execute the program on a specific proverb executed_program = program( proverb="Where there is no guidance, a people falls,\nbut in an abundance of counselors there is safety.", book="Proverbs", chapter=11, verse=14 ) |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Après avoir exécuté un programme, toutes les variables générées sont désormais facilement accessibles :
Code : | Sélectionner tout |
executed_program["rewrite"]
Dialogue de chat
Guidance prend en charge les modèles de dialogue basés sur l'API, tels que GPT-4, ainsi que les modèles de dialogue ouverts, tels que Vicuna, grâce à une API unifiée basée sur des balises de rôle (par exemple {{#system}}...{{/system}}). Cela permet de développer des dialogues interactifs qui combinent des modèles riches et un contrôle logique avec des modèles de chat modernes.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # connect to a chat model like GPT-4 or Vicuna gpt4 = guidance.llms.OpenAI("gpt-4") # vicuna = guidance.llms.transformers.Vicuna("your_path/vicuna_13B", device_map="auto") experts = guidance(''' {{#system~}} You are a helpful and terse assistant. {{~/system}} {{#user~}} I want a response to the following question: {{query}} Name 3 world-class experts (past or present) who would be great at answering this? Don't answer the question yet. {{~/user}} {{#assistant~}} {{gen 'expert_names' temperature=0 max_tokens=300}} {{~/assistant}} {{#user~}} Great, now please answer the question as if these experts had collaborated in writing a joint anonymous answer. {{~/user}} {{#assistant~}} {{gen 'answer' temperature=0 max_tokens=500}} {{~/assistant}} ''', llm=gpt4) experts(query='How can I be more productive?') |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
Accélération du traitement par Guidance
Lorsque plusieurs générations ou instructions de flux de contrôle dirigées par le LLM sont utilisées dans un seul programme Guidance, il est possible d'améliorer de manière significative la performance de l'inférence en réutilisant de manière optimale les caches de clés/valeurs au fur et à mesure que l'on progresse dans l'invite. Cela signifie que Guidance ne demande au LLM que de générer le texte vert ci-dessous, et non le programme entier. Cela réduit de moitié le temps d'exécution de cette invite par rapport à une approche de génération standard.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # we use LLaMA here, but any GPT-style model will do llama = guidance.llms.Transformers("your_path/llama-7b", device=0) # we can pre-define valid option sets valid_weapons = ["sword", "axe", "mace", "spear", "bow", "crossbow"] # define the prompt character_maker = guidance("""The following is a character profile for an RPG game in JSON format. ```json { "id": "{{id}}", "description": "{{description}}", "name": "{{gen 'name'}}", "age": {{gen 'age' pattern='[0-9]+' stop=','}}, "armor": "{{#select 'armor'}}leather{{or}}chainmail{{or}}plate{{/select}}", "weapon": "{{select 'weapon' options=valid_weapons}}", "class": "{{gen 'class'}}", "mantra": "{{gen 'mantra' temperature=0.7}}", "strength": {{gen 'strength' pattern='[0-9]+' stop=','}}, "items": [{{#geneach 'items' num_iterations=5 join=', '}}"{{gen 'this' temperature=0.7}}"{{/geneach}}] }```""") # generate a character character_maker( id="e1f491f7-7ab8-4dac-8c20-c92b5e7d883d", description="A quick and nimble fighter.", valid_weapons=valid_weapons, llm=llama ) |
Aperçu : https://raw.githubusercontent.com/mi..._animation.gif
L'invite ci-dessus prend typiquement un peu plus de 2,5 secondes pour se terminer sur un GPU A6000 en utilisant LLaMA 7B. Si nous devions exécuter la même invite adaptée pour être un appel de génération unique (la pratique standard aujourd'hui), cela prendrait environ 5 secondes (dont 4 pour la génération de jetons et 1 pour le traitement de l'invite). Cela signifie que l'accélération effectuée par Guidance permet de multiplier par deux la vitesse d'exécution de cette invite par rapport à l'approche standard. Dans la pratique, le facteur d'accélération exact dépend du format de votre invite spécifique et de la taille de votre modèle (les modèles plus grands en bénéficient davantage). Pour l'instant, l'accélération n'est prise en charge que pour les Transformers LLM.
Source : Guidance
Et vous ?



Voir aussi





Vous avez lu gratuitement 5 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.