Buckets:

rtrm's picture
download
raw
33 kB
import{s as nl,f as ol,o as sl,n as He}from"../chunks/scheduler.36a0863c.js";import{S as rl,i as ul,g as d,s as o,r as h,A as pl,h as f,f as l,c as s,j as zt,u as b,x as $,k as F,y as ml,a as i,v,d as M,t as w,w as T}from"../chunks/index.9c13489a.js";import{T as cl}from"../chunks/Tip.3b06990e.js";import{Y as dl}from"../chunks/Youtube.347c76e5.js";import{C as L}from"../chunks/CodeBlock.05d8ec32.js";import{F as al,M as xe}from"../chunks/Markdown.88297c0b.js";import{H as P,E as fl}from"../chunks/EditOnGithub.e88f2b7b.js";function gl(J){let a,p='Per condividere un modello con la community, hai bisogno di un account su <a href="https://huggingface.co/join" rel="nofollow">huggingface.co</a>. Puoi anche unirti ad un’organizzazione esistente o crearne una nuova.';return{c(){a=d("p"),a.innerHTML=p},l(n){a=f(n,"P",{"data-svelte-h":!0}),$(a)!=="svelte-1pho539"&&(a.innerHTML=p)},m(n,r){i(n,a,r)},p:He,d(n){n&&l(a)}}}function $l(J){let a,p="Specifica <code>from_tf=True</code> per convertire un checkpoint da TensorFlow a PyTorch:",n,r,c;return r=new L({props:{code:"cHRfbW9kZWwlMjAlM0QlMjBEaXN0aWxCZXJ0Rm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIycGF0aCUyRnZlcnNvJTJGaWwtbm9tZS1tYWduaWZpY28tY2hlLWhhaS1zY2VsdG8lMjIlMkMlMjBmcm9tX3RmJTNEVHJ1ZSUwQSklMEFwdF9tb2RlbC5zYXZlX3ByZXRyYWluZWQoJTIycGF0aCUyRnZlcnNvJTJGaWwtbm9tZS1tYWduaWZpY28tY2hlLWhhaS1zY2VsdG8lMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model = DistilBertForSequenceClassification.from_pretrained(
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;path/verso/il-nome-magnifico-che-hai-scelto&quot;</span>, from_tf=<span class="hljs-literal">True</span>
<span class="hljs-meta">... </span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model.save_pretrained(<span class="hljs-string">&quot;path/verso/il-nome-magnifico-che-hai-scelto&quot;</span>)`,wrap:!1}}),{c(){a=d("p"),a.innerHTML=p,n=o(),h(r.$$.fragment)},l(u){a=f(u,"P",{"data-svelte-h":!0}),$(a)!=="svelte-1tus5wd"&&(a.innerHTML=p),n=s(u),b(r.$$.fragment,u)},m(u,y){i(u,a,y),i(u,n,y),v(r,u,y),c=!0},p:He,i(u){c||(M(r.$$.fragment,u),c=!0)},o(u){w(r.$$.fragment,u),c=!1},d(u){u&&(l(a),l(n)),T(r,u)}}}function hl(J){let a,p;return a=new xe({props:{$$slots:{default:[$l]},$$scope:{ctx:J}}}),{c(){h(a.$$.fragment)},l(n){b(a.$$.fragment,n)},m(n,r){v(a,n,r),p=!0},p(n,r){const c={};r&2&&(c.$$scope={dirty:r,ctx:n}),a.$set(c)},i(n){p||(M(a.$$.fragment,n),p=!0)},o(n){w(a.$$.fragment,n),p=!1},d(n){T(a,n)}}}function bl(J){let a,p="Specifica <code>from_pt=True</code> per convertire un checkpoint da PyTorch a TensorFlow:",n,r,c,u,y="Poi puoi salvare il tuo nuovo modello in TensorFlow con il suo nuovo checkpoint:",H,j,k;return r=new L({props:{code:"dGZfbW9kZWwlMjAlM0QlMjBURkRpc3RpbEJlcnRGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJwYXRoJTJGdmVyc28lMkZpbC1ub21lLW1hZ25pZmljby1jaGUtaGFpLXNjZWx0byUyMiUyQyUyMGZyb21fcHQlM0RUcnVlJTBBKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertForSequenceClassification.from_pretrained(
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;path/verso/il-nome-magnifico-che-hai-scelto&quot;</span>, from_pt=<span class="hljs-literal">True</span>
<span class="hljs-meta">... </span>)`,wrap:!1}}),j=new L({props:{code:"dGZfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMnBhdGglMkZ2ZXJzbyUyRmlsLW5vbWUtbWFnbmlmaWNvLWNoZS1oYWktc2NlbHRvJTIyKQ==",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model.save_pretrained(<span class="hljs-string">&quot;path/verso/il-nome-magnifico-che-hai-scelto&quot;</span>)',wrap:!1}}),{c(){a=d("p"),a.innerHTML=p,n=o(),h(r.$$.fragment),c=o(),u=d("p"),u.textContent=y,H=o(),h(j.$$.fragment)},l(g){a=f(g,"P",{"data-svelte-h":!0}),$(a)!=="svelte-1v7d0kb"&&(a.innerHTML=p),n=s(g),b(r.$$.fragment,g),c=s(g),u=f(g,"P",{"data-svelte-h":!0}),$(u)!=="svelte-1qx7qo6"&&(u.textContent=y),H=s(g),b(j.$$.fragment,g)},m(g,W){i(g,a,W),i(g,n,W),v(r,g,W),i(g,c,W),i(g,u,W),i(g,H,W),v(j,g,W),k=!0},p:He,i(g){k||(M(r.$$.fragment,g),M(j.$$.fragment,g),k=!0)},o(g){w(r.$$.fragment,g),w(j.$$.fragment,g),k=!1},d(g){g&&(l(a),l(n),l(c),l(u),l(H)),T(r,g),T(j,g)}}}function vl(J){let a,p;return a=new xe({props:{$$slots:{default:[bl]},$$scope:{ctx:J}}}),{c(){h(a.$$.fragment)},l(n){b(a.$$.fragment,n)},m(n,r){v(a,n,r),p=!0},p(n,r){const c={};r&2&&(c.$$scope={dirty:r,ctx:n}),a.$set(c)},i(n){p||(M(a.$$.fragment,n),p=!0)},o(n){w(a.$$.fragment,n),p=!1},d(n){T(a,n)}}}function Ml(J){let a,p="Se un modello è disponibile in Flax, puoi anche convertire un checkpoint da PyTorch a Flax:",n,r,c;return r=new L({props:{code:"ZmxheF9tb2RlbCUyMCUzRCUyMEZsYXhEaXN0aWxCZXJ0Rm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIycGF0aCUyRnZlcnNvJTJGaWwtbm9tZS1tYWduaWZpY28tY2hlLWhhaS1zY2VsdG8lMjIlMkMlMjBmcm9tX3B0JTNEVHJ1ZSUwQSk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;path/verso/il-nome-magnifico-che-hai-scelto&quot;</span>, from_pt=<span class="hljs-literal">True</span>
<span class="hljs-meta">... </span>)`,wrap:!1}}),{c(){a=d("p"),a.textContent=p,n=o(),h(r.$$.fragment)},l(u){a=f(u,"P",{"data-svelte-h":!0}),$(a)!=="svelte-1scd5nn"&&(a.textContent=p),n=s(u),b(r.$$.fragment,u)},m(u,y){i(u,a,y),i(u,n,y),v(r,u,y),c=!0},p:He,i(u){c||(M(r.$$.fragment,u),c=!0)},o(u){w(r.$$.fragment,u),c=!1},d(u){u&&(l(a),l(n)),T(r,u)}}}function wl(J){let a,p;return a=new xe({props:{$$slots:{default:[Ml]},$$scope:{ctx:J}}}),{c(){h(a.$$.fragment)},l(n){b(a.$$.fragment,n)},m(n,r){v(a,n,r),p=!0},p(n,r){const c={};r&2&&(c.$$scope={dirty:r,ctx:n}),a.$set(c)},i(n){p||(M(a.$$.fragment,n),p=!0)},o(n){w(a.$$.fragment,n),p=!1},d(n){T(a,n)}}}function Tl(J){let a,p,n,r='Condividere un modello nell’Hub è tanto semplice quanto aggiungere un parametro extra o un callback. Ricorda dal <a href="training">tutorial sul fine-tuning</a>, la classe <code>TrainingArguments</code> è 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 <code>push_to_hub=True</code> in <code>TrainingArguments</code>:',c,u,y,H,j="Passa gli argomenti per il training come di consueto al <code>Trainer</code>:",k,g,W,x,_="Dopo aver effettuato il fine-tuning del tuo modello, chiama <code>push_to_hub()</code> sul <code>Trainer</code> 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)!",Z,C,X;return a=new dl({props:{id:"Z1-XMy-GNLQ"}}),u=new L({props:{code:"dHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKG91dHB1dF9kaXIlM0QlMjJpbC1taW8tYmVsbGlzc2ltby1tb2RlbGxvJTIyJTJDJTIwcHVzaF90b19odWIlM0RUcnVlKQ==",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>training_args = TrainingArguments(output_dir=<span class="hljs-string">&quot;il-mio-bellissimo-modello&quot;</span>, push_to_hub=<span class="hljs-literal">True</span>)',wrap:!1}}),g=new L({props:{code:"dHJhaW5lciUyMCUzRCUyMFRyYWluZXIoJTBBJTIwJTIwJTIwJTIwbW9kZWwlM0Rtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwdHJhaW5fZGF0YXNldCUzRHNtYWxsX3RyYWluX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0RzbWFsbF9ldmFsX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEEp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>trainer = Trainer(
<span class="hljs-meta">... </span> model=model,
<span class="hljs-meta">... </span> args=training_args,
<span class="hljs-meta">... </span> train_dataset=small_train_dataset,
<span class="hljs-meta">... </span> eval_dataset=small_eval_dataset,
<span class="hljs-meta">... </span> compute_metrics=compute_metrics,
<span class="hljs-meta">... </span>)`,wrap:!1}}),C=new L({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>trainer.push_to_hub()',wrap:!1}}),{c(){h(a.$$.fragment),p=o(),n=d("p"),n.innerHTML=r,c=o(),h(u.$$.fragment),y=o(),H=d("p"),H.innerHTML=j,k=o(),h(g.$$.fragment),W=o(),x=d("p"),x.innerHTML=_,Z=o(),h(C.$$.fragment)},l(m){b(a.$$.fragment,m),p=s(m),n=f(m,"P",{"data-svelte-h":!0}),$(n)!=="svelte-54ntez"&&(n.innerHTML=r),c=s(m),b(u.$$.fragment,m),y=s(m),H=f(m,"P",{"data-svelte-h":!0}),$(H)!=="svelte-1bkwfba"&&(H.innerHTML=j),k=s(m),b(g.$$.fragment,m),W=s(m),x=f(m,"P",{"data-svelte-h":!0}),$(x)!=="svelte-7ldac1"&&(x.innerHTML=_),Z=s(m),b(C.$$.fragment,m)},m(m,z){v(a,m,z),i(m,p,z),i(m,n,z),i(m,c,z),v(u,m,z),i(m,y,z),i(m,H,z),i(m,k,z),v(g,m,z),i(m,W,z),i(m,x,z),i(m,Z,z),v(C,m,z),X=!0},p:He,i(m){X||(M(a.$$.fragment,m),M(u.$$.fragment,m),M(g.$$.fragment,m),M(C.$$.fragment,m),X=!0)},o(m){w(a.$$.fragment,m),w(u.$$.fragment,m),w(g.$$.fragment,m),w(C.$$.fragment,m),X=!1},d(m){m&&(l(p),l(n),l(c),l(y),l(H),l(k),l(W),l(x),l(Z)),T(a,m),T(u,m),T(g,m),T(C,m)}}}function _l(J){let a,p;return a=new xe({props:{$$slots:{default:[Tl]},$$scope:{ctx:J}}}),{c(){h(a.$$.fragment)},l(n){b(a.$$.fragment,n)},m(n,r){v(a,n,r),p=!0},p(n,r){const c={};r&2&&(c.$$scope={dirty:r,ctx:n}),a.$set(c)},i(n){p||(M(a.$$.fragment,n),p=!0)},o(n){w(a.$$.fragment,n),p=!1},d(n){T(a,n)}}}function yl(J){let a,p="Condividi un modello nell’Hub con <code>PushToHubCallback</code>. Nella funzione <code>PushToHubCallback</code>, aggiungi:",n,r,c="<li>Una directory di output per il tuo modello.</li> <li>Un tokenizer.</li> <li>L’<code>hub_model_id</code>, che è il tuo username sull’Hub e il nome del modello.</li>",u,y,H,j,k='Aggiungi il callback a <a href="https://keras.io/api/models/model_training_apis/" rel="nofollow"><code>fit</code></a>, e 🤗 Transformers caricherà il modello allenato nell’Hub:',g,W,x;return y=new L({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBJTBBcHVzaF90b19odWJfY2FsbGJhY2slMjAlM0QlMjBQdXNoVG9IdWJDYWxsYmFjayglMEElMjAlMjAlMjAlMjBvdXRwdXRfZGlyJTNEJTIyLiUyRmlsX3BhdGhfZG92ZV9zYWx2YXJlX2lsX3R1b19tb2RlbGxvJTIyJTJDJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVyJTNEdG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwaHViX21vZGVsX2lkJTNEJTIyaWwtdHVvLXVzZXJuYW1lJTJGaWwtbWlvLWJlbGxpc3NpbW8tbW9kZWxsbyUyMiUyQyUwQSk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PushToHubCallback
<span class="hljs-meta">&gt;&gt;&gt; </span>push_to_hub_callback = PushToHubCallback(
<span class="hljs-meta">... </span> output_dir=<span class="hljs-string">&quot;./il_path_dove_salvare_il_tuo_modello&quot;</span>,
<span class="hljs-meta">... </span> tokenizer=tokenizer,
<span class="hljs-meta">... </span> hub_model_id=<span class="hljs-string">&quot;il-tuo-username/il-mio-bellissimo-modello&quot;</span>,
<span class="hljs-meta">... </span>)`,wrap:!1}}),W=new L({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl92YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjBlcG9jaHMlM0QzJTJDJTIwY2FsbGJhY2tzJTNEcHVzaF90b19odWJfY2FsbGJhY2sp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=<span class="hljs-number">3</span>, callbacks=push_to_hub_callback)',wrap:!1}}),{c(){a=d("p"),a.innerHTML=p,n=o(),r=d("ul"),r.innerHTML=c,u=o(),h(y.$$.fragment),H=o(),j=d("p"),j.innerHTML=k,g=o(),h(W.$$.fragment)},l(_){a=f(_,"P",{"data-svelte-h":!0}),$(a)!=="svelte-aa26jg"&&(a.innerHTML=p),n=s(_),r=f(_,"UL",{"data-svelte-h":!0}),$(r)!=="svelte-xulqs"&&(r.innerHTML=c),u=s(_),b(y.$$.fragment,_),H=s(_),j=f(_,"P",{"data-svelte-h":!0}),$(j)!=="svelte-1ed1t6j"&&(j.innerHTML=k),g=s(_),b(W.$$.fragment,_)},m(_,Z){i(_,a,Z),i(_,n,Z),i(_,r,Z),i(_,u,Z),v(y,_,Z),i(_,H,Z),i(_,j,Z),i(_,g,Z),v(W,_,Z),x=!0},p:He,i(_){x||(M(y.$$.fragment,_),M(W.$$.fragment,_),x=!0)},o(_){w(y.$$.fragment,_),w(W.$$.fragment,_),x=!1},d(_){_&&(l(a),l(n),l(r),l(u),l(H),l(j),l(g)),T(y,_),T(W,_)}}}function Wl(J){let a,p;return a=new xe({props:{$$slots:{default:[yl]},$$scope:{ctx:J}}}),{c(){h(a.$$.fragment)},l(n){b(a.$$.fragment,n)},m(n,r){v(a,n,r),p=!0},p(n,r){const c={};r&2&&(c.$$scope={dirty:r,ctx:n}),a.$set(c)},i(n){p||(M(a.$$.fragment,n),p=!0)},o(n){w(a.$$.fragment,n),p=!1},d(n){T(a,n)}}}function jl(J){let a,p,n,r,c,u,y,H="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.",j,k,g='In questo tutorial, imparerai due metodi per la condivisione di un modello trained o fine-tuned nel <a href="https://huggingface.co/models" rel="nofollow">Model Hub</a>:',W,x,_="<li>Condividi in modo programmatico i tuoi file nell’Hub.</li> <li>Trascina i tuoi file nell’Hub mediante interfaccia grafica.</li>",Z,C,X,m,z,Ze,R,Le,Y,Jt="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.",Ue,I,Ct='Il versionamento all’interno del Model Hub è basato su git e <a href="https://git-lfs.github.com/" rel="nofollow">git-lfs</a>. 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 <em>revisions</em>, un metodo per appuntare una versione specifica di un modello con un hash di commit, un tag o un branch.',Ge,q,Ht="Come risultato, puoi caricare una specifica versione di un modello con il parametro <code>revision</code>:",Fe,B,Pe,V,kt="Anche i file possono essere modificati facilmente in un repository ed è possibile visualizzare la cronologia dei commit e le differenze:",Xe,N,xt='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/vis_diff.png" alt="vis_diff"/>',Re,E,Ye,Q,Zt="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 <code>~/.cache/</code>):",Ie,S,qe,A,Lt='Se stai usando un notebook come Jupyter o Colaboratory, assicurati di avere la libreria <a href="https://huggingface.co/docs/hub/adding-a-library" rel="nofollow"><code>huggingface_hub</code></a> installata. Questa libreria ti permette di interagire in maniera programmatica con l’Hub.',Be,D,Ve,K,Ut='Utilizza <code>notebook_login</code> per accedere all’Hub, e segui il link <a href="https://huggingface.co/settings/token" rel="nofollow">qui</a> per generare un token con cui effettuare il login:',Ne,O,Ee,ee,Qe,te,Gt="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.",Se,le,Ft='Convertire un checkpoint per un altro framework è semplice. Assicurati di avere PyTorch e TensorFlow installati (vedi <a href="installation">qui</a> per le istruzioni d’installazione), e poi trova il modello specifico per il tuo compito nell’altro framework.',Ae,U,De,ie,Ke,G,Oe,ae,et,ne,Pt="Puoi anche chiamare <code>push_to_hub</code> direttamente sul tuo modello per caricarlo nell’Hub.",tt,oe,Xt="Specifica il nome del tuo modello in <code>push_to_hub</code>:",lt,se,it,re,Rt="Questo crea un repository sotto il proprio username con il nome del modello <code>il-mio-bellissimo-modello</code>. Ora chiunque può caricare il tuo modello con la funzione <code>from_pretrained</code>:",at,ue,nt,pe,Yt="Se fai parte di un’organizzazione e vuoi invece condividere un modello sotto il nome dell’organizzazione, aggiungi il parametro <code>organization</code>:",ot,me,st,ce,It="La funzione <code>push_to_hub</code> può essere anche utilizzata per aggiungere altri file al repository del modello. Per esempio, aggiungi un tokenizer ad un repository di un modello:",rt,de,ut,fe,qt="O magari potresti voler aggiungere la versione di TensorFlow del tuo modello PyTorch a cui hai fatto fine-tuning:",pt,ge,mt,$e,Bt="Ora quando navighi nel tuo profilo Hugging Face, dovresti vedere il tuo repository del modello appena creato. Premendo sulla scheda <strong>Files</strong> vengono visualizzati tutti i file caricati nel repository.",ct,he,Vt='Per maggiori dettagli su come creare e caricare file ad un repository, fai riferimento alla documentazione <a href="https://huggingface.co/docs/hub/how-to-upstream" rel="nofollow">qui</a>.',dt,be,ft,ve,Nt='Chi preferisce un approccio senza codice può caricare un modello tramite l’interfaccia web dell’hub. Visita <a href="https://huggingface.co/new" rel="nofollow">huggingface.co/new</a> per creare un nuovo repository:',gt,Me,Et='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/new_model_repo.png" alt="new_model_repo"/>',$t,we,Qt="Da qui, aggiungi alcune informazioni sul tuo modello:",ht,Te,St="<li>Seleziona il/la <strong>owner</strong> del repository. Puoi essere te o qualunque organizzazione di cui fai parte.</li> <li>Scegli un nome per il tuo modello, il quale sarà anche il nome del repository.</li> <li>Scegli se il tuo modello è pubblico o privato.</li> <li>Specifica la licenza utilizzata per il tuo modello.</li>",bt,_e,At="Ora premi sulla scheda <strong>Files</strong> e premi sul pulsante <strong>Add file</strong> per caricare un nuovo file al tuo repository. Trascina poi un file per caricarlo e aggiungere un messaggio di commit.",vt,ye,Dt='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/upload_file.png" alt="upload_file"/>',Mt,We,wt,je,Kt="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 <code>README.md</code>. Puoi aggiungere una scheda del modello:",Tt,ze,Ot="<li>Creando manualmente e caricando un file <code>README.md</code>.</li> <li>Premendo sul pulsante <strong>Edit model card</strong> nel repository del tuo modello.</li>",_t,Je,el='Dai un’occhiata alla <a href="https://huggingface.co/distilbert/distilbert-base-uncased" rel="nofollow">scheda del modello</a> 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 <code>README.md</code>, come l’impatto ambientale o widget di esempio, fai riferimento alla documentazione <a href="https://huggingface.co/docs/hub/models-cards" rel="nofollow">qui</a>.',yt,Ce,Wt,ke,jt;return c=new P({props:{title:"Condividi un modello",local:"condividi-un-modello",headingTag:"h1"}}),z=new cl({props:{$$slots:{default:[gl]},$$scope:{ctx:J}}}),R=new P({props:{title:"Caratteristiche dei repository",local:"caratteristiche-dei-repository",headingTag:"h2"}}),B=new L({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMmp1bGllbi1jJTJGRXNwZXJCRVJUby1zbWFsbCUyMiUyQyUyMHJldmlzaW9uJTNEJTIyNGM3Nzk4MiUyMiUyMCUyMCUyMyUyMG5vbWUlMjBkaSUyMHVuJTIwdGFnJTJDJTIwZGklMjB1biUyMGJyYW5jaCUyQyUyMG8lMjBjb21taXQlMjBoYXNoJTBBKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>model = AutoModel.from_pretrained(
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;julien-c/EsperBERTo-small&quot;</span>, revision=<span class="hljs-string">&quot;4c77982&quot;</span> <span class="hljs-comment"># nome di un tag, di un branch, o commit hash</span>
<span class="hljs-meta">... </span>)`,wrap:!1}}),E=new P({props:{title:"Configurazione",local:"configurazione",headingTag:"h2"}}),S=new L({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),D=new L({props:{code:"cGlwJTIwaW5zdGFsbCUyMGh1Z2dpbmdmYWNlX2h1Yg==",highlighted:"pip install huggingface_hub",wrap:!1}}),O=new L({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
<span class="hljs-meta">&gt;&gt;&gt; </span>notebook_login()`,wrap:!1}}),ee=new P({props:{title:"Converti un modello per tutti i framework",local:"converti-un-modello-per-tutti-i-framework",headingTag:"h2"}}),U=new al({props:{pytorch:!0,tensorflow:!0,jax:!0,$$slots:{jax:[wl],tensorflow:[vl],pytorch:[hl]},$$scope:{ctx:J}}}),ie=new P({props:{title:"Condividi un modello durante il training",local:"condividi-un-modello-durante-il-training",headingTag:"h2"}}),G=new al({props:{pytorch:!0,tensorflow:!0,jax:!1,$$slots:{tensorflow:[Wl],pytorch:[_l]},$$scope:{ctx:J}}}),ae=new P({props:{title:"Utilizzare la funzione push_to_hub",local:"utilizzare-la-funzione-pushtohub",headingTag:"h2"}}),se=new L({props:{code:"cHRfbW9kZWwucHVzaF90b19odWIoJTIyaWwtbWlvLWJlbGxpc3NpbW8tbW9kZWxsbyUyMik=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model.push_to_hub(<span class="hljs-string">&quot;il-mio-bellissimo-modello&quot;</span>)',wrap:!1}}),ue=new L({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJpbC10dW8tdXNlcm5hbWUlMkZpbC1taW8tYmVsbGlzc2ltby1tb2RlbGxvJTIyKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModel
<span class="hljs-meta">&gt;&gt;&gt; </span>model = AutoModel.from_pretrained(<span class="hljs-string">&quot;il-tuo-username/il-mio-bellissimo-modello&quot;</span>)`,wrap:!1}}),me=new L({props:{code:"cHRfbW9kZWwucHVzaF90b19odWIoJTIyaWwtbWlvLWJlbGxpc3NpbW8tbW9kZWxsbyUyMiUyQyUyMG9yZ2FuaXphdGlvbiUzRCUyMmxhLW1pYS1mYW50YXN0aWNhLW9yZyUyMik=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model.push_to_hub(<span class="hljs-string">&quot;il-mio-bellissimo-modello&quot;</span>, organization=<span class="hljs-string">&quot;la-mia-fantastica-org&quot;</span>)',wrap:!1}}),de=new L({props:{code:"dG9rZW5pemVyLnB1c2hfdG9faHViKCUyMmlsLW1pby1iZWxsaXNzaW1vLW1vZGVsbG8lMjIp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer.push_to_hub(<span class="hljs-string">&quot;il-mio-bellissimo-modello&quot;</span>)',wrap:!1}}),ge=new L({props:{code:"dGZfbW9kZWwucHVzaF90b19odWIoJTIyaWwtbWlvLWJlbGxpc3NpbW8tbW9kZWxsbyUyMik=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model.push_to_hub(<span class="hljs-string">&quot;il-mio-bellissimo-modello&quot;</span>)',wrap:!1}}),be=new P({props:{title:"Carica un modello utilizzando l’interfaccia web",local:"carica-un-modello-utilizzando-linterfaccia-web",headingTag:"h2"}}),We=new P({props:{title:"Aggiungi una scheda del modello",local:"aggiungi-una-scheda-del-modello",headingTag:"h2"}}),Ce=new fl({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/it/model_sharing.md"}}),{c(){a=d("meta"),p=o(),n=d("p"),r=o(),h(c.$$.fragment),u=o(),y=d("p"),y.textContent=H,j=o(),k=d("p"),k.innerHTML=g,W=o(),x=d("ul"),x.innerHTML=_,Z=o(),C=d("iframe"),m=o(),h(z.$$.fragment),Ze=o(),h(R.$$.fragment),Le=o(),Y=d("p"),Y.textContent=Jt,Ue=o(),I=d("p"),I.innerHTML=Ct,Ge=o(),q=d("p"),q.innerHTML=Ht,Fe=o(),h(B.$$.fragment),Pe=o(),V=d("p"),V.textContent=kt,Xe=o(),N=d("p"),N.innerHTML=xt,Re=o(),h(E.$$.fragment),Ye=o(),Q=d("p"),Q.innerHTML=Zt,Ie=o(),h(S.$$.fragment),qe=o(),A=d("p"),A.innerHTML=Lt,Be=o(),h(D.$$.fragment),Ve=o(),K=d("p"),K.innerHTML=Ut,Ne=o(),h(O.$$.fragment),Ee=o(),h(ee.$$.fragment),Qe=o(),te=d("p"),te.textContent=Gt,Se=o(),le=d("p"),le.innerHTML=Ft,Ae=o(),h(U.$$.fragment),De=o(),h(ie.$$.fragment),Ke=o(),h(G.$$.fragment),Oe=o(),h(ae.$$.fragment),et=o(),ne=d("p"),ne.innerHTML=Pt,tt=o(),oe=d("p"),oe.innerHTML=Xt,lt=o(),h(se.$$.fragment),it=o(),re=d("p"),re.innerHTML=Rt,at=o(),h(ue.$$.fragment),nt=o(),pe=d("p"),pe.innerHTML=Yt,ot=o(),h(me.$$.fragment),st=o(),ce=d("p"),ce.innerHTML=It,rt=o(),h(de.$$.fragment),ut=o(),fe=d("p"),fe.textContent=qt,pt=o(),h(ge.$$.fragment),mt=o(),$e=d("p"),$e.innerHTML=Bt,ct=o(),he=d("p"),he.innerHTML=Vt,dt=o(),h(be.$$.fragment),ft=o(),ve=d("p"),ve.innerHTML=Nt,gt=o(),Me=d("p"),Me.innerHTML=Et,$t=o(),we=d("p"),we.textContent=Qt,ht=o(),Te=d("ul"),Te.innerHTML=St,bt=o(),_e=d("p"),_e.innerHTML=At,vt=o(),ye=d("p"),ye.innerHTML=Dt,Mt=o(),h(We.$$.fragment),wt=o(),je=d("p"),je.innerHTML=Kt,Tt=o(),ze=d("ul"),ze.innerHTML=Ot,_t=o(),Je=d("p"),Je.innerHTML=el,yt=o(),h(Ce.$$.fragment),Wt=o(),ke=d("p"),this.h()},l(e){const t=pl("svelte-u9bgzb",document.head);a=f(t,"META",{name:!0,content:!0}),t.forEach(l),p=s(e),n=f(e,"P",{}),zt(n).forEach(l),r=s(e),b(c.$$.fragment,e),u=s(e),y=f(e,"P",{"data-svelte-h":!0}),$(y)!=="svelte-4bxvjr"&&(y.textContent=H),j=s(e),k=f(e,"P",{"data-svelte-h":!0}),$(k)!=="svelte-1lo3rd5"&&(k.innerHTML=g),W=s(e),x=f(e,"UL",{"data-svelte-h":!0}),$(x)!=="svelte-51oh88"&&(x.innerHTML=_),Z=s(e),C=f(e,"IFRAME",{width:!0,height:!0,src:!0,title:!0,frameborder:!0,allow:!0}),zt(C).forEach(l),m=s(e),b(z.$$.fragment,e),Ze=s(e),b(R.$$.fragment,e),Le=s(e),Y=f(e,"P",{"data-svelte-h":!0}),$(Y)!=="svelte-163mccq"&&(Y.textContent=Jt),Ue=s(e),I=f(e,"P",{"data-svelte-h":!0}),$(I)!=="svelte-1vxz8el"&&(I.innerHTML=Ct),Ge=s(e),q=f(e,"P",{"data-svelte-h":!0}),$(q)!=="svelte-11wmj9y"&&(q.innerHTML=Ht),Fe=s(e),b(B.$$.fragment,e),Pe=s(e),V=f(e,"P",{"data-svelte-h":!0}),$(V)!=="svelte-22ypu2"&&(V.textContent=kt),Xe=s(e),N=f(e,"P",{"data-svelte-h":!0}),$(N)!=="svelte-hnu2bf"&&(N.innerHTML=xt),Re=s(e),b(E.$$.fragment,e),Ye=s(e),Q=f(e,"P",{"data-svelte-h":!0}),$(Q)!=="svelte-6ptylu"&&(Q.innerHTML=Zt),Ie=s(e),b(S.$$.fragment,e),qe=s(e),A=f(e,"P",{"data-svelte-h":!0}),$(A)!=="svelte-oe6z4h"&&(A.innerHTML=Lt),Be=s(e),b(D.$$.fragment,e),Ve=s(e),K=f(e,"P",{"data-svelte-h":!0}),$(K)!=="svelte-1v1tu56"&&(K.innerHTML=Ut),Ne=s(e),b(O.$$.fragment,e),Ee=s(e),b(ee.$$.fragment,e),Qe=s(e),te=f(e,"P",{"data-svelte-h":!0}),$(te)!=="svelte-4ymrgz"&&(te.textContent=Gt),Se=s(e),le=f(e,"P",{"data-svelte-h":!0}),$(le)!=="svelte-60md1j"&&(le.innerHTML=Ft),Ae=s(e),b(U.$$.fragment,e),De=s(e),b(ie.$$.fragment,e),Ke=s(e),b(G.$$.fragment,e),Oe=s(e),b(ae.$$.fragment,e),et=s(e),ne=f(e,"P",{"data-svelte-h":!0}),$(ne)!=="svelte-la4zk3"&&(ne.innerHTML=Pt),tt=s(e),oe=f(e,"P",{"data-svelte-h":!0}),$(oe)!=="svelte-1gtt17g"&&(oe.innerHTML=Xt),lt=s(e),b(se.$$.fragment,e),it=s(e),re=f(e,"P",{"data-svelte-h":!0}),$(re)!=="svelte-1hw16pv"&&(re.innerHTML=Rt),at=s(e),b(ue.$$.fragment,e),nt=s(e),pe=f(e,"P",{"data-svelte-h":!0}),$(pe)!=="svelte-30ijsq"&&(pe.innerHTML=Yt),ot=s(e),b(me.$$.fragment,e),st=s(e),ce=f(e,"P",{"data-svelte-h":!0}),$(ce)!=="svelte-vgzq0b"&&(ce.innerHTML=It),rt=s(e),b(de.$$.fragment,e),ut=s(e),fe=f(e,"P",{"data-svelte-h":!0}),$(fe)!=="svelte-1jayhzo"&&(fe.textContent=qt),pt=s(e),b(ge.$$.fragment,e),mt=s(e),$e=f(e,"P",{"data-svelte-h":!0}),$($e)!=="svelte-4xh8l6"&&($e.innerHTML=Bt),ct=s(e),he=f(e,"P",{"data-svelte-h":!0}),$(he)!=="svelte-gnryfg"&&(he.innerHTML=Vt),dt=s(e),b(be.$$.fragment,e),ft=s(e),ve=f(e,"P",{"data-svelte-h":!0}),$(ve)!=="svelte-1isubst"&&(ve.innerHTML=Nt),gt=s(e),Me=f(e,"P",{"data-svelte-h":!0}),$(Me)!=="svelte-ahj3l9"&&(Me.innerHTML=Et),$t=s(e),we=f(e,"P",{"data-svelte-h":!0}),$(we)!=="svelte-1jkcecg"&&(we.textContent=Qt),ht=s(e),Te=f(e,"UL",{"data-svelte-h":!0}),$(Te)!=="svelte-9wadvi"&&(Te.innerHTML=St),bt=s(e),_e=f(e,"P",{"data-svelte-h":!0}),$(_e)!=="svelte-1mqdmic"&&(_e.innerHTML=At),vt=s(e),ye=f(e,"P",{"data-svelte-h":!0}),$(ye)!=="svelte-32sxm9"&&(ye.innerHTML=Dt),Mt=s(e),b(We.$$.fragment,e),wt=s(e),je=f(e,"P",{"data-svelte-h":!0}),$(je)!=="svelte-5vmxjh"&&(je.innerHTML=Kt),Tt=s(e),ze=f(e,"UL",{"data-svelte-h":!0}),$(ze)!=="svelte-ownw23"&&(ze.innerHTML=Ot),_t=s(e),Je=f(e,"P",{"data-svelte-h":!0}),$(Je)!=="svelte-2n5t6t"&&(Je.innerHTML=el),yt=s(e),b(Ce.$$.fragment,e),Wt=s(e),ke=f(e,"P",{}),zt(ke).forEach(l),this.h()},h(){F(a,"name","hf:doc:metadata"),F(a,"content",zl),F(C,"width","560"),F(C,"height","315"),ol(C.src,X="https://www.youtube.com/embed/XvSGPZFEjDY")||F(C,"src",X),F(C,"title","YouTube video player"),F(C,"frameborder","0"),F(C,"allow",`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope;
picture-in-picture`),C.allowFullscreen=""},m(e,t){ml(document.head,a),i(e,p,t),i(e,n,t),i(e,r,t),v(c,e,t),i(e,u,t),i(e,y,t),i(e,j,t),i(e,k,t),i(e,W,t),i(e,x,t),i(e,Z,t),i(e,C,t),i(e,m,t),v(z,e,t),i(e,Ze,t),v(R,e,t),i(e,Le,t),i(e,Y,t),i(e,Ue,t),i(e,I,t),i(e,Ge,t),i(e,q,t),i(e,Fe,t),v(B,e,t),i(e,Pe,t),i(e,V,t),i(e,Xe,t),i(e,N,t),i(e,Re,t),v(E,e,t),i(e,Ye,t),i(e,Q,t),i(e,Ie,t),v(S,e,t),i(e,qe,t),i(e,A,t),i(e,Be,t),v(D,e,t),i(e,Ve,t),i(e,K,t),i(e,Ne,t),v(O,e,t),i(e,Ee,t),v(ee,e,t),i(e,Qe,t),i(e,te,t),i(e,Se,t),i(e,le,t),i(e,Ae,t),v(U,e,t),i(e,De,t),v(ie,e,t),i(e,Ke,t),v(G,e,t),i(e,Oe,t),v(ae,e,t),i(e,et,t),i(e,ne,t),i(e,tt,t),i(e,oe,t),i(e,lt,t),v(se,e,t),i(e,it,t),i(e,re,t),i(e,at,t),v(ue,e,t),i(e,nt,t),i(e,pe,t),i(e,ot,t),v(me,e,t),i(e,st,t),i(e,ce,t),i(e,rt,t),v(de,e,t),i(e,ut,t),i(e,fe,t),i(e,pt,t),v(ge,e,t),i(e,mt,t),i(e,$e,t),i(e,ct,t),i(e,he,t),i(e,dt,t),v(be,e,t),i(e,ft,t),i(e,ve,t),i(e,gt,t),i(e,Me,t),i(e,$t,t),i(e,we,t),i(e,ht,t),i(e,Te,t),i(e,bt,t),i(e,_e,t),i(e,vt,t),i(e,ye,t),i(e,Mt,t),v(We,e,t),i(e,wt,t),i(e,je,t),i(e,Tt,t),i(e,ze,t),i(e,_t,t),i(e,Je,t),i(e,yt,t),v(Ce,e,t),i(e,Wt,t),i(e,ke,t),jt=!0},p(e,[t]){const tl={};t&2&&(tl.$$scope={dirty:t,ctx:e}),z.$set(tl);const ll={};t&2&&(ll.$$scope={dirty:t,ctx:e}),U.$set(ll);const il={};t&2&&(il.$$scope={dirty:t,ctx:e}),G.$set(il)},i(e){jt||(M(c.$$.fragment,e),M(z.$$.fragment,e),M(R.$$.fragment,e),M(B.$$.fragment,e),M(E.$$.fragment,e),M(S.$$.fragment,e),M(D.$$.fragment,e),M(O.$$.fragment,e),M(ee.$$.fragment,e),M(U.$$.fragment,e),M(ie.$$.fragment,e),M(G.$$.fragment,e),M(ae.$$.fragment,e),M(se.$$.fragment,e),M(ue.$$.fragment,e),M(me.$$.fragment,e),M(de.$$.fragment,e),M(ge.$$.fragment,e),M(be.$$.fragment,e),M(We.$$.fragment,e),M(Ce.$$.fragment,e),jt=!0)},o(e){w(c.$$.fragment,e),w(z.$$.fragment,e),w(R.$$.fragment,e),w(B.$$.fragment,e),w(E.$$.fragment,e),w(S.$$.fragment,e),w(D.$$.fragment,e),w(O.$$.fragment,e),w(ee.$$.fragment,e),w(U.$$.fragment,e),w(ie.$$.fragment,e),w(G.$$.fragment,e),w(ae.$$.fragment,e),w(se.$$.fragment,e),w(ue.$$.fragment,e),w(me.$$.fragment,e),w(de.$$.fragment,e),w(ge.$$.fragment,e),w(be.$$.fragment,e),w(We.$$.fragment,e),w(Ce.$$.fragment,e),jt=!1},d(e){e&&(l(p),l(n),l(r),l(u),l(y),l(j),l(k),l(W),l(x),l(Z),l(C),l(m),l(Ze),l(Le),l(Y),l(Ue),l(I),l(Ge),l(q),l(Fe),l(Pe),l(V),l(Xe),l(N),l(Re),l(Ye),l(Q),l(Ie),l(qe),l(A),l(Be),l(Ve),l(K),l(Ne),l(Ee),l(Qe),l(te),l(Se),l(le),l(Ae),l(De),l(Ke),l(Oe),l(et),l(ne),l(tt),l(oe),l(lt),l(it),l(re),l(at),l(nt),l(pe),l(ot),l(st),l(ce),l(rt),l(ut),l(fe),l(pt),l(mt),l($e),l(ct),l(he),l(dt),l(ft),l(ve),l(gt),l(Me),l($t),l(we),l(ht),l(Te),l(bt),l(_e),l(vt),l(ye),l(Mt),l(wt),l(je),l(Tt),l(ze),l(_t),l(Je),l(yt),l(Wt),l(ke)),l(a),T(c,e),T(z,e),T(R,e),T(B,e),T(E,e),T(S,e),T(D,e),T(O,e),T(ee,e),T(U,e),T(ie,e),T(G,e),T(ae,e),T(se,e),T(ue,e),T(me,e),T(de,e),T(ge,e),T(be,e),T(We,e),T(Ce,e)}}}const zl='{"title":"Condividi un modello","local":"condividi-un-modello","sections":[{"title":"Caratteristiche dei repository","local":"caratteristiche-dei-repository","sections":[],"depth":2},{"title":"Configurazione","local":"configurazione","sections":[],"depth":2},{"title":"Converti un modello per tutti i framework","local":"converti-un-modello-per-tutti-i-framework","sections":[],"depth":2},{"title":"Condividi un modello durante il training","local":"condividi-un-modello-durante-il-training","sections":[],"depth":2},{"title":"Utilizzare la funzione push_to_hub","local":"utilizzare-la-funzione-pushtohub","sections":[],"depth":2},{"title":"Carica un modello utilizzando l’interfaccia web","local":"carica-un-modello-utilizzando-linterfaccia-web","sections":[],"depth":2},{"title":"Aggiungi una scheda del modello","local":"aggiungi-una-scheda-del-modello","sections":[],"depth":2}],"depth":1}';function Jl(J){return sl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Gl extends rl{constructor(a){super(),ul(this,a,Jl,jl,nl,{})}}export{Gl as component};

Xet Storage Details

Size:
33 kB
·
Xet hash:
ee7f6c53ef7b0357a28aea5b79edb620997ce8b696d427c2e831be80127fd860

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