import{s as it,f as tt,o as ut,n as Ml}from"../chunks/scheduler.37c15a92.js";import{S as Mt,i as ct,g as j,s as o,r as y,A as mt,h as w,f as l,c as p,j as dn,u as U,x as b,k as A,y as dt,a as t,v as J,t as M,b as is,d as u,w as T,e as at,p as us}from"../chunks/index.2bf4358c.js";import{T as Ms}from"../chunks/Tip.363c041f.js";import{Y as bn}from"../chunks/Youtube.1e50a667.js";import{C}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as pt}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as yt}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as wl,E as Ut}from"../chunks/EditOnGithub.8916dc7c.js";function Jt(I){let n,i;return n=new pt({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section6_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section6_tf.ipynb"}]}}),{c(){y(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function Tt(I){let n,i;return n=new pt({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section6_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section6_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section6_pt.ipynb"}]}}),{c(){y(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function jt(I){let n,i="Le pré-entraînement du modèle de langue prendra un certain temps. Nous vous suggérons donc d’exécuter d’abord la boucle d’entraînement sur un petit échantillon des données en décommentant les deux lignes dans le code ci-dessus. Assurez-vous alors que l’entraînement se termine avec succès et que les modèles sont stockés. Rien n’est plus frustrant qu’un entraînement qui échoue à la dernière étape car vous avez oublié de créer un dossier ou parce qu’il y a une faute de frappe à la fin de la boucle d’entraînement !";return{c(){n=j("p"),n.textContent=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-7uq7hm"&&(n.textContent=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function wt(I){let n,i="✏️ <strong>Essayez !</strong> Se débarrasser de tous les morceaux qui sont plus petits que la taille du contexte n’était pas un gros problème ici parce que nous utilisons de petites fenêtres de contexte. Si vous augmentez la taille du contexte (ou si vous avez un corpus de documents courts), la fraction des morceaux qui sont jetés augmentera. Une façon plus efficace de préparer les données est de joindre tous les échantillons dans un batch avec un <em>token</em> <code>eos_token_id</code> entre les deux, puis d’effectuer le découpage sur les séquences concaténées. Comme exercice, modifiez la fonction <code>tokenize()</code> pour utiliser cette approche. Notez que vous devrez mettre <code>truncation=False</code> et enlever les autres arguments du <em>tokenizer</em> pour obtenir la séquence complète des identifiants des <em>tokens</em>.";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1ytgv5e"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function bt(I){let n,i,a,c="Avec cette configuration, nous pouvons charger un nouveau modèle. Notez que c’est la première fois que nous n’utilisons pas la fonction <code>from_pretrained()</code> puisque nous initialisons nous-mêmes un modèle :",_,f,Z,k,v;return n=new C({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}}),f=new C({props:{code:"bW9kZWwlMjAlM0QlMjBURkdQVDJMTUhlYWRNb2RlbChjb25maWcpJTBBbW9kZWwobW9kZWwuZHVtbXlfaW5wdXRzKSUyMCUyMCUyMyUyMENvbnN0cnVpdCUyMGxlJTIwbW9kJUMzJUE4bGUlMEFtb2RlbC5zdW1tYXJ5KCk=",highlighted:`model = TFGPT2LMHeadModel(config)
model(model.dummy_inputs)  <span class="hljs-comment"># Construit le modèle</span>
model.summary()`,wrap:!1}}),k=new C({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(n.$$.fragment),i=o(),a=j("p"),a.innerHTML=c,_=o(),y(f.$$.fragment),Z=o(),y(k.$$.fragment)},l(m){U(n.$$.fragment,m),i=p(m),a=w(m,"P",{"data-svelte-h":!0}),b(a)!=="svelte-10q4vn3"&&(a.innerHTML=c),_=p(m),U(f.$$.fragment,m),Z=p(m),U(k.$$.fragment,m)},m(m,h){J(n,m,h),t(m,i,h),t(m,a,h),t(m,_,h),J(f,m,h),t(m,Z,h),J(k,m,h),v=!0},i(m){v||(u(n.$$.fragment,m),u(f.$$.fragment,m),u(k.$$.fragment,m),v=!0)},o(m){M(n.$$.fragment,m),M(f.$$.fragment,m),M(k.$$.fragment,m),v=!1},d(m){m&&(l(i),l(a),l(_),l(Z)),T(n,m),T(f,m),T(k,m)}}}function ft(I){let n,i,a,c="Avec cette configuration, nous pouvons charger un nouveau modèle. Notez que c’est la première fois que nous n’utilisons pas la fonction <code>from_pretrained()</code> puisque nous initialisons nous-mêmes un modèle :",_,f,Z,k,v;return n=new C({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}}),f=new C({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}}),k=new C({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(n.$$.fragment),i=o(),a=j("p"),a.innerHTML=c,_=o(),y(f.$$.fragment),Z=o(),y(k.$$.fragment)},l(m){U(n.$$.fragment,m),i=p(m),a=w(m,"P",{"data-svelte-h":!0}),b(a)!=="svelte-10q4vn3"&&(a.innerHTML=c),_=p(m),U(f.$$.fragment,m),Z=p(m),U(k.$$.fragment,m)},m(m,h){J(n,m,h),t(m,i,h),t(m,a,h),t(m,_,h),J(f,m,h),t(m,Z,h),J(k,m,h),v=!0},i(m){v||(u(n.$$.fragment,m),u(f.$$.fragment,m),u(k.$$.fragment,m),v=!0)},o(m){M(n.$$.fragment,m),M(f.$$.fragment,m),M(k.$$.fragment,m),v=!1},d(m){m&&(l(i),l(a),l(_),l(Z)),T(n,m),T(f,m),T(k,m)}}}function ht(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function Ct(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function It(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function _t(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function rt(I){let n,i="Maintenant nous pouvons utiliser la méthode <code>prepare_tf_dataset()</code> pour convertir nos jeux de données en jeux de données TensorFlow avec l’assembleur de données que nous avons créé ci-dessus :",a,c,_;return c=new C({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldCU1QiUyMnRyYWluJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QzMiUyQyUwQSklMEF0Zl9ldmFsX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXQlNUIlMjJ2YWxpZCUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDMyJTJDJTBBKQ==",highlighted:`tf_train_dataset = model.prepare_tf_dataset(
    tokenized_dataset[<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_dataset[<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(){n=j("p"),n.innerHTML=i,a=o(),y(c.$$.fragment)},l(f){n=w(f,"P",{"data-svelte-h":!0}),b(n)!=="svelte-12qk88j"&&(n.innerHTML=i),a=p(f),U(c.$$.fragment,f)},m(f,Z){t(f,n,Z),t(f,a,Z),J(c,f,Z),_=!0},i(f){_||(u(c.$$.fragment,f),_=!0)},o(f){M(c.$$.fragment,f),_=!1},d(f){f&&(l(n),l(a)),T(c,f)}}}function gt(I){let n,i="⚠️ Le déplacement des entrées et des étiquettes pour les aligner se fait à l’intérieur du modèle, de sorte que l’assembleur de données ne fait que copier les entrées pour créer les étiquettes.";return{c(){n=j("p"),n.textContent=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-r75aem"&&(n.textContent=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function vt(I){let n,i="Tout ce qu’il reste à faire est de configurer les hyperparamètres d’entraînement et d’appeler <code>compile()</code> et <code>fit()</code>. Nous utiliserons un programme de taux d’apprentissage avec un réchauffement pour améliorer la stabilité de l’entraînement :",a,c,_,f,Z="Maintenant, nous pouvons simplement appeler <code>model.fit()</code> et attendre que l’entraînement se termine. Selon que vous l’exécutez sur la totalité ou sur un sous-ensemble de l’échantillon d’entraînement, cela prendra respectivement 20 ou 2 heures. Alors prenez quelques cafés et un bon livre à lire ! Une fois l’entraînement terminé, nous pouvons pousser le modèle et le <em>tokenizer</em> vers le <em>Hub</em> :",k,v,m;return c=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFpbXBvcnQlMjB0ZW5zb3JmbG93JTIwYXMlMjB0ZiUwQSUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUwQW9wdGltaXplciUyQyUyMHNjaGVkdWxlJTIwJTNEJTIwY3JlYXRlX29wdGltaXplciglMEElMjAlMjAlMjAlMjBpbml0X2xyJTNENWUtNSUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QxXzAwMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbl9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheV9yYXRlJTNEMC4wMSUyQyUwQSklMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRG9wdGltaXplciklMEElMEElMjMlMjBFbnRyYSVDMyVBRW5lciUyMGVuJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",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"># Entraîner en mixed-precision float16</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)`,wrap:!1}}),v=new C({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(){n=j("p"),n.innerHTML=i,a=o(),y(c.$$.fragment),_=o(),f=j("p"),f.innerHTML=Z,k=o(),y(v.$$.fragment)},l(h){n=w(h,"P",{"data-svelte-h":!0}),b(n)!=="svelte-yrrdez"&&(n.innerHTML=i),a=p(h),U(c.$$.fragment,h),_=p(h),f=w(h,"P",{"data-svelte-h":!0}),b(f)!=="svelte-puoinj"&&(f.innerHTML=Z),k=p(h),U(v.$$.fragment,h)},m(h,$){t(h,n,$),t(h,a,$),J(c,h,$),t(h,_,$),t(h,f,$),t(h,k,$),J(v,h,$),m=!0},i(h){m||(u(c.$$.fragment,h),u(v.$$.fragment,h),m=!0)},o(h){M(c.$$.fragment,h),M(v.$$.fragment,h),m=!1},d(h){h&&(l(n),l(a),l(_),l(f),l(k)),T(c,h),T(v,h)}}}function kt(I){let n,i="Tout ce qu’il reste à faire est de configurer les arguments d’entraînement et de lancer la fonction <code>Trainer</code>. Nous utiliserons un programme de taux d’apprentissage de type cosinus avec un réchauffement et une taille de batch de 256 (<code>per_device_train_batch_size</code> x <code>gradient_accumulation_steps</code>). L’accumulation du gradient est utilisée lorsqu’un seul batch ne tient pas en mémoire, et construit le gradient de manière incrémentale à travers plusieurs passages en avant/en arrière. Nous verrons cela en action lorsque nous créerons la boucle d’entraînement avec 🤗 <em>Accelerate</em>.",a,c,_,f,Z="Maintenant, nous pouvons simplement lancer le <code>Trainer</code> et attendre que l’entraînement se termine. Selon que vous l’exécutez sur la totalité ou sur un sous-ensemble de l’échantillon d’entraînement, cela prendra respectivement 20 ou 2 heures. Alors prenez quelques cafés et un bon livre à lire !",k,v,m,h,$="Une fois l’entraînement terminé, nous pouvons pousser le modèle et le <em>tokenizer</em> vers le <em>Hub</em> :",x,W,X;return c=new C({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}}),v=new C({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),W=new C({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:"trainer.push_to_hub()",wrap:!1}}),{c(){n=j("p"),n.innerHTML=i,a=o(),y(c.$$.fragment),_=o(),f=j("p"),f.innerHTML=Z,k=o(),y(v.$$.fragment),m=o(),h=j("p"),h.innerHTML=$,x=o(),y(W.$$.fragment)},l(g){n=w(g,"P",{"data-svelte-h":!0}),b(n)!=="svelte-6k81lp"&&(n.innerHTML=i),a=p(g),U(c.$$.fragment,g),_=p(g),f=w(g,"P",{"data-svelte-h":!0}),b(f)!=="svelte-16b346u"&&(f.innerHTML=Z),k=p(g),U(v.$$.fragment,g),m=p(g),h=w(g,"P",{"data-svelte-h":!0}),b(h)!=="svelte-1vcit78"&&(h.innerHTML=$),x=p(g),U(W.$$.fragment,g)},m(g,G){t(g,n,G),t(g,a,G),J(c,g,G),t(g,_,G),t(g,f,G),t(g,k,G),J(v,g,G),t(g,m,G),t(g,h,G),t(g,x,G),J(W,g,G),X=!0},i(g){X||(u(c.$$.fragment,g),u(v.$$.fragment,g),u(W.$$.fragment,g),X=!0)},o(g){M(c.$$.fragment,g),M(v.$$.fragment,g),M(W.$$.fragment,g),X=!1},d(g){g&&(l(n),l(a),l(_),l(f),l(k),l(m),l(h),l(x)),T(c,g),T(v,g),T(W,g)}}}function Zt(I){let n,i="✏️ <strong>Essayez !</strong> Il ne nous a fallu qu’une trentaine de lignes de code en plus des <code>TrainingArguments</code> pour passer des textes bruts à l’entraînement du GPT-2. Essayez-le avec votre propre jeu de données et voyez si vous pouvez obtenir de bons résultats !";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-gir6yo"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function $t(I){let n,i='💡 Si vous avez accès à une machine avec plusieurs GPUs, vous pouvez essayer d’utiliser <code>MirroredStrategy</code> pour accélérer considérablement l’entraînement. Vous devrez créer un objet <code>tf.distribute.MirroredStrategy</code> et vous assurer que toutes les méthodes <code>to_tf_dataset()</code> ou <code>prepare_tf_dataset()</code> ainsi que la création du modèle et l’appel à <code>fit()</code> sont tous exécutés dans <code>scope()</code>. Vous pouvez consulter la documentation à ce sujet <a href="https://www.tensorflow.org/guide/distributed_training#use_tfdistributestrategy_with_keras_modelfit" rel="nofollow">ici</a>.';return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1hojixp"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},d(a){a&&l(n)}}}function Gt(I){let n,i="💡 Si vous avez accès à une machine avec plusieurs GPUs, essayez d’y exécuter le code. <code>Trainer</code> gère automatiquement plusieurs machines ce qui peut accélérer considérablement l’entraînement.";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1kglhc6"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},d(a){a&&l(n)}}}function Bt(I){let n;function i(_,f){return _[0]==="pt"?Gt:$t}let a=i(I),c=a(I);return{c(){c.c(),n=at()},l(_){c.l(_),n=at()},m(_,f){c.m(_,f),t(_,n,f)},p(_,f){a!==(a=i(_))&&(c.d(1),c=a(_),c&&(c.c(),c.m(n.parentNode,n)))},d(_){_&&l(n),c.d(_)}}}function Qt(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function Xt(I){let n,i;return n=new C({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(n.$$.fragment)},l(a){U(n.$$.fragment,a)},m(a,c){J(n,a,c),i=!0},i(a){i||(u(n.$$.fragment,a),i=!0)},o(a){M(n.$$.fragment,a),i=!1},d(a){T(n,a)}}}function zt(I){let n,i="Au vu de ces quelques exemples, il semble que le modèle ait appris une partie de la syntaxe des bibliothèques Python de science des données. Bien sûr, nous devrions évaluer le modèle de manière plus approfondie avant de le déployer dans le monde réel, mais il s’agit tout de même d’un prototype impressionnant. Parfois, il est nécessaire de personnaliser davantage l’entraînement du modèle afin d’obtenir les performances nécessaires pour un cas d’utilisation donné. Par exemple, que se passe-t-il si l’on souhaite mettre à jour dynamiquement la taille du batch ou si l’on dispose d’une boucle d’entraînement conditionnelle qui ignore les mauvais exemples à la volée ? Une option serait de sous-classer le <code>Trainer</code> et d’ajouter les changements nécessaires, mais parfois il est plus simple d’écrire la boucle d’entraînement à partir de zéro. C’est là qu’intervient 🤗 <em>Accelerate</em>.";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1obdlhb"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},d(a){a&&l(n)}}}function Rt(I){let n,i="Au vu de ces quelques exemples, il semble que le modèle ait appris une partie de la syntaxe des bibliothèques Python de science des données. Bien sûr, nous devrions évaluer le modèle de manière plus approfondie avant de le déployer dans le monde réel, mais il s’agit tout de même d’un prototype impressionnant.";return{c(){n=j("p"),n.textContent=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1oosok4"&&(n.textContent=i)},m(a,c){t(a,n,c)},d(a){a&&l(n)}}}function ot(I){let n,i,a,c="Nous avons vu comment entraîner un modèle avec le <code>Trainer</code>, qui permet une certaine personnalisation. Cependant, parfois nous voulons un contrôle total sur la boucle d’entraînement ou nous souhaitons faire quelques changements exotiques. Dans ce cas, 🤗 <em>Accelerate</em> est un excellent choix, et dans cette section, nous allons suivre les étapes pour l’utiliser pour entraîner notre modèle. Pour rendre les choses plus intéressantes, nous allons également ajouter une touche à la boucle d’entraînement.",_,f,Z,k,v="Puisque nous sommes principalement intéressés par l’autocomplétion pour les bibliothèques de science des données, il est logique de donner plus de poids aux échantillons d’entraînement qui utilisent davantage ces bibliothèques. Nous pouvons facilement identifier ces exemples grâce à l’utilisation de mots-clés tels que <code>plt</code>, <code>pd</code>, <code>sk</code>, <code>fit</code>, et <code>predict</code>, qui sont les noms d’importation les plus fréquents pour <code>matplotlib.pyplot</code>, <code>pandas</code>, et <code>sklearn</code> ainsi que les fonctions <code>fit</code> et <code>predict</code> de cette dernière. Si chacun d’entre eux est représenté par un seul <em>token</em>, nous pouvons facilement vérifier s’ils apparaissent dans la séquence d’entrée. Les <em>tokens</em> peuvent avoir un préfixe d’espacement, donc nous vérifierons aussi ces versions dans le vocabulaire du <em>tokenizer</em>. Pour vérifier que cela fonctionne, nous ajouterons un <em>token</em> de test qui devrait être divisé en plusieurs <em>tokens</em> :",m,h,$,x,W,X,g="Super, ça a l’air de bien fonctionner ! Nous pouvons maintenant écrire une fonction de perte personnalisée qui prend la séquence d’entrée, les logits et les <em>tokens</em> clés que nous venons de sélectionner comme entrées. Tout d’abord, nous devons aligner les logits et les entrées : la séquence d’entrée décalée d’une unité vers la droite forme les étiquettes, puisque le <em>token</em> suivant est l’étiquette du <em>token</em> actuel. Nous pouvons y parvenir en commençant les étiquettes à partir du deuxième <em>token</em> de la séquence d’entrée, puisque le modèle ne fait pas de prédiction pour le premier <em>token</em> de toute façon. Ensuite, nous coupons le dernier logit, car nous n’avons pas d’étiquette pour le <em>token</em> qui suit la séquence d’entrée complète. Avec cela, nous pouvons calculer la perte par échantillon et compter les occurrences de tous les mots-clés dans chaque échantillon. Enfin, nous calculons la moyenne pondérée sur tous les échantillons en utilisant les occurrences comme poids. Comme nous ne voulons pas rejeter tous les échantillons qui ne contiennent pas de mots-clés, nous ajoutons 1 aux poids :",G,E,qe,N,bl="Avant de commencer à entraîner avec cette nouvelle fonction de perte géniale, nous devons préparer quelques éléments :",He,B,fl="<li>Nous avons besoin de chargeurs de données pour charger les données par batch.</li> <li>Nous devons définir les paramètres de décroissance des poids.</li> <li>De temps en temps, nous voulons évaluer, il est donc logique d’envelopper le code d’évaluation dans une fonction.</li>",Fe,Q,hl="Commençons par les chargeurs de données. Nous avons seulement besoin de définir le format du jeu de données à <code>&quot;torch&quot;</code> et ensuite nous pouvons le passer à un PyTorch <code>DataLoader</code> avec la taille de batch appropriée :",Ye,q,cs,ee,Qe="Ensuite, nous regroupons les paramètres de façon à ce que l’optimiseur sache lesquels bénéficieront d’une décroissance de poids supplémentaire. Habituellement, tous les termes de biais et les poids de la <em>LayerNorm</em> en sont exemptés. Voici comment nous pouvons le faire :",Se,H,ms,se,Xe="Puisque nous voulons évaluer le modèle régulièrement sur l’ensemble de validation pendant l’entraînement, écrivons une fonction pour cela aussi. Elle passe simplement par le <em>dataloader</em> d’évaluation et rassemble toutes les pertes à travers les processus :",ds,le,ne,te,ze='Avec la fonction <code>evaluate()</code> nous pouvons rapporter la perte et la <a href="/course/fr/chapter7/3">perplexité</a> à intervalles réguliers. Ensuite, nous redéfinissons notre modèle pour nous assurer que nous entraînons à nouveau à partir de zéro :',ys,ae,re,oe,Re="Nous pouvons ensuite définir notre optimiseur, en utilisant la fonction précédente pour diviser les paramètres de décroissance des poids :",De,F,Us,pe,We="Préparons maintenant le modèle, l’optimiseur et les chargeurs de données pour pouvoir commencer l’entraînement :",Le,Y,Js,ie,ue,Me,Ae="Maintenant que nous avons envoyé notre <code>train_dataloader</code> à <code>accelerator.prepare()</code>, nous pouvons utiliser sa longueur pour calculer le nombre d’étapes d’entraînement. Rappelez-vous que nous devons toujours faire cela après avoir préparé le <em>dataloader</em> car cette méthode modifiera sa longueur. Nous utilisons un programme linéaire classique du taux d’apprentissage à 0 :",Ke,S,Ts,ce,Ve="Enfin, pour pousser notre modèle vers le <em>Hub</em>, nous aurons besoin de créer un objet <code>Repository</code> dans un dossier de travail. Tout d’abord, connectez-vous au <em>Hub</em>, si vous n’êtes pas déjà connecté. Nous déterminerons le nom du dépôt à partir de l’identifiant du modèle que nous voulons donner à notre modèle (n’hésitez pas à remplacer le <code>repo_name</code> par votre propre choix. Il doit juste contenir votre nom d’utilisateur, ce que fait la fonction <code>get_full_repo_name()</code>) :",js,me,de,ye,Ue,Je,he="Ensuite, nous pouvons cloner ce dépôt dans un dossier local. S’il existe déjà, ce dossier local doit être un clone existant du dépôt avec lequel nous travaillons :",Pe,D,ws,Te,xe="Nous pouvons maintenant télécharger tout ce que nous sauvegardons dans <code>output_dir</code> en appelant la méthode <code>repo.push_to_hub()</code>. Cela nous aidera à télécharger les modèles intermédiaires à la fin de chaque époque.",Oe,L,bs="Avant de nous entraîner, exécutons un test rapide pour voir si la fonction d’évaluation fonctionne correctement :",je,Ee,es,K,ss,P,fs="Ce sont des valeurs très élevées pour la perte et la perplexité, mais ce n’est pas surprenant puisque nous n’avons pas encore entraîné le modèle. Avec cela, nous avons tout préparé pour écrire la partie principale du script d’entraînement : la boucle d’entraînement. Dans celle-ci, nous itérons sur le chargeur de données et transmettons les batchs au modèle. Avec les logits, nous pouvons alors évaluer notre fonction de perte personnalisée. Nous mettons à l’échelle la perte par le nombre d’étapes d’accumulation du gradient afin de ne pas créer de plus grandes pertes en agrégeant plus d’étapes. Avant de procéder à l’optimisation, nous découpons également les gradients pour une meilleure convergence. Enfin, tous les quelques pas, nous évaluons le modèle sur l’ensemble d’évaluation avec notre nouvelle fonction <code>evaluate()</code> :",we,Ne,ls,O,Cl="Et voilà, vous disposez maintenant de votre propre boucle d’entraînement personnalisée pour les modèles de langage causal tels que le GPT-2. Vous pouvez encore l’adapter à vos besoins.",ns,V,hs,be,fe;return n=new wl({props:{title:"Entraîner avec 🤗 <i> Accelerate </i>",local:"entraîner-avec--i-accelerate-i",headingTag:"h2"}}),f=new bn({props:{id:"Hm8_PgVTFuc"}}),h=new C({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 C({props:{code:"J0tleXdvcmQlMjBoYXMlMjBub3QlMjBzaW5nbGUlMjB0b2tlbiUzQSUyMHRlc3R0ZXN0Jw==",highlighted:'<span class="hljs-string">&#x27;Keyword has not single token: testtest&#x27;</span>',wrap:!1}}),E=new C({props:{code:"ZnJvbSUyMHRvcmNoLm5uJTIwaW1wb3J0JTIwQ3Jvc3NFbnRyb3B5TG9zcyUwQWltcG9ydCUyMHRvcmNoJTBBJTBBJTBBZGVmJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhpbnB1dHMlMkMlMjBsb2dpdHMlMkMlMjBrZXl0b2tlbl9pZHMlMkMlMjBhbHBoYSUzRDEuMCklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBEJUMzJUE5Y2FsYWdlJTIwcG91ciUyMHF1ZSUyMHRva2VucyUyMCUzQyUyMG4lMjBwciVDMyVBOWRpc2VudCUyMG4lMEElMjAlMjAlMjAlMjBzaGlmdF9sYWJlbHMlMjAlM0QlMjBpbnB1dHMlNUIuLi4lMkMlMjAxJTNBJTVELmNvbnRpZ3VvdXMoKSUwQSUyMCUyMCUyMCUyMHNoaWZ0X2xvZ2l0cyUyMCUzRCUyMGxvZ2l0cyU1Qi4uLiUyQyUyMCUzQS0xJTJDJTIwJTNBJTVELmNvbnRpZ3VvdXMoKSUwQSUyMCUyMCUyMCUyMCUyMyUyMENhbGN1bCUyMGRlJTIwbGElMjBwZXJ0ZSUyMHBhciUyMHRva2VuJTBBJTIwJTIwJTIwJTIwbG9zc19mY3QlMjAlM0QlMjBDcm9zc0VudHJvcHlMb3NzKHJlZHVjZSUzREZhbHNlKSUwQSUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBsb3NzX2ZjdChzaGlmdF9sb2dpdHMudmlldygtMSUyQyUyMHNoaWZ0X2xvZ2l0cy5zaXplKC0xKSklMkMlMjBzaGlmdF9sYWJlbHMudmlldygtMSkpJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVkaW1lbnNpb25uZW1lbnQlMjBldCUyMHBlcnRlJTIwbW95ZW5uZSUyMHBhciUyMCVDMyVBOWNoYW50aWxsb24lMEElMjAlMjAlMjAlMjBsb3NzX3Blcl9zYW1wbGUlMjAlM0QlMjBsb3NzLnZpZXcoc2hpZnRfbG9naXRzLnNpemUoMCklMkMlMjBzaGlmdF9sb2dpdHMuc2l6ZSgxKSkubWVhbihheGlzJTNEMSklMEElMjAlMjAlMjAlMjAlMjMlMjBDYWxjdWxlciUyMGV0JTIwJUMzJUE5Y2hlbG9ubmVyJTIwbGElMjBwb25kJUMzJUE5cmF0aW9uJTBBJTIwJTIwJTIwJTIwd2VpZ2h0cyUyMCUzRCUyMHRvcmNoLnN0YWNrKCU1QihpbnB1dHMlMjAlM0QlM0QlMjBrdCkuZmxvYXQoKSUyMGZvciUyMGt0JTIwaW4lMjBrZXl0b2tlbl9pZHMlNUQpLnN1bSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBheGlzJTNEJTVCMCUyQyUyMDIlNUQlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwd2VpZ2h0cyUyMCUzRCUyMGFscGhhJTIwKiUyMCgxLjAlMjAlMkIlMjB3ZWlnaHRzKSUwQSUyMCUyMCUyMCUyMCUyMyUyMENhbGN1bGVyJTIwbGElMjBtb3llbm5lJTIwcG9uZCVDMyVBOXIlQzMlQTllJTBBJTIwJTIwJTIwJTIwd2VpZ2h0ZWRfbG9zcyUyMCUzRCUyMChsb3NzX3Blcl9zYW1wbGUlMjAqJTIwd2VpZ2h0cykubWVhbigpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwd2VpZ2h0ZWRfbG9zcw==",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"># Décalage pour que tokens &lt; n prédisent 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"># Calcul de la perte par token</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"># Redimensionnement et perte moyenne par échantillon</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"># Calculer et échelonner la pondération</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"># Calculer la moyenne pondérée</span>
    weighted_loss = (loss_per_sample * weights).mean()
    <span class="hljs-keyword">return</span> weighted_loss`,wrap:!1}}),q=new C({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGEuZGF0YWxvYWRlciUyMGltcG9ydCUyMERhdGFMb2FkZXIlMEElMEF0b2tlbml6ZWRfZGF0YXNldC5zZXRfZm9ybWF0KCUyMnRvcmNoJTIyKSUwQXRyYWluX2RhdGFsb2FkZXIlMjAlM0QlMjBEYXRhTG9hZGVyKHRva2VuaXplZF9kYXRhc2V0JTVCJTIydHJhaW4lMjIlNUQlMkMlMjBiYXRjaF9zaXplJTNEMzIlMkMlMjBzaHVmZmxlJTNEVHJ1ZSklMEFldmFsX2RhdGFsb2FkZXIlMjAlM0QlMjBEYXRhTG9hZGVyKHRva2VuaXplZF9kYXRhc2V0JTVCJTIydmFsaWQlMjIlNUQlMkMlMjBiYXRjaF9zaXplJTNEMzIp",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data.dataloader <span class="hljs-keyword">import</span> DataLoader

tokenized_dataset.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
train_dataloader = DataLoader(tokenized_dataset[<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_dataset[<span class="hljs-string">&quot;valid&quot;</span>], batch_size=<span class="hljs-number">32</span>)`,wrap:!1}}),H=new C({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}}),le=new C({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}}),ae=new C({props:{code:"bW9kZWwlMjAlM0QlMjBHUFQyTE1IZWFkTW9kZWwoY29uZmlnKQ==",highlighted:"model = GPT2LMHeadModel(config)",wrap:!1}}),F=new C({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}}),Y=new C({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}}),ie=new Ms({props:{$$slots:{default:[Wt]},$$scope:{ctx:I}}}),S=new C({props:{code:"bnVtX3RyYWluX2Vwb2NocyUyMCUzRCUyMDElMEFudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUyMCUzRCUyMGxlbih0cmFpbl9kYXRhbG9hZGVyKSUwQW51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV90cmFpbl9lcG9jaHMlMjAqJTIwbnVtX3VwZGF0ZV9zdGVwc19wZXJfZXBvY2glMEElMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMG5hbWUlM0QlMjJsaW5lYXIlMjIlMkMlMEElMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMV8wMDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMkMlMEEp",highlighted:`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}}),me=new C({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}}),ye=new C({props:{code:"J3NndWdnZXIlMkZjb2RlcGFycm90LWRzLWFjY2VsZXJhdGUn",highlighted:'<span class="hljs-string">&#x27;sgugger/codeparrot-ds-accelerate&#x27;</span>',wrap:!1}}),D=new C({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}}),Ee=new C({props:{code:"ZXZhbHVhdGUoKQ==",highlighted:"evaluate()",wrap:!1}}),K=new C({props:{code:"KDEwLjkzNDEyNjg1Mzk0Mjg3MSUyQyUyMDU2MDU3LjE0NDUzMTI1KQ==",highlighted:'(<span class="hljs-number">10.934126853942871</span>, <span class="hljs-number">56057.14453125</span>)',wrap:!1}}),Ne=new C({props:{code:"ZnJvbSUyMHRxZG0ubm90ZWJvb2slMjBpbXBvcnQlMjB0cWRtJTBBJTBBZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTIwJTNEJTIwOCUwQWV2YWxfc3RlcHMlMjAlM0QlMjA1XzAwMCUwQSUwQW1vZGVsLnRyYWluKCklMEFjb21wbGV0ZWRfc3RlcHMlMjAlM0QlMjAwJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV90cmFpbl9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RlcCUyQyUyMGJhdGNoJTIwaW4lMjB0cWRtKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVudW1lcmF0ZSh0cmFpbl9kYXRhbG9hZGVyJTJDJTIwc3RhcnQlM0QxKSUyQyUyMHRvdGFsJTNEbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBJTIwJTIwJTIwJTIwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvZ2l0cyUyMCUzRCUyMG1vZGVsKGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEKS5sb2dpdHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhiYXRjaCU1QiUyMmlucHV0X2lkcyUyMiU1RCUyQyUyMGxvZ2l0cyUyQyUyMGtleXRva2VuX2lkcyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHN0ZXAlMjAlMjUlMjAxMDAlMjAlM0QlM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybHIlMjIlM0ElMjBnZXRfbHIoKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnNhbXBsZXMlMjIlM0ElMjBzdGVwJTIwKiUyMHNhbXBsZXNfcGVyX3N0ZXAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJzdGVwcyUyMiUzQSUyMGNvbXBsZXRlZF9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmxvc3MlMkZ0cmFpbiUyMiUzQSUyMGxvc3MuaXRlbSgpJTIwKiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwbG9zcyUyMCUyRiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBzdGVwJTIwJTI1JTIwZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTIwJTNEJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmNsaXBfZ3JhZF9ub3JtXyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjAxLjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21wbGV0ZWRfc3RlcHMlMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAoc3RlcCUyMCUyNSUyMChldmFsX3N0ZXBzJTIwKiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcykpJTIwJTNEJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV2YWxfbG9zcyUyQyUyMHBlcnBsZXhpdHklMjAlM0QlMjBldmFsdWF0ZSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTdCJTIybG9zcyUyRmV2YWwlMjIlM0ElMjBldmFsX2xvc3MlMkMlMjAlMjJwZXJwbGV4aXR5JTIyJTNBJTIwcGVycGxleGl0eSU3RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMHN0ZXAlMjAlN0JzdGVwJTdEJTIyJTJDJTIwYmxvY2tpbmclM0RGYWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCk=",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=<span class="hljs-built_in">len</span>(train_dataloader)
    ):
        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;lr&quot;</span>: get_lr(),
                    <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}}),V=new Ms({props:{$$slots:{default:[At]},$$scope:{ctx:I}}}),be=new Ms({props:{$$slots:{default:[Vt]},$$scope:{ctx:I}}}),{c(){y(n.$$.fragment),i=o(),a=j("p"),a.innerHTML=c,_=o(),y(f.$$.fragment),Z=o(),k=j("p"),k.innerHTML=v,m=o(),y(h.$$.fragment),$=o(),y(x.$$.fragment),W=o(),X=j("p"),X.innerHTML=g,G=o(),y(E.$$.fragment),qe=o(),N=j("p"),N.textContent=bl,He=o(),B=j("ul"),B.innerHTML=fl,Fe=o(),Q=j("p"),Q.innerHTML=hl,Ye=o(),y(q.$$.fragment),cs=o(),ee=j("p"),ee.innerHTML=Qe,Se=o(),y(H.$$.fragment),ms=o(),se=j("p"),se.innerHTML=Xe,ds=o(),y(le.$$.fragment),ne=o(),te=j("p"),te.innerHTML=ze,ys=o(),y(ae.$$.fragment),re=o(),oe=j("p"),oe.textContent=Re,De=o(),y(F.$$.fragment),Us=o(),pe=j("p"),pe.textContent=We,Le=o(),y(Y.$$.fragment),Js=o(),y(ie.$$.fragment),ue=o(),Me=j("p"),Me.innerHTML=Ae,Ke=o(),y(S.$$.fragment),Ts=o(),ce=j("p"),ce.innerHTML=Ve,js=o(),y(me.$$.fragment),de=o(),y(ye.$$.fragment),Ue=o(),Je=j("p"),Je.textContent=he,Pe=o(),y(D.$$.fragment),ws=o(),Te=j("p"),Te.innerHTML=xe,Oe=o(),L=j("p"),L.textContent=bs,je=o(),y(Ee.$$.fragment),es=o(),y(K.$$.fragment),ss=o(),P=j("p"),P.innerHTML=fs,we=o(),y(Ne.$$.fragment),ls=o(),O=j("p"),O.textContent=Cl,ns=o(),y(V.$$.fragment),hs=o(),y(be.$$.fragment)},l(s){U(n.$$.fragment,s),i=p(s),a=w(s,"P",{"data-svelte-h":!0}),b(a)!=="svelte-c8px9o"&&(a.innerHTML=c),_=p(s),U(f.$$.fragment,s),Z=p(s),k=w(s,"P",{"data-svelte-h":!0}),b(k)!=="svelte-19f9b60"&&(k.innerHTML=v),m=p(s),U(h.$$.fragment,s),$=p(s),U(x.$$.fragment,s),W=p(s),X=w(s,"P",{"data-svelte-h":!0}),b(X)!=="svelte-jx88zi"&&(X.innerHTML=g),G=p(s),U(E.$$.fragment,s),qe=p(s),N=w(s,"P",{"data-svelte-h":!0}),b(N)!=="svelte-rlxpr2"&&(N.textContent=bl),He=p(s),B=w(s,"UL",{"data-svelte-h":!0}),b(B)!=="svelte-1vj6u2z"&&(B.innerHTML=fl),Fe=p(s),Q=w(s,"P",{"data-svelte-h":!0}),b(Q)!=="svelte-1ctnuyk"&&(Q.innerHTML=hl),Ye=p(s),U(q.$$.fragment,s),cs=p(s),ee=w(s,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1wo3v6a"&&(ee.innerHTML=Qe),Se=p(s),U(H.$$.fragment,s),ms=p(s),se=w(s,"P",{"data-svelte-h":!0}),b(se)!=="svelte-1uj13c8"&&(se.innerHTML=Xe),ds=p(s),U(le.$$.fragment,s),ne=p(s),te=w(s,"P",{"data-svelte-h":!0}),b(te)!=="svelte-6xkein"&&(te.innerHTML=ze),ys=p(s),U(ae.$$.fragment,s),re=p(s),oe=w(s,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1izzw9s"&&(oe.textContent=Re),De=p(s),U(F.$$.fragment,s),Us=p(s),pe=w(s,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-2txhcy"&&(pe.textContent=We),Le=p(s),U(Y.$$.fragment,s),Js=p(s),U(ie.$$.fragment,s),ue=p(s),Me=w(s,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-al3txz"&&(Me.innerHTML=Ae),Ke=p(s),U(S.$$.fragment,s),Ts=p(s),ce=w(s,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-1qf7jzv"&&(ce.innerHTML=Ve),js=p(s),U(me.$$.fragment,s),de=p(s),U(ye.$$.fragment,s),Ue=p(s),Je=w(s,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-1ollvfx"&&(Je.textContent=he),Pe=p(s),U(D.$$.fragment,s),ws=p(s),Te=w(s,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-1jqz79z"&&(Te.innerHTML=xe),Oe=p(s),L=w(s,"P",{"data-svelte-h":!0}),b(L)!=="svelte-yglqf1"&&(L.textContent=bs),je=p(s),U(Ee.$$.fragment,s),es=p(s),U(K.$$.fragment,s),ss=p(s),P=w(s,"P",{"data-svelte-h":!0}),b(P)!=="svelte-gocp5n"&&(P.innerHTML=fs),we=p(s),U(Ne.$$.fragment,s),ls=p(s),O=w(s,"P",{"data-svelte-h":!0}),b(O)!=="svelte-x4kgtz"&&(O.textContent=Cl),ns=p(s),U(V.$$.fragment,s),hs=p(s),U(be.$$.fragment,s)},m(s,d){J(n,s,d),t(s,i,d),t(s,a,d),t(s,_,d),J(f,s,d),t(s,Z,d),t(s,k,d),t(s,m,d),J(h,s,d),t(s,$,d),J(x,s,d),t(s,W,d),t(s,X,d),t(s,G,d),J(E,s,d),t(s,qe,d),t(s,N,d),t(s,He,d),t(s,B,d),t(s,Fe,d),t(s,Q,d),t(s,Ye,d),J(q,s,d),t(s,cs,d),t(s,ee,d),t(s,Se,d),J(H,s,d),t(s,ms,d),t(s,se,d),t(s,ds,d),J(le,s,d),t(s,ne,d),t(s,te,d),t(s,ys,d),J(ae,s,d),t(s,re,d),t(s,oe,d),t(s,De,d),J(F,s,d),t(s,Us,d),t(s,pe,d),t(s,Le,d),J(Y,s,d),t(s,Js,d),J(ie,s,d),t(s,ue,d),t(s,Me,d),t(s,Ke,d),J(S,s,d),t(s,Ts,d),t(s,ce,d),t(s,js,d),J(me,s,d),t(s,de,d),J(ye,s,d),t(s,Ue,d),t(s,Je,d),t(s,Pe,d),J(D,s,d),t(s,ws,d),t(s,Te,d),t(s,Oe,d),t(s,L,d),t(s,je,d),J(Ee,s,d),t(s,es,d),J(K,s,d),t(s,ss,d),t(s,P,d),t(s,we,d),J(Ne,s,d),t(s,ls,d),t(s,O,d),t(s,ns,d),J(V,s,d),t(s,hs,d),J(be,s,d),fe=!0},i(s){fe||(u(n.$$.fragment,s),u(f.$$.fragment,s),u(h.$$.fragment,s),u(x.$$.fragment,s),u(E.$$.fragment,s),u(q.$$.fragment,s),u(H.$$.fragment,s),u(le.$$.fragment,s),u(ae.$$.fragment,s),u(F.$$.fragment,s),u(Y.$$.fragment,s),u(ie.$$.fragment,s),u(S.$$.fragment,s),u(me.$$.fragment,s),u(ye.$$.fragment,s),u(D.$$.fragment,s),u(Ee.$$.fragment,s),u(K.$$.fragment,s),u(Ne.$$.fragment,s),u(V.$$.fragment,s),u(be.$$.fragment,s),fe=!0)},o(s){M(n.$$.fragment,s),M(f.$$.fragment,s),M(h.$$.fragment,s),M(x.$$.fragment,s),M(E.$$.fragment,s),M(q.$$.fragment,s),M(H.$$.fragment,s),M(le.$$.fragment,s),M(ae.$$.fragment,s),M(F.$$.fragment,s),M(Y.$$.fragment,s),M(ie.$$.fragment,s),M(S.$$.fragment,s),M(me.$$.fragment,s),M(ye.$$.fragment,s),M(D.$$.fragment,s),M(Ee.$$.fragment,s),M(K.$$.fragment,s),M(Ne.$$.fragment,s),M(V.$$.fragment,s),M(be.$$.fragment,s),fe=!1},d(s){s&&(l(i),l(a),l(_),l(Z),l(k),l(m),l($),l(W),l(X),l(G),l(qe),l(N),l(He),l(B),l(Fe),l(Q),l(Ye),l(cs),l(ee),l(Se),l(ms),l(se),l(ds),l(ne),l(te),l(ys),l(re),l(oe),l(De),l(Us),l(pe),l(Le),l(Js),l(ue),l(Me),l(Ke),l(Ts),l(ce),l(js),l(de),l(Ue),l(Je),l(Pe),l(ws),l(Te),l(Oe),l(L),l(je),l(es),l(ss),l(P),l(we),l(ls),l(O),l(ns),l(hs)),T(n,s),T(f,s),T(h,s),T(x,s),T(E,s),T(q,s),T(H,s),T(le,s),T(ae,s),T(F,s),T(Y,s),T(ie,s),T(S,s),T(me,s),T(ye,s),T(D,s),T(Ee,s),T(K,s),T(Ne,s),T(V,s),T(be,s)}}}function Wt(I){let n,i='🚨 Si vous vous entraînez sur un TPU, vous devrez déplacer tout le code commençant à la cellule ci-dessus dans une fonction d’entraînement dédiée. Voir le <a href="/course/fr/chapter3">chapitre 3</a> pour plus de détails.';return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1b83gft"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function At(I){let n,i="✏️ <strong>Essayez !</strong> Vous pouvez créer votre propre fonction de perte personnalisée, adaptée à votre cas d’utilisation, ou ajouter une autre étape personnalisée dans la boucle d’entraînement.";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-19vkkh6"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function Vt(I){let n,i="✏️ <strong>Essayez !</strong> Lorsque vous effectuez de longues expériences d’entraînement, il est bon d’enregistrer les mesures importantes à l’aide d’outils tels que <em>TensorBoard</em> ou <em>Weights &amp; Biases</em>. Ajoutez l’un d’eux à la boucle d’entraînement afin de pouvoir toujours vérifier comment se déroule l’entraînement.";return{c(){n=j("p"),n.innerHTML=i},l(a){n=w(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-5mj027"&&(n.innerHTML=i)},m(a,c){t(a,n,c)},p:Ml,d(a){a&&l(n)}}}function xt(I){let n,i,a,c,_,f,Z,k,v,m,h,$,x='Jusqu’à présent, nous avons surtout réutilisé des modèles pré-entraînés et les avons <em>finetunés</em> sur de nouveaux cas d’usage. Comme nous l’avons vu dans le <a href="/course/fr/chapter1">chapitre 1</a>, ceci est communément appelé <em>apprentissage par transfert</em>, et il s’agit d’une stratégie très efficace pour appliquer les <em>transformers</em> à la plupart des applications du monde réel où les données étiquetées sont rares. Dans ce chapitre, nous allons adopter une approche différente consistant à entraîner un modèle complètement nouveau à partir de zéro. C’est une bonne démarche à adopter si vous avez beaucoup de données et qu’elles sont très différentes des données de pré-entraînement utilisées par les modèles disponibles. Cependant, le pré-entraînement d’un modèle de langue nécessite beaucoup plus de ressources informatiques que le simple <em>finetuning</em> d’un modèle existant. Parmi les exemples où il peut être utile d’entraîner un nouveau modèle, citons les jeux de données constitués de notes de musique, de séquences moléculaires telles que l’ADN, ou de langages de programmation. Ces derniers ont récemment gagné en popularité grâce à des outils tels que TabNine et Copilot de GitHub (alimentés par le modèle Codex d’OpenAI) qui peuvent générer de longues séquences de code. Cette tâche de génération de texte est mieux abordée avec des modèles de langage autorégressifs ou causaux tels que le GPT-2.',W,X,g="Dans cette section, nous allons construire une version réduite d’un modèle de génération de code Python. Nous nous concentrerons sur la complétion d’une ligne de code au lieu de fonctions ou de classes complètes. Lorsque vous travaillez sur des projets de science des données en Python, vous êtes souvent en contact avec les bibliothèques <code>matplotlib</code>, <code>seaborn</code>, <code>pandas</code> et <code>scikit-learn</code>. Lors de l’utilisation de ces <em>frameworks</em>, il est fréquent d’avoir besoin de rechercher des commandes spécifiques. Il serait donc bien d’utiliser un modèle pour compléter ces appels pour nous.",G,E,qe,N,bl='Dans le <a href="/course/fr/chapter6">chapitre 6</a>, nous avons créé un <em>tokenizer</em> efficace pour traiter du code Python. Nous avons besoin d’un jeu de données à grande échelle pour pré-entraîner un modèle. Ici, nous allons appliquer notre <em>tokenizer</em> à un corpus de code Python provenant des dépôts GitHub. Nous utiliserons ensuite l’API <code>Trainer</code> et 🤗 <em>Accelerate</em> pour entraîner le modèle. C’est parti !',He,B,fl,Fe,Q,hl,Ye,q,cs='Il s’agit d’une présentation du modèle qui a été entraîné à l’aide du code présenté dans cette section et qui a ensuité été téléchargé sur le <em>Hub</em>. Vous pouvez le trouver <a href="https://huggingface.co/huggingface-course/codeparrot-ds?text=plt.imshow%28" rel="nofollow">ici</a>. Notez qu’étant donné qu’il y a un certains aléat dans la génération du texte, vous obtiendrez probablement un résultat légèrement différent.',ee,Qe,Se,H,ms='On peut trouver du code Python en abondance dans les dépôts de code tels que GitHub, que nous pouvons utiliser pour créer un jeu de données en récupérant chaque dépôt Python. C’est l’approche adoptée dans le <a href="https://learning.oreilly.com/library/view/natural-language-processing/9781098136789/" rel="nofollow">livre <em>Natural Language Processing with Transformers</em></a> pour pré-entraîner un grand GPT-2. En utilisant un dépôt GitHub d’environ 180 Go contenant approximativement 20 millions de fichiers Python, les auteurs du livre ont construit un jeu de données appelé <code>codeparrot</code> qu’ils ont ensuite partagé sur le <a href="https://huggingface.co/datasets/transformersbook/codeparrot" rel="nofollow"><em>Hub</em></a>.',se,Xe,ds="Cependant, entraîner sur l’ensemble du corpus prend beaucoup de temps et demande beaucoup de ressources de calculs. Dans notre cas, nous n’avons besoin que du sous-ensemble du jeu de données qui est relatif aux codes portant sur la science des données. Commençons donc par filtrer le jeu de données <code>codeparrot</code> en ne gardant que les fichiers incluant l’une des bibliothèques de science des données énumérées précédemment. En raison de la taille du jeu de données, nous voulons éviter de le télécharger. Nous utiliserons donc la fonctionnalité de <em>streaming</em> de 🤗 <em>Datasets</em> afin de le filtrer à la volée. Pour nous aider à filtrer les échantillons de code utilisant les bibliothèques que nous avons mentionnées précédemment, nous utilisons la fonction suivante :",le,ne,te,ze,ys="Testons-le sur deux exemples :",ae,re,oe,Re,De,F,Us="Nous pouvons l’utiliser pour créer une fonction qui va <em>streamer</em> le jeu de donner et filtrer les éléments que nous voulons :",pe,We,Le,Y,Js="Ensuite, nous pouvons simplement appliquer cette fonction :",ie,ue,Me,Ae,Ke,S,Ts="Cela nous laisse avec environ 3 % du jeu de données original, ce qui est tout de même assez important puisqu’il fait 6 Go et se compose de 600 000 scripts Python !",ce,Ve,js="Le filtrage peut prendre de 2 à 3 heures, selon votre machine et votre bande passante. Si vous ne voulez pas passer par ce long processus, nous fournissons sur le <em>Hub</em> le jeu de données filtré pour que vous puissiez le télécharger :",me,de,ye,Ue,Je,he,Pe,D,ws="Examinons un exemple tiré du jeu de données. Nous ne montrerons que les 200 premiers caractères de chaque champ :",Te,xe,Oe,L,bs,je,Ee="Nous pouvons voir que le champ <code>content</code> contient le code sur lequel nous voulons que notre modèle s’entraîne. Maintenant que nous avons un jeu de données, nous devons préparer les textes afin qu’ils soient dans un format approprié pour le pré-entraînement.",es,K,ss,P,fs,we,Ne="La première étape est de tokeniser les données afin de pouvoir les utiliser pour l’entraînement. Puisque notre objectif est d’autocompléter de courts appels de fonctions, nous pouvons garder la taille du contexte relativement petite. L’avantage est que nous pouvons entraîner le modèle beaucoup plus rapidement et qu’il nécessite beaucoup moins de mémoire. Si c’est important pour votre application d’avoir davantage de contexte (par exemple, si vous voulez que le modèle écrive des tests unitaires basés sur un fichier avec la définition de la fonction), assurez-vous d’augmenter ce nombre. Gardez néanmoins à l’esprit que cela s’accompagne d’une plus grande empreinte mémoire du GPU. Pour l’instant, fixons la taille du contexte à 128 <em>tokens</em>, par opposition aux 1 024 ou 2 048 utilisés respectivement dans le GPT-2 et le GPT-3.",ls,O,Cl='La plupart des documents contiennent beaucoup plus de 128 <em>tokens</em>, donc le fait de tronquer les entrées à la longueur maximale éliminerait une grande partie de notre jeu de données. A la place, nous allons utiliser l’option <code>return_overflowing_tokens</code> pour tokeniser l’entrée entière et la diviser en plusieurs morceaux, comme nous l’avons fait dans le <a href="/course/fr/chapter6/4">chapitre 6</a>. Nous utiliserons également l’option <code>return_length</code> pour retourner automatiquement la longueur de chaque morceau créé. Souvent, le dernier morceau est plus petit que la taille du contexte et nous nous en débarrasserons pour éviter les problèmes de <em>padding</em>. Nous n’en avons pas vraiment besoin puisque de toute façon nous avons beaucoup de données.',ns,V,hs='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/chunking_texts.svg" alt="Chunking a large texts in several pieces."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/chunking_texts-dark.svg" alt="Chunking a large texts in several pieces."/>',be,fe,s="Voyons comment cela fonctionne en examinant les deux premiers exemples :",d,Cs,_l,Is,gl,_s,fn="Nous pouvons voir que nous obtenons 34 morceaux à partir de ces deux exemples. En regardant leurs longueurs, nous pouvons voir qu’ils se terminent avec moins de 128 <em>tokens</em> (117 et 41, respectivement). Ils ne représentent qu’une petite fraction du total des morceaux que nous avons (2/34), donc nous pouvons les jeter sans risque. Avec le champ <code>overflow_to_sample_mapping</code>, nous pouvons aussi reconstruire quels morceaux appartenaient à quels échantillons d’entrée.",vl,gs,hn='Avec cette opération, nous utilisons une fonctionnalité pratique de la fonction <code>Dataset.map()</code> de 🤗 <em>Datasets</em>. En effet, celle-ci ne nécessite pas une correspondance un à un comme nous l’avons vu dans la <a href="/course/fr/chapter7/3">section 3</a>. Nous pouvons créer des batchs avec plus ou moins d’éléments que le batch d’entrée. C’est utile lorsque l’on effectue des opérations telles que l’augmentation ou le filtrage des données qui modifient le nombre d’éléments. Dans notre cas, lors de la tokenisation de chaque élément en morceaux de longeur de la taille de contexte spécifiée, nous créons de nombreux échantillons de chaque document. Nous devons juste nous assurer de supprimer les colonnes existantes, car elles ont une taille conflictuelle. Si nous voulions les garder, nous pourrions les répéter de manière appropriée et les retourner dans l’appel <code>Dataset.map()</code> :',kl,vs,Zl,ks,$l,Zs,Cn="Nous avons maintenant 16,7 millions d’exemples avec 128 <em>tokens</em> chacun, ce qui correspond à environ 2,1 milliards de <em>tokens</em> au total. A titre de comparaison, les modèles GPT-3 et Codex d’OpenAI sont entraînés sur 300 et 100 milliards de <em>tokens</em>, respectivement. Les modèles Codex étant initialisés à partir des <em>checkpoints</em> GPT-3. Notre objectif dans cette section n’est pas de rivaliser avec ces modèles, qui peuvent générer des textes longs et cohérents, mais de créer une version réduite fournissant une fonction d’autocomplétion rapide.",Gl,$s,In="Maintenant que le jeu de données est prêt, configurons le modèle !",Bl,as,Ql,Gs,Xl,Bs,_n="Notre première étape consiste à initialiser un GPT-2. Pour notre modèle, nous utiliserons la même configuration que pour le petit modèle GPT-2. Ainsi nous chargeons la configuration pré-entraînée, nous nous assurons que la taille du <em>tokenizer</em> correspond à la taille du vocabulaire du modèle et nous passons les identifiants des <em>tokens</em> <code>bos</code> et <code>eos</code> (début et fin de séquence) :",zl,Ce,Ie,cl,Qs,gn="Notre modèle comporte 124 millions de paramètres que nous devrons régler. Avant de commencer l’entraînement, nous devons configurer un assembleur de données qui se chargera de créer les batchs. Nous pouvons utiliser le assembleur <code>DataCollatorForLanguageModeling</code>, qui est conçu spécifiquement pour la modélisation du langage (comme son nom le suggère subtilement). En plus de l’empilage et du rembourrage des batchs, il s’occupe aussi de la création des étiquettes du modèle de langage. Dans la modélisation causale du langage, les entrées servent aussi d’étiquettes (juste décalées d’un élément) et que le assembleur de données crée à la volée pendant l’entraînement pour ne pas avoir à dupliquer les <code>input_ids</code>.",Rl,Xs,vn="Notez que <code>DataCollatorForLanguageModeling</code> supporte à la fois la modélisation du langage masqué (MLM pour <em>masked language modeling</em>) et la modélisation du langage causal (CLM pour <em>causal language modeling</em>). Par défaut, il prépare les données pour la MLM mais nous pouvons passer à la CLM en définissant l’argument <code>mlm=False</code> :",Wl,_e,ge,ml,zs,kn="Prenons un exemple :",Al,Rs,Vl,ve,ke,dl,Ws,Zn="Nous pouvons voir que les exemples ont été empilés et que tous les tenseurs ont la même forme.",xl,yl,rs,El,As,$n="Nous avons maintenant tout ce qu’il faut pour entraîner notre modèle. Ce n’était pas si compliqué ! Avant de commencer l’entraînement, nous devons nous connecter à Hugging Face. Si vous travaillez dans un <em>notebook</em>, vous pouvez le faire avec la fonction utilitaire suivante :",Nl,Vs,ql,xs,Gn="Cela affichera un <em>widget</em> où vous pourrez entrer vos identifiants de connexion à Hugging Face.",Hl,Es,Bn="Si vous ne travaillez pas dans un <em>notebook</em>, tapez simplement la ligne suivante dans votre terminal :",Fl,Ns,Yl,Ze,$e,Ul,os,Sl,ps,Dl,qs,Ll,Hs,Qn="C’est maintenant le moment de vérité : voyons comment le modèle entraîné fonctionne réellement ! Nous pouvons voir dans les logs que la perte a diminué régulièrement, mais pour mettre le modèle à l’épreuve, regardons comment il fonctionne sur certains messages. Pour ce faire, nous allons envelopper le modèle dans un <code>pipeline</code> de génération de texte et, s’il y en a un de disponible, utiliser un GPU pour avoir des générations rapidement :",Kl,Ge,Be,Jl,Fs,Xn="Let’s start with the simple task of creating a scatter plot:",Pl,Ys,Ol,Ss,en,Ds,zn="Le résultat semble correct. Est-ce que cela fonctionne aussi pour une opération <code>pandas</code> ? Voyons si nous pouvons créer un <code>DataFrame</code> à partir de deux tableaux :",sn,Ls,ln,Ks,nn,Ps,Rn="Bien, c’est la bonne réponse. Bien qu’il insère ensuite la colonne <code>x</code> à nouveau. Comme le nombre de <em>tokens</em> générés est limité, la boucle <code>for</code> suivante est coupée. Voyons si nous pouvons faire quelque chose d’un peu plus complexe et faire en sorte que le modèle nous aide à utiliser l’opération <code>groupby</code> :",tn,Os,an,el,rn,sl,Wn="Pas mal, c’est la bonne façon de faire. Enfin, voyons si nous pouvons aussi l’utiliser pour <code>scikit-learn</code> et utiliser un modèle <em>Random Forest</em> :",on,ll,pn,nl,un,Tl,jl,tl,Mn,Il,cn;_=new yt({props:{fw:I[0]}}),Z=new wl({props:{title:"Entraîner un modèle de langage causal à partir de zéro",local:"entraîner-un-modèle-de-langage-causal-à-partir-de-zéro",headingTag:"h1"}});const An=[Tt,Jt],al=[];function Vn(e,r){return e[0]==="pt"?0:1}v=Vn(I),m=al[v]=An[v](I),E=new bn({props:{id:"Vpjb1lu0MDk"}}),Qe=new wl({props:{title:"Collecte des données",local:"collecte-des-données",headingTag:"h2"}}),ne=new C({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}}),re=new C({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}}),Re=new C({props:{code:"RmFsc2UlMjBUcnVl",highlighted:'<span class="hljs-literal">False</span> <span class="hljs-literal">True</span>',wrap:!1}}),We=new C({props:{code:"ZGVmJTIwZmlsdGVyX3N0cmVhbWluZ19kYXRhc2V0KGRhdGFzZXQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlMjAlM0QlMjBkZWZhdWx0ZGljdChsaXN0KSUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMGZvciUyMHNhbXBsZSUyMGluJTIwdHFkbShpdGVyKGRhdGFzZXQpKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsJTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwYW55X2tleXdvcmRfaW5fc3RyaW5nKHNhbXBsZSU1QiUyMmNvbnRlbnQlMjIlNUQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGUuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlNUJrJTVELmFwcGVuZCh2KSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JsZW4oZmlsdGVyZWRfZGljdCU1Qidjb250ZW50JyU1RCklMkZ0b3RhbCUzQS4yJTI1JTdEJTIwb2YlMjBkYXRhJTIwYWZ0ZXIlMjBmaWx0ZXJpbmcuJTIyKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMERhdGFzZXQuZnJvbV9kaWN0KGZpbHRlcmVkX2RpY3Qp",highlighted:`<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}}),ue=new C({props:{code:"JTIzJTIwQ2V0dGUlMjBjZWxsdWxlJTIwcHJlbmRyYSUyMGJlYXVjb3VwJTIwZGUlMjB0ZW1wcyUyMCVDMyVBMCUyMHMnZXglQzMlQTljdXRlciUyQyUyMGRvbmMlMjB2b3VzJTIwZGV2cmlleiUyMGxhJTIwc2F1dGVyJTIwZXQlMjBhbGxlciUyMCVDMyVBMCUyMGxhJTIwc3VpdmFudGUlMjAhJTBBZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBc3BsaXQlMjAlM0QlMjAlMjJ0cmFpbiUyMiUyMCUyMCUyMyUyMCUyMnZhbGlkJTIyJTBBZmlsdGVycyUyMCUzRCUyMCU1QiUyMnBhbmRhcyUyMiUyQyUyMCUyMnNrbGVhcm4lMjIlMkMlMjAlMjJtYXRwbG90bGliJTIyJTJDJTIwJTIyc2VhYm9ybiUyMiU1RCUwQSUwQWRhdGElMjAlM0QlMjBsb2FkX2RhdGFzZXQoZiUyMnRyYW5zZm9ybWVyc2Jvb2slMkZjb2RlcGFycm90LSU3QnNwbGl0JTdEJTIyJTJDJTIwc3BsaXQlM0RzcGxpdCUyQyUyMHN0cmVhbWluZyUzRFRydWUpJTBBZmlsdGVyZWRfZGF0YSUyMCUzRCUyMGZpbHRlcl9zdHJlYW1pbmdfZGF0YXNldChkYXRhJTJDJTIwZmlsdGVycyk=",highlighted:`<span class="hljs-comment"># Cette cellule prendra beaucoup de temps à s&#x27;exécuter, donc vous devriez la sauter et aller à la suivante !</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}}),Ae=new C({props:{code:"My4yNiUyNSUyMG9mJTIwZGF0YSUyMGFmdGVyJTIwZmlsdGVyaW5nLg==",highlighted:'<span class="hljs-number">3.26</span>% of data after filtering.',wrap:!1}}),de=new C({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTJDJTIwRGF0YXNldERpY3QlMEElMEFkc190cmFpbiUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlcGFycm90LWRzLXRyYWluJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiklMEFkc192YWxpZCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlcGFycm90LWRzLXZhbGlkJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiklMEElMEFyYXdfZGF0YXNldHMlMjAlM0QlMjBEYXRhc2V0RGljdCglMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJ0cmFpbiUyMiUzQSUyMGRzX3RyYWluJTJDJTIwJTIwJTIzJTIwLnNodWZmbGUoKS5zZWxlY3QocmFuZ2UoNTAwMDApKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnZhbGlkJTIyJTNBJTIwZHNfdmFsaWQlMkMlMjAlMjAlMjMlMjAuc2h1ZmZsZSgpLnNlbGVjdChyYW5nZSg1MDApKSUwQSUyMCUyMCUyMCUyMCU3RCUwQSklMEElMEFyYXdfZGF0YXNldHM=",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;train&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}}),Ue=new C({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}}),he=new Ms({props:{$$slots:{default:[jt]},$$scope:{ctx:I}}}),xe=new C({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}}),L=new C({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}}),K=new wl({props:{title:"Préparation du jeu de données",local:"préparation-du-jeu-de-données",headingTag:"h2"}}),P=new bn({props:{id:"ma1TrR7gE7I"}}),Cs=new C({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}}),Is=new C({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}}),vs=new C({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}}),ks=new C({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}}),as=new Ms({props:{$$slots:{default:[wt]},$$scope:{ctx:I}}}),Gs=new wl({props:{title:"Initialisation d’un nouveau modèle",local:"initialisation-dun-nouveau-modèle",headingTag:"h2"}});const xn=[ft,bt],rl=[];function En(e,r){return e[0]==="pt"?0:1}Ce=En(I),Ie=rl[Ce]=xn[Ce](I);const Nn=[Ct,ht],ol=[];function qn(e,r){return e[0]==="pt"?0:1}_e=qn(I),ge=ol[_e]=Nn[_e](I),Rs=new C({props:{code:"b3V0JTIwJTNEJTIwZGF0YV9jb2xsYXRvciglNUJ0b2tlbml6ZWRfZGF0YXNldCU1QiUyMnRyYWluJTIyJTVEJTVCaSU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKDUpJTVEKSUwQWZvciUyMGtleSUyMGluJTIwb3V0JTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiU3QmtleSU3RCUyMHNoYXBlJTNBJTIwJTdCb3V0JTVCa2V5JTVELnNoYXBlJTdEJTIyKQ==",highlighted:`out = data_collator([tokenized_dataset[<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 Hn=[_t,It],pl=[];function Fn(e,r){return e[0]==="pt"?0:1}ve=Fn(I),ke=pl[ve]=Hn[ve](I);let z=I[0]==="tf"&&rt();rs=new Ms({props:{warning:!0,$$slots:{default:[gt]},$$scope:{ctx:I}}}),Vs=new C({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),Ns=new C({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const Yn=[kt,vt],il=[];function Sn(e,r){return e[0]==="pt"?0:1}Ze=Sn(I),$e=il[Ze]=Yn[Ze](I),os=new Ms({props:{$$slots:{default:[Zt]},$$scope:{ctx:I}}}),ps=new Ms({props:{$$slots:{default:[Bt]},$$scope:{ctx:I}}}),qs=new wl({props:{title:"Génération de code avec le pipeline",local:"génération-de-code-avec-le-pipeline",headingTag:"h2"}});const Dn=[Xt,Qt],ul=[];function Ln(e,r){return e[0]==="pt"?0:1}Ge=Ln(I),Be=ul[Ge]=Dn[Ge](I),Ys=new C({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwY3IlQzMlQTllciUyMGRlcyUyMGRvbm4lQzMlQTllcyUwQXglMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQXklMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQSUwQSUyMyUyMGNyJUMzJUE5ZXIlMjB1biUyMG51YWdlJTIwZGUlMjBwb2ludHMlMjBhdmVjJTIweCUyQyUyMHklMEElMjIlMjIlMjIlMEFwcmludChwaXBlKHR4dCUyQyUyMG51bV9yZXR1cm5fc2VxdWVuY2VzJTNEMSklNUIwJTVEJTVCJTIyZ2VuZXJhdGVkX3RleHQlMjIlNUQp",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# créer des données
x = np.random.randn(100)
y = np.random.randn(100)

# créer un nuage de points avec 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}}),Ss=new C({props:{code:"JTIzJTIwY3IlQzMlQTllciUyMGRlcyUyMGRvbm4lQzMlQTllcyUwQXglMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQXklMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQSUwQSUyMyUyMGNyJUMzJUE5ZXIlMjB1biUyMG51YWdlJTIwZGUlMjBwb2ludHMlMjBhdmVjJTIweCUyQyUyMHklMEFwbHQuc2NhdHRlcih4JTJDJTIweSk=",highlighted:`<span class="hljs-comment"># créer des données</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"># créer un nuage de points avec x, y</span>
plt.scatter(x, y)`,wrap:!1}}),Ls=new C({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwY3IlQzMlQTllciUyMGRlcyUyMGRvbm4lQzMlQTllcyUwQXglMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQXklMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQSUwQSUyMyUyMGNyJUMzJUE5ZXIlMjB1biUyMHRhYmxlYXUlMjBkZSUyMGRvbm4lQzMlQTllcyUyMCVDMyVBMCUyMHBhcnRpciUyMGRlJTIweCUyMGV0JTIweSUwQSUyMiUyMiUyMiUwQXByaW50KHBpcGUodHh0JTJDJTIwbnVtX3JldHVybl9zZXF1ZW5jZXMlM0QxKSU1QjAlNUQlNUIlMjJnZW5lcmF0ZWRfdGV4dCUyMiU1RCk=",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# créer des données
x = np.random.randn(100)
y = np.random.randn(100)

# créer un tableau de données à partir de x et 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}}),Ks=new C({props:{code:"JTIzJTIwY3IlQzMlQTllciUyMGRlcyUyMGRvbm4lQzMlQTllcyUwQXglMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQXklMjAlM0QlMjBucC5yYW5kb20ucmFuZG4oMTAwKSUwQSUwQSUyMyUyMGNyJUMzJUE5ZXIlMjB1biUyMHRhYmxlYXUlMjBkZSUyMGRvbm4lQzMlQTllcyUyMCVDMyVBMCUyMHBhcnRpciUyMGRlJTIweCUyMGV0JTIweSUwQWRmJTIwJTNEJTIwcGQuRGF0YUZyYW1lKCU3Qid4JyUzQSUyMHglMkMlMjAneSclM0ElMjB5JTdEKSUwQWRmLmluc2VydCgwJTJDJ3gnJTJDJTIweCklMEFmb3I=",highlighted:`<span class="hljs-comment"># créer des données</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"># créer un tableau de données à partir de x et 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}}),Os=new C({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwdGFibGVhdSUyMGRlJTIwZG9ubiVDMyVBOWVzJTIwYXZlYyUyMHByb2Zlc3Npb24lMkMlMjByZXZlbnUlMjBldCUyMG5vbSUwQWRmJTIwJTNEJTIwcGQuRGF0YUZyYW1lKCU3Qidwcm9mZXNzaW9uJyUzQSUyMHglMkMlMjAnaW5jb21lJyUzQXklMkMlMjAnbmFtZSclM0ElMjB6JTdEKSUwQSUwQSUyMyUyMGNhbGN1bGVyJTIwbGUlMjByZXZlbnUlMjBtb3llbiUyMHBhciUyMHByb2Zlc3Npb24lMEElMjIlMjIlMjIlMEFwcmludChwaXBlKHR4dCUyQyUyMG51bV9yZXR1cm5fc2VxdWVuY2VzJTNEMSklNUIwJTVEJTVCJTIyZ2VuZXJhdGVkX3RleHQlMjIlNUQp",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# tableau de données avec profession, revenu et nom
df = pd.DataFrame({&#x27;profession&#x27;: x, &#x27;income&#x27;:y, &#x27;name&#x27;: z})

# calculer le revenu moyen par profession
&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}}),el=new C({props:{code:"JTIzJTIwdGFibGVhdSUyMGRlJTIwZG9ubiVDMyVBOWVzJTIwYXZlYyUyMHByb2Zlc3Npb24lMkMlMjByZXZlbnUlMjBldCUyMG5vbSUwQWRmJTIwJTNEJTIwcGQuRGF0YUZyYW1lKCU3Qidwcm9mZXNzaW9uJyUzQSUyMHglMkMlMjAnaW5jb21lJyUzQXklMkMlMjAnbmFtZSclM0ElMjB6JTdEKSUwQSUwQSUyMyUyMGNhbGN1bGVyJTIwbGUlMjByZXZlbnUlMjBtb3llbiUyMHBhciUyMHByb2Zlc3Npb24lMEFwcm9mZXNzaW9uJTIwJTNEJTIwZGYuZ3JvdXBieSglNUIncHJvZmVzc2lvbiclNUQpLm1lYW4oKQ==",highlighted:`<span class="hljs-comment"># tableau de données avec profession, revenu et nom</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"># calculer le revenu moyen par profession</span>
profession = df.groupby([<span class="hljs-string">&#x27;profession&#x27;</span>]).mean()`,wrap:!1}}),ll=new C({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTBBJTIzJTIwaW1wb3J0JTIwcmFuZG9tJTIwZm9yZXN0JTIwcmVncmVzc29yJTIwZnJvbSUyMHNjaWtpdC1sZWFybiUwQWZyb20lMjBza2xlYXJuLmVuc2VtYmxlJTIwaW1wb3J0JTIwUmFuZG9tRm9yZXN0UmVncmVzc29yJTBBJTBBJTIzJTIwZW50cmElQzMlQUVuZW1lbnQlMjBkdSUyMG1vZCVDMyVBOGxlJTIwZGUlMjBmb3IlQzMlQUF0JTIwYWwlQzMlQTlhdG9pcmUlMjBhdmVjJTIwMzAwJTIwZXN0aW1hdGV1cnMlMjBzdXIlMjBYJTJDJTIweSUyMCUzQSUwQSUyMiUyMiUyMiUwQXByaW50KHBpcGUodHh0JTJDJTIwbnVtX3JldHVybl9zZXF1ZW5jZXMlM0QxKSU1QjAlNUQlNUIlMjJnZW5lcmF0ZWRfdGV4dCUyMiU1RCk=",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;
# import random forest regressor from scikit-learn
from sklearn.ensemble import RandomForestRegressor

# entraînement du modèle de forêt aléatoire avec 300 estimateurs sur 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}}),nl=new C({props:{code:"JTIzJTIwaW1wb3J0JTIwcmFuZG9tJTIwZm9yZXN0JTIwcmVncmVzc29yJTIwZnJvbSUyMHNjaWtpdC1sZWFybiUwQWZyb20lMjBza2xlYXJuLmVuc2VtYmxlJTIwaW1wb3J0JTIwUmFuZG9tRm9yZXN0UmVncmVzc29yJTBBJTBBJTIzJTIwZW50cmElQzMlQUVuZW1lbnQlMjBkdSUyMG1vZCVDMyVBOGxlJTIwZGUlMjBmb3IlQzMlQUF0JTIwYWwlQzMlQTlhdG9pcmUlMjBhdmVjJTIwMzAwJTIwZXN0aW1hdGV1cnMlMjBzdXIlMjBYJTJDJTIweSUyMCUzQSUwQXJmJTIwJTNEJTIwUmFuZG9tRm9yZXN0UmVncmVzc29yKG5fZXN0aW1hdG9ycyUzRDMwMCUyQyUyMHJhbmRvbV9zdGF0ZSUzRHJhbmRvbV9zdGF0ZSUyQyUyMG1heF9kZXB0aCUzRDMpJTBBcmYuZml0KFglMkMlMjB5KSUwQXJm",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"># entraînement du modèle de forêt aléatoire avec 300 estimateurs sur 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 Kn(e,r){return e[0]==="tf"?Rt:zt}let mn=Kn(I),ts=mn(I),R=I[0]==="pt"&&ot(I);return tl=new Ut({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter7/6.mdx"}}),{c(){n=j("meta"),i=o(),a=j("p"),c=o(),y(_.$$.fragment),f=o(),y(Z.$$.fragment),k=o(),m.c(),h=o(),$=j("p"),$.innerHTML=x,W=o(),X=j("p"),X.innerHTML=g,G=o(),y(E.$$.fragment),qe=o(),N=j("p"),N.innerHTML=bl,He=o(),B=j("iframe"),Fe=o(),Q=j("iframe"),Ye=o(),q=j("p"),q.innerHTML=cs,ee=o(),y(Qe.$$.fragment),Se=o(),H=j("p"),H.innerHTML=ms,se=o(),Xe=j("p"),Xe.innerHTML=ds,le=o(),y(ne.$$.fragment),te=o(),ze=j("p"),ze.textContent=ys,ae=o(),y(re.$$.fragment),oe=o(),y(Re.$$.fragment),De=o(),F=j("p"),F.innerHTML=Us,pe=o(),y(We.$$.fragment),Le=o(),Y=j("p"),Y.textContent=Js,ie=o(),y(ue.$$.fragment),Me=o(),y(Ae.$$.fragment),Ke=o(),S=j("p"),S.textContent=Ts,ce=o(),Ve=j("p"),Ve.innerHTML=js,me=o(),y(de.$$.fragment),ye=o(),y(Ue.$$.fragment),Je=o(),y(he.$$.fragment),Pe=o(),D=j("p"),D.textContent=ws,Te=o(),y(xe.$$.fragment),Oe=o(),y(L.$$.fragment),bs=o(),je=j("p"),je.innerHTML=Ee,es=o(),y(K.$$.fragment),ss=o(),y(P.$$.fragment),fs=o(),we=j("p"),we.innerHTML=Ne,ls=o(),O=j("p"),O.innerHTML=Cl,ns=o(),V=j("div"),V.innerHTML=hs,be=o(),fe=j("p"),fe.textContent=s,d=o(),y(Cs.$$.fragment),_l=o(),y(Is.$$.fragment),gl=o(),_s=j("p"),_s.innerHTML=fn,vl=o(),gs=j("p"),gs.innerHTML=hn,kl=o(),y(vs.$$.fragment),Zl=o(),y(ks.$$.fragment),$l=o(),Zs=j("p"),Zs.innerHTML=Cn,Gl=o(),$s=j("p"),$s.textContent=In,Bl=o(),y(as.$$.fragment),Ql=o(),y(Gs.$$.fragment),Xl=o(),Bs=j("p"),Bs.innerHTML=_n,zl=o(),Ie.c(),cl=o(),Qs=j("p"),Qs.innerHTML=gn,Rl=o(),Xs=j("p"),Xs.innerHTML=vn,Wl=o(),ge.c(),ml=o(),zs=j("p"),zs.textContent=kn,Al=o(),y(Rs.$$.fragment),Vl=o(),ke.c(),dl=o(),Ws=j("p"),Ws.textContent=Zn,xl=o(),z&&z.c(),yl=o(),y(rs.$$.fragment),El=o(),As=j("p"),As.innerHTML=$n,Nl=o(),y(Vs.$$.fragment),ql=o(),xs=j("p"),xs.innerHTML=Gn,Hl=o(),Es=j("p"),Es.innerHTML=Bn,Fl=o(),y(Ns.$$.fragment),Yl=o(),$e.c(),Ul=o(),y(os.$$.fragment),Sl=o(),y(ps.$$.fragment),Dl=o(),y(qs.$$.fragment),Ll=o(),Hs=j("p"),Hs.innerHTML=Qn,Kl=o(),Be.c(),Jl=o(),Fs=j("p"),Fs.textContent=Xn,Pl=o(),y(Ys.$$.fragment),Ol=o(),y(Ss.$$.fragment),en=o(),Ds=j("p"),Ds.innerHTML=zn,sn=o(),y(Ls.$$.fragment),ln=o(),y(Ks.$$.fragment),nn=o(),Ps=j("p"),Ps.innerHTML=Rn,tn=o(),y(Os.$$.fragment),an=o(),y(el.$$.fragment),rn=o(),sl=j("p"),sl.innerHTML=Wn,on=o(),y(ll.$$.fragment),pn=o(),y(nl.$$.fragment),un=o(),ts.c(),Tl=o(),R&&R.c(),jl=o(),y(tl.$$.fragment),Mn=o(),Il=j("p"),this.h()},l(e){const r=mt("svelte-u9bgzb",document.head);n=w(r,"META",{name:!0,content:!0}),r.forEach(l),i=p(e),a=w(e,"P",{}),dn(a).forEach(l),c=p(e),U(_.$$.fragment,e),f=p(e),U(Z.$$.fragment,e),k=p(e),m.l(e),h=p(e),$=w(e,"P",{"data-svelte-h":!0}),b($)!=="svelte-uvx8"&&($.innerHTML=x),W=p(e),X=w(e,"P",{"data-svelte-h":!0}),b(X)!=="svelte-10r4re3"&&(X.innerHTML=g),G=p(e),U(E.$$.fragment,e),qe=p(e),N=w(e,"P",{"data-svelte-h":!0}),b(N)!=="svelte-1kzjt1s"&&(N.innerHTML=bl),He=p(e),B=w(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),dn(B).forEach(l),Fe=p(e),Q=w(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),dn(Q).forEach(l),Ye=p(e),q=w(e,"P",{"data-svelte-h":!0}),b(q)!=="svelte-cpd66l"&&(q.innerHTML=cs),ee=p(e),U(Qe.$$.fragment,e),Se=p(e),H=w(e,"P",{"data-svelte-h":!0}),b(H)!=="svelte-1a2r9hi"&&(H.innerHTML=ms),se=p(e),Xe=w(e,"P",{"data-svelte-h":!0}),b(Xe)!=="svelte-18bl5gv"&&(Xe.innerHTML=ds),le=p(e),U(ne.$$.fragment,e),te=p(e),ze=w(e,"P",{"data-svelte-h":!0}),b(ze)!=="svelte-1sgrf6t"&&(ze.textContent=ys),ae=p(e),U(re.$$.fragment,e),oe=p(e),U(Re.$$.fragment,e),De=p(e),F=w(e,"P",{"data-svelte-h":!0}),b(F)!=="svelte-1q65oz8"&&(F.innerHTML=Us),pe=p(e),U(We.$$.fragment,e),Le=p(e),Y=w(e,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-7o94cy"&&(Y.textContent=Js),ie=p(e),U(ue.$$.fragment,e),Me=p(e),U(Ae.$$.fragment,e),Ke=p(e),S=w(e,"P",{"data-svelte-h":!0}),b(S)!=="svelte-1n8fs5f"&&(S.textContent=Ts),ce=p(e),Ve=w(e,"P",{"data-svelte-h":!0}),b(Ve)!=="svelte-1vth0nu"&&(Ve.innerHTML=js),me=p(e),U(de.$$.fragment,e),ye=p(e),U(Ue.$$.fragment,e),Je=p(e),U(he.$$.fragment,e),Pe=p(e),D=w(e,"P",{"data-svelte-h":!0}),b(D)!=="svelte-1jm061f"&&(D.textContent=ws),Te=p(e),U(xe.$$.fragment,e),Oe=p(e),U(L.$$.fragment,e),bs=p(e),je=w(e,"P",{"data-svelte-h":!0}),b(je)!=="svelte-1yt12nn"&&(je.innerHTML=Ee),es=p(e),U(K.$$.fragment,e),ss=p(e),U(P.$$.fragment,e),fs=p(e),we=w(e,"P",{"data-svelte-h":!0}),b(we)!=="svelte-l9d6mv"&&(we.innerHTML=Ne),ls=p(e),O=w(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-xtx00h"&&(O.innerHTML=Cl),ns=p(e),V=w(e,"DIV",{class:!0,"data-svelte-h":!0}),b(V)!=="svelte-1mf8pz"&&(V.innerHTML=hs),be=p(e),fe=w(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-1imc09v"&&(fe.textContent=s),d=p(e),U(Cs.$$.fragment,e),_l=p(e),U(Is.$$.fragment,e),gl=p(e),_s=w(e,"P",{"data-svelte-h":!0}),b(_s)!=="svelte-fc9pz2"&&(_s.innerHTML=fn),vl=p(e),gs=w(e,"P",{"data-svelte-h":!0}),b(gs)!=="svelte-18hszus"&&(gs.innerHTML=hn),kl=p(e),U(vs.$$.fragment,e),Zl=p(e),U(ks.$$.fragment,e),$l=p(e),Zs=w(e,"P",{"data-svelte-h":!0}),b(Zs)!=="svelte-1d39f3g"&&(Zs.innerHTML=Cn),Gl=p(e),$s=w(e,"P",{"data-svelte-h":!0}),b($s)!=="svelte-po2cpu"&&($s.textContent=In),Bl=p(e),U(as.$$.fragment,e),Ql=p(e),U(Gs.$$.fragment,e),Xl=p(e),Bs=w(e,"P",{"data-svelte-h":!0}),b(Bs)!=="svelte-blbto7"&&(Bs.innerHTML=_n),zl=p(e),Ie.l(e),cl=p(e),Qs=w(e,"P",{"data-svelte-h":!0}),b(Qs)!=="svelte-167aayv"&&(Qs.innerHTML=gn),Rl=p(e),Xs=w(e,"P",{"data-svelte-h":!0}),b(Xs)!=="svelte-pit40d"&&(Xs.innerHTML=vn),Wl=p(e),ge.l(e),ml=p(e),zs=w(e,"P",{"data-svelte-h":!0}),b(zs)!=="svelte-140ai1o"&&(zs.textContent=kn),Al=p(e),U(Rs.$$.fragment,e),Vl=p(e),ke.l(e),dl=p(e),Ws=w(e,"P",{"data-svelte-h":!0}),b(Ws)!=="svelte-11ecwmv"&&(Ws.textContent=Zn),xl=p(e),z&&z.l(e),yl=p(e),U(rs.$$.fragment,e),El=p(e),As=w(e,"P",{"data-svelte-h":!0}),b(As)!=="svelte-1uvcduu"&&(As.innerHTML=$n),Nl=p(e),U(Vs.$$.fragment,e),ql=p(e),xs=w(e,"P",{"data-svelte-h":!0}),b(xs)!=="svelte-1kdf134"&&(xs.innerHTML=Gn),Hl=p(e),Es=w(e,"P",{"data-svelte-h":!0}),b(Es)!=="svelte-1p5kkdg"&&(Es.innerHTML=Bn),Fl=p(e),U(Ns.$$.fragment,e),Yl=p(e),$e.l(e),Ul=p(e),U(os.$$.fragment,e),Sl=p(e),U(ps.$$.fragment,e),Dl=p(e),U(qs.$$.fragment,e),Ll=p(e),Hs=w(e,"P",{"data-svelte-h":!0}),b(Hs)!=="svelte-106sefv"&&(Hs.innerHTML=Qn),Kl=p(e),Be.l(e),Jl=p(e),Fs=w(e,"P",{"data-svelte-h":!0}),b(Fs)!=="svelte-14oror3"&&(Fs.textContent=Xn),Pl=p(e),U(Ys.$$.fragment,e),Ol=p(e),U(Ss.$$.fragment,e),en=p(e),Ds=w(e,"P",{"data-svelte-h":!0}),b(Ds)!=="svelte-ou5iz8"&&(Ds.innerHTML=zn),sn=p(e),U(Ls.$$.fragment,e),ln=p(e),U(Ks.$$.fragment,e),nn=p(e),Ps=w(e,"P",{"data-svelte-h":!0}),b(Ps)!=="svelte-lwdm7v"&&(Ps.innerHTML=Rn),tn=p(e),U(Os.$$.fragment,e),an=p(e),U(el.$$.fragment,e),rn=p(e),sl=w(e,"P",{"data-svelte-h":!0}),b(sl)!=="svelte-14la55e"&&(sl.innerHTML=Wn),on=p(e),U(ll.$$.fragment,e),pn=p(e),U(nl.$$.fragment,e),un=p(e),ts.l(e),Tl=p(e),R&&R.l(e),jl=p(e),U(tl.$$.fragment,e),Mn=p(e),Il=w(e,"P",{}),dn(Il).forEach(l),this.h()},h(){A(n,"name","hf:doc:metadata"),A(n,"content",Et),tt(B.src,fl="https://course-demos-codeparrot-ds.hf.space")||A(B,"src",fl),A(B,"frameborder","0"),A(B,"height","300"),A(B,"title","Gradio app"),A(B,"class","block dark:hidden container p-0 flex-grow space-iframe"),A(B,"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"),A(B,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),tt(Q.src,hl="https://course-demos-codeparrot-ds-darkmode.hf.space")||A(Q,"src",hl),A(Q,"frameborder","0"),A(Q,"height","300"),A(Q,"title","Gradio app"),A(Q,"class","hidden dark:block container p-0 flex-grow space-iframe"),A(Q,"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"),A(Q,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),A(V,"class","flex justify-center")},m(e,r){dt(document.head,n),t(e,i,r),t(e,a,r),t(e,c,r),J(_,e,r),t(e,f,r),J(Z,e,r),t(e,k,r),al[v].m(e,r),t(e,h,r),t(e,$,r),t(e,W,r),t(e,X,r),t(e,G,r),J(E,e,r),t(e,qe,r),t(e,N,r),t(e,He,r),t(e,B,r),t(e,Fe,r),t(e,Q,r),t(e,Ye,r),t(e,q,r),t(e,ee,r),J(Qe,e,r),t(e,Se,r),t(e,H,r),t(e,se,r),t(e,Xe,r),t(e,le,r),J(ne,e,r),t(e,te,r),t(e,ze,r),t(e,ae,r),J(re,e,r),t(e,oe,r),J(Re,e,r),t(e,De,r),t(e,F,r),t(e,pe,r),J(We,e,r),t(e,Le,r),t(e,Y,r),t(e,ie,r),J(ue,e,r),t(e,Me,r),J(Ae,e,r),t(e,Ke,r),t(e,S,r),t(e,ce,r),t(e,Ve,r),t(e,me,r),J(de,e,r),t(e,ye,r),J(Ue,e,r),t(e,Je,r),J(he,e,r),t(e,Pe,r),t(e,D,r),t(e,Te,r),J(xe,e,r),t(e,Oe,r),J(L,e,r),t(e,bs,r),t(e,je,r),t(e,es,r),J(K,e,r),t(e,ss,r),J(P,e,r),t(e,fs,r),t(e,we,r),t(e,ls,r),t(e,O,r),t(e,ns,r),t(e,V,r),t(e,be,r),t(e,fe,r),t(e,d,r),J(Cs,e,r),t(e,_l,r),J(Is,e,r),t(e,gl,r),t(e,_s,r),t(e,vl,r),t(e,gs,r),t(e,kl,r),J(vs,e,r),t(e,Zl,r),J(ks,e,r),t(e,$l,r),t(e,Zs,r),t(e,Gl,r),t(e,$s,r),t(e,Bl,r),J(as,e,r),t(e,Ql,r),J(Gs,e,r),t(e,Xl,r),t(e,Bs,r),t(e,zl,r),rl[Ce].m(e,r),t(e,cl,r),t(e,Qs,r),t(e,Rl,r),t(e,Xs,r),t(e,Wl,r),ol[_e].m(e,r),t(e,ml,r),t(e,zs,r),t(e,Al,r),J(Rs,e,r),t(e,Vl,r),pl[ve].m(e,r),t(e,dl,r),t(e,Ws,r),t(e,xl,r),z&&z.m(e,r),t(e,yl,r),J(rs,e,r),t(e,El,r),t(e,As,r),t(e,Nl,r),J(Vs,e,r),t(e,ql,r),t(e,xs,r),t(e,Hl,r),t(e,Es,r),t(e,Fl,r),J(Ns,e,r),t(e,Yl,r),il[Ze].m(e,r),t(e,Ul,r),J(os,e,r),t(e,Sl,r),J(ps,e,r),t(e,Dl,r),J(qs,e,r),t(e,Ll,r),t(e,Hs,r),t(e,Kl,r),ul[Ge].m(e,r),t(e,Jl,r),t(e,Fs,r),t(e,Pl,r),J(Ys,e,r),t(e,Ol,r),J(Ss,e,r),t(e,en,r),t(e,Ds,r),t(e,sn,r),J(Ls,e,r),t(e,ln,r),J(Ks,e,r),t(e,nn,r),t(e,Ps,r),t(e,tn,r),J(Os,e,r),t(e,an,r),J(el,e,r),t(e,rn,r),t(e,sl,r),t(e,on,r),J(ll,e,r),t(e,pn,r),J(nl,e,r),t(e,un,r),ts.m(e,r),t(e,Tl,r),R&&R.m(e,r),t(e,jl,r),J(tl,e,r),t(e,Mn,r),t(e,Il,r),cn=!0},p(e,[r]){const Pn={};r&1&&(Pn.fw=e[0]),_.$set(Pn);let yn=v;v=Vn(e),v!==yn&&(us(),M(al[yn],1,1,()=>{al[yn]=null}),is(),m=al[v],m||(m=al[v]=An[v](e),m.c()),u(m,1),m.m(h.parentNode,h));const On={};r&2&&(On.$$scope={dirty:r,ctx:e}),he.$set(On);const et={};r&2&&(et.$$scope={dirty:r,ctx:e}),as.$set(et);let Un=Ce;Ce=En(e),Ce!==Un&&(us(),M(rl[Un],1,1,()=>{rl[Un]=null}),is(),Ie=rl[Ce],Ie||(Ie=rl[Ce]=xn[Ce](e),Ie.c()),u(Ie,1),Ie.m(cl.parentNode,cl));let Jn=_e;_e=qn(e),_e!==Jn&&(us(),M(ol[Jn],1,1,()=>{ol[Jn]=null}),is(),ge=ol[_e],ge||(ge=ol[_e]=Nn[_e](e),ge.c()),u(ge,1),ge.m(ml.parentNode,ml));let Tn=ve;ve=Fn(e),ve!==Tn&&(us(),M(pl[Tn],1,1,()=>{pl[Tn]=null}),is(),ke=pl[ve],ke||(ke=pl[ve]=Hn[ve](e),ke.c()),u(ke,1),ke.m(dl.parentNode,dl)),e[0]==="tf"?z?r&1&&u(z,1):(z=rt(),z.c(),u(z,1),z.m(yl.parentNode,yl)):z&&(us(),M(z,1,1,()=>{z=null}),is());const st={};r&2&&(st.$$scope={dirty:r,ctx:e}),rs.$set(st);let jn=Ze;Ze=Sn(e),Ze!==jn&&(us(),M(il[jn],1,1,()=>{il[jn]=null}),is(),$e=il[Ze],$e||($e=il[Ze]=Yn[Ze](e),$e.c()),u($e,1),$e.m(Ul.parentNode,Ul));const lt={};r&2&&(lt.$$scope={dirty:r,ctx:e}),os.$set(lt);const nt={};r&3&&(nt.$$scope={dirty:r,ctx:e}),ps.$set(nt);let wn=Ge;Ge=Ln(e),Ge!==wn&&(us(),M(ul[wn],1,1,()=>{ul[wn]=null}),is(),Be=ul[Ge],Be||(Be=ul[Ge]=Dn[Ge](e),Be.c()),u(Be,1),Be.m(Jl.parentNode,Jl)),mn!==(mn=Kn(e))&&(ts.d(1),ts=mn(e),ts&&(ts.c(),ts.m(Tl.parentNode,Tl))),e[0]==="pt"?R?r&1&&u(R,1):(R=ot(e),R.c(),u(R,1),R.m(jl.parentNode,jl)):R&&(us(),M(R,1,1,()=>{R=null}),is())},i(e){cn||(u(_.$$.fragment,e),u(Z.$$.fragment,e),u(m),u(E.$$.fragment,e),u(Qe.$$.fragment,e),u(ne.$$.fragment,e),u(re.$$.fragment,e),u(Re.$$.fragment,e),u(We.$$.fragment,e),u(ue.$$.fragment,e),u(Ae.$$.fragment,e),u(de.$$.fragment,e),u(Ue.$$.fragment,e),u(he.$$.fragment,e),u(xe.$$.fragment,e),u(L.$$.fragment,e),u(K.$$.fragment,e),u(P.$$.fragment,e),u(Cs.$$.fragment,e),u(Is.$$.fragment,e),u(vs.$$.fragment,e),u(ks.$$.fragment,e),u(as.$$.fragment,e),u(Gs.$$.fragment,e),u(Ie),u(ge),u(Rs.$$.fragment,e),u(ke),u(z),u(rs.$$.fragment,e),u(Vs.$$.fragment,e),u(Ns.$$.fragment,e),u($e),u(os.$$.fragment,e),u(ps.$$.fragment,e),u(qs.$$.fragment,e),u(Be),u(Ys.$$.fragment,e),u(Ss.$$.fragment,e),u(Ls.$$.fragment,e),u(Ks.$$.fragment,e),u(Os.$$.fragment,e),u(el.$$.fragment,e),u(ll.$$.fragment,e),u(nl.$$.fragment,e),u(R),u(tl.$$.fragment,e),cn=!0)},o(e){M(_.$$.fragment,e),M(Z.$$.fragment,e),M(m),M(E.$$.fragment,e),M(Qe.$$.fragment,e),M(ne.$$.fragment,e),M(re.$$.fragment,e),M(Re.$$.fragment,e),M(We.$$.fragment,e),M(ue.$$.fragment,e),M(Ae.$$.fragment,e),M(de.$$.fragment,e),M(Ue.$$.fragment,e),M(he.$$.fragment,e),M(xe.$$.fragment,e),M(L.$$.fragment,e),M(K.$$.fragment,e),M(P.$$.fragment,e),M(Cs.$$.fragment,e),M(Is.$$.fragment,e),M(vs.$$.fragment,e),M(ks.$$.fragment,e),M(as.$$.fragment,e),M(Gs.$$.fragment,e),M(Ie),M(ge),M(Rs.$$.fragment,e),M(ke),M(z),M(rs.$$.fragment,e),M(Vs.$$.fragment,e),M(Ns.$$.fragment,e),M($e),M(os.$$.fragment,e),M(ps.$$.fragment,e),M(qs.$$.fragment,e),M(Be),M(Ys.$$.fragment,e),M(Ss.$$.fragment,e),M(Ls.$$.fragment,e),M(Ks.$$.fragment,e),M(Os.$$.fragment,e),M(el.$$.fragment,e),M(ll.$$.fragment,e),M(nl.$$.fragment,e),M(R),M(tl.$$.fragment,e),cn=!1},d(e){e&&(l(i),l(a),l(c),l(f),l(k),l(h),l($),l(W),l(X),l(G),l(qe),l(N),l(He),l(B),l(Fe),l(Q),l(Ye),l(q),l(ee),l(Se),l(H),l(se),l(Xe),l(le),l(te),l(ze),l(ae),l(oe),l(De),l(F),l(pe),l(Le),l(Y),l(ie),l(Me),l(Ke),l(S),l(ce),l(Ve),l(me),l(ye),l(Je),l(Pe),l(D),l(Te),l(Oe),l(bs),l(je),l(es),l(ss),l(fs),l(we),l(ls),l(O),l(ns),l(V),l(be),l(fe),l(d),l(_l),l(gl),l(_s),l(vl),l(gs),l(kl),l(Zl),l($l),l(Zs),l(Gl),l($s),l(Bl),l(Ql),l(Xl),l(Bs),l(zl),l(cl),l(Qs),l(Rl),l(Xs),l(Wl),l(ml),l(zs),l(Al),l(Vl),l(dl),l(Ws),l(xl),l(yl),l(El),l(As),l(Nl),l(ql),l(xs),l(Hl),l(Es),l(Fl),l(Yl),l(Ul),l(Sl),l(Dl),l(Ll),l(Hs),l(Kl),l(Jl),l(Fs),l(Pl),l(Ol),l(en),l(Ds),l(sn),l(ln),l(nn),l(Ps),l(tn),l(an),l(rn),l(sl),l(on),l(pn),l(un),l(Tl),l(jl),l(Mn),l(Il)),l(n),T(_,e),T(Z,e),al[v].d(e),T(E,e),T(Qe,e),T(ne,e),T(re,e),T(Re,e),T(We,e),T(ue,e),T(Ae,e),T(de,e),T(Ue,e),T(he,e),T(xe,e),T(L,e),T(K,e),T(P,e),T(Cs,e),T(Is,e),T(vs,e),T(ks,e),T(as,e),T(Gs,e),rl[Ce].d(e),ol[_e].d(e),T(Rs,e),pl[ve].d(e),z&&z.d(e),T(rs,e),T(Vs,e),T(Ns,e),il[Ze].d(e),T(os,e),T(ps,e),T(qs,e),ul[Ge].d(e),T(Ys,e),T(Ss,e),T(Ls,e),T(Ks,e),T(Os,e),T(el,e),T(ll,e),T(nl,e),ts.d(e),R&&R.d(e),T(tl,e)}}}const Et='{"title":"Entraîner un modèle de langage causal à partir de zéro","local":"entraîner-un-modèle-de-langage-causal-à-partir-de-zéro","sections":[{"title":"Collecte des données","local":"collecte-des-données","sections":[],"depth":2},{"title":"Préparation du jeu de données","local":"préparation-du-jeu-de-données","sections":[],"depth":2},{"title":"Initialisation d’un nouveau modèle","local":"initialisation-dun-nouveau-modèle","sections":[],"depth":2},{"title":"Génération de code avec le pipeline","local":"génération-de-code-avec-le-pipeline","sections":[],"depth":2},{"title":"Entraîner avec 🤗 <i> Accelerate </i>","local":"entraîner-avec--i-accelerate-i","sections":[],"depth":2}],"depth":1}';function Nt(I,n,i){let a="pt";return ut(()=>{const c=new URLSearchParams(window.location.search);i(0,a=c.get("fw")||"pt")}),[a]}class Pt extends Mt{constructor(n){super(),ct(this,n,Nt,xt,it,{})}}export{Pt as component};
