Partager via


Déployer des modèles depuis le hub HuggingFace vers des 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.

Note

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 avoir plusieurs déploiements et répartir le trafic ou le dupliquer 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 en fonction 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. Vous accédez ensuite à la page de 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.

Modèles protégés

Les modèles à accès restreint sont des modèles pour lesquels vous devez obtenir l'approbation par l'auteur du modèle avant de les utiliser. Pour utiliser :

  1. Effectuer une lecture ou un traitement granulaire d'un jeton sur Hugging Face
  2. Demander l’accès par le biais de la page du modèle sur Hugging Face
  3. Créez une connexion de clé personnalisée nommée HuggingFaceTokenConnection avec la clé HF_TOKEN et la valeur étant votre jeton Hugging Face défini comme secret.
  4. Créer un point de terminaison avec enforce_access_to_default_secret_stores défini sur enabled
  5. Déployer le modèle à l’aide du point de terminaison nouvellement créé

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. Vous trouverez des options pour ajouter d’autres déploiements, gérer le trafic et mettre à l’échelle le hub Endpoints. 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 pouvez trouver le format d’entrée, les paramètres et des exemples d’entrées sur la documentation de l’API d’inférence de Hugging Face hub.

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,
)

ml_client = MLClient(
    credential=DefaultAzureCredential(),
    subscription_id="<your-subscription-id>",
    resource_group_name="<your-resource-group>",
    workspace_name="<your-workspace-name>"
)


registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_version = "25"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}"

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. L’exemple de code de cette section permet une entrée pour le type fill-mask, car nous avons déployé le modèle bert-base-uncased. Vous pouvez trouver le format d’entrée, les paramètres et des exemples d’entrées sur la documentation de l’API d’inférence de Hugging Face hub.

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 model complet 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"
model_version="25"
az ml online-endpoint create --name $endpoint_name 

# create deployment file. 
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/versions/$model_version
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 pouvez trouver le format d’entrée, les paramètres et des exemples d’entrées sur la documentation de l’API d’inférence de Hugging Face hub.

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 ces modèles sans suivre correctement les étapes ci-dessus é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. Ces modèles ne sont pas pris en charge en raison de considérations 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 Azure Machine Learning fonctionne en tant que catalogue pour vous aider à découvrir et déployer des modèles Hub HuggingFace dans Azure Machine Learning.

Quels sont les modèles pris en charge ?

Les modèles Hugging Face qui répondent aux critères suivants sont pris en charge sur Azure :

  • Doit avoir les balises Transformers, Diffusers ou Sentence-Transformers sur le hub Hugging Face
  • Avoir une tâche prise en charge comme chat-completion, image-to-task ou embeddings
  • Les pondérations de modèle sont au format Safetensors et le modèle ne nécessite pas de trust_remote_code

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 optimiser ces modèles en utilisant le Kit de développement logiciel (SDK) des transformateurs ? Étant donné que les pondérations de modèle ne sont pas stockées dans le HuggingFace Registre, vous ne pouvez pas accéder aux pondérations de modèle en utilisant ces modèles comme entrées pour les travaux.

Comment 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é et 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 tel que l’impossibilité de créer un point de terminaison en ligne ou l’authentification auprès de l’API REST de point de terminaison ne fonctionne pas. Pour les problèmes spécifiques aux transformateurs, créez un problème sur GitHub, utilisez le forum HuggingFace ou utilisez 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 dans Azure Machine Learning ? Envoyez vos questions dans le forum de discussion Azure Machine Learning ou ouvrez un Ticket GitHub.

Disponibilité régionale

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