|
<!--Copyright 2022 The HuggingFace Team. All rights reserved. |
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
|
the License. You may obtain a copy of the License at |
|
|
|
http: |
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
|
specific language governing permissions and limitations under the License. |
|
--> |
|
|
|
# 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](https: |
|
|
|
- Condividi in modo programmatico i tuoi file nell'Hub. |
|
- Trascina i tuoi file nell'Hub mediante interfaccia grafica. |
|
|
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/XvSGPZFEjDY" title="YouTube video player" |
|
frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; |
|
picture-in-picture" allowfullscreen></iframe> |
|
|
|
<Tip> |
|
|
|
Per condividere un modello con la community, hai bisogno di un account su [huggingface.co](https: |
|
|
|
</Tip> |
|
|
|
## 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](https: |
|
|
|
Come risultato, puoi caricare una specifica versione di un modello con il parametro `revision`: |
|
|
|
```py |
|
>>> 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: |
|
|
|
: |
|
|
|
```bash |
|
huggingface-cli login |
|
``` |
|
|
|
Se stai usando un notebook come Jupyter o Colaboratory, assicurati di avere la libreria [`huggingface_hub`](https: |
|
|
|
```bash |
|
pip install huggingface_hub |
|
``` |
|
|
|
Utilizza `notebook_login` per accedere all'Hub, e segui il link [qui](https: |
|
|
|
```py |
|
>>> 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](installation) per le istruzioni d'installazione), e poi trova il modello specifico per il tuo compito nell'altro framework. |
|
|
|
<frameworkcontent> |
|
<pt> |
|
Specifica `from_tf=True` per convertire un checkpoint da TensorFlow a PyTorch: |
|
|
|
```py |
|
>>> 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") |
|
``` |
|
</pt> |
|
<tf> |
|
Specifica `from_pt=True` per convertire un checkpoint da PyTorch a TensorFlow: |
|
|
|
```py |
|
>>> 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: |
|
|
|
```py |
|
>>> tf_model.save_pretrained("path/verso/il-nome-magnifico-che-hai-scelto") |
|
``` |
|
</tf> |
|
<jax> |
|
Se un modello è disponibile in Flax, puoi anche convertire un checkpoint da PyTorch a Flax: |
|
|
|
```py |
|
>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained( |
|
... "path/verso/il-nome-magnifico-che-hai-scelto", from_pt=True |
|
... ) |
|
``` |
|
</jax> |
|
</frameworkcontent> |
|
|
|
## Condividi un modello durante il training |
|
|
|
<frameworkcontent> |
|
<pt> |
|
<Youtube id="Z1-XMy-GNLQ"/> |
|
|
|
Condividere un modello nell'Hub è tanto semplice quanto aggiungere un parametro extra o un callback. Ricorda dal [tutorial sul fine-tuning](training), 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`]: |
|
|
|
```py |
|
>>> training_args = TrainingArguments(output_dir="il-mio-bellissimo-modello", push_to_hub=True) |
|
``` |
|
|
|
Passa gli argomenti per il training come di consueto al [`Trainer`]: |
|
|
|
```py |
|
>>> 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 [`~transformers.Trainer.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)! |
|
|
|
```py |
|
>>> trainer.push_to_hub() |
|
``` |
|
</pt> |
|
<tf> |
|
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. |
|
|
|
```py |
|
>>> 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`](https: |
|
|
|
```py |
|
>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback) |
|
``` |
|
</tf> |
|
</frameworkcontent> |
|
|
|
## 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`: |
|
|
|
```py |
|
>>> 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`: |
|
|
|
```py |
|
>>> 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`: |
|
|
|
```py |
|
>>> 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: |
|
|
|
```py |
|
>>> 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: |
|
|
|
```py |
|
>>> 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](https: |
|
|
|
## 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](https: |
|
|
|
 al tuo repository. La scheda del modello è definita nel file `README.md`. Puoi aggiungere una scheda del modello: |
|
|
|
|
|
|
|
|
|
Dai un'occhiata alla [scheda del modello](https: |
|
|