Partager via


Déployer des modèles depuis le hub HuggingFace vers les points de terminaison Azure Machine Learning en ligne pour l’inférence en temps réel

Microsoft s’est associé à Hugging Face pour apporter des modèles open source du hub Hugging Face à Azure Machine Learning. Hugging Face est le créateur de Transformers, une bibliothèque très populaire permettant de créer de grands modèles de langage. Le hub de modèle Hugging face présentant des milliers de modèles open source. L’intégration à Azure Machine Learning vous permet de déployer des modèles open source de votre choix pour une infrastructure d’inférence sécurisée et évolutive sur Azure. Vous pouvez rechercher parmi des milliers de modèles de transformateurs figurant dans le catalogue de modèles Azure Machine Learning et déployer des modèles vers des points de terminaison en ligne gérés en toute simplicité grâce à l'assistant guidé. Une fois déployé, le point de terminaison en ligne managé vous offre une API REST sécurisée pour noter votre modèle en temps réel.

Remarque

Les modèles de Hugging Face sont soumis aux termes du contrat de licence tiers disponibles sur sa page de détails. Il vous incombe de respecter les termes du contrat de licence du modèle.

Avantages de l’utilisation de points de terminaison en ligne pour l’inférence en temps réel

Les points de terminaison en ligne managés dans Azure Machine Learning vous aident à déployer des modèles sur de performantes machines CPU et GPU dans Azure de manière clé en main. Les points de terminaison en ligne gérés prennent en charge la fourniture, la mise à l’échelle et le monitoring de vos modèles, ce qui vous évite la surcharge liée à la configuration et à la gestion de l’infrastructure sous-jacente. Les machines virtuelles sont approvisionnées en votre nom lorsque vous déployez des modèles. Vous pouvez prévoir plusieurs déploiements derrière et fractionner ou refléter le trafic vers ces déploiements. Refléter le trafic vous permet de tester de nouvelles versions de modèles sur le trafic de production sans les libérer des environnements de production. Le fractionnement du trafic vous permet d’augmenter progressivement le trafic de production vers de nouvelles versions de modèle tout en observant les performances. La mise à l’échelle automatique vous permet d’augmenter ou de descendre dynamiquement les ressources en fonction des charges de travail. Vous pouvez configurer la mise à l’échelle selon des métriques d’utilisation, d’une planification spécifique ou d’une combinaison des deux. Un exemple de mise à l’échelle basée sur les métriques d’utilisation consiste à ajouter des nœuds si l’utilisation du processeur dépasse 70 %. Un exemple de mise à l’échelle basée sur la planification consiste à ajouter des nœuds en fonction des heures de pointe.

Déployer des modèles de l’hub HuggingFace à l’aide de Studio

Pour trouver un modèle à déployer, ouvrez le catalogue de modèles dans Azure Machine Learning studio. Sélectionnez « Tous les filtres », puis sélectionnez « HuggingFace » dans la section Filtrer par collections. Sélectionnez la vignette du modèle pour ouvrir la page du modèle.

Déployer le modèle

Choisissez l’option de déploiement en temps réel pour ouvrir la boîte de dialogue déploiement rapide. Spécifiez les options suivantes :

  • Sélectionnez le modèle pour GPU ou CPU. Les types d’instance CPU sont adaptés aux tests et les types d’instance GPU offrent de meilleures performances en production. Les modèles volumineux ne s’intègrent pas dans un type d’instance CPU.
  • Sélectionnez le type d’instance. Cette liste d'instances est filtrée de manière à retenir uniquement celles que le modèle est censé déployer sans manquer de mémoire.
  • Sélectionnez le nombre d’instances. Une instance suffit pour le test, mais nous vous recommandons d’envisager deux instances ou plus pour la production.
  • Spécifiez éventuellement un point de terminaison avec un nom de déploiement.
  • Sélectionnez Déployer. Accédez ensuite à la page du point de terminaison, ce qui peut prendre quelques secondes. Le déploiement prend plusieurs minutes en fonction de la taille du modèle et du type d’instance.

Remarque : si vous souhaitez déployer sur un point de terminaison existant, sélectionnez More options depuis la boîte de dialogue Déploiement rapide et utilisez l’Assistant Déploiement complet.

Tester le modèle déployé

Une fois le déploiement terminé, vous trouverez le point de terminaison REST du modèle dans la page des points de terminaison, à utiliser pour noter le modèle. Des options permettent d’ajouter d’autres déploiements, gérer le trafic et mettre à l’échelle le hub Points de terminaison. L’onglet Test de la page du point de terminaison permet également de tester le modèle avec des échantillons d’entrée. Des échantillons d’entrée sont disponibles sur la page du modèle. Vous trouverez le format d’entrée, les paramètres et les échantillons d’entrée dans la documentation de l’API d’inférence du hub Hugging Face.

Déployez des modèles Hub HuggingFace à l’aide de Python SDK

Paramétrer le SDK Python.

Recherchez le modèle à déployer

Parcourez le catalogue de modèles dans Azure Machine Learning studio et recherchez le modèle à déployer. Copiez le nom du modèle que vous souhaitez déployer. Importez les bibliothèques nécessaires. Les modèles affichés dans le catalogue sont répertoriés dans le Registre HuggingFace. Créez le model_id à l’aide du nom du modèle copié à partir du catalogue de modèles et du HuggingFace Registre. Vous déployez le modèle bert_base_uncased avec la dernière version figurant dans cet exemple.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    Model,
    Environment,
    CodeConfiguration,
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"

Déployer le modèle

Créez un point de terminaison en ligne. Créez ensuite le déploiement. Enfin, définissez tout le trafic pour utiliser ce déploiement. Pour trouver le CPU ou le GPU instance_type optimal d’un modèle, ouvrez la boîte de dialogue de déploiement rapide à partir de la page du modèle dans le catalogue de modèles. Veillez à utiliser un instance_type pour lequel vous disposez d’un quota.

import time
endpoint_name="hf-ep-" + str(int(time.time())) # endpoint name must be unique per Azure region, hence appending timestamp 
ml_client.begin_create_or_update(ManagedOnlineEndpoint(name=endpoint_name) ).wait()
ml_client.online_deployments.begin_create_or_update(ManagedOnlineDeployment(
    name="demo",
    endpoint_name=endpoint_name,
    model=model_id,
    instance_type="Standard_DS2_v2",
    instance_count=1,
)).wait()
endpoint = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()

Tester le modèle déployé

Créez un fichier avec des entrées à envoyer au point de terminaison en ligne pour le scoring. Ci-dessous, un échantillon d’entrée de code pour le type fill-mask puisque nous avons déployé le modèle bert-base-uncased. Vous trouverez le format d’entrée, les paramètres et les échantillons d’entrée dans la documentation de l’API d’inférence du hub Hugging Face.

import json
scoring_file = "./sample_score.json"
with open(scoring_file, "w") as outfile:
    outfile.write('{"inputs": ["Paris is the [MASK] of France.", "The goal of life is [MASK]."]}')   
response = workspace_ml_client.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name="demo",
    request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))

Déployez des modèles Hub HuggingFace à l’aide de CLI

Paramétrer le CLI.

Recherchez le modèle à déployer

Parcourez le catalogue de modèles dans Azure Machine Learning studio et recherchez le modèle à déployer. Copiez le nom du modèle que vous souhaitez déployer. Les modèles affichés dans le catalogue sont répertoriés dans le Registre HuggingFace. Vous déployez le modèle bert_base_uncased avec la dernière version figurant dans cet exemple.

Déployer le modèle

Vous avez besoin de model et instance_type pour déployer le modèle. Pour trouver le CPU ou le GPU instance_type optimal d’un modèle, ouvrez la boîte de dialogue de déploiement rapide à partir de la page du modèle dans le catalogue de modèles. Veillez à utiliser un instance_type pour lequel vous disposez d’un quota.

Les modèles affichés dans le catalogue sont répertoriés dans le Registre HuggingFace. Vous déployez le modèle bert_base_uncased avec la dernière version figurant dans cet exemple. L’ID de ressource complet model basé sur le nom du modèle et le Registre est azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest. Nous créons le fichier utilisé deploy.yml pour la commande inclus az ml online-deployment create.

Créez un point de terminaison en ligne. Créez ensuite le déploiement.

# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
az ml online-endpoint create --name $endpoint_name 

# create deployment file. 
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/labels/latest
endpoint_name: $endpoint_name
instance_type: Standard_DS3_v2
instance_count: 1
EOF
az ml online-deployment create --file ./deploy.yml --workspace-name $workspace_name --resource-group $resource_group_name

Tester le modèle déployé

Créez un fichier avec des entrées à envoyer au point de terminaison en ligne pour le scoring. Hugging Face est un échantillon d’entrée de code pour le type fill-mask de notre modèle déployé, le modèle bert-base-uncased. Vous trouverez le format d’entrée, les paramètres et les échantillons d’entrée dans la documentation de l’API d’inférence du hub Hugging Face.

scoring_file="./sample_score.json"
cat <<EOF > $scoring_file
{
  "inputs": [
    "Paris is the [MASK] of France.",
    "The goal of life is [MASK]."
  ]
}
EOF
az ml online-endpoint invoke --name $endpoint_name --request-file $scoring_file

Exemple de code de modèle Hugging Face

Suivez ce lien pour trouver un exemple de code de modèle Hugging Face pour différents scénarios, notamment la classification des jetons, la traduction, la réponse aux questions et la classification Zero-Shot.

Résolution des problèmes : erreurs de déploiement et modèles non pris en charge

Le hub HuggingFace présente des milliers de modèles dont des centaines sont mis à jour chaque jour. Seuls les modèles les plus populaires de la collection sont testés et d’autres peuvent échouer avec l’une des erreurs ci-dessous.

Modèles protégés

Les modèles protégés nécessitent l’accord des utilisateurs à partager leurs coordonnées et leur acceptation des conditions générales des propriétaires du modèle afin d’accéder à ce dernier. La tentative de déploiement de tels modèles échoue avec un KeyError.

Modèles nécessitant l’exécution du code à distance

Les modèles utilisent généralement du code provenant du SDK des transformateurs, mais certains modèles utilisent du code provenant de la base de données des modèles. Ces modèles doivent fixer le paramètre trust_remote_code à True. Suivez ce lien pour en savoir plus sur l’utilisation du code distant. De tels modèles ne sont pas soutenus par des mesures de sécurité. La tentative de déploiement de ces modèles échoue avec l’erreur suivante : ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you have read the code there to avoid malicious use, then set the option trust_remote_code=True to remove this error.

Modèles avec des générateurs de jetons incorrects

Le générateur de jetons incorrect ou manquant dans le package de modèle peut entraîner une erreur OSError: Can't load tokenizer for <model>.

Des bibliothèques manquantes

Certains modèles nécessitent des bibliothèques Python supplémentaires. Vous pouvez installer des bibliothèques manquantes lors de l’exécution de modèles localement. Les modèles nécessitant des bibliothèques spéciales au-delà des bibliothèques de transformateurs standard échouent avec une erreur ModuleNotFoundError ou ImportError.

Mémoire insuffisante

Si vous voyez que le OutOfQuota: Container terminated due to insufficient memory essaie d’utiliser un instance_type avec plus de mémoire.

Forum aux questions

Où les pondérations du modèle sont-elles stockées ?

Les modèles Hugging Face sont présentés dans le catalogue de modèles Azure Machine Learning via le registre HuggingFace. Hugging Face crée et gère ce registre ; il est mis à la disposition d’Azure Machine Learning en tant que registre de communauté. Les pondérations du modèle ne sont pas hébergées sur Azure. Les pondérations sont téléchargées directement à partir du hub Hugging Face vers les points de terminaison en ligne de votre espace de travail lors du déploiement de ces modèles. HuggingFace Le registre dans AzureML fonctionne comme un catalogue vous permettant de découvrir et déployer des modèles hub HuggingFace dans Azure Machine Learning.

Comment déployer les modèles pour l’inférence par lots ? Le déploiement de ces modèles sur des points de terminaison de lot pour l’inférence par lots n’est actuellement pas pris en charge.

Puis-je utiliser des modèles du registre HuggingFace comme entrée dans des tâches afin de pouvoir affiner ces modèles à l’aide du Kit de développement logiciel (SDK) des transformateurs ? Puisque les pondérations de modèle ne sont pas stockées dans le Registre HuggingFace, vous ne pouvez pas accéder aux pondérations de modèle à l’aide de ces modèles comme entrées pour les tâches.

Comment faire pour obtenir de l’aide si mes déploiements échouent ou si l’inférence ne fonctionne pas comme prévu ?HuggingFace est un registre de la communauté qui n’est pas couvert par le support Microsoft. Passez en revue les journaux de déploiement et déterminez si le problème est lié à la plateforme Azure Machine Learning ou spécifique aux transformateurs HuggingFace. Contactez le support Microsoft pour tout problème de plateforme. Par exemple, il n'est pas possible de créer un point de terminaison en ligne ou l'authentification au point de terminaison REST API ne fonctionne pas. Pour les problèmes spécifiques aux transformateurs, utilisez le forum HuggingFace ou la prise en charge de HuggingFace.

Qu’est-ce qu’un registre de communauté ? Les registres de communauté correspondent à des registres Azure Machine Learning créés par des partenaires Azure Machine Learning approuvés et disponibles pour tous les utilisateurs d’Azure Machine Learning.

Où les utilisateurs peuvent-ils soumettre des questions et des préoccupations concernant Hugging Face au sein d’Azure Machine Learning ? Envoyez vos questions dans le forum de discussion Azure Machine Learning.

Disponibilité régionale

La Collection Hugging Face est actuellement disponible dans toutes les régions du cloud public uniquement.