Exécutez la génération de texte avec les modèles GPT et Bloom sur Amazon SageMaker JumpStart

En décembre 2020, AWS a annoncé la disponibilité générale de Amazon SageMaker JumpStart, une capacité de Amazon Sage Maker qui vous aide à démarrer rapidement et facilement avec l'apprentissage automatique (ML). JumpStart permet d'ajuster et de déployer en un clic une grande variété de modèles pré-formés pour les tâches ML courantes, ainsi qu'une sélection de solutions de bout en bout qui résolvent les problèmes commerciaux courants. Ces fonctionnalités simplifient chaque étape du processus de ML, ce qui facilite le développement de modèles de haute qualité et réduit le temps de déploiement.

Cet article est le quatrième d'une série sur l'utilisation de JumpStart pour des tâches ML spécifiques. Dans le premier message, nous avons montré comment exécuter des cas d'utilisation de classification d'images sur JumpStart. Dans le deuxième message, nous avons montré comment exécuter des cas d'utilisation de classification de texte. Dans le troisième poste, nous avons exécuté des cas d'utilisation de segmentation d'images.

Dans cet article, nous fournissons une procédure pas à pas sur la façon de déployer des modèles de génération de texte pré-formés. Nous explorons deux manières d'obtenir le même résultat : via l'interface graphique de JumpStart sur Amazon SageMakerStudio, et par programmation via API JumpStart.

Si vous souhaitez passer directement au code de l'API JumpStart que nous abordons dans cet article, vous pouvez vous référer à l'exemple de bloc-notes Jupyter suivant : Introduction à JumpStart - Génération de texte.

Présentation de JumpStart

JumpStart vous aide à démarrer avec des modèles ML pour une variété de tâches sans écrire une seule ligne de code. Actuellement, JumpStart vous permet d'effectuer les opérations suivantes :

  • Déployer des modèles pré-formés pour les tâches ML courantes – JumpStart vous permet de traiter des tâches ML courantes sans effort de développement en fournissant un déploiement facile de modèles pré-formés sur de grands ensembles de données accessibles au public. La communauté des chercheurs en ML a déployé des efforts considérables pour rendre la majorité des modèles récemment développés accessibles au public. JumpStart héberge une collection de plus de 300 modèles, couvrant les 15 tâches ML les plus populaires telles que la détection d'objets, la classification de texte et la génération de texte, ce qui facilite leur utilisation par les débutants. Ces modèles sont tirés de hubs de modèles populaires tels que TensorFlow, PyTorch, Hugging Face et MXNet.
  • Affiner les modèles pré-formés – JumpStart vous permet d'affiner les modèles pré-formés sans avoir à écrire votre propre algorithme de formation. En ML, la capacité de transférer les connaissances acquises dans un domaine vers un autre domaine est appelée transférer l'apprentissage. Vous pouvez utiliser l'apprentissage par transfert pour produire des modèles précis sur vos ensembles de données plus petits, avec des coûts de formation bien inférieurs à ceux impliqués dans la formation du modèle d'origine. JumpStart comprend également des algorithmes de formation populaires basés sur LightGBM, CatBoost, XGBoost et Scikit-learn, que vous pouvez former à partir de zéro pour la régression tabulaire et la classification.
  • Utiliser des solutions prédéfinies – JumpStart fournit un ensemble de 17 solutions pour les cas d'utilisation courants du ML, tels que la prévision de la demande et les applications industrielles et financières, que vous pouvez déployer en quelques clics. Les solutions sont des applications ML de bout en bout qui regroupent divers services AWS pour résoudre un cas d'utilisation métier particulier. Ils utilisent AWS CloudFormation modèles et architectures de référence pour un déploiement rapide, ce qui signifie qu'ils sont entièrement personnalisables.
  • Reportez-vous aux exemples de bloc-notes pour les algorithmes SageMaker – SageMaker fournit une suite d'algorithmes intégrés pour aider les scientifiques des données et les praticiens du ML à se lancer rapidement dans la formation et le déploiement de modèles de ML. JumpStart fournit des exemples de blocs-notes que vous pouvez utiliser pour utiliser rapidement ces algorithmes.
  • Consultez les vidéos de formation et les blogs – JumpStart propose également de nombreux articles de blog et vidéos qui vous apprennent à utiliser différentes fonctionnalités dans SageMaker.

JumpStart accepte les paramètres VPC personnalisés et Service de gestion des clés AWS (AWS KMS), afin que vous puissiez utiliser les modèles et solutions disponibles en toute sécurité dans votre environnement d'entreprise. Vous pouvez transmettre vos paramètres de sécurité à JumpStart dans Studio ou via le SDK Python SageMaker.

Génération de texte, GPT-2 et Bloom

La génération de texte est la tâche de générer un texte qui est fluide et qui semble indiscernable du texte écrit par l'homme. Il est également connu sous le nom génération de langage naturel.

GPT-2 est un modèle populaire de génération de texte basé sur un transformateur. Il est pré-formé sur un grand corpus de texte anglais brut sans étiquetage humain. Il est formé sur la tâche où, étant donné une séquence partielle (phrase ou morceau de texte), le modèle doit prédire le mot ou le jeton suivant dans la séquence.

Bloom est également un modèle de génération de texte basé sur un transformateur et formé de la même manière que GPT-2. Cependant, Bloom est pré-formé sur 46 langages différents et 13 langages de programmation. Voici un exemple d'exécution de la génération de texte avec le modèle Bloom :

Input: "Some people like dogs, some people like cats"
Output: "Some people like dogs, some people like cats some people like birds, some people like fish,"

Vue d'ensemble de la solution

Les sections suivantes fournissent une démonstration étape par étape pour effectuer une inférence, à la fois via l'interface utilisateur de Studio et via les API JumpStart. Nous suivons les étapes suivantes :

  1. Accédez à JumpStart via l'interface utilisateur de Studio pour déployer et exécuter l'inférence sur le modèle pré-entraîné.
  2. Utilisez JumpStart par programmation avec le SDK Python SageMaker pour déployer le modèle pré-formé et exécuter l'inférence.

Accédez à JumpStart via l'interface utilisateur de Studio et exécutez l'inférence avec un modèle pré-entraîné

Dans cette section, nous montrons comment entraîner et déployer des modèles JumpStart via l'interface utilisateur de Studio.

La vidéo suivante vous montre comment trouver un modèle de génération de texte pré-entraîné sur JumpStart et le déployer. La page du modèle contient des informations précieuses sur le modèle et son utilisation. Vous pouvez déployer n'importe lequel des modèles préformés disponibles dans JumpStart. Pour l'inférence, nous choisissons le type d'instance ml.p3.2xlarge, car il fournit l'accélération GPU nécessaire pour une faible latence d'inférence à un prix bas. Après avoir configuré l'instance d'hébergement SageMaker, choisissez Déployer. Cela peut prendre 20 à 25 minutes pour que votre point de terminaison persistant soit opérationnel.

Une fois votre endpoint opérationnel, il est prêt à répondre aux requêtes d'inférence !

Pour accélérer votre temps d'inférence, JumpStart fournit un exemple de bloc-notes qui vous montre comment exécuter l'inférence sur votre point de terminaison fraîchement déployé. Choisir Cahier ouvert sous Utiliser Endpoint depuis Studio.

Utiliser JumpStart par programmation avec le SDK SageMaker

Dans la section précédente, nous avons montré comment vous pouvez utiliser l'interface utilisateur JumpStart pour déployer un modèle pré-formé de manière interactive, en quelques clics. Cependant, vous pouvez également utiliser les modèles de JumpStart par programmation à l'aide d'API intégrées au SDK SageMaker.

Dans cette section, nous passons en revue un exemple rapide de la façon dont vous pouvez répliquer le processus précédent avec le SDK SageMaker. Nous choisissons un modèle pré-formé approprié dans JumpStart, déployons ce modèle sur un point de terminaison SageMaker et exécutons l'inférence sur le point de terminaison déployé. Toutes les étapes de cette démo sont disponibles dans le cahier d'accompagnement Introduction à JumpStart - Génération de texte.

Déployer le modèle pré-entraîné

SageMaker est une plate-forme qui utilise largement les conteneurs Docker pour les tâches de construction et d'exécution. JumpStart utilise le framework spécifique disponible Conteneurs d'apprentissage en profondeur SageMaker (DLC). Nous récupérons d'abord tous les packages supplémentaires, ainsi que les scripts pour gérer la formation et l'inférence pour la tâche sélectionnée. Enfin, les artefacts de modèle pré-formés sont récupérés séparément avec model_uris, qui offre de la flexibilité à la plate-forme. Vous pouvez utiliser n'importe quel nombre de modèles pré-formés sur la même tâche avec un seul script d'inférence. Voir le code suivant :

model_id, model_version = "huggingface-textgeneration-bloom-560m", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Bloom est un très grand modèle et peut prendre jusqu'à 20 à 25 minutes pour se déployer. Vous pouvez également utiliser un modèle plus petit tel que GPT-2. Pour déployer un modèle GPT-2 pré-entraîné, vous pouvez définir model_id = huggingface-textgeneration-gpt2. Pour une liste des autres modèles disponibles dans JumpStart, reportez-vous à Tableau des modèles JumpStart disponibles.

Ensuite, nous introduisons les ressources dans un Modèle SageMaker instance et déployer un point de terminaison :

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

Une fois notre modèle déployé, nous pouvons en tirer des prédictions en temps réel !

Exécuter l'inférence

L'extrait de code suivant vous donne un aperçu de ce à quoi ressemblent les sorties. Pour envoyer des requêtes à un modèle déployé, le texte d'entrée doit être fourni dans un utf-8 format encodé.

def query(model_predictor, text):
    """Query the model predictor."""

    encoded_text = json.dumps(text).encode("utf-8")

    query_response = model_predictor.predict(
        encoded_text,
        {
            "ContentType": "application/x-text",
            "Accept": "application/json",
        },
    )
    return query_response

La réponse du point de terminaison est un objet JSON contenant le texte d'entrée suivi du texte généré :

def parse_response(query_response):
    """Parse response and return the generated text."""

    model_predictions = json.loads(query_response)
    generated_text = model_predictions["generated_text"]
    return generated_text
    
text = "Some people like dogs, some people like cats"
query_response = query(model_predictor, text)
parse_response(query_response)

Notre sortie est la suivante :

"Some people like dogs, some people like cats some people like birds, some people like fish,"

Conclusion

Dans cet article, nous avons montré comment déployer un modèle de génération de texte pré-entraîné à l'aide de JumpStart. Vous pouvez accomplir cela sans avoir à écrire de code. Essayez la solution par vous-même et envoyez-nous vos commentaires. Pour en savoir plus sur JumpStart et sur la façon dont vous pouvez utiliser des modèles pré-formés open source pour une variété d'autres tâches de ML, consultez ce qui suit Vidéo AWS re:Invent 2020.


À propos des auteurs

Exécutez la génération de texte avec les modèles GPT et Bloom sur Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Dr Vivek Madan est un scientifique appliqué au sein de l'équipe Amazon SageMaker JumpStart. Il a obtenu son doctorat à l'Université de l'Illinois à Urbana-Champaign et a été chercheur postdoctoral à Georgia Tech. Il est un chercheur actif en apprentissage automatique et en conception d'algorithmes et a publié des articles dans les conférences EMNLP, ICLR, COLT, FOCS et SODA.

Exécutez la génération de texte avec les modèles GPT et Bloom sur Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Santosh Kulkarni est un architecte de solutions d'entreprise chez Amazon Web Services qui travaille avec des clients sportifs en Australie. Il est passionné par la création d'applications distribuées à grande échelle pour résoudre des problèmes commerciaux en utilisant ses connaissances en IA/ML, en mégadonnées et en développement de logiciels.

Exécutez la génération de texte avec les modèles GPT et Bloom sur Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Dr Ashish Khetan est un scientifique appliqué senior avec les algorithmes intégrés d'Amazon SageMaker et aide à développer des algorithmes d'apprentissage automatique. Il a obtenu son doctorat à l'Université de l'Illinois Urbana Champaign. Il est un chercheur actif en apprentissage automatique et en inférence statistique et a publié de nombreux articles dans les conférences NeurIPS, ICML, ICLR, JMLR, ACL et EMNLP.

Horodatage:

Plus de Apprentissage automatique AWS