Condividi un modello
Gli ultimi due tutorial ti hanno mostrato come puoi fare fine-tuning di un modello con PyTorch, Keras e đ¤ Accelerate per configurazioni distribuite. Il prossimo passo è quello di condividere il tuo modello con la community! In Hugging Face, crediamo nella condivisione della conoscenza e delle risorse in modo da democratizzare lâintelligenza artificiale per chiunque. Ti incoraggiamo a considerare di condividere il tuo modello con la community per aiutare altre persone a risparmiare tempo e risorse.
In questo tutorial, imparerai due metodi per la condivisione di un modello trained o fine-tuned nel Model Hub:
- Condividi in modo programmatico i tuoi file nellâHub.
- Trascina i tuoi file nellâHub mediante interfaccia grafica.
Per condividere un modello con la community, hai bisogno di un account su huggingface.co. Puoi anche unirti ad unâorganizzazione esistente o crearne una nuova.
Caratteristiche dei repository
Ogni repository nel Model Hub si comporta come un tipico repository di GitHub. I nostri repository offrono il versionamento, la cronologia dei commit, e la possibilitĂ di visualizzare le differenze.
Il versionamento allâinterno del Model Hub è basato su git e git-lfs. In altre parole, puoi trattare un modello come un unico repository, consentendo un maggiore controllo degli accessi e maggiore scalabilitĂ . Il controllo delle versioni consente revisions, un metodo per appuntare una versione specifica di un modello con un hash di commit, un tag o un branch.
Come risultato, puoi caricare una specifica versione di un modello con il parametro revision
:
>>> model = AutoModel.from_pretrained(
... "julien-c/EsperBERTo-small", revision="v2.0.1" # nome di un tag, di un branch, o commit hash
... )
Anche i file possono essere modificati facilmente in un repository ed è possibile visualizzare la cronologia dei commit e le differenze:
Configurazione
Prima di condividere un modello nellâHub, hai bisogno delle tue credenziali di Hugging Face. Se hai accesso ad un terminale, esegui il seguente comando nellâambiente virtuale in cui è installata la libreria đ¤ Transformers. Questo memorizzerĂ il tuo token di accesso nella cartella cache di Hugging Face (di default ~/.cache/
):
huggingface-cli login
Se stai usando un notebook come Jupyter o Colaboratory, assicurati di avere la libreria huggingface_hub
installata. Questa libreria ti permette di interagire in maniera programmatica con lâHub.
pip install huggingface_hub
Utilizza notebook_login
per accedere allâHub, e segui il link qui per generare un token con cui effettuare il login:
>>> from huggingface_hub import notebook_login
>>> notebook_login()
Converti un modello per tutti i framework
Per assicurarti che il tuo modello possa essere utilizzato da persone che lavorano con un framework differente, ti raccomandiamo di convertire e caricare il tuo modello sia con i checkpoint di PyTorch che con quelli di TensorFlow. Anche se è possibile caricare il modello da un framework diverso, se si salta questo passaggio, il caricamento sarĂ piĂš lento perchĂŠ đ¤ Transformers ha bisogno di convertire i checkpoint al momento.
Convertire un checkpoint per un altro framework è semplice. Assicurati di avere PyTorch e TensorFlow installati (vedi qui per le istruzioni dâinstallazione), e poi trova il modello specifico per il tuo compito nellâaltro framework.
Specifica from_tf=True
per convertire un checkpoint da TensorFlow a PyTorch:
>>> pt_model = DistilBertForSequenceClassification.from_pretrained(
... "path/verso/il-nome-magnifico-che-hai-scelto", from_tf=True
... )
>>> pt_model.save_pretrained("path/verso/il-nome-magnifico-che-hai-scelto")
Specifica from_pt=True
per convertire un checkpoint da PyTorch a TensorFlow:
>>> tf_model = TFDistilBertForSequenceClassification.from_pretrained(
... "path/verso/il-nome-magnifico-che-hai-scelto", from_pt=True
... )
Poi puoi salvare il tuo nuovo modello in TensorFlow con il suo nuovo checkpoint:
>>> tf_model.save_pretrained("path/verso/il-nome-magnifico-che-hai-scelto")
Se un modello è disponibile in Flax, puoi anche convertire un checkpoint da PyTorch a Flax:
>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
... "path/verso/il-nome-magnifico-che-hai-scelto", from_pt=True
... )
Condividi un modello durante il training
Condividere un modello nellâHub è tanto semplice quanto aggiungere un parametro extra o un callback. Ricorda dal tutorial sul fine-tuning, la classe TrainingArguments
è dove specifichi gli iperparametri e le opzioni addizionali per lâallenamento. Una di queste opzioni di training include lâabilitĂ di condividere direttamente un modello nellâHub. Imposta push_to_hub=True
in TrainingArguments
:
>>> training_args = TrainingArguments(output_dir="il-mio-bellissimo-modello", push_to_hub=True)
Passa gli argomenti per il training come di consueto al Trainer
:
>>> trainer = Trainer(
... model=model,
... args=training_args,
... train_dataset=small_train_dataset,
... eval_dataset=small_eval_dataset,
... compute_metrics=compute_metrics,
... )
Dopo aver effettuato il fine-tuning del tuo modello, chiama push_to_hub()
sul Trainer
per condividere il modello allenato nellâHub. đ¤ Transformers aggiungerĂ in modo automatico persino gli iperparametri, i risultati del training e le versioni del framework alla scheda del tuo modello (model card, in inglese)!
>>> trainer.push_to_hub()
Condividi un modello nellâHub con PushToHubCallback
. Nella funzione PushToHubCallback
, aggiungi:
- Una directory di output per il tuo modello.
- Un tokenizer.
- Lâ
hub_model_id
, che è il tuo username sullâHub e il nome del modello.
>>> from transformers import PushToHubCallback
>>> push_to_hub_callback = PushToHubCallback(
... output_dir="./il_path_dove_salvare_il_tuo_modello",
... tokenizer=tokenizer,
... hub_model_id="il-tuo-username/il-mio-bellissimo-modello",
... )
Aggiungi il callback a fit
, e đ¤ Transformers caricherĂ il modello allenato nellâHub:
>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback)
Utilizzare la funzione push_to_hub
Puoi anche chiamare push_to_hub
direttamente sul tuo modello per caricarlo nellâHub.
Specifica il nome del tuo modello in push_to_hub
:
>>> pt_model.push_to_hub("il-mio-bellissimo-modello")
Questo crea un repository sotto il proprio username con il nome del modello il-mio-bellissimo-modello
. Ora chiunque può caricare il tuo modello con la funzione from_pretrained
:
>>> from transformers import AutoModel
>>> model = AutoModel.from_pretrained("il-tuo-username/il-mio-bellissimo-modello")
Se fai parte di unâorganizzazione e vuoi invece condividere un modello sotto il nome dellâorganizzazione, aggiungi il parametro organization
:
>>> pt_model.push_to_hub("il-mio-bellissimo-modello", organization="la-mia-fantastica-org")
La funzione push_to_hub
può essere anche utilizzata per aggiungere altri file al repository del modello. Per esempio, aggiungi un tokenizer ad un repository di un modello:
>>> tokenizer.push_to_hub("il-mio-bellissimo-modello")
O magari potresti voler aggiungere la versione di TensorFlow del tuo modello PyTorch a cui hai fatto fine-tuning:
>>> tf_model.push_to_hub("il-mio-bellissimo-modello")
Ora quando navighi nel tuo profilo Hugging Face, dovresti vedere il tuo repository del modello appena creato. Premendo sulla scheda Files vengono visualizzati tutti i file caricati nel repository.
Per maggiori dettagli su come creare e caricare file ad un repository, fai riferimento alla documentazione qui.
Carica un modello utilizzando l'interfaccia web
Chi preferisce un approccio senza codice può caricare un modello tramite lâinterfaccia web dellâhub. Visita huggingface.co/new per creare un nuovo repository:
Da qui, aggiungi alcune informazioni sul tuo modello:
- Seleziona il/la owner del repository. Puoi essere te o qualunque organizzazione di cui fai parte.
- Scegli un nome per il tuo modello, il quale sarĂ anche il nome del repository.
- Scegli se il tuo modello è pubblico o privato.
- Specifica la licenza utilizzata per il tuo modello.
Ora premi sulla scheda Files e premi sul pulsante Add file per caricare un nuovo file al tuo repository. Trascina poi un file per caricarlo e aggiungere un messaggio di commit.
Aggiungi una scheda del modello
Per assicurarti che chiunque possa comprendere le abilità , limitazioni, i potenziali bias e le considerazioni etiche del tuo modello, per favore aggiungi una scheda del modello (model card, in inglese) al tuo repository. La scheda del modello è definita nel file README.md
. Puoi aggiungere una scheda del modello:
- Creando manualmente e caricando un file
README.md
. - Premendo sul pulsante Edit model card nel repository del tuo modello.
Dai unâocchiata alla scheda del modello di DistilBert per avere un buon esempio del tipo di informazioni che una scheda di un modello deve includere. Per maggiori dettagli legati ad altre opzioni che puoi controllare nel file README.md
, come lâimpatto ambientale o widget di esempio, fai riferimento alla documentazione qui.