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 da Hugging Face Hub ad Azure Machine Learning. Hugging Face è il creatore di Transformers, una libreria ampiamente diffusa per la creazione di modelli linguistici di grandi dimensioni. Hub del modello 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.
Nota
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 dietro più distribuzioni e suddividere il traffico o eseguire il mirroring del 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. Il ridimensionamento può essere configurato 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; potrebbe volerci qualche secondo. 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.
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'hub Hugging Face .
Distribuire modelli hub HuggingFace con 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,
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"
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'input di esempio di codice seguente per il tipo fill-mask
è stato distribuito dal modello bert-base-uncased
. È possibile trovare il formato di input, i parametri e gli input di esempio nella documentazione dell'API di inferenza dell'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))
Distribuire modelli hub HuggingFace con CLI
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"
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
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'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
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 avrà esito negativo con un 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. Tali modelli non sono supportati dal punto di vista della sicurezza. Il tentativo di distribuire tali modelli avrà esito negativo con il seguente errore: 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 le librerie di trasformatori standard avranno esito negativo con 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. Il registro di sistema HuggingFace
in AzureML funge da catalogo per individuare e distribuire modelli dell’hub HuggingFace in Azure Machine Learning.
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 registro di sistema HuggingFace
come input per i processi in modo da ottimizzare questi modelli usando SDK dei trasformatori?
Poiché i pesi del modello non vengono archiviati nel registro di sistema HuggingFace
, non è possibile accedere ai pesi del modello usando questi modelli come input per i processi.
Come si ottiene supporto se le distribuzioni hanno esito negativo o l'inferenza non funziona come previsto?HuggingFace
è un registro di sistema 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. Per eventuali problemi relativi alla piattaforma, contattare il supporto Tecnico Microsoft. Ad esempio, non è possibile creare un endpoint online o l'autenticazione per l'API REST dell'endpoint non funziona. Per problemi specifici dei trasformatori, usare il forum di HuggingFace o il supporto di 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 nel forum di discussione di Azure Machine Learning.
Disponibilità a livello di area
La raccolta di Hugging Face è attualmente disponibile solo in tutte le regioni del cloud pubblico.