Condividi tramite


Distribuire modelli dall'hub HuggingFace agli endpoint online di Azure Machine Learning per l'inferenza in tempo reale

Microsoft ha collaborato con Hugging Face per portare modelli open source dall'hub Hugging Face ad Azure Machine Learning. Hugging Face è il creatore di Transformers, una libreria ampiamente diffusa per la creazione di modelli linguistici di grandi dimensioni. Hub dei modelli di Hugging Face con migliaia di modelli open source. L'integrazione con Azure Machine Learning consente di distribuire modelli open source di propria scelta per proteggere e ridimensionare l'infrastruttura di inferenza in Azure. È possibile eseguire ricerche da migliaia di modelli di trasformatori nel catalogo modelli di Azure Machine Learning e distribuire facilmente i modelli nell'endpoint online gestito tramite la procedura guidata. Dopo la distribuzione, l'endpoint online gestito offre un'API REST sicura per assegnare un punteggio al modello in tempo reale.

Note

I modelli di Hugging Face sono soggetti a condizioni di licenza di terze parti disponibili nella pagina dei dettagli del rispettivo modello. È responsabilità dell'utente rispettare le condizioni di licenza del modello.

Vantaggi dell’utilizzo di endpoint online per l'inferenza in tempo reale

Gli endpoint online gestiti in Azure Machine Learning consentono di distribuire modelli in potenti macchine CPU e GPU in Azure con modalità chiavi in mano. Gli endpoint online gestiti si occupano di gestire, dimensionare, proteggere e monitorare i modelli, liberando l'utente dalle attività di configurazione e gestione dell'infrastruttura sottostante. Le macchine virtuali vengono sottoposte a provisioning per conto dell'utente quando si distribuiscono i modelli. È possibile avere più distribuzioni e dividere il traffico o riflettere il traffico verso tali distribuzioni. Il mirroring del traffico consente di testare le nuove versioni dei modelli nel traffico di produzione senza rilasciarli in ambienti di produzione. La suddivisione del traffico consente di aumentare gradualmente il traffico di produzione verso nuove versioni del modello durante l’osservazione delle prestazioni. Il ridimensionamento automatico consente di aumentare o ridurre dinamicamente le risorse in base ai carichi di lavoro. È possibile configurare il ridimensionamento in base alle metriche di utilizzo, a una pianificazione specifica o a una combinazione di entrambi. Un esempio di ridimensionamento basato sulle metriche di utilizzo consiste nell'aggiungere nodi se l'utilizzo della CPU supera il 70%. Un esempio di ridimensionamento basato sulla pianificazione consiste nell'aggiungere nodi in base al picco dell'orario di ufficio.

Distribuire modelli dell’hub HuggingFace con Studio

Per trovare un modello da distribuire, aprire il catalogo modelli nello studio di Azure Machine Learning. Selezionare "Tutti i filtri", quindi selezionare "HuggingFace" nella sezione Filtra per raccolte. Selezionare il riquadro del modello per aprire la pagina del modello.

Distribuire il modello

Scegliere l'opzione di distribuzione in tempo reale per aprire la finestra di dialogo di distribuzione rapida. Specificare le opzioni seguenti:

  • Selezionare il modello per GPU o CPU. I tipi di istanza della CPU sono adatti per i test mentre i tipi di istanza della GPU offrono prestazioni migliori nell'ambiente di produzione. I modelli di grandi dimensioni non rientrano in un tipo di istanza della CPU.
  • Selezionare il tipo di istanza. Questo elenco di istanze viene filtrato in base a quelle che il modello deve distribuire senza esaurire la memoria.
  • Selezionare il numero di istanze. Un'istanza è sufficiente per i test, ma si consiglia di prendere in considerazione due o più istanze per la produzione.
  • Facoltativamente, specificare un endpoint e un nome di distribuzione.
  • Selezionare Distribuisci. Si passa quindi alla pagina dell'endpoint, che potrebbe richiedere alcuni secondi. Il completamento della distribuzione richiede alcuni minuti in base alle dimensioni del modello e al tipo di istanza.

Nota: se si vuole eseguire la distribuzione in un endpoint esistente, selezionare More options nella finestra di dialogo di distribuzione rapida e usare la distribuzione guidata completa.

Modelli gestiti

I modelli gestiti sono modelli che è necessario richiedere l'approvazione dell'autore del modello prima dell'uso. Utilizzare:

  1. Possedere una lettura di Hugging Face o un token specifico
  2. Richiedere l'accesso tramite la pagina del modello in Hugging Face
  3. Creare una connessione di chiave personalizzata denominata HuggingFaceTokenConnection con la chiave HF_TOKEN e il valore che rappresenta il token Hugging Face contrassegnato come segreto.
  4. Creare un endpoint con enforce_access_to_default_secret_stores impostato su enabled
  5. Distribuire il modello usando l'endpoint appena creato

Testare il modello distribuito

Una volta completata la distribuzione, nella pagina endpoint è possibile trovare l'endpoint REST, che può essere usato per assegnare un punteggio al modello. Sono disponibili opzioni per aggiungere altre distribuzioni, gestire il traffico e ridimensionare l'hub endpoint. Usare inoltre la scheda Test nella pagina endpoint per testare il modello con input di esempio. Nella pagina del modello sono disponibili input di esempio. È possibile trovare il formato di input, i parametri e gli input di esempio nella documentazione dell'API di inferenza dell'Hugging Face hub.

Distribuire modelli dell'hub HuggingFace con Python SDK

Configurare Python SDK.

Trovare il modello da distribuire

Sfogliare il catalogo modelli nello studio di Azure Machine Learning e trovare il modello da distribuire. Copiare il nome del modello da distribuire. Importare le librerie necessarie. I modelli riportati nel catalogo sono elencati dal registro di sistema HuggingFace. Creare il model_id usando il nome del modello copiato dal catalogo modelli e dal registro di sistema HuggingFace. Il modello bert_base_uncased viene distribuito con la versione più recente in questo esempio.

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}"

Distribuire il modello

Creare un endpoint online. Quindi, creare la distribuzione. Infine, impostare tutto il traffico per usare questa distribuzione. È possibile trovare il instance_type della CPU o della GPU ideale per un modello aprendo la finestra di dialogo di distribuzione rapida dalla pagina del modello nel catalogo modelli. Assicurarsi di usare un instance_type per cui si dispone di una 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()

Testare il modello distribuito

Creare un file con input che possono essere inviati all'endpoint online per l'assegnazione dei punteggi. L'esempio di codice in questa sezione consente un input per il tipo fill-mask dopo la distribuzione del modello bert-base-uncased. È possibile trovare il formato di input, i parametri e gli input di esempio nella documentazione dell'API di inferenza dell'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))

Distribuire modelli dell'hub HuggingFace usando l'interfaccia della riga di comando

Configurare l'interfaccia della riga di comando.

Trovare il modello da distribuire

Sfogliare il catalogo modelli nello studio di Azure Machine Learning e trovare il modello da distribuire. Copiare il nome del modello da distribuire. I modelli riportati nel catalogo sono elencati dal registro di sistema HuggingFace. Il modello bert_base_uncased viene distribuito con la versione più recente in questo esempio.

Distribuire il modello

Per distribuire il modello servono model e instance_type. È possibile trovare il instance_type della CPU o della GPU ideale per un modello aprendo la finestra di dialogo di distribuzione rapida dalla pagina del modello nel catalogo modelli. Assicurarsi di usare un instance_type per cui si dispone di una quota.

I modelli riportati nel catalogo sono elencati dal registro di sistema HuggingFace. Il modello bert_base_uncased viene distribuito con la versione più recente in questo esempio. L'ID dell’asset model completo basato sul nome del modello e sul Registro di sistema è azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest. Viene creato il file deploy.yml usato per il comando az ml online-deployment create inline.

Creare un endpoint online. Quindi, creare la distribuzione.

# 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

Testare il modello distribuito

Creare un file con input che possono essere inviati all'endpoint online per l'assegnazione dei punteggi. Hugging Face come input di esempio di codice per il tipo di fill-mask per il modello distribuito bert-base-uncased. È possibile trovare il formato di input, i parametri e gli input di esempio nella documentazione dell'API di inferenza dell'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

Codice di esempio del modello Hugging Face

Seguire questo collegamento per trovare codice di esempio del modello Hugging Face per vari scenari, tra cui la classificazione dei token, la traduzione, la risposta alle domande e la classificazione zero shot.

Risoluzione dei problemi: errori di distribuzione e modelli non supportati

L'hub HuggingFace presenta migliaia di modelli con centinaia di questi aggiornati a cadenza giornaliera. Solo i modelli più diffusi nella raccolta vengono testati; altri potrebbero fallire restituendo uno degli errori seguenti.

Modelli gestiti

Per poter accedere al modello, i modelli gestiti richiedono agli utenti di condividere le informazioni di contatto e accettare i termini e le condizioni dei proprietari del modello. Il tentativo di distribuire tali modelli senza seguire correttamente i passaggi precedenti avrà esito negativo con .KeyError

Modelli che devono eseguire codice remoto

I modelli usano in genere il codice dell'SDK dei trasformatori, ma alcuni modelli eseguono codice dal repository del modello. Tali modelli devono impostare il parametro trust_remote_code su True. Seguire questo collegamento per altre informazioni sull’uso di codice remoto. Questi modelli non sono supportati per motivi di sicurezza. Il tentativo di distribuire tali modelli ha esito negativo con l'errore seguente: 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.

Modelli con tokenizer non corretti

Un tokenizer specificato in modo errato o mancante nel pacchetto del modello può causare un errore OSError: Can't load tokenizer for <model>.

Raccolte mancanti

Alcuni modelli necessitano di librerie Python aggiuntive. È possibile installare librerie mancanti durante l'esecuzione dei modelli in locale. I modelli che necessitano di librerie speciali oltre alle librerie standard di Transformers falliscono con un errore ModuleNotFoundError o ImportError.

Memoria insufficiente

Se viene visualizzato OutOfQuota: Container terminated due to insufficient memory, provare a usare un instance_type con più memoria.

Domande frequenti

Dove vengono archiviati i pesi del modello?

I modelli Hugging Face sono disponibili nel catalogo modelli di Azure Machine Learning tramite il registro di sistema HuggingFace, che è creato e gestito da Hugging Face ed è reso disponibile ad Azure Machine Learning come registro della community. I pesi del modello non sono ospitati in Azure. I pesi vengono scaricati direttamente dall'hub Hugging Face agli endpoint online nell'area di lavoro quando questi modelli vengono distribuiti. HuggingFace Il registro in Azure Machine Learning funziona come un catalogo per individuare e distribuire i modelli del hub di Hugging Face in Azure Machine Learning.

Quali modelli sono supportati?

I modelli Hugging Face che soddisfano i criteri seguenti sono supportati in Azure:

  • Deve contenere i tag Transformers, Diffusers o Sentence-Transformers nell'hub di Hugging Face
  • Dispone di un'attività supportata, ad esempio chat-completion, image-to-task o embeddings
  • I pesi del modello sono nel formato Safetensors e il modello non richiede trust_remote_code

Come distribuire i modelli per l'inferenza batch? La distribuzione di questi modelli in endpoint batch per l'inferenza batch non è attualmente supportata.

È possibile usare i modelli dal HuggingFace Registro di sistema come input per i processi per ottimizzare questi modelli usando transformers SDK? Poiché i pesi del modello non vengono archiviati nel HuggingFace Registro di sistema, non è possibile accedere ai pesi del modello usando questi modelli come input per i processi.

Come si ottiene il supporto se le distribuzioni hanno esito negativo o l'inferenza non funziona come previsto?HuggingFace è un registro della community e non è coperto dal supporto tecnico Microsoft. Esaminare i log di distribuzione e scoprire se il problema è correlato alla piattaforma Azure Machine Learning o se è specifico dei trasformatori HuggingFace. Contattare il supporto tecnico Microsoft per eventuali problemi con la piattaforma, ad esempio se non è possibile creare un endpoint online, o se l'autenticazione per l'API REST dell'endpoint non funziona. Per problemi specifici dei trasformatori, creare un problema in GitHub, usare il forum huggingFace o usare il supporto huggingFace.

Che cos'è un registro della community? I registri della community sono registri di Azure Machine Learning creati da partner affidabili di Azure Machine Learning e disponibili per tutti gli utenti di Azure Machine Learning.

Dove è possibile inviare domande e dubbi relativi a Hugging Face in Azure Machine Learning? Inviare le domande al forum di discussione di Azure Machine Learning o aprire un problema di GitHub.

Disponibilità regionale

La raccolta di Hugging Face è attualmente disponibile solo in tutte le regioni del cloud pubblico.