Buckets:

rtrm's picture
download
raw
44 kB
import{s as ht,n as Ut,o as ft}from"../chunks/scheduler.505acc25.js";import{S as Ct,i as It,e as i,s,c as o,h as Zt,a as p,d as t,b as n,f as wt,g as r,j as y,k as Al,l as Bt,m as a,n as c,t as d,o as M,p as m}from"../chunks/index.1238bded.js";import{C as vt,H as ve,E as Gt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.8bdeb3c1.js";import{Y as Tt}from"../chunks/Youtube.2fb63721.js";import{C as u}from"../chunks/CodeBlock.57e25f4e.js";import{D as gt}from"../chunks/DocNotebookDropdown.446f7d35.js";function kt(El){let b,Ge,Ze,ge,w,ke,T,Xe,h,ze,U,$e,f,Fl="Ora vedremo come ottenere gli stessi risultati della sezione precedente senza utilizzare la classe <code>Trainer</code>. Ancora una volta, aver compiuto il processing dei dati spiegato nella sezione 2 è un prerequisito. Ecco un riassunto di tutto ciò di cui avrete bisogno:",We,C,Re,I,Ye,Z,Hl="Prima di cominciare a scrivere il nostro ciclo di addestramento, dobbiamo definire alcuni oggetti. Per prima cosa, i dataloaders (caricatori di dati) che useremo per iterare sulle batch. Ma prima di poter definire i dataloaders, dobbiamo applicare un po’ di postprocessing ai nostri <code>tokenized_datasets</code>, per compiere alcune operazione che <code>Trainer</code> gestiva in automatico per noi. Nello specifico dobbiamo:",_e,B,Ql="<li>Rimuovere le colonne corrispondente a valori che il modello non si aspetta (come ad esempio le colonne <code>sentence1</code> e <code>sentence2 </code>).</li> <li>Rinominare la colonna <code>label</code> a <code>labels</code> (perché il modello si aspetta questo nome).</li> <li>Fissare il formato dei datasets in modo che restituiscano tensori Pytorch invece di liste.</li>",Ve,v,xl="L’oggetto <code>tokenized_datasets</code> ha un metodo per ciascuno di questi punti:",Ne,G,Ae,g,Sl="Possiamo poi controllare che il risultato ha solo solo colonne che saranno accettate dal nostro modello:",Ee,k,Fe,X,ql="Ora che questo è fatto, possiamo finalmente definire i dataloaders in maniera semplice:",He,z,Qe,$,Ll="Per controllare velocemente che non ci sono errori nel processing dei dati, possiamo ispezionare una batch in questo modo:",xe,W,Se,R,qe,Y,Kl="È importante sottolineare che i valori di shape (forma) potrebbero essere leggermente diversi per voi, poiché abbiamo fissato <code>shuffle=True</code> (rimescolamento attivo) per i dataloader di apprendimento, e stiamo applicando padding alla lunghezza massima all’interno della batch.",Le,_,Pl="Ora che il preprocessing dei dati è completato (uno scopo soddisfacente ma elusivo per qualunque praticante di ML), focalizziamoci sul modello. Lo istanziamo esattamente come avevamo fatto nella sezione precedente:",Ke,V,Pe,N,Dl="Per assicurarci che tutto andrà bene durante l’addestramento, passiamo la batch al modello:",De,A,Oe,E,el,F,Ol="Tutti i modelli 🤗 Transformers restituiscono il valore obiettivo quando vengono fornite loro le <code>labels</code>, e anche i logits (due per ciascun input della batch, quindi un tensore di dimensioni 8 x 2).",ll,H,et='Siamo quasi pronti a scrivere il ciclo di addestramento! Mancano solo due cose: un ottimizzatore e un learning rate scheduler. Poiché stiamo tentando di replicare a mano ciò che viene fatto dal <code>Trainer</code>, utilizzeremo gli stessi valori di default. L’ottimizzatore utilizzato dal <code>Trainer</code> è <code>AdamW</code>, che è lo stesso di Adam ma con una variazione per quanto riguarda la regolarizzazione del decadimento dei pesi (rif. <a href="https://arxiv.org/abs/1711.05101" rel="nofollow">“Decoupled Weight Decay Regularization”</a> di Ilya Loshchilov e Frank Hutter):',tl,Q,al,x,lt="Infine, il learning rate scheduler usato di default è solo un decadimento lineare dal valore massimo (5e-5) fino a 0. Per definirlo correttamente, dobbiamo sapere il numero di iterazioni per l’addestramento, che è dato dal numero di epoche che vogliamo eseguire moltiplicato per il numero di batch per l’addestramento (ovverosia la lunghezza del dataloader). Il <code>Trainer</code> usa 3 epoche di default, quindi:",sl,S,nl,q,il,L,ol,K,tt="Un’ultima cosa: se si ha accesso ad una GPU è consigliato usarla (su una CPU, l’addestramento potrebbe richiedere svariate ore invece di un paio di minuti). Per usare la GPU, definiamo un <code>device</code> su cui spostare il modello e le batch:",pl,P,rl,D,cl,O,at="Siamo pronti per l’addestramento! Per avere un’intuizione di quando sarà finito, aggiungiamo una barra di progresso sul numero di iterazioni di addestramento, usando la libreria <code>tqdm</code>:",dl,ee,Ml,le,st="Potete vedere che il nocciolo del ciclo di addestramento è molto simile a quello nell’introduzione. Non abbiamo chiesto nessun report, quindi il ciclo non ci informerà su come si sta comportando il modello. Dobbiamo aggiungere un ciclo di valutazione per quello.",ml,te,yl,ae,nt="Come fatto in precedenza, utilizzeremo una metrica fornita dalla libreria 🤗 Datasets. Abbiamo già visto il metodo <code>metric.compute()</code>, ma le metriche possono automaticamente accumulare le batch nel ciclo di predizione col metodo <code>add_batch()</code>. Una volta accumulate tutte le batch, possiamo ottenere il risultato finale con <code>metric.compute()</code>. Ecco come implementare tutto ciò in un ciclo di valutazione:",ul,se,bl,ne,Jl,ie,it="Ancora una volta, i vostri risultati potrebbero essere leggermente diversi a causa della casualità nell’inizializzazione della testa del modello e del ricombinamento dei dati, ma dovrebbero essere nello stesso ordine di grandezza.",jl,J,ot="<p>✏️ <strong>Prova tu!</strong> Modifica il ciclo di addestramento precedente per affinare il modello sul dataset SST-2.</p>",wl,oe,Tl,pe,hl,re,pt='Il ciclo di addestramento che abbiamo definito prima funziona bene per una sola CPU o GPU. Ma grazie alla libreria <a href="https://github.com/huggingface/accelerate" rel="nofollow">🤗 Accelerate</a>, con alcuni aggiustamenti possiamo attivare l’addestramento distribuito su svariate GPU o TPU. Partendo dalla creazione dei dataloaders di addestramento e validazione, ecco l’aspetto del nostro ciclo di addestramento manuale:',Ul,ce,fl,de,rt="Ecco i cambiamenti necessari:",Cl,Me,Il,me,ct="Prima di tutto bisogna inserire la linea di importazione. La seconda linea istanzia un oggetto di tipo <code>Accelerator</code> che controllerà e inizializzerà il corretto ambiente distribuito. 🤗 Accelerate gestice il posizionamento sui dispositivi per voi, quindi potete togliere le linee che spostavano il modello sul dispositivo (o, se preferite, cambiare in modo da usare <code>acceleratore.device</code> invece di <code>device</code>).",Zl,ye,dt="Dopodiché la maggior parte del lavoro è fatta dalla linea che invia i dataloaders, il modello e gli ottimizzatori a <code>accelerator.prepare()</code>. Ciò serve a incapsulare queli oggetti nei contenitori appropriati per far sì che l’addestramento distribuito funzioni correttamente. I cambiamenti rimanenti sono la rimozione della linea che sposta la batch sul <code>device</code> (dispositivo) (di nuovo, se volete tenerlo potete semplicemente cambiarlo con <code>accelerator.device</code>) e lo scambio di <code>loss.backward()</code> con <code>accelerator.backward(loss)</code>.",Bl,j,Mt="<p>⚠️ Per poter beneficiare dell’accelerazione offerta da Cloud TPUs, è raccomandabile applicare padding ad una lunghezza fissa tramite gli argomenti <code>padding=&quot;max_length&quot;</code> e <code>max_length</code> del tokenizer.</p>",vl,ue,mt="Se volete copiare e incollare il codice per giocarci, ecco un ciclo di addestramento completo che usa 🤗 Accelerate:",Gl,be,gl,Je,yt="Mettere questo codice in uno script <code>train.py</code> lo renderà eseguibile su qualsiasi ambiente distribuito. Per provarlo nel vostro ambiente distribuito, eseguite:",kl,je,Xl,we,ut="che vi chiederà di rispondere ad alcune domande e inserirà le vostre risposte in un documento di configurazione usato dal comando:",zl,Te,$l,he,bt="che eseguirà l’addestramento distribuito.",Wl,Ue,Jt="Se volete provarlo in un Notebook (ad esempio, per testarlo con le TPUs su Colab), incollate il codice in una <code>training_function()</code> ed eseguite l’ultima cella con:",Rl,fe,Yl,Ce,jt='Potete trovare altri esempi nella <a href="https://github.com/huggingface/accelerate/tree/main/examples" rel="nofollow">🤗 Accelerate repo</a>.',_l,Ie,Vl,Be,Nl;return w=new vt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),T=new ve({props:{title:"Un addestramento completo",local:"un-addestramento-completo",headingTag:"h1"}}),h=new gt({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/it/chapter3/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/it/chapter3/section4.ipynb"}]}}),U=new Tt({props:{id:"Dh9CL8fyG80"}}),C=new u({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, DataCollatorWithPadding
raw_datasets = load_dataset(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
<span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)
tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),I=new ve({props:{title:"Preparazione all’addestramento",local:"preparazione-alladdestramento",headingTag:"h3"}}),G=new u({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbW92ZV9jb2x1bW5zKCU1QiUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiUyQyUyMCUyMmlkeCUyMiU1RCklMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMucmVuYW1lX2NvbHVtbiglMjJsYWJlbCUyMiUyQyUyMCUyMmxhYmVscyUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5jb2x1bW5fbmFtZXM=",highlighted:`tokenized_datasets = tokenized_datasets.remove_columns([<span class="hljs-string">&quot;sentence1&quot;</span>, <span class="hljs-string">&quot;sentence2&quot;</span>, <span class="hljs-string">&quot;idx&quot;</span>])
tokenized_datasets = tokenized_datasets.rename_column(<span class="hljs-string">&quot;label&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>)
tokenized_datasets.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names`,wrap:!1}}),k=new u({props:{code:"JTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RA==",highlighted:'[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>]',wrap:!1}}),z=new u({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUyMGJhdGNoX3NpemUlM0Q4JTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
train_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>], shuffle=<span class="hljs-literal">True</span>, batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)
eval_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)`,wrap:!1}}),W=new u({props:{code:"Zm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBicmVhayUwQSU3QmslM0ElMjB2LnNoYXBlJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0Q=",highlighted:`<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
<span class="hljs-keyword">break</span>
{k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}}),R=new u({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjUlNUQpJTJDJTBBJTIwJ2xhYmVscyclM0ElMjB0b3JjaC5TaXplKCU1QjglNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSU3RA==",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;input_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;labels&#x27;</span>: torch.Size([<span class="hljs-number">8</span>]),
<span class="hljs-string">&#x27;token_type_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>])}`,wrap:!1}}),V=new u({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),A=new u({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBcHJpbnQob3V0cHV0cy5sb3NzJTJDJTIwb3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**batch)
<span class="hljs-built_in">print</span>(outputs.loss, outputs.logits.shape)`,wrap:!1}}),E=new u({props:{code:"dGVuc29yKDAuNTQ0MSUyQyUyMGdyYWRfZm4lM0QlM0NObGxMb3NzQmFja3dhcmQlM0UpJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwMiU1RCk=",highlighted:'tensor(<span class="hljs-number">0.5441</span>, grad_fn=&lt;NllLossBackward&gt;) torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">2</span>])',wrap:!1}}),Q=new u({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDVlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">5e-5</span>)`,wrap:!1}}),S=new u({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV9lcG9jaHMlMjAqJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbHJfc2NoZWR1bGVyJTIwJTNEJTIwZ2V0X3NjaGVkdWxlciglMEElMjAlMjAlMjAlMjAlMjJsaW5lYXIlMjIlMkMlMEElMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUyQyUwQSklMEFwcmludChudW1fdHJhaW5pbmdfc3RlcHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
<span class="hljs-built_in">print</span>(num_training_steps)`,wrap:!1}}),q=new u({props:{code:"MTM3Nw==",highlighted:'<span class="hljs-number">1377</span>',wrap:!1}}),L=new ve({props:{title:"Il ciclo di addestramento",local:"il-ciclo-di-addestramento",headingTag:"h3"}}),P=new u({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFtb2RlbC50byhkZXZpY2UpJTBBZGV2aWNl",highlighted:`<span class="hljs-keyword">import</span> torch
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
device`,wrap:!1}}),D=new u({props:{code:"ZGV2aWNlKHR5cGUlM0QnY3VkYScp",highlighted:'device(<span class="hljs-built_in">type</span>=<span class="hljs-string">&#x27;cuda&#x27;</span>)',wrap:!1}}),ee=new u({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBbW9kZWwudHJhaW4oKSUwQWZvciUyMGVwb2NoJTIwaW4lMjByYW5nZShudW1fZXBvY2hzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGJhdGNoJTIwaW4lMjB0cmFpbl9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcy5iYWNrd2FyZCgpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),te=new ve({props:{title:"Il ciclo di valutazione",local:"il-ciclo-di-valutazione",headingTag:"h3"}}),se=new u({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9tZXRyaWMlMEElMEFtZXRyaWMlMjAlM0QlMjBsb2FkX21ldHJpYyglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFtb2RlbC5ldmFsKCklMEFmb3IlMjBiYXRjaCUyMGluJTIwZXZhbF9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjB3aXRoJTIwdG9yY2gubm9fZ3JhZCgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBJTBBJTIwJTIwJTIwJTIwbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5sb2dpdHMlMEElMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyUyMCUzRCUyMHRvcmNoLmFyZ21heChsb2dpdHMlMkMlMjBkaW0lM0QtMSklMEElMjAlMjAlMjAlMjBtZXRyaWMuYWRkX2JhdGNoKHByZWRpY3Rpb25zJTNEcHJlZGljdGlvbnMlMkMlMjByZWZlcmVuY2VzJTNEYmF0Y2glNUIlMjJsYWJlbHMlMjIlNUQpJTBBJTBBbWV0cmljLmNvbXB1dGUoKQ==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_metric
metric = load_metric(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
model.<span class="hljs-built_in">eval</span>()
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
<span class="hljs-keyword">with</span> torch.no_grad():
outputs = model(**batch)
logits = outputs.logits
predictions = torch.argmax(logits, dim=-<span class="hljs-number">1</span>)
metric.add_batch(predictions=predictions, references=batch[<span class="hljs-string">&quot;labels&quot;</span>])
metric.compute()`,wrap:!1}}),ne=new u({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODQzMTM3MjU0OTAxOTYwOCUyQyUyMCdmMSclM0ElMjAwLjg5MDc4NDk4MjkzNTE1MzUlN0Q=",highlighted:'{<span class="hljs-string">&#x27;accuracy&#x27;</span>: <span class="hljs-number">0.8431372549019608</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.8907849829351535</span>}',wrap:!1}}),oe=new ve({props:{title:"Potenzia il tuo ciclo di addestramento con 🤗 Accelerate",local:"potenzia-il-tuo-ciclo-di-addestramento-con--accelerate",headingTag:"h3"}}),pe=new Tt({props:{id:"s7dy8QRgjJ0"}}),ce=new u({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUyQyUyMGdldF9zY2hlZHVsZXIlMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDNlLTUpJTBBJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBbW9kZWwudG8oZGV2aWNlKSUwQSUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX2Vwb2NocyUyMColMjBsZW4odHJhaW5fZGF0YWxvYWRlciklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzLmJhY2t3YXJkKCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb2dyZXNzX2Jhci51cGRhdGUoMSk=",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),Me=new u({props:{code:"JTJCJTIwZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUyMCUyMGZyb20lMjB0b3JjaC5vcHRpbSUyMGltcG9ydCUyMEFkYW1XJTBBJTIwJTIwZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMjBnZXRfc2NoZWR1bGVyJTBBJTBBJTJCJTIwYWNjZWxlcmF0b3IlMjAlM0QlMjBBY2NlbGVyYXRvcigpJTBBJTBBJTIwJTIwbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIpJTBBJTIwJTIwb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QzZS01KSUwQSUwQS0lMjBkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEEtJTIwbW9kZWwudG8oZGV2aWNlKSUwQSUwQSUyQiUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMkMlMjBtb2RlbCUyQyUyMG9wdGltaXplciUyMCUzRCUyMGFjY2VsZXJhdG9yLnByZXBhcmUoJTBBJTJCJTIwJTIwJTIwJTIwJTIwdHJhaW5fZGF0YWxvYWRlciUyQyUyMGV2YWxfZGF0YWxvYWRlciUyQyUyMG1vZGVsJTJDJTIwb3B0aW1pemVyJTBBJTJCJTIwKSUwQSUwQSUyMCUyMG51bV9lcG9jaHMlMjAlM0QlMjAzJTBBJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX2Vwb2NocyUyMColMjBsZW4odHJhaW5fZGF0YWxvYWRlciklMEElMjAlMjBscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTBBJTIwJTIwKSUwQSUwQSUyMCUyMHByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEElMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEEtJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBLSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MuYmFja3dhcmQoKSUwQSUyQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-addition">+ from accelerate import Accelerator</span>
from torch.optim import AdamW
from transformers import AutoModelForSequenceClassification, get_scheduler
<span class="hljs-addition">+ accelerator = Accelerator()</span>
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
optimizer = AdamW(model.parameters(), lr=3e-5)
<span class="hljs-deletion">- device = torch.device(&quot;cuda&quot;) if torch.cuda.is_available() else torch.device(&quot;cpu&quot;)</span>
<span class="hljs-deletion">- model.to(device)</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare(</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer</span>
<span class="hljs-addition">+ )</span>
num_epochs = 3
num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
&quot;linear&quot;,
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps
)
progress_bar = tqdm(range(num_training_steps))
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
<span class="hljs-deletion">- batch = {k: v.to(device) for k, v in batch.items()}</span>
outputs = model(**batch)
loss = outputs.loss
<span class="hljs-deletion">- loss.backward()</span>
<span class="hljs-addition">+ accelerator.backward(loss)</span>
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)`,wrap:!1}}),be=new u({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQWZyb20lMjB0b3JjaC5vcHRpbSUyMGltcG9ydCUyMEFkYW1XJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMjBnZXRfc2NoZWR1bGVyJTBBJTBBYWNjZWxlcmF0b3IlMjAlM0QlMjBBY2NlbGVyYXRvcigpJTBBJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIpJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QzZS01KSUwQSUwQXRyYWluX2RsJTJDJTIwZXZhbF9kbCUyQyUyMG1vZGVsJTJDJTIwb3B0aW1pemVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTJDJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMEEpJTBBJTBBbnVtX2Vwb2NocyUyMCUzRCUyMDMlMEFudW1fdHJhaW5pbmdfc3RlcHMlMjAlM0QlMjBudW1fZXBvY2hzJTIwKiUyMGxlbih0cmFpbl9kbCklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RsJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcyUyMCUzRCUyMG91dHB1dHMubG9zcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator
<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
accelerator = Accelerator()
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
train_dl, eval_dl, model, optimizer = accelerator.prepare(
train_dataloader, eval_dataloader, model, optimizer
)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dl)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dl:
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),je=new u({props:{code:"YWNjZWxlcmF0ZSUyMGNvbmZpZw==",highlighted:"accelerate config",wrap:!1}}),Te=new u({props:{code:"YWNjZWxlcmF0ZSUyMGxhdW5jaCUyMHRyYWluLnB5",highlighted:'accelerate <span class="hljs-built_in">launch</span> train.py',wrap:!1}}),fe=new u({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBub3RlYm9va19sYXVuY2hlciUwQSUwQW5vdGVib29rX2xhdW5jaGVyKHRyYWluaW5nX2Z1bmN0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> notebook_launcher
notebook_launcher(training_function)`,wrap:!1}}),Ie=new Gt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter3/4.mdx"}}),{c(){b=i("meta"),Ge=s(),Ze=i("p"),ge=s(),o(w.$$.fragment),ke=s(),o(T.$$.fragment),Xe=s(),o(h.$$.fragment),ze=s(),o(U.$$.fragment),$e=s(),f=i("p"),f.innerHTML=Fl,We=s(),o(C.$$.fragment),Re=s(),o(I.$$.fragment),Ye=s(),Z=i("p"),Z.innerHTML=Hl,_e=s(),B=i("ul"),B.innerHTML=Ql,Ve=s(),v=i("p"),v.innerHTML=xl,Ne=s(),o(G.$$.fragment),Ae=s(),g=i("p"),g.textContent=Sl,Ee=s(),o(k.$$.fragment),Fe=s(),X=i("p"),X.textContent=ql,He=s(),o(z.$$.fragment),Qe=s(),$=i("p"),$.textContent=Ll,xe=s(),o(W.$$.fragment),Se=s(),o(R.$$.fragment),qe=s(),Y=i("p"),Y.innerHTML=Kl,Le=s(),_=i("p"),_.textContent=Pl,Ke=s(),o(V.$$.fragment),Pe=s(),N=i("p"),N.textContent=Dl,De=s(),o(A.$$.fragment),Oe=s(),o(E.$$.fragment),el=s(),F=i("p"),F.innerHTML=Ol,ll=s(),H=i("p"),H.innerHTML=et,tl=s(),o(Q.$$.fragment),al=s(),x=i("p"),x.innerHTML=lt,sl=s(),o(S.$$.fragment),nl=s(),o(q.$$.fragment),il=s(),o(L.$$.fragment),ol=s(),K=i("p"),K.innerHTML=tt,pl=s(),o(P.$$.fragment),rl=s(),o(D.$$.fragment),cl=s(),O=i("p"),O.innerHTML=at,dl=s(),o(ee.$$.fragment),Ml=s(),le=i("p"),le.textContent=st,ml=s(),o(te.$$.fragment),yl=s(),ae=i("p"),ae.innerHTML=nt,ul=s(),o(se.$$.fragment),bl=s(),o(ne.$$.fragment),Jl=s(),ie=i("p"),ie.textContent=it,jl=s(),J=i("blockquote"),J.innerHTML=ot,wl=s(),o(oe.$$.fragment),Tl=s(),o(pe.$$.fragment),hl=s(),re=i("p"),re.innerHTML=pt,Ul=s(),o(ce.$$.fragment),fl=s(),de=i("p"),de.textContent=rt,Cl=s(),o(Me.$$.fragment),Il=s(),me=i("p"),me.innerHTML=ct,Zl=s(),ye=i("p"),ye.innerHTML=dt,Bl=s(),j=i("blockquote"),j.innerHTML=Mt,vl=s(),ue=i("p"),ue.textContent=mt,Gl=s(),o(be.$$.fragment),gl=s(),Je=i("p"),Je.innerHTML=yt,kl=s(),o(je.$$.fragment),Xl=s(),we=i("p"),we.textContent=ut,zl=s(),o(Te.$$.fragment),$l=s(),he=i("p"),he.textContent=bt,Wl=s(),Ue=i("p"),Ue.innerHTML=Jt,Rl=s(),o(fe.$$.fragment),Yl=s(),Ce=i("p"),Ce.innerHTML=jt,_l=s(),o(Ie.$$.fragment),Vl=s(),Be=i("p"),this.h()},l(e){const l=Zt("svelte-u9bgzb",document.head);b=p(l,"META",{name:!0,content:!0}),l.forEach(t),Ge=n(e),Ze=p(e,"P",{}),wt(Ze).forEach(t),ge=n(e),r(w.$$.fragment,e),ke=n(e),r(T.$$.fragment,e),Xe=n(e),r(h.$$.fragment,e),ze=n(e),r(U.$$.fragment,e),$e=n(e),f=p(e,"P",{"data-svelte-h":!0}),y(f)!=="svelte-1us6pmo"&&(f.innerHTML=Fl),We=n(e),r(C.$$.fragment,e),Re=n(e),r(I.$$.fragment,e),Ye=n(e),Z=p(e,"P",{"data-svelte-h":!0}),y(Z)!=="svelte-1r5rhw5"&&(Z.innerHTML=Hl),_e=n(e),B=p(e,"UL",{"data-svelte-h":!0}),y(B)!=="svelte-1soygtz"&&(B.innerHTML=Ql),Ve=n(e),v=p(e,"P",{"data-svelte-h":!0}),y(v)!=="svelte-109i7es"&&(v.innerHTML=xl),Ne=n(e),r(G.$$.fragment,e),Ae=n(e),g=p(e,"P",{"data-svelte-h":!0}),y(g)!=="svelte-ouxzs3"&&(g.textContent=Sl),Ee=n(e),r(k.$$.fragment,e),Fe=n(e),X=p(e,"P",{"data-svelte-h":!0}),y(X)!=="svelte-9dsd8e"&&(X.textContent=ql),He=n(e),r(z.$$.fragment,e),Qe=n(e),$=p(e,"P",{"data-svelte-h":!0}),y($)!=="svelte-10x8m39"&&($.textContent=Ll),xe=n(e),r(W.$$.fragment,e),Se=n(e),r(R.$$.fragment,e),qe=n(e),Y=p(e,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-1vy1r30"&&(Y.innerHTML=Kl),Le=n(e),_=p(e,"P",{"data-svelte-h":!0}),y(_)!=="svelte-tvclea"&&(_.textContent=Pl),Ke=n(e),r(V.$$.fragment,e),Pe=n(e),N=p(e,"P",{"data-svelte-h":!0}),y(N)!=="svelte-17r0l89"&&(N.textContent=Dl),De=n(e),r(A.$$.fragment,e),Oe=n(e),r(E.$$.fragment,e),el=n(e),F=p(e,"P",{"data-svelte-h":!0}),y(F)!=="svelte-14z3wqu"&&(F.innerHTML=Ol),ll=n(e),H=p(e,"P",{"data-svelte-h":!0}),y(H)!=="svelte-1tiesbf"&&(H.innerHTML=et),tl=n(e),r(Q.$$.fragment,e),al=n(e),x=p(e,"P",{"data-svelte-h":!0}),y(x)!=="svelte-agqccw"&&(x.innerHTML=lt),sl=n(e),r(S.$$.fragment,e),nl=n(e),r(q.$$.fragment,e),il=n(e),r(L.$$.fragment,e),ol=n(e),K=p(e,"P",{"data-svelte-h":!0}),y(K)!=="svelte-1wb397t"&&(K.innerHTML=tt),pl=n(e),r(P.$$.fragment,e),rl=n(e),r(D.$$.fragment,e),cl=n(e),O=p(e,"P",{"data-svelte-h":!0}),y(O)!=="svelte-1xyrr8b"&&(O.innerHTML=at),dl=n(e),r(ee.$$.fragment,e),Ml=n(e),le=p(e,"P",{"data-svelte-h":!0}),y(le)!=="svelte-k27sq5"&&(le.textContent=st),ml=n(e),r(te.$$.fragment,e),yl=n(e),ae=p(e,"P",{"data-svelte-h":!0}),y(ae)!=="svelte-vqhpoz"&&(ae.innerHTML=nt),ul=n(e),r(se.$$.fragment,e),bl=n(e),r(ne.$$.fragment,e),Jl=n(e),ie=p(e,"P",{"data-svelte-h":!0}),y(ie)!=="svelte-rz5cet"&&(ie.textContent=it),jl=n(e),J=p(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(J)!=="svelte-eo5b1h"&&(J.innerHTML=ot),wl=n(e),r(oe.$$.fragment,e),Tl=n(e),r(pe.$$.fragment,e),hl=n(e),re=p(e,"P",{"data-svelte-h":!0}),y(re)!=="svelte-mgnuhl"&&(re.innerHTML=pt),Ul=n(e),r(ce.$$.fragment,e),fl=n(e),de=p(e,"P",{"data-svelte-h":!0}),y(de)!=="svelte-hyicis"&&(de.textContent=rt),Cl=n(e),r(Me.$$.fragment,e),Il=n(e),me=p(e,"P",{"data-svelte-h":!0}),y(me)!=="svelte-c6nglj"&&(me.innerHTML=ct),Zl=n(e),ye=p(e,"P",{"data-svelte-h":!0}),y(ye)!=="svelte-curkr2"&&(ye.innerHTML=dt),Bl=n(e),j=p(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(j)!=="svelte-d3gr0f"&&(j.innerHTML=Mt),vl=n(e),ue=p(e,"P",{"data-svelte-h":!0}),y(ue)!=="svelte-81d5ez"&&(ue.textContent=mt),Gl=n(e),r(be.$$.fragment,e),gl=n(e),Je=p(e,"P",{"data-svelte-h":!0}),y(Je)!=="svelte-1s4avns"&&(Je.innerHTML=yt),kl=n(e),r(je.$$.fragment,e),Xl=n(e),we=p(e,"P",{"data-svelte-h":!0}),y(we)!=="svelte-5f8y46"&&(we.textContent=ut),zl=n(e),r(Te.$$.fragment,e),$l=n(e),he=p(e,"P",{"data-svelte-h":!0}),y(he)!=="svelte-h9xzji"&&(he.textContent=bt),Wl=n(e),Ue=p(e,"P",{"data-svelte-h":!0}),y(Ue)!=="svelte-142b7g5"&&(Ue.innerHTML=Jt),Rl=n(e),r(fe.$$.fragment,e),Yl=n(e),Ce=p(e,"P",{"data-svelte-h":!0}),y(Ce)!=="svelte-zmmr5l"&&(Ce.innerHTML=jt),_l=n(e),r(Ie.$$.fragment,e),Vl=n(e),Be=p(e,"P",{}),wt(Be).forEach(t),this.h()},h(){Al(b,"name","hf:doc:metadata"),Al(b,"content",Xt),Al(J,"class","tip"),Al(j,"class","tip")},m(e,l){Bt(document.head,b),a(e,Ge,l),a(e,Ze,l),a(e,ge,l),c(w,e,l),a(e,ke,l),c(T,e,l),a(e,Xe,l),c(h,e,l),a(e,ze,l),c(U,e,l),a(e,$e,l),a(e,f,l),a(e,We,l),c(C,e,l),a(e,Re,l),c(I,e,l),a(e,Ye,l),a(e,Z,l),a(e,_e,l),a(e,B,l),a(e,Ve,l),a(e,v,l),a(e,Ne,l),c(G,e,l),a(e,Ae,l),a(e,g,l),a(e,Ee,l),c(k,e,l),a(e,Fe,l),a(e,X,l),a(e,He,l),c(z,e,l),a(e,Qe,l),a(e,$,l),a(e,xe,l),c(W,e,l),a(e,Se,l),c(R,e,l),a(e,qe,l),a(e,Y,l),a(e,Le,l),a(e,_,l),a(e,Ke,l),c(V,e,l),a(e,Pe,l),a(e,N,l),a(e,De,l),c(A,e,l),a(e,Oe,l),c(E,e,l),a(e,el,l),a(e,F,l),a(e,ll,l),a(e,H,l),a(e,tl,l),c(Q,e,l),a(e,al,l),a(e,x,l),a(e,sl,l),c(S,e,l),a(e,nl,l),c(q,e,l),a(e,il,l),c(L,e,l),a(e,ol,l),a(e,K,l),a(e,pl,l),c(P,e,l),a(e,rl,l),c(D,e,l),a(e,cl,l),a(e,O,l),a(e,dl,l),c(ee,e,l),a(e,Ml,l),a(e,le,l),a(e,ml,l),c(te,e,l),a(e,yl,l),a(e,ae,l),a(e,ul,l),c(se,e,l),a(e,bl,l),c(ne,e,l),a(e,Jl,l),a(e,ie,l),a(e,jl,l),a(e,J,l),a(e,wl,l),c(oe,e,l),a(e,Tl,l),c(pe,e,l),a(e,hl,l),a(e,re,l),a(e,Ul,l),c(ce,e,l),a(e,fl,l),a(e,de,l),a(e,Cl,l),c(Me,e,l),a(e,Il,l),a(e,me,l),a(e,Zl,l),a(e,ye,l),a(e,Bl,l),a(e,j,l),a(e,vl,l),a(e,ue,l),a(e,Gl,l),c(be,e,l),a(e,gl,l),a(e,Je,l),a(e,kl,l),c(je,e,l),a(e,Xl,l),a(e,we,l),a(e,zl,l),c(Te,e,l),a(e,$l,l),a(e,he,l),a(e,Wl,l),a(e,Ue,l),a(e,Rl,l),c(fe,e,l),a(e,Yl,l),a(e,Ce,l),a(e,_l,l),c(Ie,e,l),a(e,Vl,l),a(e,Be,l),Nl=!0},p:Ut,i(e){Nl||(d(w.$$.fragment,e),d(T.$$.fragment,e),d(h.$$.fragment,e),d(U.$$.fragment,e),d(C.$$.fragment,e),d(I.$$.fragment,e),d(G.$$.fragment,e),d(k.$$.fragment,e),d(z.$$.fragment,e),d(W.$$.fragment,e),d(R.$$.fragment,e),d(V.$$.fragment,e),d(A.$$.fragment,e),d(E.$$.fragment,e),d(Q.$$.fragment,e),d(S.$$.fragment,e),d(q.$$.fragment,e),d(L.$$.fragment,e),d(P.$$.fragment,e),d(D.$$.fragment,e),d(ee.$$.fragment,e),d(te.$$.fragment,e),d(se.$$.fragment,e),d(ne.$$.fragment,e),d(oe.$$.fragment,e),d(pe.$$.fragment,e),d(ce.$$.fragment,e),d(Me.$$.fragment,e),d(be.$$.fragment,e),d(je.$$.fragment,e),d(Te.$$.fragment,e),d(fe.$$.fragment,e),d(Ie.$$.fragment,e),Nl=!0)},o(e){M(w.$$.fragment,e),M(T.$$.fragment,e),M(h.$$.fragment,e),M(U.$$.fragment,e),M(C.$$.fragment,e),M(I.$$.fragment,e),M(G.$$.fragment,e),M(k.$$.fragment,e),M(z.$$.fragment,e),M(W.$$.fragment,e),M(R.$$.fragment,e),M(V.$$.fragment,e),M(A.$$.fragment,e),M(E.$$.fragment,e),M(Q.$$.fragment,e),M(S.$$.fragment,e),M(q.$$.fragment,e),M(L.$$.fragment,e),M(P.$$.fragment,e),M(D.$$.fragment,e),M(ee.$$.fragment,e),M(te.$$.fragment,e),M(se.$$.fragment,e),M(ne.$$.fragment,e),M(oe.$$.fragment,e),M(pe.$$.fragment,e),M(ce.$$.fragment,e),M(Me.$$.fragment,e),M(be.$$.fragment,e),M(je.$$.fragment,e),M(Te.$$.fragment,e),M(fe.$$.fragment,e),M(Ie.$$.fragment,e),Nl=!1},d(e){e&&(t(Ge),t(Ze),t(ge),t(ke),t(Xe),t(ze),t($e),t(f),t(We),t(Re),t(Ye),t(Z),t(_e),t(B),t(Ve),t(v),t(Ne),t(Ae),t(g),t(Ee),t(Fe),t(X),t(He),t(Qe),t($),t(xe),t(Se),t(qe),t(Y),t(Le),t(_),t(Ke),t(Pe),t(N),t(De),t(Oe),t(el),t(F),t(ll),t(H),t(tl),t(al),t(x),t(sl),t(nl),t(il),t(ol),t(K),t(pl),t(rl),t(cl),t(O),t(dl),t(Ml),t(le),t(ml),t(yl),t(ae),t(ul),t(bl),t(Jl),t(ie),t(jl),t(J),t(wl),t(Tl),t(hl),t(re),t(Ul),t(fl),t(de),t(Cl),t(Il),t(me),t(Zl),t(ye),t(Bl),t(j),t(vl),t(ue),t(Gl),t(gl),t(Je),t(kl),t(Xl),t(we),t(zl),t($l),t(he),t(Wl),t(Ue),t(Rl),t(Yl),t(Ce),t(_l),t(Vl),t(Be)),t(b),m(w,e),m(T,e),m(h,e),m(U,e),m(C,e),m(I,e),m(G,e),m(k,e),m(z,e),m(W,e),m(R,e),m(V,e),m(A,e),m(E,e),m(Q,e),m(S,e),m(q,e),m(L,e),m(P,e),m(D,e),m(ee,e),m(te,e),m(se,e),m(ne,e),m(oe,e),m(pe,e),m(ce,e),m(Me,e),m(be,e),m(je,e),m(Te,e),m(fe,e),m(Ie,e)}}}const Xt='{"title":"Un addestramento completo","local":"un-addestramento-completo","sections":[{"title":"Preparazione all’addestramento","local":"preparazione-alladdestramento","sections":[],"depth":3},{"title":"Il ciclo di addestramento","local":"il-ciclo-di-addestramento","sections":[],"depth":3},{"title":"Il ciclo di valutazione","local":"il-ciclo-di-valutazione","sections":[],"depth":3},{"title":"Potenzia il tuo ciclo di addestramento con 🤗 Accelerate","local":"potenzia-il-tuo-ciclo-di-addestramento-con--accelerate","sections":[],"depth":3}],"depth":1}';function zt(El){return ft(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Nt extends Ct{constructor(b){super(),It(this,b,zt,kt,ht,{})}}export{Nt as component};

Xet Storage Details

Size:
44 kB
·
Xet hash:
8cd816a3e7a689d77993009f7785ab68b04dd7c050dcbb92a9578428624b3c01

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.