Bereitstellen von Modellen aus dem Hugging Face Hub für Azure Machine Learning-Onlineendpunkte zur Echtzeitinferenz

Microsoft mit Hugging Face zusammen, um Open-Source-Modelle von Hugging Face Hub zu Azure Machine Learning zu bringen. Hugging Face ist der Autor von Transformers, einer weit verbreiteten Bibliothek zum Erstellen großer Sprachmodelle. Der Modell-Hub von Hugging Face hat Tausende von Open-Source-Modellen. Durch die Integration in Azure Machine Learning können Sie Open-Source-Modelle Ihrer Wahl bereitstellen, um eine skalierbare Ableitungsinfrastruktur für Azure zu sichern und zu skalieren. Sie können Tausende von Transformer-Modellen im Azure Machine Learning-Modellkatalog durchsuchen und Modelle mithilfe des geführten Assistenten problemlos auf verwalteten Onlineendpunkten bereitstellen. Wenn Sie den verwalteten Onlineendpunkt bereitstellen, erhalten Sie eine sichere REST-API, um Ihr Modell in Echtzeit zu ermitteln.

Note

Modelle von Hugging Face unterliegen den Lizenzbedingungen von Drittanbietern, die auf der Detailseite des Hugging Face-Modells verfügbar sind. Es liegt in Ihrer Verantwortung, die Lizenzbedingungen des Modells einzuhalten.

Vorteile der Verwendung von Onlineendpunkten für Echtzeitrückschlüsse

Verwaltete Onlineendpunkte in Azure Machine Learning unterstützen Sie bei der Bereitstellung von schlüsselfertigen Modellen auf Computern mit leistungsstarken CPUs und GPUs in Azure. Verwaltete Onlineendpunkte kümmern sich um die Bereitstellung, Skalierung, Sicherung und Überwachung Ihrer Modelle, sodass Sie die zugrunde liegende Infrastruktur nicht einrichten und verwalten müssen. Die virtuellen Computer werden für Sie bereitgestellt, wenn Sie Modelle bereitstellen. Sie können über mehrere Bereitstellungen verfügen und den Datenverkehr auf diese Bereitstellungen aufteilen oder den Datenverkehr spiegeln . Gespiegelter Datenverkehr hilft Ihnen, neue Modellversionen mit Produktionsdatenverkehr zu testen, ohne sie in Produktionsumgebungen bereitzustellen. Durch die Aufteilung des Datenverkehrs können Sie den Anteil des Produktionsdatenverkehrs, der an neue Modellversionen weitergeleitet wird, schrittweise erhöhen, während Sie die Leistung überwachen. Mit der automatischen Skalierung können Sie Ressourcen basierend auf Workloads dynamisch hoch- oder herunterfahren. Sie können die Skalierung basierend auf Auslastungsmetriken, einem bestimmten Zeitplan oder einer Kombination aus beiden konfigurieren. Ein Beispiel für die Skalierung basierend auf Auslastungsmetriken ist das Hinzufügen von Knoten, wenn die CPU-Auslastung 70 % übersteigt. Ein Beispiel für die zeitplanbasierte Skalierung ist das Hinzufügen von Knoten basierend auf Stoßzeiten.

Bereitstellen von Hugging Face Hub-Modellen mithilfe von Studio

Öffnen Sie den Modellkatalog in Azure Machine Learning Studio, um ein bereitzustellendes Modell zu finden. Wählen Sie "Alle Filter" und dann " HuggingFace " im Abschnitt " Nach Auflistungen filtern " aus. Wählen Sie die Kachel „Modell“ aus, um die Modellseite zu öffnen.

Bereitstellen des Modells

Wählen Sie die Option „Echtzeitbereitstellung“ aus, um das Dialogfeld für die schnelle Bereitstellung zu öffnen. Verwenden Sie die folgenden Optionen:

  • Wählen Sie die Vorlage für GPU oder CPU aus. CPU-Instanztypen eignen sich gut zum Testen, und GPU-Instanztypen bieten eine bessere Leistung in der Produktion. Große Modelle passen nicht in einen CPU-Instanztyp.
  • Wählen Sie den Instanzen-Typ aus. Diese Liste der Instanzen wird so gefiltert, dass nur die Instanzen angezeigt werden, auf denen das Modell bereitgestellt werden kann, ohne dass der Arbeitsspeicher ausgeht.
  • Wählen Sie die Anzahl der Instanzen aus. Eine Instanz reicht für Tests aus, erwägen Sie jedoch zwei oder mehr Instanzen für die Produktion.
  • Geben Sie optional einen Endpunkt und einen Bereitstellungsnamen an.
  • Klicken Sie auf Bereitstellen. Sie werden dann zur Endpunktseite navigiert, was einige Sekunden dauern kann. Die Bereitstellung dauert einige Minuten, je nach Modellgröße und Instanzen-Typ.

Hinweis: Wenn Sie die Bereitstellung auf einem vorhandenen Endpunkt durchführen möchten, wählen Sie im Dialogfeld „Schnellbereitstellung“ More options aus, und verwenden Sie den vollständigen Bereitstellungs-Assistenten.

Geschlossene Modelle

Gated-Modelle sind Modelle, die vor der Verwendung vom Autor des Modells eine Genehmigung erfordern. So verwenden Sie diese Modelle:

  1. Ein read- oder fine-grained-Token für Hugging Face.
  2. Fordern Sie den Zugriff über die Seite des Modells auf Hugging Face an.
  3. Erstellen Sie eine benutzerdefinierte Schlüsselverbindung mit dem Namen HuggingFaceTokenConnection und dem Schlüssel HF_TOKEN, wobei der Wert Ihr Hugging Face Token ist, das als geheim gekennzeichnet ist.
  4. Erstellen Sie einen Endpunkt mit enforce_access_to_default_secret_stores Festgelegt auf enabled.
  5. Stellen Sie das Modell mithilfe des neu erstellten Endpunkts bereit.

Testen des bereitgestellten Modells

Nach Abschluss der Bereitstellung finden Sie den REST-Endpunkt für das Modell auf der Seite "Endpunkte ". Verwenden Sie diesen Endpunkt, um das Modell zu bewerten. Sie finden Optionen, um weitere Bereitstellungen hinzuzufügen, Datenverkehr zu verwalten und den Endpunkthub zu skalieren. Verwenden Sie die Registerkarte " Test " auf der Endpunktseite, um das Modell mit Beispieleingaben zu testen. Beispieleingaben sind auf der Seite „Modell“ verfügbar. Sie finden Eingabeformat, Parameter und Beispieleingaben in der Dokumentation zur Hugging Face Hub-Ableitungs-API.

Bereitstellen von HuggingFace-Hubmodellen mithilfe von Python SDK

Setup the Python SDK.

Suchen Sie das bereitzustellende Modell.

Durchsuchen Sie den Modellkatalog in Azure Machine Learning Studio, und suchen Sie das Modell, das Sie bereitstellen möchten. Wählen Sie das Modell aus, das Sie bereitstellen möchten. Importieren Sie die erforderlichen Bibliotheken. Die im Katalog angezeigten Modelle werden aus der HuggingFace-Registrierung heraus aufgeführt. Erstellen Sie die model_id mithilfe des Modellnamens, den Sie aus dem Modellkatalog und der HuggingFace-Registrierung kopiert haben. In diesem Beispiel stellen Sie das Modell bert-base-uncased mit der neuesten Version bereit.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
)
from azure.identity import DefaultAzureCredential

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_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"

Bereitstellen des Modells

Erstellen Sie einen Onlineendpunkt. Erstellen Sie als Nächstes die Bereitstellung. Legen Sie schließlich den gesamten Datenverkehr so fest, dass diese Bereitstellung verwendet wird. Sie können den optimalen CPU- oder GPU-instance_type für ein Modell finden, indem Sie das Dialogfeld „Schnellbereitstellung“ auf der Seite „Modell“ im Modellkatalog öffnen. Stellen Sie sicher, dass Sie einen instance_type verwenden, für den Sie über ein Kontingent verfügen.

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

Testen des bereitgestellten Modells

Erstellen Sie eine Datei mit Eingaben, die Sie zur Bewertung an den Onlineendpunkt übermitteln können. Das Codebeispiel in diesem Abschnitt ermöglicht eine Eingabe für den fill-mask Typ, seit Sie das bert-base-uncased Modell bereitgestellt haben. Sie finden Eingabeformat, Parameter und Beispieleingaben in der Dokumentation zur Hugging Face Hub-Ableitungs-API.

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

Bereitstellen von Modellen aus dem Hugging Face-Hub mithilfe der CLI

Richten Sie die CLI ein.

Suchen Sie das bereitzustellende Modell.

Durchsuchen Sie den Modellkatalog in Azure Machine Learning Studio, und suchen Sie das Modell, das Sie bereitstellen möchten. Wählen Sie das Modell aus, das Sie bereitstellen möchten. Die im Katalog angezeigten Modelle werden aus der HuggingFace-Registrierung heraus aufgeführt. In diesem Beispiel stellen Sie das Modell bert-base-uncased mit der neuesten Version bereit.

Bereitstellen des Modells

Sie benötigen die Werte model und instance_type, um das Modell bereitzustellen. Sie können den optimalen CPU- oder GPU-instance_type für ein Modell finden, indem Sie das Dialogfeld „Schnellbereitstellung“ auf der Seite „Modell“ im Modellkatalog öffnen. Stellen Sie sicher, dass Sie einen instance_type verwenden, für den Sie über ein Kontingent verfügen.

Die im Katalog angezeigten Modelle werden aus der HuggingFace-Registrierung heraus aufgeführt. In diesem Beispiel stellen Sie das Modell bert-base-uncased mit der neuesten Version bereit. Die vollqualifizierte model Objekt-ID basierend auf dem Modellnamen und der Registrierung lautet azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest. Sie erstellen die deploy.yml-Datei, die für den az ml online-deployment create-Befehl verwendet wird, direkt in der Datei.

Erstellen Sie einen Onlineendpunkt. Erstellen Sie als Nächstes die Bereitstellung.

# 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

Testen des bereitgestellten Modells

Erstellen Sie eine Datei mit Eingaben, die Sie zur Bewertung an den Onlineendpunkt übermitteln können. Hugging Face stellt ein Codebeispiel als Eingabe für den Typ fill-mask für das bereitgestellte Modell bert-base-uncased bereit. Sie finden das Eingabeformat, parameter und Beispieleingaben in der Dokumentation zur Hugging Face Hub-Ableitungs-API.

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

Beispielcode für Hugging Face-Modell

Unter dem Link finden Sie den Beispielcode für das Hugging Face-Modell für verschiedene Szenarien, einschließlich Tokenklassifizierung, Übersetzung, Fragen und Antworten und Zero-Shot-Klassifizierung.

Problembehandlung: Bereitstellungsfehler und nicht unterstützte Modelle

Der HuggingFace-Hub verfügt über Tausende von Modellen, bei denen jeden Tag Hunderte aktualisiert werden. Nur die beliebtesten Modelle in der Sammlung werden getestet, und andere können mit einem der folgenden Fehler fehlschlagen.

Geschlossene Modelle

Gated-Modelle erfordern, dass Benutzer ihren Kontaktinformationen zustimmen und die Bedingungen der Modellbesitzer akzeptieren, um auf das Modell zuzugreifen. Wenn Sie versuchen, solche Modelle bereitzustellen, ohne die vorstehenden Schritte ordnungsgemäß auszuführen, tritt ein KeyErrorFehler auf.

Modelle, die Remotecode ausführen müssen

Modelle verwenden in der Regel Code aus dem Transformers-SDK, aber einige Modelle führen Code aus dem Modellrepository aus. Bei diesen Modellen müssen Sie den Parameter trust_remote_code auf True festlegen. Folgen Sie diesem Link, um mehr über die Verwendung von Remotecode zu erfahren. Aus Sicherheitsgründen werden solche Modelle nicht unterstützt. Der Versuch, solche Modelle bereitzustellen, schlägt mit dem folgenden Fehler fehl: ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you read the code to avoid malicious use, then set the option trust_remote_code=True to remove this error.

Modelle mit falschen Tokenizern

Falsch angegebene oder fehlende Tokenizer im Modellpaket können zu einem Fehler OSError: Can't load tokenizer for <model> führen.

Fehlende Bibliotheken

Einige Modelle benötigen zusätzliche Python Bibliotheken. Wenn Sie Modelle lokal ausführen, können Sie fehlende Bibliotheken installieren. Modelle, die spezielle Bibliotheken benötigen, die über die Standardbibliotheken von Transformers hinausgehen, schlagen mit dem Fehler ModuleNotFoundError oder ImportError fehl.

Der Arbeitsspeicher reicht nicht aus

Wenn der Fehler OutOfQuota: Container terminated due to insufficient memory angezeigt wird, versuchen Sie, ein instance_type mit mehr Arbeitsspeicher zu verwenden.

Häufig gestellte Fragen

Wo werden die Modellgewichtungen gespeichert?

Hugging Face-Modelle erscheinen im Modellkatalog von Azure Machine Learning über das HuggingFace-Register. Hugging Face erstellt und verwaltet diese Registrierung und stellt sie Azure Machine Learning als Community-Registrierung zur Verfügung. Die Modellgewichtungen werden nicht in Azure gehostet. Wenn Sie diese Modelle bereitstellen, laden die Onlineendpunkte in Ihrem Arbeitsbereich die Gewichtungen direkt vom Hugging Face Hub herunter. Die HuggingFace Registrierung in Azure Machine Learning funktioniert als Katalog, um Hugging Face Hub-Modelle in Azure Machine Learning zu entdecken und bereitzustellen.

Welche Modelle werden unterstützt?

Azure unterstützt Hugging Face-Modelle, die die folgenden Kriterien erfüllen:

  • Das Modell hat im Hugging Face Hub entweder die Tags Transformers, Diffusers oder Sentence-Transformers.
  • Das Modell verfügt über eine unterstützte Aufgabe wie chat-completion, , image-to-textoder embeddings.
  • Die Modellgewichte liegen im Safetensors-Format vor, und das Modell benötigt trust_remote_code nicht.

Wie kann ich die Modelle für die Batch-Ableitung bereitstellen? Derzeit können Sie diese Modelle nicht für Batch-Endpunkte zur Batchinferenz bereitstellen.

Kann ich Modelle aus der HuggingFace Registrierung als Eingabe für Aufträge verwenden, damit ich diese Modelle mithilfe des Transformators SDK optimieren kann? Da die Gewichtungen des Modells nicht in der HuggingFace Registrierung gespeichert sind, können Sie nicht auf Modellgewichtungen zugreifen, indem Sie diese Modelle als Eingaben für Aufträge verwenden.

Wie erhalte ich Support, wenn meine Bereitstellungen fehlschlagen oder die Inferenz nicht wie erwartet funktioniert?HuggingFace ist ein Community-Registry und wird nicht vom Microsoft-Support abgedeckt. Überprüfen Sie die Bereitstellungsprotokolle, um herauszufinden, ob das Problem mit Azure Machine Learning Plattform oder speziell für Hugging Face-Transformatoren verbunden ist. Wenden Sie sich an den Microsoft-Support bei Plattformproblemen, wie zum Beispiel Schwierigkeiten beim Erstellen eines Onlineendpunkts oder bei der Authentifizierung an der REST-API des Endpunkts. Erstellen Sie für Transformatoren spezifische Probleme ein Problem auf GitHub, verwenden Sie das HuggingFace-Forum, oder verwenden Sie die HuggingFace-Unterstützung.

Was ist eine Community-Registrierung? Vertrauenswürdige Azure Machine Learning-Partner erstellen Community-Registrierungen als Azure Machine Learning-Registrierungen. Alle Azure Machine Learning Benutzer können darauf zugreifen.

Wohin können Benutzende Fragen und Bedenken bezüglich Hugging Face in Azure Machine Learning senden? Übermitteln Sie Ihre Fragen im Azure Machine Learning-Diskussionsforum, oder öffnen Sie ein GitHub-Issue.

Regionale Verfügbarkeit

Die Hugging Face Collection ist derzeit nur in allen Regionen der öffentlichen Cloud verfügbar.