Guide complet de Zephyr-7B : fonctionnalités, utilisation et affinement
Découvrez tout sur Zephyr-7B : son entraînement, comment y accéder, et comment l’affiner sur une base de données personnalisée en utilisant les GPU gratuits de Kaggle.
Tout le monde surveille le classement des LLM open source de Hugging Face et les nouveaux modèles ouverts qui visent des performances proches de GPT-4. L’un d’eux fait beaucoup parler de lui : Zephyr-7B.
\n
Dans ce tutoriel, nous allons découvrir le modèle de langage Zephyr-7B. Nous y accéderons via la pipeline Transformers et l’affinerons sur un jeu de données Agent-Instruct.
\n
Si vous débutez en intelligence artificielle, consultez le parcours de compétences AI Fundamentals. Il vous mettra sur les rails pour devenir l’ingénieur IA de demain.
\n
Comprendre Zephyr-7B
\n
Zephyr-7B est un modèle de langage de pointe développé par WebPilot.AI. Il fait partie de la série Zephyr, entraînée pour agir comme un assistant utile. Zephyr-7B est conçu pour exceller dans de nombreuses tâches linguistiques : génération de texte cohérent, traduction multilingue, synthèse d’informations, analyse de sentiment et réponses contextuelles aux questions.
\n
Zephyr-7B-β
\n
Zephyr-7B-β est le second modèle de la série. Il s’agit d’une version de Mistral-7B affinée sur une combinaison de jeux de données publics et synthétiques à l’aide de la Direct Preference Optimization (DPO). Résultat : Zephyr-7B-β sait aussi bien interpréter des questions complexes que résumer de longs passages de texte.
\n
Au moment de sa sortie, Zephyr-7B-β est le modèle conversationnel 7B le mieux classé sur les benchmarks MT-Bench et AlpacaEval. Il s’appuie sur les dernières avancées en traitement du langage naturel pour atteindre un niveau inédit de compréhension et de génération de texte proche du langage humain.
\n
Vous pouvez découvrir ses performances en testant la démo gratuite sur Zephyr Chat.
Chargez ensuite PyTorch et le module pipeline de Transformers.
\n
import torch\nfrom transformers import pipelinePropulsé par
\n
Nous allons construire la pipeline de génération de texte en précisant le nom du modèle, les arguments torch_dtype et device_map.
\n
La valeur \« auto\ » de device_map permet d’exploiter plusieurs GPU pour accélérer la génération.
\n
Le type torch.bfloat16 (brain float) est un format flottant 16 bits avec le même exposant que torch.float32 mais une mantisse réduite. Il accélère les calculs et réduit l’usage mémoire, au prix d’une précision inférieure.
\n
model_name = \"HuggingFaceH4/zephyr-7b-beta\"\n\npipe = pipeline(\n \"text-generation\",\n model=model_name,\n torch_dtype=torch.bfloat16,\n device_map=\"auto\",\n)Propulsé par
\n
Il suffit ensuite de fournir le prompt et les autres arguments nécessaires à l’objet pipeline et d’afficher la réponse.
\n
prompt = \"Write a Python function that can clean the HTML tags from the file:\"\n\noutputs = pipe(\n prompt,\n max_new_tokens=300,\n do_sample=True,\n temperature=0.7,\n top_k=50,\n top_p=0.95,\n)\nprint(outputs[0][\"generated_text\"])Propulsé par
\n
La réponse est plus qu’impressionnante : le code Python est fourni avec des commentaires.
\n
\n
Nous pouvons même personnaliser la réponse du modèle en fournissant un prompt système au format Zephyr-7B.
\n
Nous allons utiliser la fonction pipe.tokenizer.apply_chat_template pour créer un prompt à partir d’une liste de dictionnaires. Ces dictionnaires décrivent le rôle et le comportement de l’assistant, ainsi que le prompt utilisateur.
\n
messages =[\n {\n \"role\": \"system\",\n \"content\": \"You are a skilled software engineer who consistently produces high-quality Python code.\",\n },\n {\n \"role\": \"user\",\n \"content\": \"Write a Python code to display text in a star pattern.\",\n },\n]\n\nprompt = pipe.tokenizer.apply_chat_template(\n messages, tokenize=False, add_generation_prompt=True\n)Propulsé par
\n
Enfin, nous passons le prompt à la pipeline avec les paramètres de génération pour obtenir la réponse.
\n
outputs = pipe(\n prompt,\n max_new_tokens=300,\n do_sample=True,\n temperature=0.7,\n top_k=50,\n top_p=0.95,\n)\nprint(outputs[0][\"generated_text\"])\nPropulsé par
\n
Zephyr-7B propose une solution très optimisée, accompagnée d’explications et de la sortie de la fonction. Bluffant. C’est un excellent outil pour générer du code Python.
\n
\n
Affiner Zephyr-7B
\n
Dans cette section, nous allons voir comment affiner le modèle Zephyr-7B-beta sur un jeu de données personnalisé en utilisant les GPU gratuits de Kaggle. En suivant les étapes, vous pourrez préparer votre modèle pour la mise en production en à peine deux heures.
Cette partie est spécifique aux notebooks Kaggle. Nous avons ajouté les clés API pour Hugging Face et Weights & Biases (wandb) dans les secrets Kaggle. Nous les utiliserons en toute sécurité pour publier le modèle sur Hugging Face Hub et suivre l’entraînement en direct sur le serveur Weights & Biases.
\n
from kaggle_secrets import UserSecretsClient\nuser_secrets = UserSecretsClient()\nsecret_hf = user_secrets.get_secret(\"HUGGINGFACE_TOKEN\")\nsecret_wandb = user_secrets.get_secret(\"wandb\")Propulsé par
\n
Connectez-vous à Hugging Face via la CLI avec votre clé API.
\n
!huggingface-cli login --token $secret_hfPropulsé par
\n
Faites de même avec wandb et initialisez le projet.
\n
# Monitoring the LLM\nwandb.login(key = secret_wandb)\nrun = wandb.init(\n project='Fine tuning Zephyr 7B', \n job_type=\"training\", \n anonymous=\"allow\"\n)Propulsé par
\n
\n
Indiquez les noms du modèle de base, du jeu de données et du nouveau modèle pour l’affinage, l’enregistrement et la publication sur Hugging Face Hub.
\n
base_model = \"HuggingFaceH4/zephyr-7b-beta\"\ndataset_name = \"THUDM/AgentInstruct\"\nnew_model = \"zephyr-7b-beta-Agent-Instruct\"Propulsé par
\n
Jeu de données AgentInstruct
\n
Nous allons charger le jeu de données puis le convertir au style de prompts Zephyr-7B grâce à la fonction format_prompt. Elle extrait le rôle et le contenu, puis les convertit en longues chaînes commençant par un prompt système et se terminant par une instruction par défaut.
\n
#Importing the dataset\ndataset = load_dataset(\"THUDM/AgentInstruct\", split=\"train\")\ndef format_prompt(sample):\n intro = \"Below is a conversation between a user and you.\"\n end = \"Instruction: Write a response appropriate to the conversation.\"\n\n try:\n formatted_conversations = \"\\n\".join(\n f\"<{resp['from']}>: {resp['value']}\"\n for resp in sample[\"conversations\"]\n )\n\n sample[\"text\"] = f\"{intro}\\n\\n{formatted_conversations}\\n\\n{end}\"\n except (TypeError, KeyError):\n raise ValueError(\"Invalid format of the input sample.\")\n return sample\n\n\n\ndataset = dataset.map(\n format_prompt,\n remove_columns=[\"conversations\"]\n)\ndataset[\"text\"][100]Propulsé par
\n
\n
Chargement du modèle et du tokenizer
\n
Nous allons télécharger et charger un modèle en précision 4 bits depuis Hugging Face pour accélérer l’entraînement. C’est indispensable quand les GPU disposent de peu de VRAM. Nous chargerons ensuite le tokenizer et le configurerons pour corriger le problème lié au fp16.
Nous allons maintenant ajouter une couche d’adaptation (adapter) à notre modèle pour l’affiner plus efficacement. Plutôt que de réentraîner tout le modèle, nous ne mettrons à jour que les paramètres de cette couche pour un entraînement plus rapide.
\n
model = prepare_model_for_kbit_training(model)\npeft_config = LoraConfig(\n lora_alpha=16,\n lora_dropout=0.1,\n r=64,\n bias=\"none\",\n task_type=\"CAUSAL_LM\",\n target_modules=['up_proj','base_layer','down_proj']\n)\nmodel = get_peft_model(model, peft_config)Propulsé par
\n
Entraîner le modèle
\n
Il est essentiel de définir correctement les hyperparamètres dans les arguments d’entraînement. Vous pouvez en apprendre davantage dans le tutoriel affiner LLaMA 2.
\n
Nous allons ensuite utiliser la bibliothèque TRL de Hugging Face pour construire le SFT Trainer avec les composants nécessaires : modèle, jeu de données, configuration LoRA, tokenizer et paramètres d’entraînement.
Après environ 1 h 40, l’entraînement s’est terminé et nous avons observé une baisse progressive de la perte d’entraînement.
\n
\n
Voici une évaluation plus détaillée issue de Weights & Biases.
\n
\n
Nous allons maintenant enregistrer le modèle, clore la session wandb et pousser le modèle sur Hugging Face Hub. Cela créera un dépôt de modèle avec le fichier d’adapter enregistré.
\n
# Save the fine-tuned model\ntrainer.model.save_pretrained(new_model)\nwandb.finish()\n\ntrainer.model.push_to_hub(new_model, use_temp_dir=False)Propulsé par
\n
\n
Voici le dépôt du modèle affiné, accessible via : hf.co/kingabzpro/zephyr-7b-beta-Agent-Instruct
\n
\n
Il est temps de tester notre modèle affiné sur différents prompts.
\n
Nous avons demandé à notre modèle comment utiliser Python en ligne avec DataCamp.
\n
logging.set_verbosity(logging.CRITICAL)\n\nprompt = \"How to use Python online with DataCamp?\"\npipe = pipeline(task=\"text-generation\", model=model, tokenizer=tokenizer, max_length=200)\nresult = pipe(prompt)\nprint(result[0]['generated_text'])Propulsé par
\n
On constate que la réponse ressemble à celle d’AgentGPT, un agent IA autonome capable d’enchaîner des tâches via des extensions et d’atteindre des résultats proches de systèmes IA avancés. Ces systèmes peuvent, par exemple, rechercher sur le web, mettre à jour du code et le tester.
\n
\n
Plutôt que de demander une liste d’instructions, posons une question simple sur un parcours de carrière DataCamp.
\n
prompt = \"What is Datacamp Career track?\"\nresult = pipe(prompt)\nprint(result[0]['generated_text'])Propulsé par
\n
Nous avons bien reçu une réponse, qui a entraîné un enchaînement de questions-réponses (pas toujours exactes), ce qui est intriguant.
\n
\n
La prochaine étape de votre parcours consiste à utiliser ce modèle pour créer votre application IA. Pour cela, des outils adaptés vous feront gagner du temps. Voici une sélection de 7 outils essentiels de génération IA pour concevoir des applications d’IA de haut niveau.
\n
Conclusion
\n
Le grand modèle de langage Zephyr-7B-beta a montré une remarquable capacité de compréhension et de réponse précise. Dans ce tutoriel, nous avons présenté Zephyr-7B et vu comment y accéder via la pipeline Transformers. Nous avons aussi appris à l’affiner sur un jeu de données d’agents, ce qui lui confère une meilleure capacité de raisonnement et des réponses de type instruction, proches d’AgentGPT.
\n
Ce guide s’adresse à tous les passionnés de machine learning qui souhaitent expérimenter et affiner de grands modèles de langage sur des GPU à mémoire limitée.
\n
Inscrivez-vous au cours Master Large Language Models (LLMs) Concepts pour comprendre les briques des LLM, leurs méthodes d’entraînement et des techniques similaires à celles de Zephyr-7B.
En tant que data scientist certifié, je suis passionné par l'utilisation des technologies de pointe pour créer des applications innovantes d'apprentissage automatique. Avec une solide expérience en reconnaissance vocale, en analyse de données et en reporting, en MLOps, en IA conversationnelle et en NLP, j'ai affiné mes compétences dans le développement de systèmes intelligents qui peuvent avoir un impact réel. En plus de mon expertise technique, je suis également un communicateur compétent, doué pour distiller des concepts complexes dans un langage clair et concis. En conséquence, je suis devenu un blogueur recherché dans le domaine de la science des données, partageant mes idées et mes expériences avec une communauté grandissante de professionnels des données. Actuellement, je me concentre sur la création et l'édition de contenu, en travaillant avec de grands modèles linguistiques pour développer un contenu puissant et attrayant qui peut aider les entreprises et les particuliers à tirer le meilleur parti de leurs données.
L'essor du développement de l'intelligence artificielle (IA) a entraîné une augmentation notable de la demande en matière de calcul, d'où la nécessité de disposer de solutions matérielles robustes. Les unités de traitement graphique (GPU) et les unités de traitement tensoriel (TPU) sont devenues des technologies essentielles pour répondre à ces demandes.
Découvrez les principaux types d'agents d'intelligence artificielle, comment ils interagissent avec les environnements et comment ils sont utilisés dans les différents secteurs d'activité. Comprendre les agents réflexes simples, les agents basés sur un modèle, les agents basés sur un but, les agents basés sur l'utilité, les agents d'apprentissage, etc.
Apprenez à utiliser l'API DeepSeek : choix des modèles, gestion des paramètres, optimisation des coûts, mise en cache du contexte et optimisation du chain-of-thought.
Découvrez les fonctions lambda Python, leur utilité et quand les utiliser. Comprend des exemples pratiques et des bonnes pratiques pour une mise en œuvre efficace.
Tout le monde surveille le classement des LLM open source de Hugging Face et les nouveaux modèles ouverts qui visent des performances proches de GPT-4. L’un d’eux fait beaucoup parler de lui : Zephyr-7B.
\nDans ce tutoriel, nous allons découvrir le modèle de langage Zephyr-7B. Nous y accéderons via la pipeline Transformers et l’affinerons sur un jeu de données Agent-Instruct.
\nSi vous débutez en intelligence artificielle, consultez le parcours de compétences AI Fundamentals. Il vous mettra sur les rails pour devenir l’ingénieur IA de demain.
\nComprendre Zephyr-7B
\nZephyr-7B est un modèle de langage de pointe développé par WebPilot.AI. Il fait partie de la série Zephyr, entraînée pour agir comme un assistant utile. Zephyr-7B est conçu pour exceller dans de nombreuses tâches linguistiques : génération de texte cohérent, traduction multilingue, synthèse d’informations, analyse de sentiment et réponses contextuelles aux questions.
\nZephyr-7B-β
\nZephyr-7B-β est le second modèle de la série. Il s’agit d’une version de Mistral-7B affinée sur une combinaison de jeux de données publics et synthétiques à l’aide de la Direct Preference Optimization (DPO). Résultat : Zephyr-7B-β sait aussi bien interpréter des questions complexes que résumer de longs passages de texte.
\nAu moment de sa sortie, Zephyr-7B-β est le modèle conversationnel 7B le mieux classé sur les benchmarks MT-Bench et AlpacaEval. Il s’appuie sur les dernières avancées en traitement du langage naturel pour atteindre un niveau inédit de compréhension et de génération de texte proche du langage humain.
\nVous pouvez découvrir ses performances en testant la démo gratuite sur Zephyr Chat.
\n![\"image3.png\"]()
\nImage issue de Zephyr Chat
\nAccéder à Zephyr-7B
\nComme dans le tutoriel Mistral 7B, nous allons charger et utiliser
\nZephyr-7B-betaavectransformersde Hugging Face. Rien de plus simple.Remarque : si vous rencontrez des problèmes au chargement du modèle, consultez le notebook Kaggle d’inférence.
\nCommencez par installer les bibliothèques nécessaires. Assurez-vous d’utiliser la dernière version, sinon cela ne fonctionnera pas.
\n\nChargez ensuite PyTorch et le module pipeline de Transformers.
\n\nNous allons construire la pipeline de génération de texte en précisant le nom du modèle, les arguments
\ntorch_dtypeetdevice_map.La valeur \« auto\ » de
\ndevice_mappermet d’exploiter plusieurs GPU pour accélérer la génération.Le type
\n\ntorch.bfloat16(brain float) est un format flottant 16 bits avec le même exposant quetorch.float32mais une mantisse réduite. Il accélère les calculs et réduit l’usage mémoire, au prix d’une précision inférieure.Il suffit ensuite de fournir le prompt et les autres arguments nécessaires à l’objet pipeline et d’afficher la réponse.
\n\nLa réponse est plus qu’impressionnante : le code Python est fourni avec des commentaires.
\n![\"image11.png\"]()
\nNous pouvons même personnaliser la réponse du modèle en fournissant un prompt système au format Zephyr-7B.
\nNous allons utiliser la fonction
\n\npipe.tokenizer.apply_chat_templatepour créer un prompt à partir d’une liste de dictionnaires. Ces dictionnaires décrivent le rôle et le comportement de l’assistant, ainsi que le prompt utilisateur.Enfin, nous passons le prompt à la pipeline avec les paramètres de génération pour obtenir la réponse.
\n\nZephyr-7B propose une solution très optimisée, accompagnée d’explications et de la sortie de la fonction. Bluffant. C’est un excellent outil pour générer du code Python.
\n![\"image6.png\"]()
\nAffiner Zephyr-7B
\nDans cette section, nous allons voir comment affiner le modèle Zephyr-7B-beta sur un jeu de données personnalisé en utilisant les GPU gratuits de Kaggle. En suivant les étapes, vous pourrez préparer votre modèle pour la mise en production en à peine deux heures.
\nRemarque : si vous rencontrez des problèmes lors de l’entraînement, consultez le notebook Kaggle de fine-tuning.
\nMise en place
\nCommencez par installer les bibliothèques Python nécessaires pour charger le jeu de données et le modèle, puis les affiner.
\n\nNous chargerons ensuite les modules utiles qui simplifient le travail et permettent d’entraîner le modèle avec une mémoire limitée.
\n\nCette partie est spécifique aux notebooks Kaggle. Nous avons ajouté les clés API pour Hugging Face et Weights & Biases (wandb) dans les secrets Kaggle. Nous les utiliserons en toute sécurité pour publier le modèle sur Hugging Face Hub et suivre l’entraînement en direct sur le serveur Weights & Biases.
\n\nConnectez-vous à Hugging Face via la CLI avec votre clé API.
\n\nFaites de même avec wandb et initialisez le projet.
\n\n![\"image2.png\"]()
\nIndiquez les noms du modèle de base, du jeu de données et du nouveau modèle pour l’affinage, l’enregistrement et la publication sur Hugging Face Hub.
\n\nJeu de données AgentInstruct
\nNous allons charger le jeu de données puis le convertir au style de prompts Zephyr-7B grâce à la fonction
\n\nformat_prompt. Elle extrait le rôle et le contenu, puis les convertit en longues chaînes commençant par un prompt système et se terminant par une instruction par défaut.![\"image1.png\"]()
\nChargement du modèle et du tokenizer
\nNous allons télécharger et charger un modèle en précision 4 bits depuis Hugging Face pour accélérer l’entraînement. C’est indispensable quand les GPU disposent de peu de VRAM. Nous chargerons ensuite le tokenizer et le configurerons pour corriger le problème lié au fp16.
\n\nConstruction du modèle
\nNous allons maintenant ajouter une couche d’adaptation (adapter) à notre modèle pour l’affiner plus efficacement. Plutôt que de réentraîner tout le modèle, nous ne mettrons à jour que les paramètres de cette couche pour un entraînement plus rapide.
\n\nEntraîner le modèle
\nIl est essentiel de définir correctement les hyperparamètres dans les arguments d’entraînement. Vous pouvez en apprendre davantage dans le tutoriel affiner LLaMA 2.
\nNous allons ensuite utiliser la bibliothèque TRL de Hugging Face pour construire le SFT Trainer avec les composants nécessaires : modèle, jeu de données, configuration LoRA, tokenizer et paramètres d’entraînement.
\nEnfin, nous lançons l’entraînement.
\n\nAprès environ 1 h 40, l’entraînement s’est terminé et nous avons observé une baisse progressive de la perte d’entraînement.
\n![\"image10.png\"]()
\nVoici une évaluation plus détaillée issue de Weights & Biases.
\n![\"image8.png\"]()
\nNous allons maintenant enregistrer le modèle, clore la session wandb et pousser le modèle sur Hugging Face Hub. Cela créera un dépôt de modèle avec le fichier d’adapter enregistré.
\n\n![\"image9.png\"]()
\nVoici le dépôt du modèle affiné, accessible via : hf.co/kingabzpro/zephyr-7b-beta-Agent-Instruct
\n![\"image7.png\"]()
\nIl est temps de tester notre modèle affiné sur différents prompts.
\nNous avons demandé à notre modèle comment utiliser Python en ligne avec DataCamp.
\n\nOn constate que la réponse ressemble à celle d’AgentGPT, un agent IA autonome capable d’enchaîner des tâches via des extensions et d’atteindre des résultats proches de systèmes IA avancés. Ces systèmes peuvent, par exemple, rechercher sur le web, mettre à jour du code et le tester.
\n![\"image5.png\"]()
\nPlutôt que de demander une liste d’instructions, posons une question simple sur un parcours de carrière DataCamp.
\n\nNous avons bien reçu une réponse, qui a entraîné un enchaînement de questions-réponses (pas toujours exactes), ce qui est intriguant.
\n![\"image4.png\"]()
\nLa prochaine étape de votre parcours consiste à utiliser ce modèle pour créer votre application IA. Pour cela, des outils adaptés vous feront gagner du temps. Voici une sélection de 7 outils essentiels de génération IA pour concevoir des applications d’IA de haut niveau.
\nConclusion
\nLe grand modèle de langage Zephyr-7B-beta a montré une remarquable capacité de compréhension et de réponse précise. Dans ce tutoriel, nous avons présenté Zephyr-7B et vu comment y accéder via la pipeline Transformers. Nous avons aussi appris à l’affiner sur un jeu de données d’agents, ce qui lui confère une meilleure capacité de raisonnement et des réponses de type instruction, proches d’AgentGPT.
\nCe guide s’adresse à tous les passionnés de machine learning qui souhaitent expérimenter et affiner de grands modèles de langage sur des GPU à mémoire limitée.
\nInscrivez-vous au cours Master Large Language Models (LLMs) Concepts pour comprendre les briques des LLM, leurs méthodes d’entraînement et des techniques similaires à celles de Zephyr-7B.