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.
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.
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 :
Lancez la console AWS et recherchez SageMaker :
Dans le menu de gauche, sélectionnez Notebook->Instances Notebook :
Cliquez sur le bouton Créer une instance de bloc-notes :
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.
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.
Le bloc-notes sera alors dans un état En attente . Cela durera probablement environ 10 minutes :
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.
Rendez-vous sur le bloc-notes sur MPT-7B sur AWS SageMaker.ipynb et téléchargez-le :
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.
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 :
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 :
Définissez le noyau sur conda_python3 :
Sélectionnez Cellule -> Exécuter tout :
Un logo sablier apparaît alors dans l'onglet du navigateur :
Il vous faudra ensuite patienter environ 10 minutes pour que le modèle soit téléchargé :
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 :
É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.
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 💸
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 :
Mais pour des questions comme_Quelle est la capitale du Belize ?_, cela échoue assez horriblement :
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.
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.
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 .
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 !
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.