|
| 1 | +<!--Copyright 2022 The HuggingFace Team. All rights reserved. |
| 2 | + |
| 3 | +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
| 4 | +the License. You may obtain a copy of the License at |
| 5 | + |
| 6 | +http://www.apache.org/licenses/LICENSE-2.0 |
| 7 | + |
| 8 | +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
| 9 | +an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
| 10 | +specific language governing permissions and limitations under the License. |
| 11 | +--> |
| 12 | + |
| 13 | +# Condividi un modello |
| 14 | + |
| 15 | +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. |
| 16 | + |
| 17 | +In questo tutorial, imparerai due metodi per la condivisione di un modello trained o fine-tuned nel [Model Hub](https://huggingface.co/models): |
| 18 | + |
| 19 | +- Condividi in modo programmatico i tuoi file nell'Hub. |
| 20 | +- Trascina i tuoi file nell'Hub mediante interfaccia grafica. |
| 21 | + |
| 22 | +<iframe width="560" height="315" src="https://www.youtube.com/embed/XvSGPZFEjDY" title="YouTube video player" |
| 23 | +frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; |
| 24 | +picture-in-picture" allowfullscreen></iframe> |
| 25 | + |
| 26 | +<Tip> |
| 27 | + |
| 28 | +Per condividere un modello con la community, hai bisogno di un account su [huggingface.co](https://huggingface.co/join). Puoi anche unirti ad un'organizzazione esistente o crearne una nuova. |
| 29 | + |
| 30 | +</Tip> |
| 31 | + |
| 32 | +## Caratteristiche dei repository |
| 33 | + |
| 34 | +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. |
| 35 | + |
| 36 | +Il versionamento all'interno del Model Hub è basato su git e [git-lfs](https://git-lfs.github.com/). 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. |
| 37 | + |
| 38 | +Come risultato, puoi caricare una specifica versione di un modello con il parametro `revision`: |
| 39 | + |
| 40 | +```py |
| 41 | +>>> model = AutoModel.from_pretrained( |
| 42 | +... "julien-c/EsperBERTo-small", revision="v2.0.1" # nome di un tag, di un branch, o commit hash |
| 43 | +... ) |
| 44 | +``` |
| 45 | + |
| 46 | +Anche i file possono essere modificati facilmente in un repository ed è possibile visualizzare la cronologia dei commit e le differenze: |
| 47 | + |
| 48 | + |
| 49 | + |
| 50 | +## Configurazione |
| 51 | + |
| 52 | +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/`): |
| 53 | + |
| 54 | +```bash |
| 55 | +huggingface-cli login |
| 56 | +``` |
| 57 | + |
| 58 | +Se stai usando un notebook come Jupyter o Colaboratory, assicurati di avere la libreria [`huggingface_hub`](https://huggingface.co/docs/hub/adding-a-library) installata. Questa libreria ti permette di interagire in maniera programmatica con l'Hub. |
| 59 | + |
| 60 | +```bash |
| 61 | +pip install huggingface_hub |
| 62 | +``` |
| 63 | + |
| 64 | +Utilizza `notebook_login` per accedere all'Hub, e segui il link [qui](https://huggingface.co/settings/token) per generare un token con cui effettuare il login: |
| 65 | + |
| 66 | +```py |
| 67 | +>>> from huggingface_hub import notebook_login |
| 68 | + |
| 69 | +>>> notebook_login() |
| 70 | +``` |
| 71 | + |
| 72 | +## Converti un modello per tutti i framework |
| 73 | + |
| 74 | +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. |
| 75 | + |
| 76 | +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. |
| 77 | + |
| 78 | +<frameworkcontent> |
| 79 | +<pt> |
| 80 | +Specifica `from_tf=True` per convertire un checkpoint da TensorFlow a PyTorch: |
| 81 | + |
| 82 | +```py |
| 83 | +>>> pt_model = DistilBertForSequenceClassification.from_pretrained( |
| 84 | +... "path/verso/il-nome-magnifico-che-hai-scelto", from_tf=True |
| 85 | +... ) |
| 86 | +>>> pt_model.save_pretrained("path/verso/il-nome-magnifico-che-hai-scelto") |
| 87 | +``` |
| 88 | +</pt> |
| 89 | +<tf> |
| 90 | +Specifica `from_pt=True` per convertire un checkpoint da PyTorch a TensorFlow: |
| 91 | + |
| 92 | +```py |
| 93 | +>>> tf_model = TFDistilBertForSequenceClassification.from_pretrained( |
| 94 | +... "path/verso/il-nome-magnifico-che-hai-scelto", from_pt=True |
| 95 | +... ) |
| 96 | +``` |
| 97 | + |
| 98 | +Poi puoi salvare il tuo nuovo modello in TensorFlow con il suo nuovo checkpoint: |
| 99 | + |
| 100 | +```py |
| 101 | +>>> tf_model.save_pretrained("path/verso/il-nome-magnifico-che-hai-scelto") |
| 102 | +``` |
| 103 | +</tf> |
| 104 | +<jax> |
| 105 | +Se un modello è disponibile in Flax, puoi anche convertire un checkpoint da PyTorch a Flax: |
| 106 | + |
| 107 | +```py |
| 108 | +>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained( |
| 109 | +... "path/verso/il-nome-magnifico-che-hai-scelto", from_pt=True |
| 110 | +... ) |
| 111 | +``` |
| 112 | +</jax> |
| 113 | +</frameworkcontent> |
| 114 | + |
| 115 | +## Condividi un modello durante il training |
| 116 | + |
| 117 | +<frameworkcontent> |
| 118 | +<pt> |
| 119 | +<Youtube id="Z1-XMy-GNLQ"/> |
| 120 | + |
| 121 | +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`]: |
| 122 | + |
| 123 | +```py |
| 124 | +>>> training_args = TrainingArguments(output_dir="il-mio-bellissimo-modello", push_to_hub=True) |
| 125 | +``` |
| 126 | + |
| 127 | +Passa gli argomenti per il training come di consueto al [`Trainer`]: |
| 128 | + |
| 129 | +```py |
| 130 | +>>> trainer = Trainer( |
| 131 | +... model=model, |
| 132 | +... args=training_args, |
| 133 | +... train_dataset=small_train_dataset, |
| 134 | +... eval_dataset=small_eval_dataset, |
| 135 | +... compute_metrics=compute_metrics, |
| 136 | +... ) |
| 137 | +``` |
| 138 | + |
| 139 | +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)! |
| 140 | + |
| 141 | +```py |
| 142 | +>>> trainer.push_to_hub() |
| 143 | +``` |
| 144 | +</pt> |
| 145 | +<tf> |
| 146 | +Condividi un modello nell'Hub con [`PushToHubCallback`]. Nella funzione [`PushToHubCallback`], aggiungi: |
| 147 | + |
| 148 | +- Una directory di output per il tuo modello. |
| 149 | +- Un tokenizer. |
| 150 | +- L'`hub_model_id`, che è il tuo username sull'Hub e il nome del modello. |
| 151 | + |
| 152 | +```py |
| 153 | +>>> from transformers.keras.callbacks import PushToHubCallback |
| 154 | + |
| 155 | +>>> push_to_hub_callback = PushToHubCallback( |
| 156 | +... output_dir="./il_path_dove_salvare_il_tuo_modello", |
| 157 | +... tokenizer=tokenizer, |
| 158 | +... hub_model_id="il-tuo-username/il-mio-bellissimo-modello", |
| 159 | +... ) |
| 160 | +``` |
| 161 | + |
| 162 | +Aggiungi il callback a [`fit`](https://keras.io/api/models/model_training_apis/), e 🤗 Transformers caricherà il modello allenato nell'Hub: |
| 163 | + |
| 164 | +```py |
| 165 | +>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback) |
| 166 | +``` |
| 167 | +</tf> |
| 168 | +</frameworkcontent> |
| 169 | + |
| 170 | +## Utilizzare la funzione `push_to_hub` |
| 171 | + |
| 172 | +Puoi anche chiamare `push_to_hub` direttamente sul tuo modello per caricarlo nell'Hub. |
| 173 | + |
| 174 | +Specifica il nome del tuo modello in `push_to_hub`: |
| 175 | + |
| 176 | +```py |
| 177 | +>>> pt_model.push_to_hub("il-mio-bellissimo-modello") |
| 178 | +``` |
| 179 | + |
| 180 | +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`: |
| 181 | + |
| 182 | +```py |
| 183 | +>>> from transformers import AutoModel |
| 184 | + |
| 185 | +>>> model = AutoModel.from_pretrained("il-tuo-username/il-mio-bellissimo-modello") |
| 186 | +``` |
| 187 | + |
| 188 | +Se fai parte di un'organizzazione e vuoi invece condividere un modello sotto il nome dell'organizzazione, aggiungi il parametro `organization`: |
| 189 | + |
| 190 | +```py |
| 191 | +>>> pt_model.push_to_hub("il-mio-bellissimo-modello", organization="la-mia-fantastica-org") |
| 192 | +``` |
| 193 | + |
| 194 | +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: |
| 195 | + |
| 196 | +```py |
| 197 | +>>> tokenizer.push_to_hub("il-mio-bellissimo-modello") |
| 198 | +``` |
| 199 | + |
| 200 | +O magari potresti voler aggiungere la versione di TensorFlow del tuo modello PyTorch a cui hai fatto fine-tuning: |
| 201 | + |
| 202 | +```py |
| 203 | +>>> tf_model.push_to_hub("il-mio-bellissimo-modello") |
| 204 | +``` |
| 205 | + |
| 206 | +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. |
| 207 | + |
| 208 | +Per maggiori dettagli su come creare e caricare file ad un repository, fai riferimento alla documentazione [qui](https://huggingface.co/docs/hub/how-to-upstream). |
| 209 | + |
| 210 | +## Carica un modello utilizzando l'interfaccia web |
| 211 | + |
| 212 | +Chi preferisce un approccio senza codice può caricare un modello tramite l'interfaccia web dell'hub. Visita [huggingface.co/new](https://huggingface.co/new) per creare un nuovo repository: |
| 213 | + |
| 214 | + |
| 215 | + |
| 216 | +Da qui, aggiungi alcune informazioni sul tuo modello: |
| 217 | + |
| 218 | +- Seleziona il/la **owner** del repository. Puoi essere te o qualunque organizzazione di cui fai parte. |
| 219 | +- Scegli un nome per il tuo modello, il quale sarà anche il nome del repository. |
| 220 | +- Scegli se il tuo modello è pubblico o privato. |
| 221 | +- Specifica la licenza utilizzata per il tuo modello. |
| 222 | + |
| 223 | +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. |
| 224 | + |
| 225 | + |
| 226 | + |
| 227 | +## Aggiungi una scheda del modello |
| 228 | + |
| 229 | +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: |
| 230 | + |
| 231 | +* Creando manualmente e caricando un file `README.md`. |
| 232 | +* Premendo sul pulsante **Edit model card** nel repository del tuo modello. |
| 233 | + |
| 234 | +Dai un'occhiata alla [scheda del modello](https://huggingface.co/distilbert-base-uncased) 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](https://huggingface.co/docs/hub/model-repos). |
0 commit comments