import{s as ss,f as ns,o as is,n as sa}from"../chunks/scheduler.37c15a92.js";import{S as rs,i as ps,g as U,s as r,r as y,A as cs,h as f,f as a,c as p,j as Jt,u as J,x as j,k as Xe,y as us,a as s,v as T,t as M,b as cl,d as u,w,e as es,p as ul}from"../chunks/index.2bf4358c.js";import{T as Ml}from"../chunks/Tip.363c041f.js";import{Y as Tt}from"../chunks/Youtube.1e50a667.js";import{C as I}from"../chunks/CodeBlock.4e987730.js";import{C as ts}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as Ms}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as ma,E as os}from"../chunks/getInferenceSnippets.80a69898.js";function ms(C){let t,c;return t=new ts({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_tf.ipynb"}]}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function ds(C){let t,c;return t=new ts({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_pt.ipynb"}]}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function ys(C){let t,c="Preantrenarea modelului de limbaj va dura ceva timp. Vă sugerăm să rulați mai întâi bucla de antrenare pe un sample de date prin decomentarea celor două linii parțiale de mai sus și să vă asigurați că antrenarea se finalizează cu succes și că modelele sunt stocate. Nimic nu este mai frustrant decât o rulare de antrenare care eșuează la ultimul pas pentru că ați uitat să creați un folder sau pentru că există o greșeală de tipar la sfârșitul buclei de antrenare!";return{c(){t=U("p"),t.textContent=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-p87iwd"&&(t.textContent=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Js(C){let t,c="✏️ <strong>Încercați!</strong> Eliminarea tuturor bucăților care sunt mai mici decât dimensiunea contextului nu a fost o problemă majoră aici, deoarece folosim ferestre de context mici. Pe măsură ce creșteți dimensiunea contextului (sau dacă aveți un corpus de documente scurte), fracțiunea de segmente care sunt aruncate va crește și ea. O modalitate mai eficientă de a pregăti datele este de a uni toate sampleurile tokenizate într-un batch cu un token <code>eos_token_id</code> între ele, iar apoi de a efectua chunkingul pe secvențele concatenate. Ca exercițiu, modificați funcția <code>tokenize()</code> pentru a utiliza această abordare. Rețineți că veți dori să setați <code>truncation=False</code> și să eliminați celelalte argumente din tokenizer pentru a obține secvența completă de token IDs.";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-13vype2"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Ts(C){let t,c,n,o="Cu această configurație, putem încărca un nou model. Rețineți că aceasta este prima dată când nu folosim funcția <code>from_pretrained()</code>, deoarece inițializăm noi înșine un model:",_,b,$,Z,k;return t=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkdQVDJMTUhlYWRNb2RlbCUyQyUyMEF1dG9Db25maWclMEElMEFjb25maWclMjAlM0QlMjBBdXRvQ29uZmlnLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJncHQyJTIyJTJDJTBBJTIwJTIwJTIwJTIwdm9jYWJfc2l6ZSUzRGxlbih0b2tlbml6ZXIpJTJDJTBBJTIwJTIwJTIwJTIwbl9jdHglM0Rjb250ZXh0X2xlbmd0aCUyQyUwQSUyMCUyMCUyMCUyMGJvc190b2tlbl9pZCUzRHRva2VuaXplci5ib3NfdG9rZW5faWQlMkMlMEElMjAlMjAlMjAlMjBlb3NfdG9rZW5faWQlM0R0b2tlbml6ZXIuZW9zX3Rva2VuX2lkJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFGPT2LMHeadModel, AutoConfig

config = AutoConfig.from_pretrained(
    <span class="hljs-string">&quot;gpt2&quot;</span>,
    vocab_size=<span class="hljs-built_in">len</span>(tokenizer),
    n_ctx=context_length,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
)`,wrap:!1}}),b=new I({props:{code:"bW9kZWwlMjAlM0QlMjBURkdQVDJMTUhlYWRNb2RlbChjb25maWcpJTBBbW9kZWwobW9kZWwuZHVtbXlfaW5wdXRzKSUyMCUyMCUyMyUyMEJ1aWxkcyUyMHRoZSUyMG1vZGVsJTBBbW9kZWwuc3VtbWFyeSgp",highlighted:`model = TFGPT2LMHeadModel(config)
model(model.dummy_inputs)  <span class="hljs-comment"># Builds the model</span>
model.summary()`,wrap:!1}}),Z=new I({props:{code:"X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18lMEFMYXllciUyMCh0eXBlKSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME91dHB1dCUyMFNoYXBlJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUGFyYW0lMjAlMjMlMjAlMjAlMjAlMEElM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlMEF0cmFuc2Zvcm1lciUyMChURkdQVDJNYWluTGF5ZXIlMjBtdWx0aXBsZSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDEyNDI0MjQzMiUyMCUwQSUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUwQVRvdGFsJTIwcGFyYW1zJTNBJTIwMTI0JTJDMjQyJTJDNDMyJTBBVHJhaW5hYmxlJTIwcGFyYW1zJTNBJTIwMTI0JTJDMjQyJTJDNDMyJTBBTm9uLXRyYWluYWJsZSUyMHBhcmFtcyUzQSUyMDAlMEFfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw==",highlighted:`_________________________________________________________________
Layer (<span class="hljs-built_in">type</span>)                 Output Shape              Param <span class="hljs-comment">#   </span>
=================================================================
transformer (TFGPT2MainLayer multiple                  <span class="hljs-number">124242432</span> 
=================================================================
Total params: <span class="hljs-number">124</span>,<span class="hljs-number">242</span>,<span class="hljs-number">432</span>
Trainable params: <span class="hljs-number">124</span>,<span class="hljs-number">242</span>,<span class="hljs-number">432</span>
Non-trainable params: <span class="hljs-number">0</span>
_________________________________________________________________`,wrap:!1}}),{c(){y(t.$$.fragment),c=r(),n=U("p"),n.innerHTML=o,_=r(),y(b.$$.fragment),$=r(),y(Z.$$.fragment)},l(d){J(t.$$.fragment,d),c=p(d),n=f(d,"P",{"data-svelte-h":!0}),j(n)!=="svelte-z2ph3y"&&(n.innerHTML=o),_=p(d),J(b.$$.fragment,d),$=p(d),J(Z.$$.fragment,d)},m(d,h){T(t,d,h),s(d,c,h),s(d,n,h),s(d,_,h),T(b,d,h),s(d,$,h),T(Z,d,h),k=!0},i(d){k||(u(t.$$.fragment,d),u(b.$$.fragment,d),u(Z.$$.fragment,d),k=!0)},o(d){M(t.$$.fragment,d),M(b.$$.fragment,d),M(Z.$$.fragment,d),k=!1},d(d){d&&(a(c),a(n),a(_),a($)),w(t,d),w(b,d),w(Z,d)}}}function ws(C){let t,c,n,o="Cu această configurație, putem încărca un nou model. Rețineți că aceasta este prima dată când nu folosim funcția <code>from_pretrained()</code>, deoarece inițializăm noi înșine un model:",_,b,$,Z,k;return t=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBHUFQyTE1IZWFkTW9kZWwlMkMlMjBBdXRvQ29uZmlnJTBBJTBBY29uZmlnJTIwJTNEJTIwQXV0b0NvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTBBJTIwJTIwJTIwJTIwJTIyZ3B0MiUyMiUyQyUwQSUyMCUyMCUyMCUyMHZvY2FiX3NpemUlM0RsZW4odG9rZW5pemVyKSUyQyUwQSUyMCUyMCUyMCUyMG5fY3R4JTNEY29udGV4dF9sZW5ndGglMkMlMEElMjAlMjAlMjAlMjBib3NfdG9rZW5faWQlM0R0b2tlbml6ZXIuYm9zX3Rva2VuX2lkJTJDJTBBJTIwJTIwJTIwJTIwZW9zX3Rva2VuX2lkJTNEdG9rZW5pemVyLmVvc190b2tlbl9pZCUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, GPT2LMHeadModel, AutoConfig

config = AutoConfig.from_pretrained(
    <span class="hljs-string">&quot;gpt2&quot;</span>,
    vocab_size=<span class="hljs-built_in">len</span>(tokenizer),
    n_ctx=context_length,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
)`,wrap:!1}}),b=new I({props:{code:"bW9kZWwlMjAlM0QlMjBHUFQyTE1IZWFkTW9kZWwoY29uZmlnKSUwQW1vZGVsX3NpemUlMjAlM0QlMjBzdW0odC5udW1lbCgpJTIwZm9yJTIwdCUyMGluJTIwbW9kZWwucGFyYW1ldGVycygpKSUwQXByaW50KGYlMjJHUFQtMiUyMHNpemUlM0ElMjAlN0Jtb2RlbF9zaXplJTJGMTAwMCoqMiUzQS4xZiU3RE0lMjBwYXJhbWV0ZXJzJTIyKQ==",highlighted:`model = GPT2LMHeadModel(config)
model_size = <span class="hljs-built_in">sum</span>(t.numel() <span class="hljs-keyword">for</span> t <span class="hljs-keyword">in</span> model.parameters())
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;GPT-2 size: <span class="hljs-subst">{model_size/<span class="hljs-number">1000</span>**<span class="hljs-number">2</span>:<span class="hljs-number">.1</span>f}</span>M parameters&quot;</span>)`,wrap:!1}}),Z=new I({props:{code:"R1BULTIlMjBzaXplJTNBJTIwMTI0LjJNJTIwcGFyYW1ldGVycw==",highlighted:'GPT-<span class="hljs-number">2</span> size: <span class="hljs-number">124.2</span>M parameters',wrap:!1}}),{c(){y(t.$$.fragment),c=r(),n=U("p"),n.innerHTML=o,_=r(),y(b.$$.fragment),$=r(),y(Z.$$.fragment)},l(d){J(t.$$.fragment,d),c=p(d),n=f(d,"P",{"data-svelte-h":!0}),j(n)!=="svelte-z2ph3y"&&(n.innerHTML=o),_=p(d),J(b.$$.fragment,d),$=p(d),J(Z.$$.fragment,d)},m(d,h){T(t,d,h),s(d,c,h),s(d,n,h),s(d,_,h),T(b,d,h),s(d,$,h),T(Z,d,h),k=!0},i(d){k||(u(t.$$.fragment,d),u(b.$$.fragment,d),u(Z.$$.fragment,d),k=!0)},o(d){M(t.$$.fragment,d),M(b.$$.fragment,d),M(Z.$$.fragment,d),k=!1},d(d){d&&(a(c),a(n),a(_),a($)),w(t,d),w(b,d),w(Z,d)}}}function Us(C){let t,c;return t=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvckxhbmd1YWdlTW9kZWxpbmclMEElMEF0b2tlbml6ZXIucGFkX3Rva2VuJTIwJTNEJTIwdG9rZW5pemVyLmVvc190b2tlbiUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JGb3JMYW5ndWFnZU1vZGVsaW5nKHRva2VuaXplciUyQyUyMG1sbSUzREZhbHNlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForLanguageModeling

tokenizer.pad_token = tokenizer.eos_token
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=<span class="hljs-literal">False</span>, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function fs(C){let t,c;return t=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvckxhbmd1YWdlTW9kZWxpbmclMEElMEF0b2tlbml6ZXIucGFkX3Rva2VuJTIwJTNEJTIwdG9rZW5pemVyLmVvc190b2tlbiUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JGb3JMYW5ndWFnZU1vZGVsaW5nKHRva2VuaXplciUyQyUyMG1sbSUzREZhbHNlKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForLanguageModeling

tokenizer.pad_token = tokenizer.eos_token
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=<span class="hljs-literal">False</span>)`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function js(C){let t,c;return t=new I({props:{code:"aW5wdXRfaWRzJTIwc2hhcGUlM0ElMjAoNSUyQyUyMDEyOCklMEFhdHRlbnRpb25fbWFzayUyMHNoYXBlJTNBJTIwKDUlMkMlMjAxMjgpJTBBbGFiZWxzJTIwc2hhcGUlM0ElMjAoNSUyQyUyMDEyOCk=",highlighted:`input_ids shape: (<span class="hljs-number">5</span>, <span class="hljs-number">128</span>)
attention_mask shape: (<span class="hljs-number">5</span>, <span class="hljs-number">128</span>)
labels shape: (<span class="hljs-number">5</span>, <span class="hljs-number">128</span>)`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function bs(C){let t,c;return t=new I({props:{code:"aW5wdXRfaWRzJTIwc2hhcGUlM0ElMjB0b3JjaC5TaXplKCU1QjUlMkMlMjAxMjglNUQpJTBBYXR0ZW50aW9uX21hc2slMjBzaGFwZSUzQSUyMHRvcmNoLlNpemUoJTVCNSUyQyUyMDEyOCU1RCklMEFsYWJlbHMlMjBzaGFwZSUzQSUyMHRvcmNoLlNpemUoJTVCNSUyQyUyMDEyOCU1RCk=",highlighted:`input_ids shape: torch.Size([<span class="hljs-number">5</span>, <span class="hljs-number">128</span>])
attention_mask shape: torch.Size([<span class="hljs-number">5</span>, <span class="hljs-number">128</span>])
labels shape: torch.Size([<span class="hljs-number">5</span>, <span class="hljs-number">128</span>])`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function ls(C){let t,c="Acum putem utiliza metoda <code>prepare_tf_dataset()</code> pentru a converti dataseturile noastre în dataseturi TensorFlow cu ajutorul data collatorului pe care l-am creat mai sus:",n,o,_;return o=new I({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMzIlMkMlMEEpJTBBdGZfZXZhbF9kYXRhc2V0JTIwJTNEJTIwbW9kZWwucHJlcGFyZV90Zl9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMzIlMkMlMEEp",highlighted:`tf_train_dataset = model.prepare_tf_dataset(
    tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=<span class="hljs-number">32</span>,
)
tf_eval_dataset = model.prepare_tf_dataset(
    tokenized_datasets[<span class="hljs-string">&quot;valid&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">False</span>,
    batch_size=<span class="hljs-number">32</span>,
)`,wrap:!1}}),{c(){t=U("p"),t.innerHTML=c,n=r(),y(o.$$.fragment)},l(b){t=f(b,"P",{"data-svelte-h":!0}),j(t)!=="svelte-43ysag"&&(t.innerHTML=c),n=p(b),J(o.$$.fragment,b)},m(b,$){s(b,t,$),s(b,n,$),T(o,b,$),_=!0},i(b){_||(u(o.$$.fragment,b),_=!0)},o(b){M(o.$$.fragment,b),_=!1},d(b){b&&(a(t),a(n)),w(o,b)}}}function hs(C){let t,c="⚠️ Schimbarea inputurilor și a labelurilor pentru a le alinia are loc în interiorul modelului, astfel încât data collatorului doar copiază inputurile pentru a crea labeluri.";return{c(){t=U("p"),t.textContent=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-19d3tgd"&&(t.textContent=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Is(C){let t,c="Tot ce rămâne de făcut este să configurați hiperparametrii de antrenament și să apelați <code>compile()</code> și <code>fit()</code>. Vom utiliza un program al learning rate cu un anumit warmup pentru a îmbunătăți stabilitatea antrenării:",n,o,_,b,$="Acum putem apela <code>model.fit()</code> și să așteptăm ca antrenarea să se încheie. În funcție de executarea antrenării pe întregul set de antrenarea sau pe un subset al acestuia, va dura 20 minute, sau respectiv 2 ore, așa că luați câteva cafeluțe și o carte bună de citit!",Z,k,d;return o=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFpbXBvcnQlMjB0ZW5zb3JmbG93JTIwYXMlMjB0ZiUwQSUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUwQW9wdGltaXplciUyQyUyMHNjaGVkdWxlJTIwJTNEJTIwY3JlYXRlX29wdGltaXplciglMEElMjAlMjAlMjAlMjBpbml0X2xyJTNENWUtNSUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QxXzAwMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbl9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheV9yYXRlJTNEMC4wMSUyQyUwQSklMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRG9wdGltaXplciklMEElMEElMjMlMjBUcmFpbiUyMGluJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset)
optimizer, schedule = create_optimizer(
    init_lr=<span class="hljs-number">5e-5</span>,
    num_warmup_steps=<span class="hljs-number">1_000</span>,
    num_train_steps=num_train_steps,
    weight_decay_rate=<span class="hljs-number">0.01</span>,
)
model.<span class="hljs-built_in">compile</span>(optimizer=optimizer)

<span class="hljs-comment"># Train in mixed-precision float16</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)`,wrap:!1}}),k=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2sob3V0cHV0X2RpciUzRCUyMmNvZGVwYXJyb3QtZHMlMjIlMkMlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIpJTBBJTBBbW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl9ldmFsX2RhdGFzZXQlMkMlMjBjYWxsYmFja3MlM0QlNUJjYWxsYmFjayU1RCk=",highlighted:`<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback

callback = PushToHubCallback(output_dir=<span class="hljs-string">&quot;codeparrot-ds&quot;</span>, tokenizer=tokenizer)

model.fit(tf_train_dataset, validation_data=tf_eval_dataset, callbacks=[callback])`,wrap:!1}}),{c(){t=U("p"),t.innerHTML=c,n=r(),y(o.$$.fragment),_=r(),b=U("p"),b.innerHTML=$,Z=r(),y(k.$$.fragment)},l(h){t=f(h,"P",{"data-svelte-h":!0}),j(t)!=="svelte-1j77cli"&&(t.innerHTML=c),n=p(h),J(o.$$.fragment,h),_=p(h),b=f(h,"P",{"data-svelte-h":!0}),j(b)!=="svelte-yjf4w9"&&(b.innerHTML=$),Z=p(h),J(k.$$.fragment,h)},m(h,G){s(h,t,G),s(h,n,G),T(o,h,G),s(h,_,G),s(h,b,G),s(h,Z,G),T(k,h,G),d=!0},i(h){d||(u(o.$$.fragment,h),u(k.$$.fragment,h),d=!0)},o(h){M(o.$$.fragment,h),M(k.$$.fragment,h),d=!1},d(h){h&&(a(t),a(n),a(_),a(b),a(Z)),w(o,h),w(k,h)}}}function Cs(C){let t,c="Tot ce a mai rămas de făcut este să configurăm argumentele de antrenare și să pornim <code>Trainer</code>-ul. Vom utiliza un cosine learning rate schedule cu un warmup și o dimensiune efectivă a batch-ului de 256 (<code>per_device_train_batch_size</code> * <code>gradient_accumulation_steps</code>). Acumularea gradientului este utilizată atunci când un singur batch nu încape în memorie și construiește treptat gradientul prin mai multe treceri înainte/înapoi. Vom vedea acest lucru în acțiune atunci când vom crea bucla de antrenare cu 🤗 Accelerate.",n,o,_,b,$="Acum putem doar să pornim <code>Trainer</code>-ul și să așteptăm ca antrenamentul să se termine. În funcție de executarea antrenării pe întregul set de antrenarea sau pe un subset al acestuia, va dura 20 minute, sau respectiv 2 ore, așa că luați câteva cafeluțe și o carte bună de citit!",Z,k,d,h,G="După finalizarea antrenării, putem trimite modelul și tokenizerul către Hub:",x,Q,z;return o=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMkMlMjBUcmFpbmluZ0FyZ3VtZW50cyUwQSUwQWFyZ3MlMjAlM0QlMjBUcmFpbmluZ0FyZ3VtZW50cyglMEElMjAlMjAlMjAlMjBvdXRwdXRfZGlyJTNEJTIyY29kZXBhcnJvdC1kcyUyMiUyQyUwQSUyMCUyMCUyMCUyMHBlcl9kZXZpY2VfdHJhaW5fYmF0Y2hfc2l6ZSUzRDMyJTJDJTBBJTIwJTIwJTIwJTIwcGVyX2RldmljZV9ldmFsX2JhdGNoX3NpemUlM0QzMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJzdGVwcyUyMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfc3RlcHMlM0Q1XzAwMCUyQyUwQSUyMCUyMCUyMCUyMGxvZ2dpbmdfc3RlcHMlM0Q1XzAwMCUyQyUwQSUyMCUyMCUyMCUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUzRDglMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fZXBvY2hzJTNEMSUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheSUzRDAuMSUyQyUwQSUyMCUyMCUyMCUyMHdhcm11cF9zdGVwcyUzRDFfMDAwJTJDJTBBJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyX3R5cGUlM0QlMjJjb3NpbmUlMjIlMkMlMEElMjAlMjAlMjAlMjBsZWFybmluZ19yYXRlJTNENWUtNCUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RlcHMlM0Q1XzAwMCUyQyUwQSUyMCUyMCUyMCUyMGZwMTYlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwcHVzaF90b19odWIlM0RUcnVlJTJDJTBBKSUwQSUwQXRyYWluZXIlMjAlM0QlMjBUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMG1vZGVsJTNEbW9kZWwlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEElMjAlMjAlMjAlMjBhcmdzJTNEYXJncyUyQyUwQSUyMCUyMCUyMCUyMGRhdGFfY29sbGF0b3IlM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwdHJhaW5fZGF0YXNldCUzRHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZXZhbF9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWQlMjIlNUQlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer, TrainingArguments

args = TrainingArguments(
    output_dir=<span class="hljs-string">&quot;codeparrot-ds&quot;</span>,
    per_device_train_batch_size=<span class="hljs-number">32</span>,
    per_device_eval_batch_size=<span class="hljs-number">32</span>,
    evaluation_strategy=<span class="hljs-string">&quot;steps&quot;</span>,
    eval_steps=<span class="hljs-number">5_000</span>,
    logging_steps=<span class="hljs-number">5_000</span>,
    gradient_accumulation_steps=<span class="hljs-number">8</span>,
    num_train_epochs=<span class="hljs-number">1</span>,
    weight_decay=<span class="hljs-number">0.1</span>,
    warmup_steps=<span class="hljs-number">1_000</span>,
    lr_scheduler_type=<span class="hljs-string">&quot;cosine&quot;</span>,
    learning_rate=<span class="hljs-number">5e-4</span>,
    save_steps=<span class="hljs-number">5_000</span>,
    fp16=<span class="hljs-literal">True</span>,
    push_to_hub=<span class="hljs-literal">True</span>,
)

trainer = Trainer(
    model=model,
    tokenizer=tokenizer,
    args=args,
    data_collator=data_collator,
    train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;valid&quot;</span>],
)`,wrap:!1}}),k=new I({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),Q=new I({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:"trainer.push_to_hub()",wrap:!1}}),{c(){t=U("p"),t.innerHTML=c,n=r(),y(o.$$.fragment),_=r(),b=U("p"),b.innerHTML=$,Z=r(),y(k.$$.fragment),d=r(),h=U("p"),h.textContent=G,x=r(),y(Q.$$.fragment)},l(g){t=f(g,"P",{"data-svelte-h":!0}),j(t)!=="svelte-eu8mmx"&&(t.innerHTML=c),n=p(g),J(o.$$.fragment,g),_=p(g),b=f(g,"P",{"data-svelte-h":!0}),j(b)!=="svelte-12i47r4"&&(b.innerHTML=$),Z=p(g),J(k.$$.fragment,g),d=p(g),h=f(g,"P",{"data-svelte-h":!0}),j(h)!=="svelte-xsga2g"&&(h.textContent=G),x=p(g),J(Q.$$.fragment,g)},m(g,B){s(g,t,B),s(g,n,B),T(o,g,B),s(g,_,B),s(g,b,B),s(g,Z,B),T(k,g,B),s(g,d,B),s(g,h,B),s(g,x,B),T(Q,g,B),z=!0},i(g){z||(u(o.$$.fragment,g),u(k.$$.fragment,g),u(Q.$$.fragment,g),z=!0)},o(g){M(o.$$.fragment,g),M(k.$$.fragment,g),M(Q.$$.fragment,g),z=!1},d(g){g&&(a(t),a(n),a(_),a(b),a(Z),a(d),a(h),a(x)),w(o,g),w(k,g),w(Q,g)}}}function _s(C){let t,c="✏️ <strong>Try it out!</strong> Ne-a luat doar aproximativ 30 de linii de cod în plus față de <code>TrainingArguments</code> pentru a ajunge de la texte brute la antrenarea GPT-2. Încercați antrenarea cu propriul dataset și vedeți dacă puteți obține rezultate bune!";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-dc1g4b"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function gs(C){let t,c='💡 Dacă aveți acces la un calculator cu mai multe GPU-uri, puteți încerca să utilizați un context <code>MirroredStrategy</code> pentru a accelera substanțial antrenarea. Va trebui să creați un obiect <code>tf.distribute.MirroredStrategy</code> și să vă asigurați că toate metodele <code>to_tf_dataset()</code> sau <code>prepare_tf_dataset()</code>, precum și crearea modelului și apelul la <code>fit()</code> sunt rulate în contextul său <code>scope()</code>. Puteți vedea documentația despre acest lucru [aici] (<a href="https://www.tensorflow.org/guide/distributed_training#use_tfdistributestrategy_with_keras_modelfit" rel="nofollow">https://www.tensorflow.org/guide/distributed_training#use_tfdistributestrategy_with_keras_modelfit</a>).';return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-ore127"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},d(n){n&&a(t)}}}function ks(C){let t,c="💡 Dacă aveți acces la un calculator cu mai multe GPU-uri, încercați să rulați codul acolo. <code>Trainer</code> gestionează automat mai multe calculatoare, iar acest lucru poate accelera foarte mult antrenamentul.";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-8jgqio"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},d(n){n&&a(t)}}}function Zs(C){let t;function c(_,b){return _[0]==="pt"?ks:gs}let n=c(C),o=n(C);return{c(){o.c(),t=es()},l(_){o.l(_),t=es()},m(_,b){o.m(_,b),s(_,t,b)},p(_,b){n!==(n=c(_))&&(o.d(1),o=n(_),o&&(o.c(),o.m(t.parentNode,t)))},d(_){_&&a(t),o.d(_)}}}function $s(C){let t,c;return t=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY291cnNlX21vZGVsJTIwJTNEJTIwVEZHUFQyTE1IZWFkTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmNvZGVwYXJyb3QtZHMlMjIpJTBBY291cnNlX3Rva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmNvZGVwYXJyb3QtZHMlMjIpJTBBcGlwZSUyMCUzRCUyMHBpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCUyMnRleHQtZ2VuZXJhdGlvbiUyMiUyQyUyMG1vZGVsJTNEY291cnNlX21vZGVsJTJDJTIwdG9rZW5pemVyJTNEY291cnNlX3Rva2VuaXplciUyQyUyMGRldmljZSUzRDAlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

course_model = TFGPT2LMHeadModel.from_pretrained(<span class="hljs-string">&quot;huggingface-course/codeparrot-ds&quot;</span>)
course_tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;huggingface-course/codeparrot-ds&quot;</span>)
pipe = pipeline(
    <span class="hljs-string">&quot;text-generation&quot;</span>, model=course_model, tokenizer=course_tokenizer, device=<span class="hljs-number">0</span>
)`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function Gs(C){let t,c;return t=new I({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwcGlwZWxpbmUlMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFwaXBlJTIwJTNEJTIwcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIydGV4dC1nZW5lcmF0aW9uJTIyJTJDJTIwbW9kZWwlM0QlMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlcGFycm90LWRzJTIyJTJDJTIwZGV2aWNlJTNEZGV2aWNlJTBBKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

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>)
pipe = pipeline(
    <span class="hljs-string">&quot;text-generation&quot;</span>, model=<span class="hljs-string">&quot;huggingface-course/codeparrot-ds&quot;</span>, device=device
)`,wrap:!1}}),{c(){y(t.$$.fragment)},l(n){J(t.$$.fragment,n)},m(n,o){T(t,n,o),c=!0},i(n){c||(u(t.$$.fragment,n),c=!0)},o(n){M(t.$$.fragment,n),c=!1},d(n){w(t,n)}}}function Bs(C){let t,c="Privind aceste câteva exemple, se pare că modelul a învățat o parte din sintaxa Python data science stack(desigur, ar trebui să o evaluăm mai bine înainte de a implementa modelul în lumea reală). Cu toate acestea, uneori este nevoie de o mai mare personalizare a antrenării modelului pentru a obține performanța necesară pentru un anumit caz de utilizare. De exemplu, dacă am dori să actualizăm dinamic dimensiunea batch-ului sau să avem o buclă de antrenare condiționată care trece peste exemplele proaste din mers? O opțiune ar fi să facem subclass la <code>Trainer</code> și să adăugăm modificările necesare, dar uneori este mai simplu să scriem bucla de antrenare de la zero. Aici intervine 🤗 Accelerate.";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-nvy9st"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},d(n){n&&a(t)}}}function vs(C){let t,c="Privind la aceste câteva exemple, se pare că modelul a învățat o parte din sintaxa Python data science stack. Desigur, ar trebui să evaluăm modelul mai amănunțit înainte de a-l implementa în lumea reală, totuși acesta este un prototip impresionant.";return{c(){t=U("p"),t.textContent=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-1qyubca"&&(t.textContent=c)},m(n,o){s(n,t,o)},d(n){n&&a(t)}}}function as(C){let t,c,n,o="Am văzut cum să antrenăm un model cu <code>Trainer</code>, care poate permite o anumită personalizare. Cu toate acestea, uneori dorim control deplin asupra buclei de antrenare sau dorim să facem unele schimbări exotice. În acest caz, 🤗 Accelerate este o alegere excelentă, iar în această secțiune vom parcurge pașii de utilizare a acestuia pentru a ne antrena modelul. Pentru a face lucrurile mai interesante, vom adăuga și un twist buclei de antrenare.",_,b,$,Z,k="Deoarece suntem interesați în principal de o autocompletare sensibilă pentru bibliotecile din domeniul data science, este logic să acordăm mai multă importanță exemplelor de antrenare care utilizează mai mult aceste biblioteci. Putem identifica cu ușurință aceste exemple prin utilizarea unor cuvinte-cheie precum <code>plt</code>, <code>pd</code>, <code>sk</code>, <code>fit</code> și <code>predict</code>, care sunt cele mai frecvente nume de import pentru <code>matplotlib.pyplot</code>, <code>pandas</code> și <code>sklearn</code>, precum și modelul fit/predict al acestora din urmă. Dacă acestea sunt reprezentate fiecare ca un singur simbol, putem verifica cu ușurință dacă apar în secvența de input. Tokenii pot avea un prefix de spațiu, deci vom verifica și aceste versiuni în vocabularul tokenizerului. Pentru a verifica dacă funcționează, vom adăuga un token de test care ar trebui să fie împărțit în mai mulți tokeni:",d,h,G,x,Q,z,g="Grozav, se pare că funcționează bine! Acum putem scrie o funcție de pierdere personalizată care ia ca secvența de input, logurile și tokenii cheie pe care tocmai le-am selectat. În primul rând, trebuie să aliniem logurile și inputurile: secvența de intrare deplasată cu o unitate la dreapta formează labeluri, deoarece următorul tokenul este labelul pentru tokenul curent. Putem realiza acest lucru începând cu labelurile de la al doilea token al secvenței de intrare, deoarece modelul nu face o predicție pentru primul token în orice caz. Apoi tăiem ultimul logit, deoarece nu avem un label pentru tokenul care urmează secvenței complete de intrare. Astfel, putem calcula pierderea per sample și putem număra aparițiile tuturor cuvintelor-cheie în fiecare sample. În cele din urmă, calculăm media weighturilor pe fiecare sample folosind aparițiile ca weighturi. Deoarece nu dorim să eliminăm toate sampleurile care nu au cuvinte-cheie, adăugăm 1 la weighturi:",B,A,Re,N,da="Înainte de a începe antrenamentul cu această nouă funcție de pierdere minunată, trebuie să pregătim câteva lucruri:",Qe,v,ya="<li>Avem nevoie de dataloaders pentru a încărca datele în batch-uri.</li> <li>Trebuie să configurăm parametrii de scădere a weighturilor.</li> <li>Din când în când, dorim să evaluăm, astfel încât este logic să includem codul de evaluare într-o funcție.</li>",We,E,Ja="Să începem cu dataloaders. Trebuie doar să setăm formatul datasetului la <code>&quot;torch&quot;</code>, iar apoi îl putem trece la un <code>DataLoader</code> PyTorch cu dimensiunea corespunzătoare a batch-lui:",Ve,Y,xe,F,Ta="În continuare, grupăm parametrii astfel încât optimizatorul să știe care dintre aceștia vor primi o scădere suplimentară a weighturilor. De obicei, toți termenii weighturilor bias și LayerNorm sunt scutiți de acest lucru; iată cum putem face acest lucru:",Ae,H,ol,re,Ze="Deoarece dorim să evaluăm modelul în mod regulat pe setul de validare în timpul antrenării, trebuie să scriem o funcție și pentru acest lucru. Aceasta rulează pur și simplu prin dataloaderul de evaluare și adună toate pierderile în cadrul proceselor:",Ne,S,ml,pe,$e='Cu funcția <code>evaluate()</code> putem raporta pierderile și <a href="/course/chapter7/3">perplexitatea</a> la intervale regulate. În continuare, redefinim modelul nostru pentru a ne asigura că antrenăm din nou de la zero:',Ee,D,Ye,q,wa="Apoi putem defini optimizatorul nostru, folosind funcția de mai devreme pentru a împărți parametrii pentru scăderea weighturilor:",Fe,L,He,P,Ua="Acum să pregătim modelul, optimizatorul și dataloaderurile, astfel încât să putem începe antrenamentul:",Se,K,De,O,qe,ee,fa="Acum că am trimis <code>train_dataloader</code> la <code>accelerator.prepare()</code>, putem utiliza lungimea acestuia pentru a calcula numărul de pași de antrenare. Rețineți că ar trebui să facem acest lucru întotdeauna după ce pregătim dataloaderurile, deoarece această metodă îi va modifica lungimea. Utilizăm un program liniar clasic de la rata de învățare la 0:",Le,le,dl,ce,Ge="În cele din urmă, pentru a trimite modelul nostru către Hub, va trebui să creăm un obiect <code>Repository</code> într-un folder de lucru. În primul rând, conectați-vă la Hugging Face Hub, dacă nu sunteți deja conectat. Vom determina numele repositoriului pornind de la ID-ul modelului pe care dorim să îl atribuim modelului nostru (nu ezitați să înlocuiți <code>repo_name</code> cu propria alegere; acesta trebuie doar să conțină numele vostru de utilizator, ceea ce face funcția <code>get_full_repo_name()</code>):",Pe,ae,Ke,W,Oe,te,ja="Apoi putem clona acel repositoriu într-un folder local. Dacă există deja, acest folder local ar trebui să fie o clonă existentă a repositoriul cu care lucrăm:",el,se,ll,ne,yl="Acum putem încărca orice salvăm în <code>output_dir</code> prin apelarea metodei <code>repo.push_to_hub()</code>. Acest lucru ne va ajuta să încărcăm modelele intermediare la sfârșitul fiecărei epoci.",ue,Be,Jl="Înainte de antrenament, să efectuăm un test rapid pentru a vedea dacă funcția de evaluare funcționează corect:",Me,oe,me,de,ye,ve,Tl="Acestea sunt valori foarte ridicate pentru pierdere și perplexitate, dar acest lucru nu este surprinzător, deoarece nu am antrenat încă modelul. Astfel, avem totul pregătit pentru a scrie partea principală a scriptului de antrenare: bucla de antrenare. În bucla de antrenare, iterăm peste dataloader și transmitem batch-urile către model. Cu logurile, putem apoi evalua funcția noastră de pierdere personalizată. Redimensionăm pierderea în funcție de numărul de etape de acumulare a gradientului pentru a nu crea pierderi mai mari atunci când agregăm mai multe etape. Înainte de a optimiza, comprimăm, de asemenea, gradienții pentru o mai bună convergență. În cele din urmă, la fiecare câțiva pași, evaluăm modelul pe setul de evaluare cu noua noastră funcție <code>evaluate()</code>:",Je,ze,al,V,ba="Și asta e tot - acum aveți propria buclă de antrenare personalizată pentru modele de limbaj cauzal, cum ar fi GPT-2, pe care o puteți personaliza în continuare în funcție de nevoile voastre.",tl,ie,wl,Te,we;return t=new ma({props:{title:"Antrenarea cu 🤗 Accelerate",local:"training-with-accelerate",headingTag:"h2"}}),b=new Tt({props:{id:"Hm8_PgVTFuc"}}),h=new I({props:{code:"a2V5dG9rZW5faWRzJTIwJTNEJTIwJTVCJTVEJTBBZm9yJTIwa2V5d29yZCUyMGluJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIycGx0JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIycGQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJzayUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmZpdCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnByZWRpY3QlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjIlMjBwbHQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjIlMjBwZCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMiUyMHNrJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyJTIwZml0JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyJTIwcHJlZGljdCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnRlc3R0ZXN0JTIyJTJDJTBBJTVEJTNBJTBBJTIwJTIwJTIwJTIwaWRzJTIwJTNEJTIwdG9rZW5pemVyKCU1QmtleXdvcmQlNUQpLmlucHV0X2lkcyU1QjAlNUQlMEElMjAlMjAlMjAlMjBpZiUyMGxlbihpZHMpJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGtleXRva2VuX2lkcy5hcHBlbmQoaWRzJTVCMCU1RCklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMktleXdvcmQlMjBoYXMlMjBub3QlMjBzaW5nbGUlMjB0b2tlbiUzQSUyMCU3QmtleXdvcmQlN0QlMjIp",highlighted:`keytoken_ids = []
<span class="hljs-keyword">for</span> keyword <span class="hljs-keyword">in</span> [
    <span class="hljs-string">&quot;plt&quot;</span>,
    <span class="hljs-string">&quot;pd&quot;</span>,
    <span class="hljs-string">&quot;sk&quot;</span>,
    <span class="hljs-string">&quot;fit&quot;</span>,
    <span class="hljs-string">&quot;predict&quot;</span>,
    <span class="hljs-string">&quot; plt&quot;</span>,
    <span class="hljs-string">&quot; pd&quot;</span>,
    <span class="hljs-string">&quot; sk&quot;</span>,
    <span class="hljs-string">&quot; fit&quot;</span>,
    <span class="hljs-string">&quot; predict&quot;</span>,
    <span class="hljs-string">&quot;testtest&quot;</span>,
]:
    ids = tokenizer([keyword]).input_ids[<span class="hljs-number">0</span>]
    <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(ids) == <span class="hljs-number">1</span>:
        keytoken_ids.append(ids[<span class="hljs-number">0</span>])
    <span class="hljs-keyword">else</span>:
        <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Keyword has not single token: <span class="hljs-subst">{keyword}</span>&quot;</span>)`,wrap:!1}}),x=new I({props:{code:"J0tleXdvcmQlMjBoYXMlMjBub3QlMjBzaW5nbGUlMjB0b2tlbiUzQSUyMHRlc3R0ZXN0Jw==",highlighted:'<span class="hljs-string">&#x27;Keyword has not single token: testtest&#x27;</span>',wrap:!1}}),A=new I({props:{code:"ZnJvbSUyMHRvcmNoLm5uJTIwaW1wb3J0JTIwQ3Jvc3NFbnRyb3B5TG9zcyUwQWltcG9ydCUyMHRvcmNoJTBBJTBBJTBBZGVmJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhpbnB1dHMlMkMlMjBsb2dpdHMlMkMlMjBrZXl0b2tlbl9pZHMlMkMlMjBhbHBoYSUzRDEuMCklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBTaGlmdCUyMHNvJTIwdGhhdCUyMHRva2VucyUyMCUzQyUyMG4lMjBwcmVkaWN0JTIwbiUwQSUyMCUyMCUyMCUyMHNoaWZ0X2xhYmVscyUyMCUzRCUyMGlucHV0cyU1Qi4uLiUyQyUyMDElM0ElNUQuY29udGlndW91cygpJTBBJTIwJTIwJTIwJTIwc2hpZnRfbG9naXRzJTIwJTNEJTIwbG9naXRzJTVCLi4uJTJDJTIwJTNBLTElMkMlMjAlM0ElNUQuY29udGlndW91cygpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwcGVyLXRva2VuJTIwbG9zcyUwQSUyMCUyMCUyMCUyMGxvc3NfZmN0JTIwJTNEJTIwQ3Jvc3NFbnRyb3B5TG9zcyhyZWR1Y2UlM0RGYWxzZSklMEElMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwbG9zc19mY3Qoc2hpZnRfbG9naXRzLnZpZXcoLTElMkMlMjBzaGlmdF9sb2dpdHMuc2l6ZSgtMSkpJTJDJTIwc2hpZnRfbGFiZWxzLnZpZXcoLTEpKSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlc2l6ZSUyMGFuZCUyMGF2ZXJhZ2UlMjBsb3NzJTIwcGVyJTIwc2FtcGxlJTBBJTIwJTIwJTIwJTIwbG9zc19wZXJfc2FtcGxlJTIwJTNEJTIwbG9zcy52aWV3KHNoaWZ0X2xvZ2l0cy5zaXplKDApJTJDJTIwc2hpZnRfbG9naXRzLnNpemUoMSkpLm1lYW4oYXhpcyUzRDEpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwYW5kJTIwc2NhbGUlMjB3ZWlnaHRpbmclMEElMjAlMjAlMjAlMjB3ZWlnaHRzJTIwJTNEJTIwdG9yY2guc3RhY2soJTVCKGlucHV0cyUyMCUzRCUzRCUyMGt0KS5mbG9hdCgpJTIwZm9yJTIwa3QlMjBpbiUyMGtleXRva2VuX2lkcyU1RCkuc3VtKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF4aXMlM0QlNUIwJTJDJTIwMiU1RCUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjB3ZWlnaHRzJTIwJTNEJTIwYWxwaGElMjAqJTIwKDEuMCUyMCUyQiUyMHdlaWdodHMpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwd2VpZ2h0ZWQlMjBhdmVyYWdlJTBBJTIwJTIwJTIwJTIwd2VpZ2h0ZWRfbG9zcyUyMCUzRCUyMChsb3NzX3Blcl9zYW1wbGUlMjAqJTIwd2VpZ2h0cykubWVhbigpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwd2VpZ2h0ZWRfbG9zcw==",highlighted:`<span class="hljs-keyword">from</span> torch.nn <span class="hljs-keyword">import</span> CrossEntropyLoss
<span class="hljs-keyword">import</span> torch


<span class="hljs-keyword">def</span> <span class="hljs-title function_">keytoken_weighted_loss</span>(<span class="hljs-params">inputs, logits, keytoken_ids, alpha=<span class="hljs-number">1.0</span></span>):
    <span class="hljs-comment"># Shift so that tokens &lt; n predict n</span>
    shift_labels = inputs[..., <span class="hljs-number">1</span>:].contiguous()
    shift_logits = logits[..., :-<span class="hljs-number">1</span>, :].contiguous()
    <span class="hljs-comment"># Calculate per-token loss</span>
    loss_fct = CrossEntropyLoss(reduce=<span class="hljs-literal">False</span>)
    loss = loss_fct(shift_logits.view(-<span class="hljs-number">1</span>, shift_logits.size(-<span class="hljs-number">1</span>)), shift_labels.view(-<span class="hljs-number">1</span>))
    <span class="hljs-comment"># Resize and average loss per sample</span>
    loss_per_sample = loss.view(shift_logits.size(<span class="hljs-number">0</span>), shift_logits.size(<span class="hljs-number">1</span>)).mean(axis=<span class="hljs-number">1</span>)
    <span class="hljs-comment"># Calculate and scale weighting</span>
    weights = torch.stack([(inputs == kt).<span class="hljs-built_in">float</span>() <span class="hljs-keyword">for</span> kt <span class="hljs-keyword">in</span> keytoken_ids]).<span class="hljs-built_in">sum</span>(
        axis=[<span class="hljs-number">0</span>, <span class="hljs-number">2</span>]
    )
    weights = alpha * (<span class="hljs-number">1.0</span> + weights)
    <span class="hljs-comment"># Calculate weighted average</span>
    weighted_loss = (loss_per_sample * weights).mean()
    <span class="hljs-keyword">return</span> weighted_loss`,wrap:!1}}),Y=new I({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGEuZGF0YWxvYWRlciUyMGltcG9ydCUyMERhdGFMb2FkZXIlMEElMEF0b2tlbml6ZWRfZGF0YXNldHMuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF0cmFpbl9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlcih0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUyMGJhdGNoX3NpemUlM0QzMiUyQyUyMHNodWZmbGUlM0RUcnVlKSUwQWV2YWxfZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIodG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWQlMjIlNUQlMkMlMjBiYXRjaF9zaXplJTNEMzIp",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data.dataloader <span class="hljs-keyword">import</span> DataLoader

tokenized_datasets.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
train_dataloader = DataLoader(tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>], batch_size=<span class="hljs-number">32</span>, shuffle=<span class="hljs-literal">True</span>)
eval_dataloader = DataLoader(tokenized_datasets[<span class="hljs-string">&quot;valid&quot;</span>], batch_size=<span class="hljs-number">32</span>)`,wrap:!1}}),H=new I({props:{code:"d2VpZ2h0X2RlY2F5JTIwJTNEJTIwMC4xJTBBJTBBJTBBZGVmJTIwZ2V0X2dyb3VwZWRfcGFyYW1zKG1vZGVsJTJDJTIwbm9fZGVjYXklM0QlNUIlMjJiaWFzJTIyJTJDJTIwJTIyTGF5ZXJOb3JtLndlaWdodCUyMiU1RCklM0ElMEElMjAlMjAlMjAlMjBwYXJhbXNfd2l0aF93ZCUyQyUyMHBhcmFtc193aXRob3V0X3dkJTIwJTNEJTIwJTVCJTVEJTJDJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwbiUyQyUyMHAlMjBpbiUyMG1vZGVsLm5hbWVkX3BhcmFtZXRlcnMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwYW55KG5kJTIwaW4lMjBuJTIwZm9yJTIwbmQlMjBpbiUyMG5vX2RlY2F5KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhcmFtc193aXRob3V0X3dkLmFwcGVuZChwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsc2UlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYXJhbXNfd2l0aF93ZC5hcHBlbmQocCklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0IlMjJwYXJhbXMlMjIlM0ElMjBwYXJhbXNfd2l0aF93ZCUyQyUyMCUyMndlaWdodF9kZWNheSUyMiUzQSUyMHdlaWdodF9kZWNheSU3RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUyMnBhcmFtcyUyMiUzQSUyMHBhcmFtc193aXRob3V0X3dkJTJDJTIwJTIyd2VpZ2h0X2RlY2F5JTIyJTNBJTIwMC4wJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTVE",highlighted:`weight_decay = <span class="hljs-number">0.1</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_grouped_params</span>(<span class="hljs-params">model, no_decay=[<span class="hljs-string">&quot;bias&quot;</span>, <span class="hljs-string">&quot;LayerNorm.weight&quot;</span>]</span>):
    params_with_wd, params_without_wd = [], []
    <span class="hljs-keyword">for</span> n, p <span class="hljs-keyword">in</span> model.named_parameters():
        <span class="hljs-keyword">if</span> <span class="hljs-built_in">any</span>(nd <span class="hljs-keyword">in</span> n <span class="hljs-keyword">for</span> nd <span class="hljs-keyword">in</span> no_decay):
            params_without_wd.append(p)
        <span class="hljs-keyword">else</span>:
            params_with_wd.append(p)
    <span class="hljs-keyword">return</span> [
        {<span class="hljs-string">&quot;params&quot;</span>: params_with_wd, <span class="hljs-string">&quot;weight_decay&quot;</span>: weight_decay},
        {<span class="hljs-string">&quot;params&quot;</span>: params_without_wd, <span class="hljs-string">&quot;weight_decay&quot;</span>: <span class="hljs-number">0.0</span>},
    ]`,wrap:!1}}),S=new I({props:{code:"ZGVmJTIwZXZhbHVhdGUoKSUzQSUwQSUyMCUyMCUyMCUyMG1vZGVsLmV2YWwoKSUwQSUyMCUyMCUyMCUyMGxvc3NlcyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHN0ZXAlMkMlMjBiYXRjaCUyMGluJTIwZW51bWVyYXRlKGV2YWxfZGF0YWxvYWRlciklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aXRoJTIwdG9yY2gubm9fZ3JhZCgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTJDJTIwbGFiZWxzJTNEYmF0Y2glNUIlMjJpbnB1dF9pZHMlMjIlNUQpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zc2VzLmFwcGVuZChhY2NlbGVyYXRvci5nYXRoZXIob3V0cHV0cy5sb3NzKSklMEElMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwdG9yY2gubWVhbih0b3JjaC5jYXQobG9zc2VzKSklMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwZXJwbGV4aXR5JTIwJTNEJTIwdG9yY2guZXhwKGxvc3MpJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwT3ZlcmZsb3dFcnJvciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBlcnBsZXhpdHklMjAlM0QlMjBmbG9hdCglMjJpbmYlMjIpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbG9zcy5pdGVtKCklMkMlMjBwZXJwbGV4aXR5Lml0ZW0oKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">evaluate</span>():
    model.<span class="hljs-built_in">eval</span>()
    losses = []
    <span class="hljs-keyword">for</span> step, batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(eval_dataloader):
        <span class="hljs-keyword">with</span> torch.no_grad():
            outputs = model(batch[<span class="hljs-string">&quot;input_ids&quot;</span>], labels=batch[<span class="hljs-string">&quot;input_ids&quot;</span>])

        losses.append(accelerator.gather(outputs.loss))
    loss = torch.mean(torch.cat(losses))
    <span class="hljs-keyword">try</span>:
        perplexity = torch.exp(loss)
    <span class="hljs-keyword">except</span> OverflowError:
        perplexity = <span class="hljs-built_in">float</span>(<span class="hljs-string">&quot;inf&quot;</span>)
    <span class="hljs-keyword">return</span> loss.item(), perplexity.item()`,wrap:!1}}),D=new I({props:{code:"bW9kZWwlMjAlM0QlMjBHUFQyTE1IZWFkTW9kZWwoY29uZmlnKQ==",highlighted:"model = GPT2LMHeadModel(config)",wrap:!1}}),L=new I({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhnZXRfZ3JvdXBlZF9wYXJhbXMobW9kZWwpJTJDJTIwbHIlM0Q1ZS00KQ==",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW

optimizer = AdamW(get_grouped_params(model), lr=<span class="hljs-number">5e-4</span>)`,wrap:!1}}),K=new I({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoZnAxNiUzRFRydWUpJTBBJTBBbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUyMG9wdGltaXplciUyQyUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMEEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator

accelerator = Accelerator(fp16=<span class="hljs-literal">True</span>)

model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
    model, optimizer, train_dataloader, eval_dataloader
)`,wrap:!1}}),O=new Ml({props:{$$slots:{default:[zs]},$$scope:{ctx:C}}}),le=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMSUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwbmFtZSUzRCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QxXzAwMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler

num_train_epochs = <span class="hljs-number">1</span>
num_update_steps_per_epoch = <span class="hljs-built_in">len</span>(train_dataloader)
num_training_steps = num_train_epochs * num_update_steps_per_epoch

lr_scheduler = get_scheduler(
    name=<span class="hljs-string">&quot;linear&quot;</span>,
    optimizer=optimizer,
    num_warmup_steps=<span class="hljs-number">1_000</span>,
    num_training_steps=num_training_steps,
)`,wrap:!1}}),ae=new I({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyY29kZXBhcnJvdC1kcy1hY2NlbGVyYXRlJTIyJTBBcmVwb19uYW1lJTIwJTNEJTIwZ2V0X2Z1bGxfcmVwb19uYW1lKG1vZGVsX25hbWUpJTBBcmVwb19uYW1l",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, get_full_repo_name

model_name = <span class="hljs-string">&quot;codeparrot-ds-accelerate&quot;</span>
repo_name = get_full_repo_name(model_name)
repo_name`,wrap:!1}}),W=new I({props:{code:"J3NndWdnZXIlMkZjb2RlcGFycm90LWRzLWFjY2VsZXJhdGUn",highlighted:'<span class="hljs-string">&#x27;sgugger/codeparrot-ds-accelerate&#x27;</span>',wrap:!1}}),se=new I({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMmNvZGVwYXJyb3QtZHMtYWNjZWxlcmF0ZSUyMiUwQXJlcG8lMjAlM0QlMjBSZXBvc2l0b3J5KG91dHB1dF9kaXIlMkMlMjBjbG9uZV9mcm9tJTNEcmVwb19uYW1lKQ==",highlighted:`output_dir = <span class="hljs-string">&quot;codeparrot-ds-accelerate&quot;</span>
repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),oe=new I({props:{code:"ZXZhbHVhdGUoKQ==",highlighted:"evaluate()",wrap:!1}}),de=new I({props:{code:"KDEwLjkzNDEyNjg1Mzk0Mjg3MSUyQyUyMDU2MDU3LjE0NDUzMTI1KQ==",highlighted:'(<span class="hljs-number">10.934126853942871</span>, <span class="hljs-number">56057.14453125</span>)',wrap:!1}}),ze=new I({props:{code:"ZnJvbSUyMHRxZG0ubm90ZWJvb2slMjBpbXBvcnQlMjB0cWRtJTBBJTBBZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTIwJTNEJTIwOCUwQWV2YWxfc3RlcHMlMjAlM0QlMjA1XzAwMCUwQSUwQW1vZGVsLnRyYWluKCklMEFjb21wbGV0ZWRfc3RlcHMlMjAlM0QlMjAwJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV90cmFpbl9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RlcCUyQyUyMGJhdGNoJTIwaW4lMjB0cWRtKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVudW1lcmF0ZSh0cmFpbl9kYXRhbG9hZGVyJTJDJTIwc3RhcnQlM0QxKSUyQyUyMHRvdGFsJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTBBJTIwJTIwJTIwJTIwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvZ2l0cyUyMCUzRCUyMG1vZGVsKGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEKS5sb2dpdHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhiYXRjaCU1QiUyMmlucHV0X2lkcyUyMiU1RCUyQyUyMGxvZ2l0cyUyQyUyMGtleXRva2VuX2lkcyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHN0ZXAlMjAlMjUlMjAxMDAlMjAlM0QlM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyc2FtcGxlcyUyMiUzQSUyMHN0ZXAlMjAqJTIwc2FtcGxlc19wZXJfc3RlcCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnN0ZXBzJTIyJTNBJTIwY29tcGxldGVkX3N0ZXBzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybG9zcyUyRnRyYWluJTIyJTNBJTIwbG9zcy5pdGVtKCklMjAqJTIwZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBsb3NzJTIwJTJGJTIwZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IuYmFja3dhcmQobG9zcyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHN0ZXAlMjAlMjUlMjBncmFkaWVudF9hY2N1bXVsYXRpb25fc3RlcHMlMjAlM0QlM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IuY2xpcF9ncmFkX25vcm1fKG1vZGVsLnBhcmFtZXRlcnMoKSUyQyUyMDEuMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbXBsZXRlZF9zdGVwcyUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMChzdGVwJTIwJTI1JTIwKGV2YWxfc3RlcHMlMjAqJTIwZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzKSklMjAlM0QlM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXZhbF9sb3NzJTJDJTIwcGVycGxleGl0eSUyMCUzRCUyMGV2YWx1YXRlKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5wcmludCglN0IlMjJsb3NzJTJGZXZhbCUyMiUzQSUyMGV2YWxfbG9zcyUyQyUyMCUyMnBlcnBsZXhpdHklMjIlM0ElMjBwZXJwbGV4aXR5JTdEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci53YWl0X2Zvcl9ldmVyeW9uZSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdW53cmFwcGVkX21vZGVsJTIwJTNEJTIwYWNjZWxlcmF0b3IudW53cmFwX21vZGVsKG1vZGVsKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbC5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciUyQyUyMHNhdmVfZnVuY3Rpb24lM0RhY2NlbGVyYXRvci5zYXZlKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwYWNjZWxlcmF0b3IuaXNfbWFpbl9wcm9jZXNzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZChvdXRwdXRfZGlyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG8ucHVzaF90b19odWIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29tbWl0X21lc3NhZ2UlM0RmJTIyVHJhaW5pbmclMjBpbiUyMHByb2dyZXNzJTIwc3RlcCUyMCU3QnN0ZXAlN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",highlighted:`<span class="hljs-keyword">from</span> tqdm.notebook <span class="hljs-keyword">import</span> tqdm

gradient_accumulation_steps = <span class="hljs-number">8</span>
eval_steps = <span class="hljs-number">5_000</span>

model.train()
completed_steps = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_train_epochs):
    <span class="hljs-keyword">for</span> step, batch <span class="hljs-keyword">in</span> tqdm(
        <span class="hljs-built_in">enumerate</span>(train_dataloader, start=<span class="hljs-number">1</span>), total=num_training_steps
    ):
        logits = model(batch[<span class="hljs-string">&quot;input_ids&quot;</span>]).logits
        loss = keytoken_weighted_loss(batch[<span class="hljs-string">&quot;input_ids&quot;</span>], logits, keytoken_ids)
        <span class="hljs-keyword">if</span> step % <span class="hljs-number">100</span> == <span class="hljs-number">0</span>:
            accelerator.<span class="hljs-built_in">print</span>(
                {
                    <span class="hljs-string">&quot;samples&quot;</span>: step * samples_per_step,
                    <span class="hljs-string">&quot;steps&quot;</span>: completed_steps,
                    <span class="hljs-string">&quot;loss/train&quot;</span>: loss.item() * gradient_accumulation_steps,
                }
            )
        loss = loss / gradient_accumulation_steps
        accelerator.backward(loss)
        <span class="hljs-keyword">if</span> step % gradient_accumulation_steps == <span class="hljs-number">0</span>:
            accelerator.clip_grad_norm_(model.parameters(), <span class="hljs-number">1.0</span>)
            optimizer.step()
            lr_scheduler.step()
            optimizer.zero_grad()
            completed_steps += <span class="hljs-number">1</span>
        <span class="hljs-keyword">if</span> (step % (eval_steps * gradient_accumulation_steps)) == <span class="hljs-number">0</span>:
            eval_loss, perplexity = evaluate()
            accelerator.<span class="hljs-built_in">print</span>({<span class="hljs-string">&quot;loss/eval&quot;</span>: eval_loss, <span class="hljs-string">&quot;perplexity&quot;</span>: perplexity})
            model.train()
            accelerator.wait_for_everyone()
            unwrapped_model = accelerator.unwrap_model(model)
            unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
            <span class="hljs-keyword">if</span> accelerator.is_main_process:
                tokenizer.save_pretrained(output_dir)
                repo.push_to_hub(
                    commit_message=<span class="hljs-string">f&quot;Training in progress step <span class="hljs-subst">{step}</span>&quot;</span>, blocking=<span class="hljs-literal">False</span>
                )`,wrap:!1}}),ie=new Ml({props:{$$slots:{default:[Xs]},$$scope:{ctx:C}}}),Te=new Ml({props:{$$slots:{default:[Rs]},$$scope:{ctx:C}}}),{c(){y(t.$$.fragment),c=r(),n=U("p"),n.innerHTML=o,_=r(),y(b.$$.fragment),$=r(),Z=U("p"),Z.innerHTML=k,d=r(),y(h.$$.fragment),G=r(),y(x.$$.fragment),Q=r(),z=U("p"),z.textContent=g,B=r(),y(A.$$.fragment),Re=r(),N=U("p"),N.textContent=da,Qe=r(),v=U("ul"),v.innerHTML=ya,We=r(),E=U("p"),E.innerHTML=Ja,Ve=r(),y(Y.$$.fragment),xe=r(),F=U("p"),F.textContent=Ta,Ae=r(),y(H.$$.fragment),ol=r(),re=U("p"),re.textContent=Ze,Ne=r(),y(S.$$.fragment),ml=r(),pe=U("p"),pe.innerHTML=$e,Ee=r(),y(D.$$.fragment),Ye=r(),q=U("p"),q.textContent=wa,Fe=r(),y(L.$$.fragment),He=r(),P=U("p"),P.textContent=Ua,Se=r(),y(K.$$.fragment),De=r(),y(O.$$.fragment),qe=r(),ee=U("p"),ee.innerHTML=fa,Le=r(),y(le.$$.fragment),dl=r(),ce=U("p"),ce.innerHTML=Ge,Pe=r(),y(ae.$$.fragment),Ke=r(),y(W.$$.fragment),Oe=r(),te=U("p"),te.textContent=ja,el=r(),y(se.$$.fragment),ll=r(),ne=U("p"),ne.innerHTML=yl,ue=r(),Be=U("p"),Be.textContent=Jl,Me=r(),y(oe.$$.fragment),me=r(),y(de.$$.fragment),ye=r(),ve=U("p"),ve.innerHTML=Tl,Je=r(),y(ze.$$.fragment),al=r(),V=U("p"),V.textContent=ba,tl=r(),y(ie.$$.fragment),wl=r(),y(Te.$$.fragment)},l(l){J(t.$$.fragment,l),c=p(l),n=f(l,"P",{"data-svelte-h":!0}),j(n)!=="svelte-1deq73f"&&(n.innerHTML=o),_=p(l),J(b.$$.fragment,l),$=p(l),Z=f(l,"P",{"data-svelte-h":!0}),j(Z)!=="svelte-10sbmjw"&&(Z.innerHTML=k),d=p(l),J(h.$$.fragment,l),G=p(l),J(x.$$.fragment,l),Q=p(l),z=f(l,"P",{"data-svelte-h":!0}),j(z)!=="svelte-1ciqxzg"&&(z.textContent=g),B=p(l),J(A.$$.fragment,l),Re=p(l),N=f(l,"P",{"data-svelte-h":!0}),j(N)!=="svelte-1gweezu"&&(N.textContent=da),Qe=p(l),v=f(l,"UL",{"data-svelte-h":!0}),j(v)!=="svelte-w4uvxk"&&(v.innerHTML=ya),We=p(l),E=f(l,"P",{"data-svelte-h":!0}),j(E)!=="svelte-ham5e0"&&(E.innerHTML=Ja),Ve=p(l),J(Y.$$.fragment,l),xe=p(l),F=f(l,"P",{"data-svelte-h":!0}),j(F)!=="svelte-114yi2l"&&(F.textContent=Ta),Ae=p(l),J(H.$$.fragment,l),ol=p(l),re=f(l,"P",{"data-svelte-h":!0}),j(re)!=="svelte-1i6yszn"&&(re.textContent=Ze),Ne=p(l),J(S.$$.fragment,l),ml=p(l),pe=f(l,"P",{"data-svelte-h":!0}),j(pe)!=="svelte-15i7smm"&&(pe.innerHTML=$e),Ee=p(l),J(D.$$.fragment,l),Ye=p(l),q=f(l,"P",{"data-svelte-h":!0}),j(q)!=="svelte-i04062"&&(q.textContent=wa),Fe=p(l),J(L.$$.fragment,l),He=p(l),P=f(l,"P",{"data-svelte-h":!0}),j(P)!=="svelte-1olt95c"&&(P.textContent=Ua),Se=p(l),J(K.$$.fragment,l),De=p(l),J(O.$$.fragment,l),qe=p(l),ee=f(l,"P",{"data-svelte-h":!0}),j(ee)!=="svelte-1g8mr4u"&&(ee.innerHTML=fa),Le=p(l),J(le.$$.fragment,l),dl=p(l),ce=f(l,"P",{"data-svelte-h":!0}),j(ce)!=="svelte-1skur9m"&&(ce.innerHTML=Ge),Pe=p(l),J(ae.$$.fragment,l),Ke=p(l),J(W.$$.fragment,l),Oe=p(l),te=f(l,"P",{"data-svelte-h":!0}),j(te)!=="svelte-8vuhx6"&&(te.textContent=ja),el=p(l),J(se.$$.fragment,l),ll=p(l),ne=f(l,"P",{"data-svelte-h":!0}),j(ne)!=="svelte-1wk5dqw"&&(ne.innerHTML=yl),ue=p(l),Be=f(l,"P",{"data-svelte-h":!0}),j(Be)!=="svelte-jm72ma"&&(Be.textContent=Jl),Me=p(l),J(oe.$$.fragment,l),me=p(l),J(de.$$.fragment,l),ye=p(l),ve=f(l,"P",{"data-svelte-h":!0}),j(ve)!=="svelte-pi990m"&&(ve.innerHTML=Tl),Je=p(l),J(ze.$$.fragment,l),al=p(l),V=f(l,"P",{"data-svelte-h":!0}),j(V)!=="svelte-zhz1o9"&&(V.textContent=ba),tl=p(l),J(ie.$$.fragment,l),wl=p(l),J(Te.$$.fragment,l)},m(l,m){T(t,l,m),s(l,c,m),s(l,n,m),s(l,_,m),T(b,l,m),s(l,$,m),s(l,Z,m),s(l,d,m),T(h,l,m),s(l,G,m),T(x,l,m),s(l,Q,m),s(l,z,m),s(l,B,m),T(A,l,m),s(l,Re,m),s(l,N,m),s(l,Qe,m),s(l,v,m),s(l,We,m),s(l,E,m),s(l,Ve,m),T(Y,l,m),s(l,xe,m),s(l,F,m),s(l,Ae,m),T(H,l,m),s(l,ol,m),s(l,re,m),s(l,Ne,m),T(S,l,m),s(l,ml,m),s(l,pe,m),s(l,Ee,m),T(D,l,m),s(l,Ye,m),s(l,q,m),s(l,Fe,m),T(L,l,m),s(l,He,m),s(l,P,m),s(l,Se,m),T(K,l,m),s(l,De,m),T(O,l,m),s(l,qe,m),s(l,ee,m),s(l,Le,m),T(le,l,m),s(l,dl,m),s(l,ce,m),s(l,Pe,m),T(ae,l,m),s(l,Ke,m),T(W,l,m),s(l,Oe,m),s(l,te,m),s(l,el,m),T(se,l,m),s(l,ll,m),s(l,ne,m),s(l,ue,m),s(l,Be,m),s(l,Me,m),T(oe,l,m),s(l,me,m),T(de,l,m),s(l,ye,m),s(l,ve,m),s(l,Je,m),T(ze,l,m),s(l,al,m),s(l,V,m),s(l,tl,m),T(ie,l,m),s(l,wl,m),T(Te,l,m),we=!0},i(l){we||(u(t.$$.fragment,l),u(b.$$.fragment,l),u(h.$$.fragment,l),u(x.$$.fragment,l),u(A.$$.fragment,l),u(Y.$$.fragment,l),u(H.$$.fragment,l),u(S.$$.fragment,l),u(D.$$.fragment,l),u(L.$$.fragment,l),u(K.$$.fragment,l),u(O.$$.fragment,l),u(le.$$.fragment,l),u(ae.$$.fragment,l),u(W.$$.fragment,l),u(se.$$.fragment,l),u(oe.$$.fragment,l),u(de.$$.fragment,l),u(ze.$$.fragment,l),u(ie.$$.fragment,l),u(Te.$$.fragment,l),we=!0)},o(l){M(t.$$.fragment,l),M(b.$$.fragment,l),M(h.$$.fragment,l),M(x.$$.fragment,l),M(A.$$.fragment,l),M(Y.$$.fragment,l),M(H.$$.fragment,l),M(S.$$.fragment,l),M(D.$$.fragment,l),M(L.$$.fragment,l),M(K.$$.fragment,l),M(O.$$.fragment,l),M(le.$$.fragment,l),M(ae.$$.fragment,l),M(W.$$.fragment,l),M(se.$$.fragment,l),M(oe.$$.fragment,l),M(de.$$.fragment,l),M(ze.$$.fragment,l),M(ie.$$.fragment,l),M(Te.$$.fragment,l),we=!1},d(l){l&&(a(c),a(n),a(_),a($),a(Z),a(d),a(G),a(Q),a(z),a(B),a(Re),a(N),a(Qe),a(v),a(We),a(E),a(Ve),a(xe),a(F),a(Ae),a(ol),a(re),a(Ne),a(ml),a(pe),a(Ee),a(Ye),a(q),a(Fe),a(He),a(P),a(Se),a(De),a(qe),a(ee),a(Le),a(dl),a(ce),a(Pe),a(Ke),a(Oe),a(te),a(el),a(ll),a(ne),a(ue),a(Be),a(Me),a(me),a(ye),a(ve),a(Je),a(al),a(V),a(tl),a(wl)),w(t,l),w(b,l),w(h,l),w(x,l),w(A,l),w(Y,l),w(H,l),w(S,l),w(D,l),w(L,l),w(K,l),w(O,l),w(le,l),w(ae,l),w(W,l),w(se,l),w(oe,l),w(de,l),w(ze,l),w(ie,l),w(Te,l)}}}function zs(C){let t,c='🚨 Dacă antrenați pe un TPU, va trebui să mutați tot codul începând cu celula de mai sus într-o funcție de antrenare dedicată. Consultați <a href="/course/chapter3">Capitolul 3</a> pentru mai multe detalii.';return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-sg2lu8"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Xs(C){let t,c="✏️ <strong>încercați!</strong> Fie vă creați propria funcție de pierdere personalizată, adaptată la cazul vostru de utilizare, fie adăugați un alt pas personalizat în bucla de antrenare.";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-1nf6k9s"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Rs(C){let t,c="✏️ <strong>încercați!</strong> Atunci când efectuați experimente de antrenare de lungă durată, este o idee bună să înregistrați parametrii importanți utilizând instrumente precum TensorBoard sau Weights &amp; Biases. Adăugați o logare adecvată la bucla de antrenare, astfel încât să puteți verifica întotdeauna cum decurge antrenarea.";return{c(){t=U("p"),t.innerHTML=c},l(n){t=f(n,"P",{"data-svelte-h":!0}),j(t)!=="svelte-uxqq5y"&&(t.innerHTML=c)},m(n,o){s(n,t,o)},p:sa,d(n){n&&a(t)}}}function Qs(C){let t,c,n,o,_,b,$,Z,k,d,h,G,x='Până acum, am folosit în principal modele preantrenate și le-am făcut fine-tuning pentru noi cazuri de utilizare prin reutilizarea weighturilor din preantrenare. După cum am văzut în <a href="/course/chapter1">Capitolul 1</a>, acest lucru este denumit în mod obișnuit <em>învățare prin transfer</em> și este o strategie foarte reușită pentru aplicarea modelelor Transformer la majoritatea cazurilor de utilizare din lumea reală în care datele etichetate sunt puține. În acest capitol, vom adopta o abordare diferită și vom antrena un model complet nou de la zero. Aceasta este o abordare bună dacă aveți multe date și este foarte diferită de datele de preantrenare utilizate pentru modelele disponibile. Cu toate acestea, preantrenarea unui model lingvistic necesită, de asemenea, mult mai multe resurse de calcul decât fine-tuningul unui model existent. Printre exemplele în care poate fi utilă antrenarea unui nou model se numără dataseturile formate din note muzicale, secvențe moleculare precum ADN sau limbaje de programare. Acestea din urmă au câștigat recent teren datorită unor instrumente precum TabNine și Copilot de la GitHub, alimentate de modelul Codex al OpenAI, care pot genera secvențe lungi de cod. Această sarcină de generare a textului este cel mai bine abordată cu modele de limbaj autoregresive sau cauzale, cum ar fi GPT-2.',Q,z,g="În această secțiune vom construi o versiune la scară redusă a unui model de generare a codului: ne vom concentra pe completări de o linie în loc de funcții sau clase complete, folosind un subset de cod Python. Atunci când lucrați cu date în Python, sunteți în contact frecvent Python data science stack, formată din bibliotecile <code>matplotlib</code>, <code>seaborn</code>, <code>pandas</code> și <code>scikit-learn</code>. Atunci când se utilizează aceste cadre, este frecvent să fie nevoie să se caute comenzi specifice, astfel încât ar fi bine dacă am putea utiliza un model care să efectueze aceste apeluri pentru noi.",B,A,Re,N,da='În <a href="/course/chapter6">Capitolul 6</a> am creat un tokenizer eficient pentru a procesa codul sursă Python, dar avem nevoie de un dataset la scară largă pe care să preantrenăm un model. Aici, vom aplica tokenizerul nostru la un corpus de cod Python derivat din repositoriile GitHub. Vom utiliza apoi API-ul <code>Trainer</code> și 🤗 Accelerate pentru a antrena modelul. Să trecem la treabă!',Qe,v,ya,We,E,Ja='Aceasta este de fapt o prezentare a modelului care a fost antrenat și încărcat în Hub folosind codul prezentat în această secțiune. Îl puteți găsi <a href="https://huggingface.co/huggingface-course/codeparrot-ds?text=plt.imshow%28" rel="nofollow">aici</a>. Rețineți că, deoarece are loc o anumită randomizare în generarea textului, veți obține probabil un rezultat ușor diferit.',Ve,Y,xe,F,Ta='Codul Python este disponibil din abundență în repositorii de cod, cum ar fi GitHub, pe care le putem utiliza pentru a crea un dataset prin scraping pentru fiecare repositoriu Python. Aceasta a fost abordarea adoptată în <a href="https://learning.oreilly.com/library/view/natural-language-processing/9781098136789/" rel="nofollow">Transformers textbook</a> pentru a preantrena un model GPT-2. Folosind o descărcare GitHub de aproximativ 180 GB care conține aproximativ 20 de milioane de fișiere Python numită <code>codeparrot</code>, autorii au construit un dataset pe care l-au oferit apoi pe <a href="https://huggingface.co/datasets/transformersbook/codeparrot" rel="nofollow">Hugging Face Hub</a>.',Ae,H,ol="Cu toate acestea, antrenarea pe întregul corpus consumă timp și puterea calculatorului, iar noi avem nevoie doar de subsetul datasetului referitor la Python data science stack. Așadar, să începem prin filtrarea datasetului <code>codeparrot</code> pentru toate fișierele care includ oricare dintre bibliotecile din aceast stack. Din cauza dimensiunii datasetului, dorim să evităm descărcarea acestuia; în schimb, vom utiliza funcția de streaming pentru a-l filtra din mers. Pentru a ne ajuta să filtrăm exemplele de cod care utilizează bibliotecile pe care le-am menționat mai devreme, vom utiliza următoarea funcție:",re,Ze,Ne,S,ml="Să-l testăm pe două exemple:",pe,$e,Ee,D,Ye,q,wa="Putem folosi acest lucru pentru a crea o funcție care va transmite în flux datasetul și va filtra elementele dorite:",Fe,L,He,P,Ua="Apoi, putem aplica pur și simplu această funcție pe datasetului din flux:",Se,K,De,O,qe,ee,fa="Acest lucru ne lasă cu aproximativ 3% din setul de date original, care este încă destul de mare - datasetul rezultat este de 6 GB și constă din 600.000 de scripturi Python!",Le,le,dl="Filtrarea datasetului complet poate dura 2-3 ore, în funcție de calculator și de bandwidth. Dacă nu doriți să parcurgeți singur acest proces îndelungat, vă punem la dispoziție datasetul filtrat pe Hub pentru a-l descărca:",ce,Ge,Pe,ae,Ke,W,Oe,te,ja="Să ne uităm la un exemplu din dataset. Vom arăta doar primele 200 de caractere din fiecare câmp:",el,se,ll,ne,yl,ue,Be="Putem vedea căci câmpul <code>content</code> conține codul pe care dorim ca modelul nostru să se antreneze. Acum că avem un dataset, trebuie să pregătim textele astfel încât acestea să fie într-un format adecvat pentru preantrenare.",Jl,Me,oe,me,de,ye,ve="Primul pas va fi tokenizarea datelor, astfel încât să le putem utiliza pentru antrenare. Deoarece obiectivul nostru este de a autocompleta în principal apeluri scurte de funcții, putem păstra dimensiunea contextului relativ mică. Acest lucru are avantajul că putem antrena modelul mult mai rapid și că necesită semnificativ mai puțină memorie. Dacă este important pentru aplicația voastră să aveți mai mult context (de exemplu, dacă doriți ca modelul să scrie teste unitare pe baza unui fișier cu definiția funcției), asigurați-vă că măriți acest număr, dar rețineți, de asemenea, că acest lucru vine cu utilizare mai mare de memorie GPU. Pentru moment, să fixăm dimensiunea contextului la 128 de tokeni, spre deosebire de 1 024 sau 2 048 utilizate în GPT-2 sau respectiv GPT-3.",Tl,Je,ze='Majoritatea documentelor conțin mult mai mult de 128 de cuvinte, astfel încât trunchierea simplă a inputurilor la lungimea maximă ar elimina o mare parte din datasetul nostru. În schimb, vom utiliza opțiunea <code>return_overflowing_tokens</code> pentru a tokeniza întreagul input și a o împărți în mai multe bucăți, așa cum am făcut în <a href="/course/chapter6/4">Capitolul 6</a>. De asemenea, vom utiliza opțiunea <code>return_length</code> pentru a returna automat lungimea fiecărui fragment creat. Adesea, ultimul fragment va fi mai mic decât dimensiunea contextului, iar noi vom scăpa de aceste bucăți pentru a evita problemele de padding; nu avem nevoie de ele, deoarece oricum avem o mulțime de date.',al,V,ba='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/chunking_texts.svg" alt="Fragmentarea unui text mare în mai multe bucăți."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/chunking_texts-dark.svg" alt="Fragmentarea unui text mare în mai multe bucăți."/>',tl,ie,wl="Să vedem exact cum funcționează acest lucru analizând primele două exemple:",Te,we,l,m,Ia,Ul,wt="Putem vedea că obținem 34 de segmente în total din aceste două exemple. Uitându-ne la lungimea segmentelor, putem vedea că segmentele de la sfârșitul ambelor documente au mai puțin de 128 de token-uri (117 și, respectiv, 41). Acestea reprezintă doar o mică parte din totalul segmentelor pe care le avem, așa că le putem șterge în siguranță. Cu ajutorul câmpului <code>overflow_to_sample_mapping</code>, putem, de asemenea, să reconstituim care segmente au aparținut căror probe de intrare.",Ca,fl,Ut='Cu această operațiune folosim o caracteristică utilă a funcției <code>Dataset.map()</code> din 🤗 Datasets, și anume că nu necesită one-to-one maps; așa cum am văzut în <a href="/course/chaptero7/3">secțiunea 3</a>, putem crea batch-uri cu mai multe sau mai puține elemente decât batch-ul de intrare. Acest lucru este util atunci când efectuăm operațiuni precum augmentarea sau filtrarea datelor care modifică numărul de elemente. În cazul nostru, atunci când tokenizăm fiecare element în segmente de dimensiunea contextului specificat, creăm multe probe din fiecare document. Trebuie doar să ne asigurăm că ștergem coloanele existente, deoarece acestea au o dimensiune conflictuală. Dacă am dori să le păstrăm, am putea să le repetăm în mod corespunzător și să le returnăm în cadrul apelului <code>Dataset.map()</code>:',_a,jl,ga,bl,ka,hl,ft="Avem acum 16,7 milioane de exemple cu 128 de tokenii fiecare, ceea ce corespunde unui total de aproximativ 2,1 miliarde de tokeni. Ca referință, modelele GPT-3 și Codex ale OpenAI sunt antrenate pe 300 și, respectiv, 100 de miliarde de tokeni, unde modelele Codex sunt inițializate din checkpointurile GPT-3. Scopul nostru în această secțiune nu este de a concura cu aceste modele, care pot genera texte lungi și coerente, ci de a crea o versiune la scară redusă care să ofere o funcție rapidă de autocompletare pentru data scientists.",Za,Il,jt="Acum că avem datasetul gata, hai să configurăm modelul!",$a,nl,Ga,Cl,Ba,_l,bt="Primul nostru pas este să inițializăm un model GPT-2. Vom utiliza aceeași configurație pentru modelul nostru ca și pentru modelul GPT-2 mic, deci încărcăm configurația preantrenată, ne asigurăm că dimensiunea tokenizerlui corespunde cu dimensiunea vocabularului modelului și transmitem ID-urile tokenilor <code>bos</code> și <code>eos</code> (începutul și sfârșitul secvenței):",va,Ue,fe,na,gl,ht="Modelul nostru are 124 milioane de parametri pe care va trebui să le facem tune. Înainte de a începe antrenarea, trebuie să configurăm un data collator care se va ocupa de crearea batch-urilor. Putem utiliza colatorul <code>DataCollatorForLanguageModeling</code>, care este conceput special pentru modelarea limbajului (după cum sugerează subtil numele). Pe lângă stacking și paddingul batchurilor, acesta se ocupă și de crearea labelurilor modelului lingvistic - în modelarea cauzală a limbajului, inputurile servesc și ca labels (doar că sunt decalate cu un element), iar acest data collator le creează din mers în timpul antrenării, astfel încât să nu fie nevoie să duplicăm <code>input_ids</code>.",za,kl,It="Rețineți că <code>DataCollatorForLanguageModeling</code> acceptă atât masked language masking (MLM), cât și causal language modeling(CLM). În mod implicit, acesta pregătește datele pentru MLM, dar putem trece la CLM prin setarea argumentului <code>mlm=False</code>:",Xa,je,be,ia,Zl,Ct="Să aruncăm o privire la un exemplu:",Ra,$l,Qa,he,Ie,ra,Gl,_t="Putem vedea că exemplele sunt stacked și că toți tensorii au aceeași formă.",Wa,pa,il,Va,Bl,gt="Acum avem totul pregătit pentru a ne antrena modelul - până la urmă nu a fost atât de greu! Înainte de a începe antrenamentul, trebuie să ne conectăm la Hugging Face. Dacă lucrați într-un notebook, puteți face acest lucru cu următoarea funcție de utilitate:",xa,vl,Aa,zl,kt="Aceasta va afișa un widget în care puteți introduce datele voastre de autentificare Hugging Face.",Na,Xl,Zt="Dacă nu lucrați într-un notebook, tastați următoarea linie în terminal:",Ea,Rl,Ya,Ce,_e,ca,rl,Fa,pl,Ha,Ql,Sa,Wl,$t="Acum este momentul adevărului: să vedem cât de bine funcționează de fapt modelul antrenat! Putem vedea în loguri că pierderea a scăzut în mod constant, dar pentru a testa modelul, hai să vedem cât de bine funcționează la câteva încerări. Pentru a face acest lucru, vom încorpora modelul într-un <code>pipeline</code> de generare a textului și îl vom pune pe un GPU pentru generații rapide, dacă există unul disponibil:",Da,ge,ke,ua,Vl,Gt="Să începem cu sarcina simplă de a crea un scatter plot:",qa,xl,La,Al,Pa,Nl,Bt="Rezultatul pare corect. Funcționează și pentru o operație <code>pandas</code>? Să vedem dacă putem crea un <code>DataFrame</code> din două array-uri:",Ka,El,Oa,Yl,et,Fl,vt="Excelent, acesta este răspunsul corect - deși apoi introduce din nou coloana <code>x</code>. Deoarece numărul de tokeni generate este limitat, următoarea buclă <code>for</code> este întreruptă. Să vedem dacă putem face ceva un pic mai complex și dacă modelul ne ajută să folosim operația <code>groupby</code>:",lt,Hl,at,Sl,tt,Dl,zt="Nu este rău; acesta este modul corect de a face acest lucru. În cele din urmă, să vedem dacă îl putem folosi și pentru <code>scikit-learn</code> și să configurăm un model Random Forest:",st,ql,nt,Ll,it,Ma,oa,Pl,rt,ha,pt;_=new Ms({props:{fw:C[0]}}),$=new ma({props:{title:"Antrenarea de la zero a unui model de limbaj cauzal",local:"training-a-causal-language-model-from-scratch",headingTag:"h1"}});const Xt=[ds,ms],Kl=[];function Rt(e,i){return e[0]==="pt"?0:1}k=Rt(C),d=Kl[k]=Xt[k](C),A=new Tt({props:{id:"Vpjb1lu0MDk"}}),Y=new ma({props:{title:"Colectarea datelor",local:"gathering-the-data",headingTag:"h2"}}),Ze=new I({props:{code:"ZGVmJTIwYW55X2tleXdvcmRfaW5fc3RyaW5nKHN0cmluZyUyQyUyMGtleXdvcmRzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGtleXdvcmQlMjBpbiUyMGtleXdvcmRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBrZXl3b3JkJTIwaW4lMjBzdHJpbmclM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBUcnVlJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwRmFsc2U=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">any_keyword_in_string</span>(<span class="hljs-params">string, keywords</span>):
    <span class="hljs-keyword">for</span> keyword <span class="hljs-keyword">in</span> keywords:
        <span class="hljs-keyword">if</span> keyword <span class="hljs-keyword">in</span> string:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>`,wrap:!1}}),$e=new I({props:{code:"ZmlsdGVycyUyMCUzRCUyMCU1QiUyMnBhbmRhcyUyMiUyQyUyMCUyMnNrbGVhcm4lMjIlMkMlMjAlMjJtYXRwbG90bGliJTIyJTJDJTIwJTIyc2VhYm9ybiUyMiU1RCUwQWV4YW1wbGVfMSUyMCUzRCUyMCUyMmltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUyMiUwQWV4YW1wbGVfMiUyMCUzRCUyMCUyMmltcG9ydCUyMHBhbmRhcyUyMGFzJTIwcGQlMjIlMEElMEFwcmludCglMEElMjAlMjAlMjAlMjBhbnlfa2V5d29yZF9pbl9zdHJpbmcoZXhhbXBsZV8xJTJDJTIwZmlsdGVycyklMkMlMjBhbnlfa2V5d29yZF9pbl9zdHJpbmcoZXhhbXBsZV8yJTJDJTIwZmlsdGVycyklMEEp",highlighted:`filters = [<span class="hljs-string">&quot;pandas&quot;</span>, <span class="hljs-string">&quot;sklearn&quot;</span>, <span class="hljs-string">&quot;matplotlib&quot;</span>, <span class="hljs-string">&quot;seaborn&quot;</span>]
example_1 = <span class="hljs-string">&quot;import numpy as np&quot;</span>
example_2 = <span class="hljs-string">&quot;import pandas as pd&quot;</span>

<span class="hljs-built_in">print</span>(
    any_keyword_in_string(example_1, filters), any_keyword_in_string(example_2, filters)
)`,wrap:!1}}),D=new I({props:{code:"RmFsc2UlMjBUcnVl",highlighted:'<span class="hljs-literal">False</span> <span class="hljs-literal">True</span>',wrap:!1}}),L=new I({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEFmcm9tJTIwdHFkbSUyMGltcG9ydCUyMHRxZG0lMEFmcm9tJTIwZGF0YXNldHMlMjBpbXBvcnQlMjBEYXRhc2V0JTBBJTBBJTBBZGVmJTIwZmlsdGVyX3N0cmVhbWluZ19kYXRhc2V0KGRhdGFzZXQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlMjAlM0QlMjBkZWZhdWx0ZGljdChsaXN0KSUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMGZvciUyMHNhbXBsZSUyMGluJTIwdHFkbShpdGVyKGRhdGFzZXQpKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsJTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwYW55X2tleXdvcmRfaW5fc3RyaW5nKHNhbXBsZSU1QiUyMmNvbnRlbnQlMjIlNUQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGUuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlNUJrJTVELmFwcGVuZCh2KSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JsZW4oZmlsdGVyZWRfZGljdCU1Qidjb250ZW50JyU1RCklMkZ0b3RhbCUzQS4yJTI1JTdEJTIwb2YlMjBkYXRhJTIwYWZ0ZXIlMjBmaWx0ZXJpbmcuJTIyKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMERhdGFzZXQuZnJvbV9kaWN0KGZpbHRlcmVkX2RpY3Qp",highlighted:`<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict
<span class="hljs-keyword">from</span> tqdm <span class="hljs-keyword">import</span> tqdm
<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Dataset


<span class="hljs-keyword">def</span> <span class="hljs-title function_">filter_streaming_dataset</span>(<span class="hljs-params">dataset, filters</span>):
    filtered_dict = defaultdict(<span class="hljs-built_in">list</span>)
    total = <span class="hljs-number">0</span>
    <span class="hljs-keyword">for</span> sample <span class="hljs-keyword">in</span> tqdm(<span class="hljs-built_in">iter</span>(dataset)):
        total += <span class="hljs-number">1</span>
        <span class="hljs-keyword">if</span> any_keyword_in_string(sample[<span class="hljs-string">&quot;content&quot;</span>], filters):
            <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> sample.items():
                filtered_dict[k].append(v)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{<span class="hljs-built_in">len</span>(filtered_dict[<span class="hljs-string">&#x27;content&#x27;</span>])/total:<span class="hljs-number">.2</span>%}</span> of data after filtering.&quot;</span>)
    <span class="hljs-keyword">return</span> Dataset.from_dict(filtered_dict)`,wrap:!1}}),K=new I({props:{code:"JTIzJTIwVGhpcyUyMGNlbGwlMjB3aWxsJTIwdGFrZSUyMGElMjB2ZXJ5JTIwbG9uZyUyMHRpbWUlMjB0byUyMGV4ZWN1dGUlMkMlMjBzbyUyMHlvdSUyMHNob3VsZCUyMHNraXAlMjBpdCUyMGFuZCUyMGdvJTIwdG8lMEElMjMlMjB0aGUlMjBuZXh0JTIwb25lISUwQWZyb20lMjBkYXRhc2V0cyUyMGltcG9ydCUyMGxvYWRfZGF0YXNldCUwQSUwQXNwbGl0JTIwJTNEJTIwJTIydHJhaW4lMjIlMjAlMjAlMjMlMjAlMjJ2YWxpZCUyMiUwQWZpbHRlcnMlMjAlM0QlMjAlNUIlMjJwYW5kYXMlMjIlMkMlMjAlMjJza2xlYXJuJTIyJTJDJTIwJTIybWF0cGxvdGxpYiUyMiUyQyUyMCUyMnNlYWJvcm4lMjIlNUQlMEElMEFkYXRhJTIwJTNEJTIwbG9hZF9kYXRhc2V0KGYlMjJ0cmFuc2Zvcm1lcnNib29rJTJGY29kZXBhcnJvdC0lN0JzcGxpdCU3RCUyMiUyQyUyMHNwbGl0JTNEc3BsaXQlMkMlMjBzdHJlYW1pbmclM0RUcnVlKSUwQWZpbHRlcmVkX2RhdGElMjAlM0QlMjBmaWx0ZXJfc3RyZWFtaW5nX2RhdGFzZXQoZGF0YSUyQyUyMGZpbHRlcnMp",highlighted:`<span class="hljs-comment"># This cell will take a very long time to execute, so you should skip it and go to</span>
<span class="hljs-comment"># the next one!</span>
<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

split = <span class="hljs-string">&quot;train&quot;</span>  <span class="hljs-comment"># &quot;valid&quot;</span>
filters = [<span class="hljs-string">&quot;pandas&quot;</span>, <span class="hljs-string">&quot;sklearn&quot;</span>, <span class="hljs-string">&quot;matplotlib&quot;</span>, <span class="hljs-string">&quot;seaborn&quot;</span>]

data = load_dataset(<span class="hljs-string">f&quot;transformersbook/codeparrot-<span class="hljs-subst">{split}</span>&quot;</span>, split=split, streaming=<span class="hljs-literal">True</span>)
filtered_data = filter_streaming_dataset(data, filters)`,wrap:!1}}),O=new I({props:{code:"My4yNiUyNSUyMG9mJTIwZGF0YSUyMGFmdGVyJTIwZmlsdGVyaW5nLg==",highlighted:'<span class="hljs-number">3.26</span>% of data after filtering.',wrap:!1}}),Ge=new I({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTJDJTIwRGF0YXNldERpY3QlMEElMEFkc190cmFpbiUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlcGFycm90LWRzLXRyYWluJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiklMEFkc192YWxpZCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlcGFycm90LWRzLXZhbGlkJTIyJTJDJTIwc3BsaXQlM0QlMjJ2YWxpZGF0aW9uJTIyKSUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMERhdGFzZXREaWN0KCUwQSUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnRyYWluJTIyJTNBJTIwZHNfdHJhaW4lMkMlMjAlMjAlMjMlMjAuc2h1ZmZsZSgpLnNlbGVjdChyYW5nZSg1MDAwMCkpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydmFsaWQlMjIlM0ElMjBkc192YWxpZCUyQyUyMCUyMCUyMyUyMC5zaHVmZmxlKCkuc2VsZWN0KHJhbmdlKDUwMCkpJTBBJTIwJTIwJTIwJTIwJTdEJTBBKSUwQSUwQXJhd19kYXRhc2V0cw==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset, DatasetDict

ds_train = load_dataset(<span class="hljs-string">&quot;huggingface-course/codeparrot-ds-train&quot;</span>, split=<span class="hljs-string">&quot;train&quot;</span>)
ds_valid = load_dataset(<span class="hljs-string">&quot;huggingface-course/codeparrot-ds-valid&quot;</span>, split=<span class="hljs-string">&quot;validation&quot;</span>)

raw_datasets = DatasetDict(
    {
        <span class="hljs-string">&quot;train&quot;</span>: ds_train,  <span class="hljs-comment"># .shuffle().select(range(50000)),</span>
        <span class="hljs-string">&quot;valid&quot;</span>: ds_valid,  <span class="hljs-comment"># .shuffle().select(range(500))</span>
    }
)

raw_datasets`,wrap:!1}}),ae=new I({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3JlcG9fbmFtZSclMkMlMjAncGF0aCclMkMlMjAnY29waWVzJyUyQyUyMCdzaXplJyUyQyUyMCdjb250ZW50JyUyQyUyMCdsaWNlbnNlJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNjA2NzIwJTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHZhbGlkJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidyZXBvX25hbWUnJTJDJTIwJ3BhdGgnJTJDJTIwJ2NvcGllcyclMkMlMjAnc2l6ZSclMkMlMjAnY29udGVudCclMkMlMjAnbGljZW5zZSclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDMzMjIlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;repo_name&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;copies&#x27;</span>, <span class="hljs-string">&#x27;size&#x27;</span>, <span class="hljs-string">&#x27;content&#x27;</span>, <span class="hljs-string">&#x27;license&#x27;</span>],
        num_rows: <span class="hljs-number">606720</span>
    })
    valid: Dataset({
        features: [<span class="hljs-string">&#x27;repo_name&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;copies&#x27;</span>, <span class="hljs-string">&#x27;size&#x27;</span>, <span class="hljs-string">&#x27;content&#x27;</span>, <span class="hljs-string">&#x27;license&#x27;</span>],
        num_rows: <span class="hljs-number">3322</span>
    })
})`,wrap:!1}}),W=new Ml({props:{$$slots:{default:[ys]},$$scope:{ctx:C}}}),se=new I({props:{code:"Zm9yJTIwa2V5JTIwaW4lMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlM0ElMEElMjAlMjAlMjAlMjBwcmludChmJTIyJTdCa2V5LnVwcGVyKCklN0QlM0ElMjAlN0JyYXdfZGF0YXNldHMlNUIndHJhaW4nJTVEJTVCMCU1RCU1QmtleSU1RCU1QiUzQTIwMCU1RCU3RCUyMik=",highlighted:`<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>]:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{key.upper()}</span>: <span class="hljs-subst">{raw_datasets[<span class="hljs-string">&#x27;train&#x27;</span>][<span class="hljs-number">0</span>][key][:<span class="hljs-number">200</span>]}</span>&quot;</span>)`,wrap:!1}}),ne=new I({props:{code:"J1JFUE9fTkFNRSUzQSUyMGttaWtlJTJGc2Npa2l0LWxlYXJuJyUwQSdQQVRIJTNBJTIwc2tsZWFybiUyRnV0aWxzJTJGX19pbml0X18ucHknJTBBJ0NPUElFUyUzQSUyMDMnJTBBJ1NJWkUlM0ElMjAxMDA5NCclMEEnJydDT05URU5UJTNBJTIwJTIyJTIyJTIyJTBBVGhlJTIwJTNBbW9kJTNBJTYwc2tsZWFybi51dGlscyU2MCUyMG1vZHVsZSUyMGluY2x1ZGVzJTIwdmFyaW91cyUyMHV0aWxpdGVzLiUwQSUyMiUyMiUyMiUwQSUwQWZyb20lMjBjb2xsZWN0aW9ucyUyMGltcG9ydCUyMFNlcXVlbmNlJTBBJTBBaW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBZnJvbSUyMHNjaXB5LnNwYXJzZSUyMGltcG9ydCUyMGlzc3BhcnNlJTBBaW1wb3J0JTIwd2FybmluZ3MlMEElMEFmcm9tJTIwLm11cm11cmhhc2glMjBpbXBvcnQlMjBtdXJtJTBBTElDRU5TRSUzQSUyMGJzZC0zLWNsYXVzZScnJw==",highlighted:`<span class="hljs-string">&#x27;REPO_NAME: kmike/scikit-learn&#x27;</span>
<span class="hljs-string">&#x27;PATH: sklearn/utils/__init__.py&#x27;</span>
<span class="hljs-string">&#x27;COPIES: 3&#x27;</span>
<span class="hljs-string">&#x27;SIZE: 10094&#x27;</span>
<span class="hljs-string">&#x27;&#x27;&#x27;CONTENT: &quot;&quot;&quot;
The :mod:\`sklearn.utils\` module includes various utilites.
&quot;&quot;&quot;

from collections import Sequence

import numpy as np
from scipy.sparse import issparse
import warnings

from .murmurhash import murm
LICENSE: bsd-3-clause&#x27;&#x27;&#x27;</span>`,wrap:!1}}),Me=new ma({props:{title:"Pregătirea datasetului",local:"preparing-the-dataset",headingTag:"h2"}}),me=new Tt({props:{id:"ma1TrR7gE7I"}}),we=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjb250ZXh0X2xlbmd0aCUyMCUzRCUyMDEyOCUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmNvZGUtc2VhcmNoLW5ldC10b2tlbml6ZXIlMjIpJTBBJTBBb3V0cHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUzQTIlNUQlNUIlMjJjb250ZW50JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBtYXhfbGVuZ3RoJTNEY29udGV4dF9sZW5ndGglMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl9sZW5ndGglM0RUcnVlJTJDJTBBKSUwQSUwQXByaW50KGYlMjJJbnB1dCUyMElEcyUyMGxlbmd0aCUzQSUyMCU3QmxlbihvdXRwdXRzJTVCJ2lucHV0X2lkcyclNUQpJTdEJTIyKSUwQXByaW50KGYlMjJJbnB1dCUyMGNodW5rJTIwbGVuZ3RocyUzQSUyMCU3QihvdXRwdXRzJTVCJ2xlbmd0aCclNUQpJTdEJTIyKSUwQXByaW50KGYlMjJDaHVuayUyMG1hcHBpbmclM0ElMjAlN0JvdXRwdXRzJTVCJ292ZXJmbG93X3RvX3NhbXBsZV9tYXBwaW5nJyU1RCU3RCUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

context_length = <span class="hljs-number">128</span>
tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;huggingface-course/code-search-net-tokenizer&quot;</span>)

outputs = tokenizer(
    raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][:<span class="hljs-number">2</span>][<span class="hljs-string">&quot;content&quot;</span>],
    truncation=<span class="hljs-literal">True</span>,
    max_length=context_length,
    return_overflowing_tokens=<span class="hljs-literal">True</span>,
    return_length=<span class="hljs-literal">True</span>,
)

<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Input IDs length: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(outputs[<span class="hljs-string">&#x27;input_ids&#x27;</span>])}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Input chunk lengths: <span class="hljs-subst">{(outputs[<span class="hljs-string">&#x27;length&#x27;</span>])}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Chunk mapping: <span class="hljs-subst">{outputs[<span class="hljs-string">&#x27;overflow_to_sample_mapping&#x27;</span>]}</span>&quot;</span>)`,wrap:!1}}),m=new I({props:{code:"SW5wdXQlMjBJRHMlMjBsZW5ndGglM0ElMjAzNCUwQUlucHV0JTIwY2h1bmslMjBsZW5ndGhzJTNBJTIwJTVCMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTE3JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwMTI4JTJDJTIwNDElNUQlMEFDaHVuayUyMG1hcHBpbmclM0ElMjAlNUIwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVE",highlighted:`Input IDs length: <span class="hljs-number">34</span>
Input chunk lengths: [<span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">117</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">128</span>, <span class="hljs-number">41</span>]
Chunk mapping: [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]`,wrap:!1}}),jl=new I({props:{code:"ZGVmJTIwdG9rZW5pemUoZWxlbWVudCklM0ElMEElMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsZW1lbnQlNUIlMjJjb250ZW50JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbGVuZ3RoJTNEY29udGV4dF9sZW5ndGglMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9sZW5ndGglM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMGlucHV0X2JhdGNoJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwbGVuZ3RoJTJDJTIwaW5wdXRfaWRzJTIwaW4lMjB6aXAob3V0cHV0cyU1QiUyMmxlbmd0aCUyMiU1RCUyQyUyMG91dHB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW5ndGglMjAlM0QlM0QlMjBjb250ZXh0X2xlbmd0aCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0X2JhdGNoLmFwcGVuZChpbnB1dF9pZHMpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIyaW5wdXRfaWRzJTIyJTNBJTIwaW5wdXRfYmF0Y2glN0QlMEElMEElMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjByYXdfZGF0YXNldHMubWFwKCUwQSUyMCUyMCUyMCUyMHRva2VuaXplJTJDJTIwYmF0Y2hlZCUzRFRydWUlMkMlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELmNvbHVtbl9uYW1lcyUwQSklMEF0b2tlbml6ZWRfZGF0YXNldHM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize</span>(<span class="hljs-params">element</span>):
    outputs = tokenizer(
        element[<span class="hljs-string">&quot;content&quot;</span>],
        truncation=<span class="hljs-literal">True</span>,
        max_length=context_length,
        return_overflowing_tokens=<span class="hljs-literal">True</span>,
        return_length=<span class="hljs-literal">True</span>,
    )
    input_batch = []
    <span class="hljs-keyword">for</span> length, input_ids <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(outputs[<span class="hljs-string">&quot;length&quot;</span>], outputs[<span class="hljs-string">&quot;input_ids&quot;</span>]):
        <span class="hljs-keyword">if</span> length == context_length:
            input_batch.append(input_ids)
    <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;input_ids&quot;</span>: input_batch}


tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(
    tokenize, batched=<span class="hljs-literal">True</span>, remove_columns=raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names
)
tokenized_datasets`,wrap:!1}}),bl=new I({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2lucHV0X2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE2NzAyMDYxJTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHZhbGlkJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpbnB1dF9pZHMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA5MzE2NCUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;input_ids&#x27;</span>],
        num_rows: <span class="hljs-number">16702061</span>
    })
    valid: Dataset({
        features: [<span class="hljs-string">&#x27;input_ids&#x27;</span>],
        num_rows: <span class="hljs-number">93164</span>
    })
})`,wrap:!1}}),nl=new Ml({props:{$$slots:{default:[Js]},$$scope:{ctx:C}}}),Cl=new ma({props:{title:"Inițializarea unui nou model",local:"initializing-a-new-model",headingTag:"h2"}});const Qt=[ws,Ts],Ol=[];function Wt(e,i){return e[0]==="pt"?0:1}Ue=Wt(C),fe=Ol[Ue]=Qt[Ue](C);const Vt=[fs,Us],ea=[];function xt(e,i){return e[0]==="pt"?0:1}je=xt(C),be=ea[je]=Vt[je](C),$l=new I({props:{code:"b3V0JTIwJTNEJTIwZGF0YV9jb2xsYXRvciglNUJ0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QmklNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSg1KSU1RCklMEFmb3IlMjBrZXklMjBpbiUyMG91dCUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlMjBzaGFwZSUzQSUyMCU3Qm91dCU1QmtleSU1RC5zaGFwZSU3RCUyMik=",highlighted:`out = data_collator([tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">5</span>)])
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> out:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{key}</span> shape: <span class="hljs-subst">{out[key].shape}</span>&quot;</span>)`,wrap:!1}});const At=[bs,js],la=[];function Nt(e,i){return e[0]==="pt"?0:1}he=Nt(C),Ie=la[he]=At[he](C);let X=C[0]==="tf"&&ls();il=new Ml({props:{warning:!0,$$slots:{default:[hs]},$$scope:{ctx:C}}}),vl=new I({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),Rl=new I({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const Et=[Cs,Is],aa=[];function Yt(e,i){return e[0]==="pt"?0:1}Ce=Yt(C),_e=aa[Ce]=Et[Ce](C),rl=new Ml({props:{$$slots:{default:[_s]},$$scope:{ctx:C}}}),pl=new Ml({props:{$$slots:{default:[Zs]},$$scope:{ctx:C}}}),Ql=new ma({props:{title:"Generarea codului cu un pipeline",local:"code-generation-with-a-pipeline",headingTag:"h2"}});const Ft=[Gs,$s],ta=[];function Ht(e,i){return e[0]==="pt"?0:1}ge=Ht(C),ke=ta[ge]=Ft[ge](C),xl=new I({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVhcmVhJTIwdW51aSUyMHNjYXR0ZXIlMjBwbG90JTIwY3UlMjB4JTJDJTIweSUwQSUyMiUyMiUyMiUwQXByaW50KHBpcGUodHh0JTJDJTIwbnVtX3JldHVybl9zZXF1ZW5jZXMlM0QxKSU1QjAlNUQlNUIlMjJnZW5lcmF0ZWRfdGV4dCUyMiU1RCk=",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# create some data
x = np.random.randn(100)
y = np.random.randn(100)

# crearea unui scatter plot cu x, y
&quot;&quot;&quot;</span>
<span class="hljs-built_in">print</span>(pipe(txt, num_return_sequences=<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>][<span class="hljs-string">&quot;generated_text&quot;</span>])`,wrap:!1}}),Al=new I({props:{code:"JTIzJTIwY3JlYXJlYSUyMHVub3IlMjBkYXRlJTBBeCUyMCUzRCUyMG5wLnJhbmRvbS5yYW5kbigxMDApJTBBeSUyMCUzRCUyMG5wLnJhbmRvbS5yYW5kbigxMDApJTBBJTBBJTIzJTIwY3JlYXJlYSUyMHNjYXR0ZXIlMjBwbG90JTIwY3UlMjB4JTJDJTIweSUwQXBsdC5zY2F0dGVyKHglMkMlMjB5KSUwQSUwQSUyMyUyMGNyZWFyZWElMjBzY2F0dGVy",highlighted:`<span class="hljs-comment"># crearea unor date</span>
x = np.random.randn(<span class="hljs-number">100</span>)
y = np.random.randn(<span class="hljs-number">100</span>)

<span class="hljs-comment"># crearea scatter plot cu x, y</span>
plt.scatter(x, y)

<span class="hljs-comment"># crearea scatter</span>`,wrap:!1}}),El=new I({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVhJUM4JTlCaSUyMGRhdGFmcmFtZXVsJTIwZGluJTIweCUyMCVDOCU5OWklMjB5JTBBJTIyJTIyJTIyJTBBcHJpbnQocGlwZSh0eHQlMkMlMjBudW1fcmV0dXJuX3NlcXVlbmNlcyUzRDEpJTVCMCU1RCU1QiUyMmdlbmVyYXRlZF90ZXh0JTIyJTVEKQ==",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# create some data
x = np.random.randn(100)
y = np.random.randn(100)

# creați dataframeul din x și y
&quot;&quot;&quot;</span>
<span class="hljs-built_in">print</span>(pipe(txt, num_return_sequences=<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>][<span class="hljs-string">&quot;generated_text&quot;</span>])`,wrap:!1}}),Yl=new I({props:{code:"JTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVheiVDNCU4MyUyMHVuJTIwZGF0YWZyYW1lJTIwZGluJTIweCUyMCVDOCU5OWklMjB5JTBBZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUoJTdCJ3gnJTNBJTIweCUyQyUyMCd5JyUzQSUyMHklN0QpJTBBZGYuaW5zZXJ0KDAlMkMneCclMkMlMjB4KSUwQWZvcg==",highlighted:`<span class="hljs-comment"># create some data</span>
x = np.random.randn(<span class="hljs-number">100</span>)
y = np.random.randn(<span class="hljs-number">100</span>)

<span class="hljs-comment"># crează un dataframe din x și y</span>
df = pd.DataFrame({<span class="hljs-string">&#x27;x&#x27;</span>: x, <span class="hljs-string">&#x27;y&#x27;</span>: y})
df.insert(<span class="hljs-number">0</span>,<span class="hljs-string">&#x27;x&#x27;</span>, x)
<span class="hljs-keyword">for</span>`,wrap:!1}}),Hl=new I({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwZGF0YWZyYW1lJTIwd2l0aCUyMHByb2Zlc3Npb24lMkMlMjBpbmNvbWUlMjBhbmQlMjBuYW1lJTBBZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUoJTdCJ3Byb2Zlc3Npb24nJTNBJTIweCUyQyUyMCdpbmNvbWUnJTNBeSUyQyUyMCduYW1lJyUzQSUyMHolN0QpJTBBJTBBJTIzJTIwY2FsY3VsYSVDOCU5QmklMjB2ZW5pdHVsJTIwbWVkaXUlMjBwZSUyMHByb2Zlc2llJTBBJTIyJTIyJTIyJTBBcHJpbnQocGlwZSh0eHQlMkMlMjBudW1fcmV0dXJuX3NlcXVlbmNlcyUzRDEpJTVCMCU1RCU1QiUyMmdlbmVyYXRlZF90ZXh0JTIyJTVEKQ==",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# dataframe with profession, income and name
df = pd.DataFrame({&#x27;profession&#x27;: x, &#x27;income&#x27;:y, &#x27;name&#x27;: z})

# calculați venitul mediu pe profesie
&quot;&quot;&quot;</span>
<span class="hljs-built_in">print</span>(pipe(txt, num_return_sequences=<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>][<span class="hljs-string">&quot;generated_text&quot;</span>])`,wrap:!1}}),Sl=new I({props:{code:"JTIzJTIwZGF0YWZyYW1lJTIwd2l0aCUyMHByb2Zlc3Npb24lMkMlMjBpbmNvbWUlMjBhbmQlMjBuYW1lJTBBZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUoJTdCJ3Byb2Zlc3Npb24nJTNBJTIweCUyQyUyMCdpbmNvbWUnJTNBeSUyQyUyMCduYW1lJyUzQSUyMHolN0QpJTBBJTBBJTIzJTIwY2FsY3VsZXolQzQlODMlMjB2ZW5pdHVsJTIwbWVkaXUlMjBwZSUyMHByb2Zlc2llJTBBcHJvZmVzc2lvbiUyMCUzRCUyMGRmLmdyb3VwYnkoJTVCJ3Byb2Zlc3Npb24nJTVEKS5tZWFuKCklMEElMEElMjMlMjBjYWxjdWxlYXolQzQlODM=",highlighted:`<span class="hljs-comment"># dataframe with profession, income and name</span>
df = pd.DataFrame({<span class="hljs-string">&#x27;profession&#x27;</span>: x, <span class="hljs-string">&#x27;income&#x27;</span>:y, <span class="hljs-string">&#x27;name&#x27;</span>: z})

<span class="hljs-comment"># calculeză venitul mediu pe profesie</span>
profession = df.groupby([<span class="hljs-string">&#x27;profession&#x27;</span>]).mean()

<span class="hljs-comment"># calculează</span>`,wrap:!1}}),ql=new I({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTBBJTIzJTIwaW1wb3J0JTIwcmFuZG9tJTIwZm9yZXN0JTIwcmVncmVzc29yJTIwZnJvbSUyMHNjaWtpdC1sZWFybiUwQWZyb20lMjBza2xlYXJuLmVuc2VtYmxlJTIwaW1wb3J0JTIwUmFuZG9tRm9yZXN0UmVncmVzc29yJTBBJTBBJTIzJTIwYWp1c3RhJUM4JTlCaSUyMG1vZGVsdWwlMjBSYW5kb20lMjBGb3Jlc3QlMjBjdSUyMDMwMCUyMGRlJTIwZXN0aW1hdG9yaSUyMHBlJTIwWCUyQyUyMHklM0ElMEElMjIlMjIlMjIlMEFwcmludChwaXBlKHR4dCUyQyUyMG51bV9yZXR1cm5fc2VxdWVuY2VzJTNEMSklNUIwJTVEJTVCJTIyZ2VuZXJhdGVkX3RleHQlMjIlNUQp",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;
# import random forest regressor from scikit-learn
from sklearn.ensemble import RandomForestRegressor

# ajustați modelul Random Forest cu 300 de estimatori pe X, y:
&quot;&quot;&quot;</span>
<span class="hljs-built_in">print</span>(pipe(txt, num_return_sequences=<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>][<span class="hljs-string">&quot;generated_text&quot;</span>])`,wrap:!1}}),Ll=new I({props:{code:"JTIzJTIwaW1wb3J0JTIwcmFuZG9tJTIwZm9yZXN0JTIwcmVncmVzc29yJTIwZnJvbSUyMHNjaWtpdC1sZWFybiUwQWZyb20lMjBza2xlYXJuLmVuc2VtYmxlJTIwaW1wb3J0JTIwUmFuZG9tRm9yZXN0UmVncmVzc29yJTBBJTBBJTIzJTIwYWp1c3RhJUM4JTlCaSUyMG1vZGVsdWwlMjBSYW5kb20lMjBGb3Jlc3QlMjBjdSUyMDMwMCUyMGRlJTIwZXN0aW1hdG9yaSUyMHBlJTIwWCUyQyUyMHklM0ElMEFyZiUyMCUzRCUyMFJhbmRvbUZvcmVzdFJlZ3Jlc3NvcihuX2VzdGltYXRvcnMlM0QzMDAlMkMlMjByYW5kb21fc3RhdGUlM0RyYW5kb21fc3RhdGUlMkMlMjBtYXhfZGVwdGglM0QzKSUwQXJmLmZpdChYJTJDJTIweSklMEFyZg==",highlighted:`<span class="hljs-comment"># import random forest regressor from scikit-learn</span>
<span class="hljs-keyword">from</span> sklearn.ensemble <span class="hljs-keyword">import</span> RandomForestRegressor

<span class="hljs-comment"># ajustați modelul Random Forest cu 300 de estimatori pe X, y:</span>
rf = RandomForestRegressor(n_estimators=<span class="hljs-number">300</span>, random_state=random_state, max_depth=<span class="hljs-number">3</span>)
rf.fit(X, y)
rf`,wrap:!1}});function St(e,i){return e[0]==="tf"?vs:Bs}let ct=St(C),sl=ct(C),R=C[0]==="pt"&&as(C);return Pl=new os({props:{source:"https://github.com/huggingface/course/blob/main/chapters/rum/chapter7/6.mdx"}}),{c(){t=U("meta"),c=r(),n=U("p"),o=r(),y(_.$$.fragment),b=r(),y($.$$.fragment),Z=r(),d.c(),h=r(),G=U("p"),G.innerHTML=x,Q=r(),z=U("p"),z.innerHTML=g,B=r(),y(A.$$.fragment),Re=r(),N=U("p"),N.innerHTML=da,Qe=r(),v=U("iframe"),We=r(),E=U("p"),E.innerHTML=Ja,Ve=r(),y(Y.$$.fragment),xe=r(),F=U("p"),F.innerHTML=Ta,Ae=r(),H=U("p"),H.innerHTML=ol,re=r(),y(Ze.$$.fragment),Ne=r(),S=U("p"),S.textContent=ml,pe=r(),y($e.$$.fragment),Ee=r(),y(D.$$.fragment),Ye=r(),q=U("p"),q.textContent=wa,Fe=r(),y(L.$$.fragment),He=r(),P=U("p"),P.textContent=Ua,Se=r(),y(K.$$.fragment),De=r(),y(O.$$.fragment),qe=r(),ee=U("p"),ee.textContent=fa,Le=r(),le=U("p"),le.textContent=dl,ce=r(),y(Ge.$$.fragment),Pe=r(),y(ae.$$.fragment),Ke=r(),y(W.$$.fragment),Oe=r(),te=U("p"),te.textContent=ja,el=r(),y(se.$$.fragment),ll=r(),y(ne.$$.fragment),yl=r(),ue=U("p"),ue.innerHTML=Be,Jl=r(),y(Me.$$.fragment),oe=r(),y(me.$$.fragment),de=r(),ye=U("p"),ye.textContent=ve,Tl=r(),Je=U("p"),Je.innerHTML=ze,al=r(),V=U("div"),V.innerHTML=ba,tl=r(),ie=U("p"),ie.textContent=wl,Te=r(),y(we.$$.fragment),l=r(),y(m.$$.fragment),Ia=r(),Ul=U("p"),Ul.innerHTML=wt,Ca=r(),fl=U("p"),fl.innerHTML=Ut,_a=r(),y(jl.$$.fragment),ga=r(),y(bl.$$.fragment),ka=r(),hl=U("p"),hl.textContent=ft,Za=r(),Il=U("p"),Il.textContent=jt,$a=r(),y(nl.$$.fragment),Ga=r(),y(Cl.$$.fragment),Ba=r(),_l=U("p"),_l.innerHTML=bt,va=r(),fe.c(),na=r(),gl=U("p"),gl.innerHTML=ht,za=r(),kl=U("p"),kl.innerHTML=It,Xa=r(),be.c(),ia=r(),Zl=U("p"),Zl.textContent=Ct,Ra=r(),y($l.$$.fragment),Qa=r(),Ie.c(),ra=r(),Gl=U("p"),Gl.textContent=_t,Wa=r(),X&&X.c(),pa=r(),y(il.$$.fragment),Va=r(),Bl=U("p"),Bl.textContent=gt,xa=r(),y(vl.$$.fragment),Aa=r(),zl=U("p"),zl.textContent=kt,Na=r(),Xl=U("p"),Xl.textContent=Zt,Ea=r(),y(Rl.$$.fragment),Ya=r(),_e.c(),ca=r(),y(rl.$$.fragment),Fa=r(),y(pl.$$.fragment),Ha=r(),y(Ql.$$.fragment),Sa=r(),Wl=U("p"),Wl.innerHTML=$t,Da=r(),ke.c(),ua=r(),Vl=U("p"),Vl.textContent=Gt,qa=r(),y(xl.$$.fragment),La=r(),y(Al.$$.fragment),Pa=r(),Nl=U("p"),Nl.innerHTML=Bt,Ka=r(),y(El.$$.fragment),Oa=r(),y(Yl.$$.fragment),et=r(),Fl=U("p"),Fl.innerHTML=vt,lt=r(),y(Hl.$$.fragment),at=r(),y(Sl.$$.fragment),tt=r(),Dl=U("p"),Dl.innerHTML=zt,st=r(),y(ql.$$.fragment),nt=r(),y(Ll.$$.fragment),it=r(),sl.c(),Ma=r(),R&&R.c(),oa=r(),y(Pl.$$.fragment),rt=r(),ha=U("p"),this.h()},l(e){const i=cs("svelte-u9bgzb",document.head);t=f(i,"META",{name:!0,content:!0}),i.forEach(a),c=p(e),n=f(e,"P",{}),Jt(n).forEach(a),o=p(e),J(_.$$.fragment,e),b=p(e),J($.$$.fragment,e),Z=p(e),d.l(e),h=p(e),G=f(e,"P",{"data-svelte-h":!0}),j(G)!=="svelte-b4m2r4"&&(G.innerHTML=x),Q=p(e),z=f(e,"P",{"data-svelte-h":!0}),j(z)!=="svelte-x4ejk4"&&(z.innerHTML=g),B=p(e),J(A.$$.fragment,e),Re=p(e),N=f(e,"P",{"data-svelte-h":!0}),j(N)!=="svelte-1m8la55"&&(N.innerHTML=da),Qe=p(e),v=f(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Jt(v).forEach(a),We=p(e),E=f(e,"P",{"data-svelte-h":!0}),j(E)!=="svelte-1uw1ifa"&&(E.innerHTML=Ja),Ve=p(e),J(Y.$$.fragment,e),xe=p(e),F=f(e,"P",{"data-svelte-h":!0}),j(F)!=="svelte-1lmk8zm"&&(F.innerHTML=Ta),Ae=p(e),H=f(e,"P",{"data-svelte-h":!0}),j(H)!=="svelte-ocfyhb"&&(H.innerHTML=ol),re=p(e),J(Ze.$$.fragment,e),Ne=p(e),S=f(e,"P",{"data-svelte-h":!0}),j(S)!=="svelte-w81hdx"&&(S.textContent=ml),pe=p(e),J($e.$$.fragment,e),Ee=p(e),J(D.$$.fragment,e),Ye=p(e),q=f(e,"P",{"data-svelte-h":!0}),j(q)!=="svelte-186rpvt"&&(q.textContent=wa),Fe=p(e),J(L.$$.fragment,e),He=p(e),P=f(e,"P",{"data-svelte-h":!0}),j(P)!=="svelte-1hcvr7a"&&(P.textContent=Ua),Se=p(e),J(K.$$.fragment,e),De=p(e),J(O.$$.fragment,e),qe=p(e),ee=f(e,"P",{"data-svelte-h":!0}),j(ee)!=="svelte-13so8r4"&&(ee.textContent=fa),Le=p(e),le=f(e,"P",{"data-svelte-h":!0}),j(le)!=="svelte-lexd28"&&(le.textContent=dl),ce=p(e),J(Ge.$$.fragment,e),Pe=p(e),J(ae.$$.fragment,e),Ke=p(e),J(W.$$.fragment,e),Oe=p(e),te=f(e,"P",{"data-svelte-h":!0}),j(te)!=="svelte-2gb85e"&&(te.textContent=ja),el=p(e),J(se.$$.fragment,e),ll=p(e),J(ne.$$.fragment,e),yl=p(e),ue=f(e,"P",{"data-svelte-h":!0}),j(ue)!=="svelte-6il8on"&&(ue.innerHTML=Be),Jl=p(e),J(Me.$$.fragment,e),oe=p(e),J(me.$$.fragment,e),de=p(e),ye=f(e,"P",{"data-svelte-h":!0}),j(ye)!=="svelte-11rzd2n"&&(ye.textContent=ve),Tl=p(e),Je=f(e,"P",{"data-svelte-h":!0}),j(Je)!=="svelte-zqsxog"&&(Je.innerHTML=ze),al=p(e),V=f(e,"DIV",{class:!0,"data-svelte-h":!0}),j(V)!=="svelte-ad79t9"&&(V.innerHTML=ba),tl=p(e),ie=f(e,"P",{"data-svelte-h":!0}),j(ie)!=="svelte-os0dae"&&(ie.textContent=wl),Te=p(e),J(we.$$.fragment,e),l=p(e),J(m.$$.fragment,e),Ia=p(e),Ul=f(e,"P",{"data-svelte-h":!0}),j(Ul)!=="svelte-1b8waz5"&&(Ul.innerHTML=wt),Ca=p(e),fl=f(e,"P",{"data-svelte-h":!0}),j(fl)!=="svelte-16vzg8w"&&(fl.innerHTML=Ut),_a=p(e),J(jl.$$.fragment,e),ga=p(e),J(bl.$$.fragment,e),ka=p(e),hl=f(e,"P",{"data-svelte-h":!0}),j(hl)!=="svelte-1b7i97r"&&(hl.textContent=ft),Za=p(e),Il=f(e,"P",{"data-svelte-h":!0}),j(Il)!=="svelte-1jnxa23"&&(Il.textContent=jt),$a=p(e),J(nl.$$.fragment,e),Ga=p(e),J(Cl.$$.fragment,e),Ba=p(e),_l=f(e,"P",{"data-svelte-h":!0}),j(_l)!=="svelte-1bci551"&&(_l.innerHTML=bt),va=p(e),fe.l(e),na=p(e),gl=f(e,"P",{"data-svelte-h":!0}),j(gl)!=="svelte-kl78gw"&&(gl.innerHTML=ht),za=p(e),kl=f(e,"P",{"data-svelte-h":!0}),j(kl)!=="svelte-1ibjgzj"&&(kl.innerHTML=It),Xa=p(e),be.l(e),ia=p(e),Zl=f(e,"P",{"data-svelte-h":!0}),j(Zl)!=="svelte-ed1ynj"&&(Zl.textContent=Ct),Ra=p(e),J($l.$$.fragment,e),Qa=p(e),Ie.l(e),ra=p(e),Gl=f(e,"P",{"data-svelte-h":!0}),j(Gl)!=="svelte-18xxsbw"&&(Gl.textContent=_t),Wa=p(e),X&&X.l(e),pa=p(e),J(il.$$.fragment,e),Va=p(e),Bl=f(e,"P",{"data-svelte-h":!0}),j(Bl)!=="svelte-qmeovb"&&(Bl.textContent=gt),xa=p(e),J(vl.$$.fragment,e),Aa=p(e),zl=f(e,"P",{"data-svelte-h":!0}),j(zl)!=="svelte-1dujvgk"&&(zl.textContent=kt),Na=p(e),Xl=f(e,"P",{"data-svelte-h":!0}),j(Xl)!=="svelte-fhjhmt"&&(Xl.textContent=Zt),Ea=p(e),J(Rl.$$.fragment,e),Ya=p(e),_e.l(e),ca=p(e),J(rl.$$.fragment,e),Fa=p(e),J(pl.$$.fragment,e),Ha=p(e),J(Ql.$$.fragment,e),Sa=p(e),Wl=f(e,"P",{"data-svelte-h":!0}),j(Wl)!=="svelte-1yv8wjm"&&(Wl.innerHTML=$t),Da=p(e),ke.l(e),ua=p(e),Vl=f(e,"P",{"data-svelte-h":!0}),j(Vl)!=="svelte-11n9xm4"&&(Vl.textContent=Gt),qa=p(e),J(xl.$$.fragment,e),La=p(e),J(Al.$$.fragment,e),Pa=p(e),Nl=f(e,"P",{"data-svelte-h":!0}),j(Nl)!=="svelte-314mkf"&&(Nl.innerHTML=Bt),Ka=p(e),J(El.$$.fragment,e),Oa=p(e),J(Yl.$$.fragment,e),et=p(e),Fl=f(e,"P",{"data-svelte-h":!0}),j(Fl)!=="svelte-f39pdp"&&(Fl.innerHTML=vt),lt=p(e),J(Hl.$$.fragment,e),at=p(e),J(Sl.$$.fragment,e),tt=p(e),Dl=f(e,"P",{"data-svelte-h":!0}),j(Dl)!=="svelte-1k2a5gy"&&(Dl.innerHTML=zt),st=p(e),J(ql.$$.fragment,e),nt=p(e),J(Ll.$$.fragment,e),it=p(e),sl.l(e),Ma=p(e),R&&R.l(e),oa=p(e),J(Pl.$$.fragment,e),rt=p(e),ha=f(e,"P",{}),Jt(ha).forEach(a),this.h()},h(){Xe(t,"name","hf:doc:metadata"),Xe(t,"content",Ws),ns(v.src,ya="https://course-demos-codeparrot-ds.hf.space")||Xe(v,"src",ya),Xe(v,"frameborder","0"),Xe(v,"height","300"),Xe(v,"title","Gradio app"),Xe(v,"class","block dark:hidden container p-0 flex-grow space-iframe"),Xe(v,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),Xe(v,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),Xe(V,"class","flex justify-center")},m(e,i){us(document.head,t),s(e,c,i),s(e,n,i),s(e,o,i),T(_,e,i),s(e,b,i),T($,e,i),s(e,Z,i),Kl[k].m(e,i),s(e,h,i),s(e,G,i),s(e,Q,i),s(e,z,i),s(e,B,i),T(A,e,i),s(e,Re,i),s(e,N,i),s(e,Qe,i),s(e,v,i),s(e,We,i),s(e,E,i),s(e,Ve,i),T(Y,e,i),s(e,xe,i),s(e,F,i),s(e,Ae,i),s(e,H,i),s(e,re,i),T(Ze,e,i),s(e,Ne,i),s(e,S,i),s(e,pe,i),T($e,e,i),s(e,Ee,i),T(D,e,i),s(e,Ye,i),s(e,q,i),s(e,Fe,i),T(L,e,i),s(e,He,i),s(e,P,i),s(e,Se,i),T(K,e,i),s(e,De,i),T(O,e,i),s(e,qe,i),s(e,ee,i),s(e,Le,i),s(e,le,i),s(e,ce,i),T(Ge,e,i),s(e,Pe,i),T(ae,e,i),s(e,Ke,i),T(W,e,i),s(e,Oe,i),s(e,te,i),s(e,el,i),T(se,e,i),s(e,ll,i),T(ne,e,i),s(e,yl,i),s(e,ue,i),s(e,Jl,i),T(Me,e,i),s(e,oe,i),T(me,e,i),s(e,de,i),s(e,ye,i),s(e,Tl,i),s(e,Je,i),s(e,al,i),s(e,V,i),s(e,tl,i),s(e,ie,i),s(e,Te,i),T(we,e,i),s(e,l,i),T(m,e,i),s(e,Ia,i),s(e,Ul,i),s(e,Ca,i),s(e,fl,i),s(e,_a,i),T(jl,e,i),s(e,ga,i),T(bl,e,i),s(e,ka,i),s(e,hl,i),s(e,Za,i),s(e,Il,i),s(e,$a,i),T(nl,e,i),s(e,Ga,i),T(Cl,e,i),s(e,Ba,i),s(e,_l,i),s(e,va,i),Ol[Ue].m(e,i),s(e,na,i),s(e,gl,i),s(e,za,i),s(e,kl,i),s(e,Xa,i),ea[je].m(e,i),s(e,ia,i),s(e,Zl,i),s(e,Ra,i),T($l,e,i),s(e,Qa,i),la[he].m(e,i),s(e,ra,i),s(e,Gl,i),s(e,Wa,i),X&&X.m(e,i),s(e,pa,i),T(il,e,i),s(e,Va,i),s(e,Bl,i),s(e,xa,i),T(vl,e,i),s(e,Aa,i),s(e,zl,i),s(e,Na,i),s(e,Xl,i),s(e,Ea,i),T(Rl,e,i),s(e,Ya,i),aa[Ce].m(e,i),s(e,ca,i),T(rl,e,i),s(e,Fa,i),T(pl,e,i),s(e,Ha,i),T(Ql,e,i),s(e,Sa,i),s(e,Wl,i),s(e,Da,i),ta[ge].m(e,i),s(e,ua,i),s(e,Vl,i),s(e,qa,i),T(xl,e,i),s(e,La,i),T(Al,e,i),s(e,Pa,i),s(e,Nl,i),s(e,Ka,i),T(El,e,i),s(e,Oa,i),T(Yl,e,i),s(e,et,i),s(e,Fl,i),s(e,lt,i),T(Hl,e,i),s(e,at,i),T(Sl,e,i),s(e,tt,i),s(e,Dl,i),s(e,st,i),T(ql,e,i),s(e,nt,i),T(Ll,e,i),s(e,it,i),sl.m(e,i),s(e,Ma,i),R&&R.m(e,i),s(e,oa,i),T(Pl,e,i),s(e,rt,i),s(e,ha,i),pt=!0},p(e,[i]){const Dt={};i&1&&(Dt.fw=e[0]),_.$set(Dt);let ut=k;k=Rt(e),k!==ut&&(ul(),M(Kl[ut],1,1,()=>{Kl[ut]=null}),cl(),d=Kl[k],d||(d=Kl[k]=Xt[k](e),d.c()),u(d,1),d.m(h.parentNode,h));const qt={};i&2&&(qt.$$scope={dirty:i,ctx:e}),W.$set(qt);const Lt={};i&2&&(Lt.$$scope={dirty:i,ctx:e}),nl.$set(Lt);let Mt=Ue;Ue=Wt(e),Ue!==Mt&&(ul(),M(Ol[Mt],1,1,()=>{Ol[Mt]=null}),cl(),fe=Ol[Ue],fe||(fe=Ol[Ue]=Qt[Ue](e),fe.c()),u(fe,1),fe.m(na.parentNode,na));let ot=je;je=xt(e),je!==ot&&(ul(),M(ea[ot],1,1,()=>{ea[ot]=null}),cl(),be=ea[je],be||(be=ea[je]=Vt[je](e),be.c()),u(be,1),be.m(ia.parentNode,ia));let mt=he;he=Nt(e),he!==mt&&(ul(),M(la[mt],1,1,()=>{la[mt]=null}),cl(),Ie=la[he],Ie||(Ie=la[he]=At[he](e),Ie.c()),u(Ie,1),Ie.m(ra.parentNode,ra)),e[0]==="tf"?X?i&1&&u(X,1):(X=ls(),X.c(),u(X,1),X.m(pa.parentNode,pa)):X&&(ul(),M(X,1,1,()=>{X=null}),cl());const Pt={};i&2&&(Pt.$$scope={dirty:i,ctx:e}),il.$set(Pt);let dt=Ce;Ce=Yt(e),Ce!==dt&&(ul(),M(aa[dt],1,1,()=>{aa[dt]=null}),cl(),_e=aa[Ce],_e||(_e=aa[Ce]=Et[Ce](e),_e.c()),u(_e,1),_e.m(ca.parentNode,ca));const Kt={};i&2&&(Kt.$$scope={dirty:i,ctx:e}),rl.$set(Kt);const Ot={};i&3&&(Ot.$$scope={dirty:i,ctx:e}),pl.$set(Ot);let yt=ge;ge=Ht(e),ge!==yt&&(ul(),M(ta[yt],1,1,()=>{ta[yt]=null}),cl(),ke=ta[ge],ke||(ke=ta[ge]=Ft[ge](e),ke.c()),u(ke,1),ke.m(ua.parentNode,ua)),ct!==(ct=St(e))&&(sl.d(1),sl=ct(e),sl&&(sl.c(),sl.m(Ma.parentNode,Ma))),e[0]==="pt"?R?i&1&&u(R,1):(R=as(e),R.c(),u(R,1),R.m(oa.parentNode,oa)):R&&(ul(),M(R,1,1,()=>{R=null}),cl())},i(e){pt||(u(_.$$.fragment,e),u($.$$.fragment,e),u(d),u(A.$$.fragment,e),u(Y.$$.fragment,e),u(Ze.$$.fragment,e),u($e.$$.fragment,e),u(D.$$.fragment,e),u(L.$$.fragment,e),u(K.$$.fragment,e),u(O.$$.fragment,e),u(Ge.$$.fragment,e),u(ae.$$.fragment,e),u(W.$$.fragment,e),u(se.$$.fragment,e),u(ne.$$.fragment,e),u(Me.$$.fragment,e),u(me.$$.fragment,e),u(we.$$.fragment,e),u(m.$$.fragment,e),u(jl.$$.fragment,e),u(bl.$$.fragment,e),u(nl.$$.fragment,e),u(Cl.$$.fragment,e),u(fe),u(be),u($l.$$.fragment,e),u(Ie),u(X),u(il.$$.fragment,e),u(vl.$$.fragment,e),u(Rl.$$.fragment,e),u(_e),u(rl.$$.fragment,e),u(pl.$$.fragment,e),u(Ql.$$.fragment,e),u(ke),u(xl.$$.fragment,e),u(Al.$$.fragment,e),u(El.$$.fragment,e),u(Yl.$$.fragment,e),u(Hl.$$.fragment,e),u(Sl.$$.fragment,e),u(ql.$$.fragment,e),u(Ll.$$.fragment,e),u(R),u(Pl.$$.fragment,e),pt=!0)},o(e){M(_.$$.fragment,e),M($.$$.fragment,e),M(d),M(A.$$.fragment,e),M(Y.$$.fragment,e),M(Ze.$$.fragment,e),M($e.$$.fragment,e),M(D.$$.fragment,e),M(L.$$.fragment,e),M(K.$$.fragment,e),M(O.$$.fragment,e),M(Ge.$$.fragment,e),M(ae.$$.fragment,e),M(W.$$.fragment,e),M(se.$$.fragment,e),M(ne.$$.fragment,e),M(Me.$$.fragment,e),M(me.$$.fragment,e),M(we.$$.fragment,e),M(m.$$.fragment,e),M(jl.$$.fragment,e),M(bl.$$.fragment,e),M(nl.$$.fragment,e),M(Cl.$$.fragment,e),M(fe),M(be),M($l.$$.fragment,e),M(Ie),M(X),M(il.$$.fragment,e),M(vl.$$.fragment,e),M(Rl.$$.fragment,e),M(_e),M(rl.$$.fragment,e),M(pl.$$.fragment,e),M(Ql.$$.fragment,e),M(ke),M(xl.$$.fragment,e),M(Al.$$.fragment,e),M(El.$$.fragment,e),M(Yl.$$.fragment,e),M(Hl.$$.fragment,e),M(Sl.$$.fragment,e),M(ql.$$.fragment,e),M(Ll.$$.fragment,e),M(R),M(Pl.$$.fragment,e),pt=!1},d(e){e&&(a(c),a(n),a(o),a(b),a(Z),a(h),a(G),a(Q),a(z),a(B),a(Re),a(N),a(Qe),a(v),a(We),a(E),a(Ve),a(xe),a(F),a(Ae),a(H),a(re),a(Ne),a(S),a(pe),a(Ee),a(Ye),a(q),a(Fe),a(He),a(P),a(Se),a(De),a(qe),a(ee),a(Le),a(le),a(ce),a(Pe),a(Ke),a(Oe),a(te),a(el),a(ll),a(yl),a(ue),a(Jl),a(oe),a(de),a(ye),a(Tl),a(Je),a(al),a(V),a(tl),a(ie),a(Te),a(l),a(Ia),a(Ul),a(Ca),a(fl),a(_a),a(ga),a(ka),a(hl),a(Za),a(Il),a($a),a(Ga),a(Ba),a(_l),a(va),a(na),a(gl),a(za),a(kl),a(Xa),a(ia),a(Zl),a(Ra),a(Qa),a(ra),a(Gl),a(Wa),a(pa),a(Va),a(Bl),a(xa),a(Aa),a(zl),a(Na),a(Xl),a(Ea),a(Ya),a(ca),a(Fa),a(Ha),a(Sa),a(Wl),a(Da),a(ua),a(Vl),a(qa),a(La),a(Pa),a(Nl),a(Ka),a(Oa),a(et),a(Fl),a(lt),a(at),a(tt),a(Dl),a(st),a(nt),a(it),a(Ma),a(oa),a(rt),a(ha)),a(t),w(_,e),w($,e),Kl[k].d(e),w(A,e),w(Y,e),w(Ze,e),w($e,e),w(D,e),w(L,e),w(K,e),w(O,e),w(Ge,e),w(ae,e),w(W,e),w(se,e),w(ne,e),w(Me,e),w(me,e),w(we,e),w(m,e),w(jl,e),w(bl,e),w(nl,e),w(Cl,e),Ol[Ue].d(e),ea[je].d(e),w($l,e),la[he].d(e),X&&X.d(e),w(il,e),w(vl,e),w(Rl,e),aa[Ce].d(e),w(rl,e),w(pl,e),w(Ql,e),ta[ge].d(e),w(xl,e),w(Al,e),w(El,e),w(Yl,e),w(Hl,e),w(Sl,e),w(ql,e),w(Ll,e),sl.d(e),R&&R.d(e),w(Pl,e)}}}const Ws='{"title":"Antrenarea de la zero a unui model de limbaj cauzal","local":"training-a-causal-language-model-from-scratch","sections":[{"title":"Colectarea datelor","local":"gathering-the-data","sections":[],"depth":2},{"title":"Pregătirea datasetului","local":"preparing-the-dataset","sections":[],"depth":2},{"title":"Inițializarea unui nou model","local":"initializing-a-new-model","sections":[],"depth":2},{"title":"Generarea codului cu un pipeline","local":"code-generation-with-a-pipeline","sections":[],"depth":2},{"title":"Antrenarea cu 🤗 Accelerate","local":"training-with-accelerate","sections":[],"depth":2}],"depth":1}';function Vs(C,t,c){let n="pt";return is(()=>{const o=new URLSearchParams(window.location.search);c(0,n=o.get("fw")||"pt")}),[n]}class Ds extends rs{constructor(t){super(),ps(this,t,Vs,Qs,ss,{})}}export{Ds as component};
