Exécution de la démo STORM Mistral de Stanford OVAL avec DSPy
Introduction
La promesse des grands modèles linguistiques devient de plus en plus évidente et leur utilisation de plus en plus répandue, à mesure que la technologie continue de s’améliorer. Avec la sortie de LLaMA 3, nous commençons enfin à voir des modèles de langage Open Source se rapprocher en qualité raisonnablement des versions de jardins clos qui ont dominé la scène depuis la sortie de ChatGPT.
L’un des cas d’utilisation les plus attrayants de ces modèles est celui d’aide à l’écriture. Alors que même les meilleurs LLM sont sujets à des hallucinations et à des malentendus confiants, l'utilité de pouvoir générer rapidement du matériel d'écriture sur n'importe quel sujet bien connu est utile pour une multitude de raisons. À mesure que la portée des données de formation de ces modèles LLM augmente en termes de robustesse et de taille, ce potentiel ne fait que croître.
Les applications les plus récentes et les plus intéressantes qui tirent parti de ce potentiel sont le pipeline STORM de Stanford OVAL. Les modèles STORM (Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking) mettent en œuvre une étape de pré-écriture en utilisant une collection d'agents experts divers qui simulent des conversations sur le sujet entre eux, puis intègrent les informations rassemblées dans un plan qui de manière holistique. considère le point de vue des agents. Cela permet à STORM d'utiliser ensuite le plan pour générer un article complet de type Wikipédia à partir de zéro sur presque n'importe quel sujet. STORM surpasse de manière impressionnante les générateurs d'articles basés sur Retrieval Augmented Generation en termes d'organisation et de couverture du matériel.
Dans cet article, nous allons montrer comment utiliser STORM avec les modèles HuggingFace hébergés par VLLM pour générer des articles. Suivez-nous pour avoir un bref aperçu du fonctionnement de STORM avant de vous lancer dans la démo de codage.
Conditions préalables
- Environnement Python : assurez-vous que Python 3.8 ou version ultérieure est installé. Utilisez un environnement virtuel pour les dépendances.
- Dépendances : installez les bibliothèques requises, notamment
DSpy
,transformers
et d'autres spécifiées dans lerequirements.txt
de la démo. - Modèle Mistral : téléchargez le point de contrôle et le tokenizer du modèle Mistral depuis Hugging Face ou la source fournie.
- Matériel : accès à un GPU pour une exécution efficace, idéalement avec le support de CUDA.
- STORM Codebase : clonez le référentiel de démonstration STORM à partir du GitHub de Stanford OVAL.
- Configuration : ajustez tous les fichiers de configuration (par exemple, les chemins d'accès au modèle ou à l'ensemble de données) si nécessaire.
Que fait TEMPÊTE ?
STORM est un pipeline qui utilise une série d'agents LLM avec les API de recherche Wikipedia et You.com pour générer des articles de type Wikipédia sur n'importe quel sujet, en haute qualité. Pour y parvenir, le pipeline recherche d'abord dans Wikipédia les articles pertinents liés à un sujet soumis et extrait leur table des matières pour générer un nouveau plan sur le sujet. Les informations recueillies sont ensuite utilisées pour mettre en place une série d'agents conversationnels maîtres du sujet afin de préparer rapidement un écrivain Wikipédia informé. L'écrivain averti rédige ensuite l'article en utilisant le plan comme échafaudage.
Comment fonctionne STORM ?
Pour commencer, STORM utilise l'API de recherche you.com pour accéder aux articles Wikipédia du LLM. Pour démarrer avec STORM, assurez-vous de configurer votre clé API et de l'ajouter à secrets.toml
dans le bloc-notes. Pour les agents rédacteurs LLM, nous allons exploiter VLLM pour exécuter des modèles téléchargés dans le cache depuis HuggingFace.co. Plus précisément, nous allons utiliser le Mistral-7B-Instruct-v0.2 de Mistral.
(Source)
À partir de l'article STORM, voici un aperçu de haut niveau des différentes approches pour relever le défi de la génération d'articles de type Wikipédia. Pour ce faire, la plupart des approches utilisent une technique appelée pré-écriture. Il s'agit de l'étape de découverte où le LLM analyse ensemble le matériel du sujet provenant de sources distinctes.
La première qu’ils ont considérée est probablement la plus directe et la plus évidente : un agent LLM génère un grand nombre de questions et interroge le modèle avec chacune d’entre elles. Ils sont ensuite enregistrés et ordonnés par l'agent avec des sous-en-têtes pour créer le plan.
La deuxième méthode qu’ils ont mentionnée est la pose de questions guidées par la perspective. Ce processus implique que le modèle découvre d'abord diverses perspectives grâce à l'analyse d'articles Wiipedia différents, mais pertinents. Le LLM est ensuite personnifié par ces perspectives, ce qui permet une formation plus précise des questions directes qui généreraient le plan de l'article.
(Source)
La troisième méthode est celle développée pour la version STORM : Conversational Question Asking. Cette méthode implique une forme augmentée de pose de questions guidées par la perspective. Les enquêtes en pipeline « invitent un LLM à générer une liste de sujets connexes et extraient ensuite les tables des matières de leurs articles Wikipédia correspondants, si ces articles peuvent être obtenus via l'API Wikipédia » (Source). Les articles sont ensuite utilisés pour fournir chacun un nombre défini de perspectives pour converser avec l'expert du sujet en tant qu'agent rédacteur Wikipédia. Pour chaque perspective, l'auteur de Wikipédia et l'expert du sujet simulent une conversation. Après un nombre défini d'interactions, une question pertinente sur le sujet est générée avec le contexte de la perspective et l'historique de la conversation. La question est divisée en termes de recherche simples et les résultats de la recherche sont utilisés pour exclure les sources non fiables de la prise en compte. Les résultats de recherche fiables sont ensuite synthétisés pour générer la réponse finale à la question. L'interaction question-réponse finale est ensuite rassemblée dans un guide de référence que le LLM pourra consulter pendant la phase d'écriture. Le plan final utilise les connaissances intrinsèques pour rassembler les connaissances recueillies à partir des références dans un article de haute qualité.
Une fois la phase de pré-écriture terminée et avant la rédaction, le LLM est d'abord invité à générer un plan générique pour l'article à partir du sujet. Ce plan générique est ensuite utilisé à nouveau avec le sujet d'entrée et les conversations simulées pour générer un plan amélioré à partir de l'original. Ceci est ensuite utilisé lors de l'écriture pour guider l'écrivain Wikipédia. L'article est généré pièce par pièce à partir de chaque section du plan. Les sorties finales sont concaténées pour générer l’article complet.
Démo TEMPÊTE
Pour exécuter STORM, nous devons d’abord nous occuper de quelques points.
Pour exécuter la démo, nous devrons nous inscrire à You.com en tirant parti de l'API de recherche Web+News. Utilisez le lien pour vous inscrire à l'essai gratuit et obtenir votre clé API. Enregistrez la clé pour plus tard.
Une fois que nous avons pris soin de cette préparation, nous pouvons faire tourner notre carnet. Nous recommandons les GPU A6000 ou A100-80G pour exécuter STORM, afin que nous puissions obtenir nos résultats dans un délai raisonnable et éviter les erreurs de mémoire insuffisante.
Une fois votre ordinateur portable démarré, ouvrez un fichier ipynb pour continuer la démo.
Mise en place de la démo
La configuration de la démo est très simple. Nous devons installer VLLM et la configuration requise pour STORM pour commencer. Exécutez la première cellule de code ou collez-la dans un terminal correspondant sans les points d'exclamation au début de chaque ligne.
!git pull
!pip install -r requirements.txt
!pip install -U huggingface-hub anthropic
!pip uninstall jax jaxlib tensorflow -y
!pip install vllm==0.2.7
Ce processus peut prendre un moment. Une fois cela fait, exécutez la cellule de code suivante pour vous connecter à HuggingFace.co afin d'obtenir vos jetons d'accès à l'API. Le jeton peut être consulté ou créé à l'aide du lien qui vous est fourni par la sortie. Copiez-le et collez-le simplement dans la cellule fournie dans la sortie pour ajouter votre jeton.
import huggingface_hub
huggingface_hub.notebook_login()
Une fois cela terminé, nous aurons accès à n’importe quel modèle HuggingFace que nous souhaitons utiliser. Nous pouvons changer cela en modifiant l'identifiant du modèle dans le fichier run_storm_wiki_mistral.py à la ligne 35 de la variable mistral_kwargs
, et en modifiant également l'identifiant du modèle que nous appelons pour le client VLLM.
Exécution du client VLLM
Pour exécuter STORM, le script Python s'appuie sur des appels d'API pour saisir et recevoir des sorties du LLM. Par défaut, cela a été configuré pour utiliser OpenAI. Au cours des derniers jours, ils ont ajouté des fonctionnalités pour permettre aux points de terminaison DSPY VLLM de fonctionner avec le script.
Pour configurer cela, tout ce que nous avons à faire est d'exécuter la cellule de code suivante. Cela lancera Mistral en tant que point de terminaison d'API interactif avec lequel nous pourrons discuter directement.
!python -m vllm.entrypoints.openai.api_server --port 6006 --model 'mistralai/Mistral-7B-Instruct-v0.2'
Une fois l'API lancée, nous pouvons exécuter STORM. Utilisez la section suivante pour voir comment le configurer.
Exécution de TEMPÊTE
Maintenant que tout est configuré, il ne nous reste plus qu'à exécuter STORM. Pour cette démo, nous allons utiliser leur exemple run_storm_wiki_mistral.py. Collez la commande suivante dans une fenêtre de terminal.
python examples/run_storm_wiki_mistral.py \
--url "http://localhost" \
--port 6006 \
--output-dir '/notebooks/results/' \
--do-research \
--do-generate-outline \
--do-generate-article \
--do-polish-article
À partir de là, il vous sera demandé de saisir un sujet de votre choix. Ce sera le sujet de notre nouvel article. Nous avons testé le nôtre avec le sujet saisi « GPU NVIDIA ». Vous pouvez lire un exemple de section de notre article généré ci-dessous. Comme on peut le constater, le formatage imite parfaitement celui des articles Wikipédia. Ce sujet n'a probablement pas été largement abordé dans la formation initiale du modèle, compte tenu de la niche ironique du sujet, nous pouvons donc supposer que les informations correctes présentées dans le texte généré ont toutes été vérifiées grâce à la procédure de recherche STORM. Jetons un coup d'oeil.
## Ampere Architecture (2020)
Ampere is the newer of the two architectures and is employed in the latest generation of NVIDIA graphics cards, including the RTX 30 Series [6]. It offers up to 1.9X Performance per Watt improvement over the Turing architecture [6]. Another great addition to the Ampere is the support for HDMI 2.1, which supports ultra-high resolution and refresh rates of 8K@60Hz and 4K@120Hz [6].
Both Turing and Ampere architectures share some similarities. They are employed in the latest generation of NVIDIA graphics cards, with Turing serving the RTX 20 Series and Ampere serving the RTX 30 Series [6]. However, Ampere comes with some newer features and improvements over the Turing GPU architecture [6].
[6] The Ampere architecture offers up to 1.9X Performance per Watt improvement over the Turing architecture. Another great addition to the Ampere is the support for HDMI 2.1 which supports the ultra-high resolution and refresh rates which are 8K@60Hz and 4K@120Hz.
[7] Look for new applications built from scratch on GPUs rather than porting of existing large simulation applications.
[8] In 2007, NVIDIA’s CUDA powered a new line of NVIDIA GPUs that brought accelerated computing to an expanding array of industrial and scientific applications.
[1] Opens parallel processing capabilities of GPUs to science and research with the unveiling of CUDA® architecture.
[9] RAPIDS, built on NVIDIA CUDA-X AI, leverages more than 15 years of NVIDIA® CUDA® development and machine learning expertise.
[10] Modeling and simulation, the convergence of HPC and AI, and visualization are applicable in a wide range of industries, from scientific research to financial modeling.
[11] PhysX is already integrated into some of the most popular game engines, including Unreal Engine (versions 3 and 4), Unity3D, and Stingray.
[12] NVIDIA Omniverse™ is an extensible, open platform built for virtual collaboration and real-time physically accurate simulation.
Comme nous pouvons le constater, il s’agit d’une distillation assez impressionnante des informations disponibles. Bien qu'il y ait quelques petites erreurs concernant les spécificités de ce sujet très complexe et technique, le pipeline était encore presque totalement précis avec son texte généré par rapport à la réalité du sujet.
Pensées finales
Les applications pour STORM que nous avons présentées dans cet article sont vraiment étonnantes. Il existe un énorme potentiel pour dynamiser les processus de création de contenu éducatif et sec grâce à des applications de LLM telles que celle-ci. Nous avons hâte de voir comment cela évoluera encore à mesure que les technologies pertinentes s’améliorent.