‘Distribuisci facilmente i modelli di Hugging Face con Amazon SageMaker’

Distribuisci i modelli di Hugging Face con SageMaker

All’inizio di quest’anno abbiamo annunciato una collaborazione strategica con Amazon per rendere più facile alle aziende utilizzare Hugging Face in Amazon SageMaker e spedire funzionalità di Machine Learning all’avanguardia più velocemente. Abbiamo introdotto nuovi Hugging Face Deep Learning Containers (DLCs) per addestrare modelli Hugging Face Transformer in Amazon SageMaker.

Oggi siamo entusiasti di condividere con voi una nuova soluzione di inferenza che rende più facile che mai distribuire Hugging Face Transformers con Amazon SageMaker! Con i nuovi Hugging Face Inference DLCs, è possibile distribuire i modelli addestrati per l’inferenza con solo una riga di codice in più, oppure selezionare uno dei 10.000+ modelli disponibili pubblicamente dal Model Hub e distribuirli con Amazon SageMaker.

La distribuzione dei modelli in SageMaker offre endpoint pronti per la produzione che si scalano facilmente all’interno del proprio ambiente AWS, con monitoraggio integrato e una serie di funzionalità aziendali. È stata una collaborazione straordinaria e speriamo che ne approfittiate!

Ecco come utilizzare il nuovo SageMaker Hugging Face Inference Toolkit per distribuire modelli basati su Transformers:

from sagemaker.huggingface import HuggingFaceModel

# crea la classe del modello Hugging Face e distribuiscila come endpoint di SageMaker
huggingface_model = HuggingFaceModel(...).deploy()

Ecco tutto! 🚀

Per saperne di più su come accedere e utilizzare i nuovi Hugging Face DLCs con l’SDK Python di Amazon SageMaker, date un’occhiata alle guide e alle risorse qui sotto.


Di seguito potete trovare tutte le risorse importanti per distribuire i vostri modelli su Amazon SageMaker.

Blog/Video

  • Video: Distribuire un modello Hugging Face Transformers da S3 a Amazon SageMaker
  • Video: Distribuire un modello Hugging Face Transformers dal Model Hub a Amazon SageMaker

Esempi/Documentazione

  • Documentazione di Hugging Face per Amazon SageMaker
  • Distribuire modelli su Amazon SageMaker
  • Documentazione di Amazon SageMaker per Hugging Face
  • Documentazione di Python SDK di SageMaker per Hugging Face
  • Deep Learning Container
  • Notebook: Distribuire uno dei 10.000+ Hugging Face Transformers su Amazon SageMaker per l’inferenza
  • Notebook: Distribuire un modello Hugging Face Transformer da S3 a SageMaker per l’inferenza

Oltre ai Deep Learning Containers ottimizzati per l’inferenza di Hugging Face Transformers, abbiamo creato un nuovo Inference Toolkit per Amazon SageMaker. Questo nuovo Inference Toolkit sfrutta le pipeline della libreria transformers per consentire distribuzioni senza codice di modelli senza scrivere alcun codice per il pre- o post-processing. Nella sezione “Per iniziare” di seguito troverete due esempi su come distribuire i vostri modelli su Amazon SageMaker.

Oltre alla distribuzione senza codice, l’Inference Toolkit supporta metodi “bring your own code”, dove è possibile sovrascrivere i metodi predefiniti. Potete saperne di più su “bring your own code” nella documentazione qui oppure potete dare un’occhiata al notebook di esempio “distribuire codice di inferenza personalizzato su Amazon SageMaker”.

API – Descrizione dell’Inference Toolkit

Utilizzando le pipeline transformers, abbiamo progettato un’API che rende facile beneficiare di tutte le funzionalità delle pipeline. L’API ha un’interfaccia simile all’API di Accelerated Inference di 🤗, il che significa che i vostri input devono essere definiti nella chiave “inputs” e se volete ulteriori parametri supportati dalle pipeline potete aggiungerli nella chiave “parameters”. Di seguito troverete esempi di richieste.

# corpo della richiesta per la classificazione del testo
{
    "inputs": "Camera - Hai vinto una fotocamera digitale SiPix! Chiama il numero 09061221066 da una linea fissa. Consegna entro 28 giorni."
}
# corpo della richiesta per il question-answering
{
    "inputs": {
        "question": "Cosa viene utilizzato per l'inferenza?",
        "context": "Mi chiamo Philipp e vivo a Norimberga. Questo modello viene utilizzato con sagemaker per l'inferenza."
    }
}
# corpo della richiesta per la classificazione zero-shot
{
    "inputs": "Ciao, di recente ho acquistato un dispositivo dalla vostra azienda ma non funziona come pubblicizzato e vorrei essere rimborsato!",
    "parameters": {
        "candidate_labels": [
            "rimborso",
            "legale",
            "faq"
        ]
    }
}

In questa guida utilizzeremo i nuovi DLC di Inferenza di Hugging Face e l’SDK di Python di Amazon SageMaker per implementare due modelli di trasformazione per l’inferenza.

Nel primo esempio, implementiamo per l’inferenza un modello di trasformazione di Hugging Face addestrato in Amazon SageMaker.

Nel secondo esempio, implementiamo direttamente uno dei più di 10.000 modelli di trasformazione di Hugging Face disponibili pubblicamente nell’Hub dei Modelli su Amazon SageMaker per l’inferenza.

Configurazione dell’ambiente

Utilizzeremo un’istanza del Notebook di Amazon SageMaker per l’esempio. Puoi imparare qui come configurare un’istanza del Notebook. Per iniziare, accedi al tuo Jupyter Notebook o JupyterLab e crea un nuovo Notebook con il kernel conda_pytorch_p36.

Nota: L’uso di Jupyter è opzionale: potremmo anche lanciare chiamate API di SageMaker da qualsiasi luogo in cui abbiamo installato un SDK, connettività al cloud e le autorizzazioni appropriate, come un laptop, un altro IDE o un pianificatore di attività come Airflow o AWS Step Functions.

Dopo di ciò, possiamo installare le dipendenze richieste.

pip install "sagemaker>=2.48.0" --upgrade

Per implementare un modello su SageMaker, abbiamo bisogno di creare una Sessione sagemaker e fornire un ruolo IAM con le autorizzazioni corrette. Il metodo get_execution_role è fornito dall’SDK di SageMaker come comodità opzionale. Puoi anche specificare il ruolo scrivendo l’ARN del ruolo specifico che desideri utilizzare per il tuo endpoint. Questo ruolo IAM verrà successivamente collegato all’Endpoint, ad esempio per scaricare il modello da Amazon S3.

import sagemaker

sess = sagemaker.Session()
role = sagemaker.get_execution_role()

Implementa un modello di trasformazione di Hugging Face addestrato su SageMaker per l’inferenza

Ci sono due modi per implementare il modello di Hugging Face addestrato su SageMaker. Puoi implementarlo dopo che il tuo addestramento è terminato, oppure puoi implementarlo successivamente, utilizzando model_data che punta al tuo modello salvato su Amazon S3. Oltre alle due opzioni sopra menzionate, è anche possibile istanziare i punti di fine di Hugging Face con SDK di livello inferiore come boto3 e AWS CLI, Terraform e con modelli di CloudFormation.

Implementa il modello direttamente dopo l’addestramento con la classe Estimator

Se implementi il tuo modello direttamente dopo l’addestramento, devi assicurarti che tutti gli artefatti del modello richiesti siano salvati nel tuo script di addestramento, compreso il tokenizer e il modello. Un vantaggio di implementare direttamente dopo l’addestramento è che i metadati del contenitore del modello di SageMaker conterranno il lavoro di addestramento di origine, fornendo una continuità dal lavoro di addestramento al modello implementato.

from sagemaker.huggingface import HuggingFace

############ inizio pseudocodice ############

# crea un estimatore di Hugging Face per l'esecuzione dell'addestramento
huggingface_estimator = HuggingFace(....)

# avvio del lavoro di addestramento con i nostri dataset caricati come input
huggingface_estimator.fit(...)

############ fine pseudocodice ############

# implementa il modello su SageMaker per l'Inferenza
predictor = hf_estimator.deploy(initial_instance_count=1, instance_type="ml.m5.xlarge")

# esempio di richiesta, è sempre necessario definire "inputs"
data = {
   "inputs": "Camera - Ti è stata assegnata una fotocamera digitale SiPix! Chiama il 09061221066 da una linea fissa. Consegna entro 28 giorni."
}
# richiesta
predictor.predict(data)

Dopo aver eseguito la nostra richiesta, possiamo eliminare nuovamente l’endpoint con il seguente codice.

# elimina l'endpoint
predictor.delete_endpoint()

Implementa il modello dai checkpoint pre-addestrati utilizzando la classe HuggingFaceModel

Se hai già addestrato il tuo modello e desideri implementarlo in un secondo momento, puoi utilizzare l’argomento model_data per specificare la posizione del tokenizer e dei pesi del modello.

from sagemaker.huggingface.model import HuggingFaceModel

# crea la classe del modello di Hugging Face
huggingface_model = HuggingFaceModel(
   model_data="s3://models/my-bert-model/model.tar.gz",  # percorso del tuo modello addestrato di SageMaker
   role=role, # ruolo IAM con le autorizzazioni per creare un Endpoint
   transformers_version="4.6", # versione dei transformers utilizzata
   pytorch_version="1.7", # versione di pytorch utilizzata
)
# implementa il modello su SageMaker per l'Inferenza
predictor = huggingface_model.deploy(
   initial_instance_count=1, 
   instance_type="ml.m5.xlarge"
)

# esempio di richiesta, è sempre necessario definire "inputs"
data = {
   "inputs": "Camera - Ti è stata assegnata una fotocamera digitale SiPix! Chiama il 09061221066 da una linea fissa. Consegna entro 28 giorni."
}

# richiesta
predictor.predict(data)

Dopo aver eseguito la nostra richiesta, possiamo eliminare nuovamente il punto di ingresso con:

# elimina il punto di ingresso
predictor.delete_endpoint()

Deployma di uno dei oltre 10.000 Hugging Face Transformers su Amazon SageMaker per l’Inferenza

Per distribuire un modello direttamente da Hugging Face Model Hub su Amazon SageMaker, è necessario definire due variabili d’ambiente durante la creazione di HuggingFaceModel. Dobbiamo definire:

  • HF_MODEL_ID: definisce l’id del modello, che verrà caricato automaticamente da huggingface.co/models durante la creazione o dell’Endpoint di SageMaker. Il 🤗 Hub fornisce oltre 10.000 modelli tutti disponibili tramite questa variabile d’ambiente.
  • HF_TASK: definisce il compito per il quale viene utilizzata la pipeline di 🤗 Transformers. Un elenco completo dei compiti può essere trovato qui .
from sagemaker.huggingface.model import HuggingFaceModel

# Configurazione del modello Hub. <https://huggingface.co/models>
hub = {
  'HF_MODEL_ID':'distilbert-base-uncased-distilled-squad', # model_id da hf.co/models
  'HF_TASK':'question-answering' # Compito NLP da utilizzare per le previsioni
}

# Creazione della classe Hugging Face Model
huggingface_model = HuggingFaceModel(
   env=hub, # configurazione per il caricamento del modello da Hub
   role=role, # ruolo IAM con le autorizzazioni per creare un Endpoint
   transformers_version="4.6", # versione di transformers utilizzata
   pytorch_version="1.7", # versione di pytorch utilizzata
)

# Distribuzione del modello su SageMaker Inferenza
predictor = huggingface_model.deploy(
   initial_instance_count=1,
   instance_type="ml.m5.xlarge"
)

# Esempio di richiesta, è sempre necessario definire "inputs"
data = {
"inputs": {
    "question": "Cosa viene utilizzato per l'inferenza?",
    "context": "Mi chiamo Philipp e vivo a Norimberga. Questo modello viene utilizzato con sagemaker per l'inferenza."
    }
}

# Richiesta
predictor.predict(data)

Dopo aver eseguito la nostra richiesta, possiamo eliminare nuovamente il punto di ingresso con.

# elimina il punto di ingresso
predictor.delete_endpoint()

Puoi trovare le domande frequenti complete nella documentazione .

D: Quali modelli posso distribuire per l’Inferenza?

<p: A: Puoi distribuire:

  • qualunque modello 🤗 Transformers addestrato in Amazon SageMaker, o in altre piattaforme compatibili e che possano ospitare il design di Hosting di SageMaker
  • uno dei più di 10.000 modelli di Transformer disponibili pubblicamente dal Hugging Face Model Hub , o
  • i tuoi modelli privati ospitati nel tuo account premium di Hugging Face!

D: Quali pipeline, compiti sono supportati dal Toolkit di Inferenza?

A: Il Toolkit di Inferenza e DLC supportano qualsiasi delle pipeline di transformers . Puoi trovare l’elenco completo qui

D: Devo utilizzare le pipeline transformers quando ospito i punti di ingresso di SageMaker?

A: No, puoi anche scrivere il tuo codice di inferenza personalizzato per servire i tuoi modelli e la tua logica, documentato qui .

D: Devo utilizzare l’SDK Python di SageMaker per utilizzare i Deep Learning Containers (DLC) di Hugging Face?

A: Puoi utilizzare il DLC di Hugging Face senza l’SDK Python di SageMaker e distribuire i tuoi modelli su SageMaker con altri SDK, come AWS CLI , boto3 o Cloudformation . I DLC sono disponibili anche tramite Amazon ECR e possono essere scaricati e utilizzati in qualsiasi ambiente a scelta.

D: Perché dovrei utilizzare i Deep Learning Containers di Hugging Face?

A: I DLC sono ambienti di deep learning completamente testati, mantenuti e ottimizzati che non richiedono installazione, configurazione o manutenzione. In particolare, il nostro DLC di inferenza è dotato di uno stack di servizio pre-scritto, che abbassa drasticamente la barriera tecnica del servizio DL.

D: Come vengono protetti i miei dati e il mio codice da Amazon SageMaker?

A: Amazon SageMaker fornisce numerosi meccanismi di sicurezza, inclusa la cifratura a riposo e in transito , connettività Virtual Private Cloud (VPC) e Gestione degli accessi e delle identità (IAM) . Per saperne di più sulla sicurezza nel cloud AWS e su Amazon SageMaker, puoi visitare Sicurezza in Amazon SageMaker e Sicurezza del cloud AWS .

Q: È questo disponibile nella mia regione?

A: Per un elenco delle regioni supportate, visita la tabella delle regioni AWS per tutta l’infrastruttura globale di AWS.

Q: Offri supporto premium o SLA di supporto per questa soluzione?

A: I livelli di supporto tecnico di AWS sono disponibili da AWS e coprono problemi di sviluppo e produzione per prodotti e servizi AWS – consulta il supporto AWS per i dettagli e lo scopo.

Se hai domande a cui la community di Hugging Face può rispondere e/o beneficiare, per favore pubblicale nel forum di Hugging Face.


Se hai bisogno di supporto premium dal team di Hugging Face per accelerare la tua roadmap di NLP, il nostro programma di accelerazione degli esperti offre una guida diretta dai nostri team di open-source, science e ML Engineering.