paint-brush
Comment exécuter MPT-7B sur AWS SageMaker : le concurrent ChatGPT de MosaicMLpar@redgeoff
444 lectures
444 lectures

Comment exécuter MPT-7B sur AWS SageMaker : le concurrent ChatGPT de MosaicML

par Geoff Cox8m2023/07/19
Read on Terminal Reader

Trop long; Pour lire

Le billet de blog présente le MPT-7B de MosaicML comme alternative au ChatGPT d'OpenAI pour exécuter des modèles de chatbot sur votre propre infrastructure. Il fournit un guide étape par étape sur la façon d'exécuter MPT-7B sur AWS SageMaker, mettant en évidence des avantages tels que le contrôle des coûts, une itération facile et la possibilité de passer à la production. Le message aborde également les comparaisons de performances et les défis du modèle, en soulignant l'importance de la confidentialité des données et de la rentabilité.
featured image - Comment exécuter MPT-7B sur AWS SageMaker : le concurrent ChatGPT de MosaicML
Geoff Cox HackerNoon profile picture
0-item
1-item
2-item

Dans cet article de blog, je vais vous expliquer étape par étape le processus d'exécution du concurrent ChatGPT de MosaicML, MPT-7B, sur votre propre instance AWS SageMaker.


Êtes-vous enthousiasmé par les fonctionnalités de ChatGPT, mais craignez-vous d'exposer vos données sensibles à OpenAI ? Heureusement, il existe des alternatives que vous pouvez exécuter sur votre propre infrastructure. L'une de ces alternatives est le MPT-7b de MosaicML, un concurrent de ChatGPT, que nous explorerons dans cet article de blog.

Introduction à MosaicML et MPT-7B

MosaicML, récemment acquis par Databricks pour 1,3 milliard de dollars , a fait des vagues dans la communauté ML avec son modèle MPT-7B, un prétendu concurrent de ChatGPT. Malgré ses promesses, l'exécution de ce modèle peut être intimidante en raison de la rareté de la documentation et de ses lourdes exigences en ressources. Cependant, on peut exécuter MPT-7B sur AWS SageMaker dans un bloc-notes Jupyter, un environnement convivial pour les débutants et très flexible pour une itération rapide. Cette configuration vous permet de tester la faisabilité du modèle et les exigences matérielles avant de décider de passer en production.

Exécution de MPT-7B sur AWS SageMaker

L'exécution de MPT-7B dans un bloc-notes Jupyter sur AWS SageMaker offre plusieurs avantages. Non seulement vous pouvez payer uniquement pour ce que vous utilisez et le désactiver lorsque vous avez terminé, mais la possibilité de réexécuter facilement des parties de votre code sans avoir à recharger le modèle permet de gagner du temps lors du développement itératif. Mais attention ! Si vous oubliez d'arrêter vos instances de bloc-notes, les frais peuvent rapidement s'accumuler.


Bien que cette méthode soit relativement pratique, vous devez prendre en compte certaines considérations. Premièrement, le chargement du modèle peut prendre jusqu'à 20 minutes même sur un GPU hautes performances, ce qui rend ce processus un peu long. De plus, le coût est un facteur à prendre en compte, car le coût de fonctionnement est d'au moins 4 $ de l'heure. Vous devrez exécuter MPT-7B sur au moins une instance p3.2xlarge ; quelque chose de plus petit ne semble pas faisable. Si vous optez pour EC2 au lieu de SageMaker, vous devrez demander à AWS l'autorisation d'utiliser une instance p3.2xlarge .


Dans les sections suivantes, je vais vous expliquer étape par étape comment exécuter le modèle MPT-7B dans votre propre bloc-notes jupyter SageMaker :

Étape 1 - Ouvrez la console SageMaker

Lancez la console AWS et recherchez SageMaker :


Recherchez SageMaker. Crédit image : Auteur

Étape 2 - Créer une instance de bloc-notes

Dans le menu de gauche, sélectionnez Notebook->Instances Notebook :


Instances de bloc-notes. Crédit image : Auteur


Cliquez sur le bouton Créer une instance de bloc-notes :


Créer une instance de bloc-notes. Crédit image : Auteur


Spécifiez un nom d'instance. Choisissez le type d'instance m1.p3.2xlarge . Malheureusement, il semble qu'une instance aussi puissante que m1.p3.2xlarge soit requise, sinon votre instance risque de manquer de mémoire ou de prendre trop de temps pour répondre aux questions les plus simples. Cependant, veuillez noter que cette instance coûtera environ 4 $/h, il est donc important de surveiller attentivement votre utilisation.


Spécifiez les détails de l'instance de bloc-notes. Crédit image : Auteur


Créez un nouveau rôle IAM :


Créez un nouveau rôle. Crédit image : Auteur


Si votre environnement de test ne contient pas de données particulièrement sensibles, vous pouvez accorder l'accès à Any S3 bucket . Sinon, il faudra être plus explicite.


Spécifiez l'accès S3. Crédit image : Auteur


Cliquez sur le bouton Créer une instance de bloc-notes :


Créer une instance de bloc-notes. Crédit image : Auteur


Le bloc-notes sera alors dans un état En attente . Cela durera probablement environ 10 minutes :


Instance de bloc-notes en attente. Crédit image : Auteur


En attendant, nous allons télécharger un bloc-notes afin de pouvoir le charger une fois que l'instance AWS SageMaker aura terminé le provisionnement.

Étape 3 - Téléchargez le bloc-notes

Rendez-vous sur le bloc-notes sur MPT-7B sur AWS SageMaker.ipynb et téléchargez-le :


Le bloc-notes sur Google Colab. Crédit image : Auteur



Téléchargez le cahier. Crédit image : Auteur


Dans ce cahier, vous remarquerez deux blocs de code principaux. Le premier bloc charge le tokenizer et le modèle MPT-7B :


 from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')


Le tokenizer est utilisé pour encoder la question envoyée au modèle et décoder la réponse du modèle. De plus, nous obtenons la spécification de l'appareil pour notre GPU afin de pouvoir configurer le modèle pour l'utiliser plus tard :


 import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")


Notez l'utilisation de stopping_critera , qui est nécessaire, sinon le modèle commencera à babiller, même après avoir répondu à notre question.


Voir les paramètres de génération de modèle si vous souhaitez explorer les différentes options.


Maintenant, téléchargeons ce bloc-notes sur SageMaker.

Étape 4 - Téléchargez le bloc-notes

Espérons qu'à ce moment-là, votre instance de bloc-notes SageMaker ait fini d'être provisionnée. Quand c'est le cas, cliquez sur le lien Open Jupyter :


Ouvrez Jupyter. Crédit image : Auteur


Ensuite, cliquez sur le bouton Télécharger dans le coin supérieur droit de votre écran et sélectionnez le bloc-notes que vous venez de télécharger :


Téléchargez le bloc-notes. Crédit image : Auteur


Définissez le noyau sur conda_python3 :


Définissez le noyau. Crédit image : Auteur


Étape 5 - Exécutez le notebook

Sélectionnez Cellule -> Exécuter tout :


Exécutez toutes les cellules. Crédit image : Auteur


Un logo sablier apparaît alors dans l'onglet du navigateur :


Attendez le bloc-notes. Crédit image : Auteur


Il vous faudra ensuite patienter environ 10 minutes pour que le modèle soit téléchargé :


Télécharger le modèle. Crédit image : Auteur


Après son exécution, vous verrez la réponse à la question Expliquez-moi la différence entre la fission nucléaire et la fusion :


Expliquez-moi la différence entre la fission nucléaire et la fusion. Crédit image : Auteur


Étant donné que le modèle et le tokenizer ont déjà été chargés ci-dessus, vous pouvez simplement modifier le bloc de code ask_question et cliquer sur le bouton Exécuter pour poser d'autres questions. Cela vous évitera de passer 10 minutes à chaque fois que vous voudrez tester une nouvelle question.


Quelle est la capitale de la France?. Crédit image : Auteur


Étape 6 - Arrêtez l'ordinateur portable

Dès que vous aurez fini de tester le modèle, vous voudrez revenir à votre liste d'instances de bloc-notes et l'arrêter. Si vous ne le faites pas, 4 $ / h s'additionneront très rapidement 💸


Arrêtez le cahier. Crédit image : Auteur


Comparaison des performances

En termes de performances, mes tests préliminaires suggèrent que les résultats de MPT-7B pourraient ne pas être aussi bons que ceux de ChatGPT. Il fait un travail décent en répondant à des questions telles que :

  • Quelle est la capitale de la France? ,
  • Expliquez-moi la différence entre la fission nucléaire et la fusion
  • Écrivez du code python qui convertit un csv en pdf .


Mais pour des questions comme_Quelle est la capitale du Belize ?_, cela échoue assez horriblement :


Quelle est la capitale du Bélize ?. Crédit image : Auteur


Je collecte actuellement plus de données et effectuerai une analyse comparative complète dans un article de blog de suivi. Dans cet article, je comparerai les performances des questions et réponses de MPT-7B, MPT-30B, Falcon-40b et ChatGPT en utilisant l'historique des conversations réelles.

Du test à la production

Une fois que vous êtes prêt à passer des tests à la production, SageMaker offre un avantage supplémentaire : la possibilité de créer un point de terminaison pour votre modèle. Avec SageMaker, vous pouvez effectuer une mise à l'échelle automatique en fonction de la demande vers le point de terminaison, optimisant ainsi vos ressources.

Conseils supplémentaires

N'oubliez pas qu'il est facile pour votre processus d'être bifurqué lors de l'exécution dans un bloc-notes Jupyter et de manquer de mémoire. Si cela se produit, arrêtez simplement le noyau et exécutez à nouveau toutes les commandes.

Si vous souhaitez exécuter ce modèle sur une plate-forme autre qu'AWS, Google Colab Pro est une autre option viable à 9 $/mois. Cependant, sur la base de nos tests, nous avons constaté que nous avions épuisé les crédits fournis en quelques heures seulement. 😳


Un autre défi auquel vous pouvez être confronté est l'impossibilité d'utiliser l' optimisation Triton sur SageMaker en raison d'une incompatibilité de version CUDA. Malheureusement, les instances P3 actuelles d'AWS n'incluent pas de version récente de CUDA. Par conséquent, si vous souhaitez utiliser l'optimisation Triton, vous devrez créer un conteneur EC2 avec un accès en ligne de commande. Cependant, il est important de noter que vous aurez également besoin d'une autorisation spéciale d'AWS Support pour exécuter une instance avec 8 VCPU. Dans un prochain article, je fournirai un guide détaillé sur la façon d'intégrer Triton et d'utiliser un fournisseur de cloud GPU plus rentable, tel que Lambda Labs .

Dernières pensées

Alors que le MPT-7B de MosaicML offre une alternative viable au ChatGPT d'OpenAI, il présente son propre ensemble de défis. L'exécution du modèle peut prendre du temps, être coûteuse et la documentation disponible fait défaut. Cependant, la possibilité de conserver le modèle en interne et de protéger vos données contre l'exposition à OpenAI peut être convaincante pour certains cas d'utilisation.


SageMaker offre une grande commodité pour tester rapidement le modèle et offre la flexibilité de passer à la production lorsque vous êtes prêt. Que vous débutiez avec le MPT-7B ou que vous l'utilisiez depuis un certain temps, nous espérons que ce guide vous a fourni des informations précieuses.


Restez à l'écoute pour notre prochain article de blog, où nous approfondirons les comparaisons de performances entre MPT-7B, MPT-30B, Falcon-40b et ChatGPT.


Consultez les liens suivants si vous souhaitez en savoir plus sur le MPT-7B ou sa variante plus grande, le MPT-30B .


Et rappelez-vous, que vous travailliez avec ChatGPT ou MPT-7B, la clé est de vous assurer que votre cas d'utilisation est servi sans compromettre la confidentialité des données et la rentabilité. Bon bricolage !

Vous voulez une solution clé en main pour utiliser MPT ou ChatGPT avec vos données ?

Chez MindfulDataAI.com , nous proposons ChatGPT pour les entreprises. Si vous souhaitez exploiter ChatGPT, MPT ou d'autres modèles avec les données de votre entreprise, veuillez nous contacter.