import{s as Ua,f as ma,o as oa,n as be}from"../chunks/scheduler.37c15a92.js";import{S as Ta,i as wa,g as j,s as p,r as o,A as ua,h as d,f as e,c as y,j as Ct,u as T,x as b,k as vl,y as ja,a as t,v as w,t as i,b as Js,d as c,w as u,e as ra,m as da,n as ba,p as Us}from"../chunks/index.7cb9c9b8.js";import{T as ms}from"../chunks/Tip.d10b3fc9.js";import{Y as ht}from"../chunks/Youtube.8666c400.js";import{C as h}from"../chunks/CodeBlock.abae2786.js";import{C as Ja}from"../chunks/CourseFloatingBanner.df82c153.js";import{F as fa}from"../chunks/FrameworkSwitchCourse.97630871.js";import{H as de,E as Ca}from"../chunks/getInferenceSnippets.c47ae3ea.js";function ha(I){let a,r;return a=new Ja({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ja/chapter7/section6_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section6_tf.ipynb"}]}}),{c(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function Ia(I){let a,r;return a=new Ja({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ja/chapter7/section6_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section6_pt.ipynb"}]}}),{c(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function _a(I){let a,r="言語モデルのプリトレーニングにはしばらく時間がかかります。まず、上記の2つのデータセットに関する部分を一旦コメント化し、サンプルデータに対して学習ループを実行し、学習が一通り正常に終了してモデルが保存されたことを確認することをお勧めします。フォルダを作り忘れたり、学習ループの最後にタイプミスがあったりして、最後のステップで学習が失敗してしまうことほど悔しいことはありません！";return{c(){a=j("p"),a.textContent=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-sryzwi"&&(a.textContent=r)},m(M,J){t(M,a,J)},p:be,d(M){M&&e(a)}}}function ka(I){let a,r="✏️ <strong>あなたの番です！</strong>",M,J,_="コンテキストサイズより小さい断片を全て取り除くことは、今回は小さなコンテキストウィンドウを使っているので大きな問題ではありませんでした。コンテキストサイズを大きくすると（あるいは短いドキュメントのコーパスがある場合）、捨てられる断片の割合も大きくなります。より効率的なデータの準備方法としては、トークン化されたサンプルを <code>eos_token_id</code> トークンを挟んで一括で連結し、連結したデータに対して断片分割を実行することです。練習として、その方法を利用するために <code>tokenize()</code> 関数を修正してください。トークン ID の完全なシーケンスを取得するために、 <code>truncation=False</code> を設定し、トークナイザーの他の引数を削除する必要があることに注意してください。";return{c(){a=j("p"),a.innerHTML=r,M=p(),J=j("p"),J.innerHTML=_},l(f){a=d(f,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1r8coal"&&(a.innerHTML=r),M=y(f),J=d(f,"P",{"data-svelte-h":!0}),b(J)!=="svelte-1iulnp1"&&(J.innerHTML=_)},m(f,G){t(f,a,G),t(f,M,G),t(f,J,G)},p:be,d(f){f&&(e(a),e(M),e(J))}}}function Za(I){let a,r,M,J="この構成で、新しいモデルをロードすることができます。これは <code>from_pretrained()</code> 関数を使わない最初の例であることに注意してください。なぜなら、実際には自分自身でモデルを初期化しているからです。",_,f,G,$,Z;return a=new h({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 h({props:{code:"bW9kZWwlMjAlM0QlMjBURkdQVDJMTUhlYWRNb2RlbChjb25maWcpJTBBbW9kZWwobW9kZWwuZHVtbXlfaW5wdXRzKSUyMCUyMCUyMyUyMEJ1aWxkcyUyMHRoZSUyMG1vZGVsJTBBbW9kZWwuc3VtbWFyeSgp",highlighted:`model = TFGPT2LMHeadModel(config)
model(model.dummy_inputs)  <span class="hljs-comment"># Builds the model</span>
model.summary()`,wrap:!1}}),$=new h({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(){o(a.$$.fragment),r=p(),M=j("p"),M.innerHTML=J,_=p(),o(f.$$.fragment),G=p(),o($.$$.fragment)},l(U){T(a.$$.fragment,U),r=y(U),M=d(U,"P",{"data-svelte-h":!0}),b(M)!=="svelte-glw18s"&&(M.innerHTML=J),_=y(U),T(f.$$.fragment,U),G=y(U),T($.$$.fragment,U)},m(U,C){w(a,U,C),t(U,r,C),t(U,M,C),t(U,_,C),w(f,U,C),t(U,G,C),w($,U,C),Z=!0},i(U){Z||(c(a.$$.fragment,U),c(f.$$.fragment,U),c($.$$.fragment,U),Z=!0)},o(U){i(a.$$.fragment,U),i(f.$$.fragment,U),i($.$$.fragment,U),Z=!1},d(U){U&&(e(r),e(M),e(_),e(G)),u(a,U),u(f,U),u($,U)}}}function $a(I){let a,r,M,J="この構成で、新しいモデルをロードすることができます。これは <code>from_pretrained()</code> 関数を使わない最初の例であることに注意してください。なぜなら、実際には自分自身でモデルを初期化しているからです。",_,f,G,$,Z;return a=new h({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 h({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}}),$=new h({props:{code:"R1BULTIlMjBzaXplJTNBJTIwMTI0LjJNJTIwcGFyYW1ldGVycw==",highlighted:'GPT-<span class="hljs-number">2</span> size: <span class="hljs-number">124.2</span>M parameters',wrap:!1}}),{c(){o(a.$$.fragment),r=p(),M=j("p"),M.innerHTML=J,_=p(),o(f.$$.fragment),G=p(),o($.$$.fragment)},l(U){T(a.$$.fragment,U),r=y(U),M=d(U,"P",{"data-svelte-h":!0}),b(M)!=="svelte-glw18s"&&(M.innerHTML=J),_=y(U),T(f.$$.fragment,U),G=y(U),T($.$$.fragment,U)},m(U,C){w(a,U,C),t(U,r,C),t(U,M,C),t(U,_,C),w(f,U,C),t(U,G,C),w($,U,C),Z=!0},i(U){Z||(c(a.$$.fragment,U),c(f.$$.fragment,U),c($.$$.fragment,U),Z=!0)},o(U){i(a.$$.fragment,U),i(f.$$.fragment,U),i($.$$.fragment,U),Z=!1},d(U){U&&(e(r),e(M),e(_),e(G)),u(a,U),u(f,U),u($,U)}}}function Ga(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function Xa(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function Ba(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function ga(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function ca(I){let a,r="あとは <code>to_tf_dataset()</code> メソッドを使って、上で作成したデータコレーターでデータセットをTensorFlowのデータセットに変換すればよいでしょう。",M,J,_;return J=new h({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0JTVCJTIydHJhaW4lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDMyJTJDJTBBKSUwQXRmX2V2YWxfZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0JTVCJTIydmFsaWQlMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RGYWxzZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QzMiUyQyUwQSk=",highlighted:`tf_train_dataset = tokenized_dataset[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=<span class="hljs-number">32</span>,
)
tf_eval_dataset = tokenized_dataset[<span class="hljs-string">&quot;valid&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">False</span>,
    batch_size=<span class="hljs-number">32</span>,
)`,wrap:!1}}),{c(){a=j("p"),a.innerHTML=r,M=p(),o(J.$$.fragment)},l(f){a=d(f,"P",{"data-svelte-h":!0}),b(a)!=="svelte-eixxt5"&&(a.innerHTML=r),M=y(f),T(J.$$.fragment,f)},m(f,G){t(f,a,G),t(f,M,G),w(J,f,G),_=!0},i(f){_||(c(J.$$.fragment,f),_=!0)},o(f){i(J.$$.fragment,f),_=!1},d(f){f&&(e(a),e(M)),u(J,f)}}}function Ra(I){let a,r="⚠️ 入力とラベルの位置をずらすのはモデル内部で行われるので、データコレーターは入力をコピーしてラベルを作成するだけです。";return{c(){a=j("p"),a.textContent=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-zxlbo9"&&(a.textContent=r)},m(M,J){t(M,a,J)},p:be,d(M){M&&e(a)}}}function Qa(I){let a,r="あとは学習用ハイパーパラメータを設定し、<code>compile()</code>と<code>fit()</code>を呼び出すだけです。ここでは、学習の安定性を向上させるために、ウォームアップを伴う学習率スケジュールを使用することにします。",M,J,_,f,G="あとは <code>model.fit()</code> を呼び出して、学習が終了するのを待つだけです。トレーニングセット全体かその一部分だけかにもよりますが、それぞれ20時間、2時間かかりますので、コーヒーでも飲みながらお好きな本を読んでゆっくり待ちましょう。学習が完了したら、モデルとトークナイザーをハブにプッシュします。",$,Z,U;return J=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFpbXBvcnQlMjB0ZW5zb3JmbG93JTIwYXMlMjB0ZiUwQSUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUwQW9wdGltaXplciUyQyUyMHNjaGVkdWxlJTIwJTNEJTIwY3JlYXRlX29wdGltaXplciglMEElMjAlMjAlMjAlMjBpbml0X2xyJTNENWUtNSUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QxXzAwMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbl9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheV9yYXRlJTNEMC4wMSUyQyUwQSklMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRG9wdGltaXplciklMEElMEElMjMlMjBUcmFpbiUyMGluJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

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

<span class="hljs-comment"># Train in mixed-precision float16</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)`,wrap:!1}}),Z=new h({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(){a=j("p"),a.innerHTML=r,M=p(),o(J.$$.fragment),_=p(),f=j("p"),f.innerHTML=G,$=p(),o(Z.$$.fragment)},l(C){a=d(C,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1qjytix"&&(a.innerHTML=r),M=y(C),T(J.$$.fragment,C),_=y(C),f=d(C,"P",{"data-svelte-h":!0}),b(f)!=="svelte-2ge9e9"&&(f.innerHTML=G),$=y(C),T(Z.$$.fragment,C)},m(C,X){t(C,a,X),t(C,M,X),w(J,C,X),t(C,_,X),t(C,f,X),t(C,$,X),w(Z,C,X),U=!0},i(C){U||(c(J.$$.fragment,C),c(Z.$$.fragment,C),U=!0)},o(C){i(J.$$.fragment,C),i(Z.$$.fragment,C),U=!1},d(C){C&&(e(a),e(M),e(_),e(f),e($)),u(J,C),u(Z,C)}}}function Wa(I){let a,r="あとは学習用の引数を設定し、<code>Trainer</code> を起動するだけです。ここでは、いくつかのウォームアップを伴う cosine 学習率のスケジュールと、256 の有効バッチサイズ (<code>per_device_train_batch_size</code> * <code>gradient_accumulation_steps</code>) を使用することにします。勾配累積は、単一のバッチがメモリに収まらない場合に使用され、いくつかの前進/後退パスを通して勾配を増分的に構築します。これは、🤗 Accelerateで学習ループを作成するときに実際に見ることができます。",M,J,_,f,G="あとは <code>Trainer</code> を起動し、学習が終了するのを待つだけです。トレーニングセット全体かその一部分だけかにもよりますが、それぞれ20時間、2時間かかりますので、コーヒーでも飲んでお好きな本をゆっくり読んでください。",$,Z,U,C,X="学習が完了したら、モデルとトークナイザーをHubにプッシュすることができます。",V,z,R;return J=new h({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}}),Z=new h({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),z=new h({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:"trainer.push_to_hub()",wrap:!1}}),{c(){a=j("p"),a.innerHTML=r,M=p(),o(J.$$.fragment),_=p(),f=j("p"),f.innerHTML=G,$=p(),o(Z.$$.fragment),U=p(),C=j("p"),C.textContent=X,V=p(),o(z.$$.fragment)},l(k){a=d(k,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1338ehg"&&(a.innerHTML=r),M=y(k),T(J.$$.fragment,k),_=y(k),f=d(k,"P",{"data-svelte-h":!0}),b(f)!=="svelte-1pxsf1z"&&(f.innerHTML=G),$=y(k),T(Z.$$.fragment,k),U=y(k),C=d(k,"P",{"data-svelte-h":!0}),b(C)!=="svelte-e5rx2z"&&(C.textContent=X),V=y(k),T(z.$$.fragment,k)},m(k,B){t(k,a,B),t(k,M,B),w(J,k,B),t(k,_,B),t(k,f,B),t(k,$,B),w(Z,k,B),t(k,U,B),t(k,C,B),t(k,V,B),w(z,k,B),R=!0},i(k){R||(c(J.$$.fragment,k),c(Z.$$.fragment,k),c(z.$$.fragment,k),R=!0)},o(k){i(J.$$.fragment,k),i(Z.$$.fragment,k),i(z.$$.fragment,k),R=!1},d(k){k&&(e(a),e(M),e(_),e(f),e($),e(U),e(C),e(V)),u(J,k),u(Z,k),u(z,k)}}}function za(I){let a,r="✏️ <strong>あなたの番です！</strong> 生のテキストからGPT-2の学習まで、<code>TrainingArguments</code>に加えて、約30行のコードを作成するだけで済みました。あなた自身のデータセットで試してみて、良い結果が得られるかどうか確認してみてください!";return{c(){a=j("p"),a.innerHTML=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1k5te5e"&&(a.innerHTML=r)},m(M,J){t(M,a,J)},p:be,d(M){M&&e(a)}}}function Va(I){let a,r='💡 もし、複数のGPUを搭載したマシンを利用できるのであれば、<code>MirroredStrategy</code>コンテキストを使って、学習を大幅にスピードアップさせることができます。そのためには <code>tf.distribute.MirroredStrategy</code> オブジェクトを作成し、 <code>to_tf_dataset</code> コマンド、モデルの作成、 <code>fit()</code> の呼び出しがすべて <code>scope()</code> コンテキストで実行されることを確認する必要があります。これに関するドキュメントは<a href="https://www.tensorflow.org/guide/distributed_training#use_tfdistributestrategy_with_keras_modelfit" rel="nofollow">こちら</a>で見ることができます。';return{c(){a=j("p"),a.innerHTML=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1wd4iqv"&&(a.innerHTML=r)},m(M,J){t(M,a,J)},d(M){M&&e(a)}}}function Ea(I){let a,r="💡 もし、複数のGPUを搭載したマシンを利用できるのであれば、そこでコードを実行してみてください。トレーナー`は自動的に複数のマシンを管理するため、学習速度が飛躍的に向上します。";return{c(){a=j("p"),a.textContent=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-1j3fjmg"&&(a.textContent=r)},m(M,J){t(M,a,J)},d(M){M&&e(a)}}}function Aa(I){let a;function r(_,f){return _[0]==="pt"?Ea:Va}let M=r(I),J=M(I);return{c(){J.c(),a=ra()},l(_){J.l(_),a=ra()},m(_,f){J.m(_,f),t(_,a,f)},p(_,f){M!==(M=r(_))&&(J.d(1),J=M(_),J&&(J.c(),J.m(a.parentNode,a)))},d(_){_&&e(a),J.d(_)}}}function va(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function Na(I){let a,r;return a=new h({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(){o(a.$$.fragment)},l(M){T(a.$$.fragment,M)},m(M,J){w(a,M,J),r=!0},i(M){r||(c(a.$$.fragment,M),r=!0)},o(M){i(a.$$.fragment,M),r=!1},d(M){u(a,M)}}}function xa(I){let a,r="これらのいくつかの例を見ると、モデルはPythonデータサイエンス関連の構文の一部を学習したようです（もちろん、実世界にモデルを展開する前にもっと徹底的に評価する必要があるでしょう）。しかし、あるユースケースに必要なパフォーマンスを達成するために、モデルの学習をよりカスタマイズする必要がある場合もあります。例えば、バッチサイズを動的に更新したい場合や、適切でないサンプルをその場でスキップする条件付き学習ループを持ちたい場合はどうすればよいでしょうか。一つの選択肢は <code>Trainer</code> をサブクラス化して必要な変更を加えることですが、時には学習ループを一から書いた方がシンプルな場合もあります。そこで🤗 Accelerateの出番です。";return{c(){a=j("p"),a.innerHTML=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-k8o77k"&&(a.innerHTML=r)},m(M,J){t(M,a,J)},d(M){M&&e(a)}}}function Ya(I){let a,r="これらのいくつかの例を見ると、このモデルはPythonを使ったデータサイエンス関連の構文の一部を学習したようです。もちろん、このモデルを実世界に展開する前に、もっと徹底的に評価する必要がありますが、それでもこれは印象的なプロトタイプです。";return{c(){a=j("p"),a.textContent=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-49ysk0"&&(a.textContent=r)},m(M,J){t(M,a,J)},d(M){M&&e(a)}}}function ia(I){let a,r,M,J="これまで <code>Trainer</code> を使ってモデルを学習する方法を見てきました。これはある程度カスタマイズすることができますが、時には学習ループを完全に制御したい場合や、派手な変更を加えたい場合があります。この場合、🤗 Accelerateは素晴らしい選択肢です。このセクションでは、それを使ってモデルを訓練する手順を説明します。さらに面白くするために、学習ループに一工夫してみましょう。",_,f,G,$,Z="私達は主にデータサイエンスライブラリの自動補完に興味があるので、これらのライブラリをより多く使用する学習サンプルに重きを置くことは理にかなっています。これらのサンプルは <code>plt</code>, <code>pd</code>, <code>sk</code>, <code>fit</code>, <code>predict</code> といったキーワードで簡単に識別できます。これらは <code>matplotlib.pyplot</code>, <code>pandas</code>, <code>sklearn</code> で最も頻繁に使用される import 名で、後者の fit/predict のパターンも同様です。これらをそれぞれ1つのトークンとして表現すれば、入力列の中にそれらがあるかどうかを簡単にチェックすることができます。トークンは半角スペースを前に持つことができるので、トークナイザーの語彙の中にそれらのがあるかどうかもチェックすることになります。動作確認のため、複数のトークンに分割されるはずのテストトークンを1つ追加してみます。",U,C,X,V,z,R,k="素晴らしい！うまくいったようですね。",B,E,os="入力シーケンス、ロジット、そして先ほど選択したキートークンを入力とするカスタム損失関数を書くことができます。まず、ロジットと入力の位置を合わせる必要があります。入力列を右に1つシフトしたものがラベルとなり、次のトークンが現在のトークンのラベルとなります。これは入力シーケンスの2番目のトークンからラベルを開始することで実現できます。なぜなら、モデルは最初のトークンに対していずれにしても予測を行わないからです。そして、最後のロジットを切り捨てます。なぜなら、全入力シーケンスの後には対応するラベルがないからです。これでサンプルごとの損失を計算し、各サンプルにおける全てのキーワードの出現をカウントすることができます。最後に、出現回数を重みとして、全サンプルの加重平均を計算します。キーワードを持たないサンプルを全て捨てたくないので、重みに1を加えます。",nl,Xl,Nl,g,fe="この素晴らしい新しい損失関数を使った学習を始める前に、いくつかのことを準備する必要があります。",xl,A,Ce="<li>データをロードしてバッチにするためのデータローダーが必要です。</li> <li>重み減衰のパラメータを設定する必要があります。</li> <li>時折、評価を行いたいので、評価コードを関数でラップするのは理にかなっています。</li>",Yl,v,Ts=`まずはデータローダーから始めましょう。
データセットのフォーマットを <code>&quot;torch&quot;</code> に設定するだけで、あとは適切なバッチサイズで PyTorch の <code>DataLoader</code> に渡せばいいのです。`,Ml,Bl,Fl,N,he=`次に、パラメータをグループ化し、オプティマイザがどのパラメータが追加の重み減衰を得るかを知ることができるようにします。通常、すべてのバイアスとLayerNormの重み項は、この対象から除外されます。
以下のようになります。`,Hl,x,Sl,Y,Ie="トレーニング中に定期的に検証セットでモデルを評価したいので、そのための関数も書いておきましょう。この関数は、評価用データローダを実行し、プロセス間の損失をすべて収集するだけです。",ql,F,Dl,H,ws='<code>evaluate()</code>関数により、損失と<a href="/course/ja/chapter7/3">パープレキシティ</a>を一定時間ごとに報告することができます。次に、もう一度ゼロから学習するために、モデルを再定義します。',pl,gl,Ll,S,us="次に、先ほどの関数を使って、重み減衰のパラメータを分割し、オプティマイザを定義します。",yl,Rl,Kl,q,js="それでは、モデル、オプティマイザ、データローダを準備し、トレーニングを開始しましょう。",rl,cl,il,Ql,Pl,D,_e="これで <code>train_dataloader</code> を <code>accelerator.prepare()</code> に送ったので、その長さを用いて学習ステップ数を計算することができます。このメソッドはデータローダーの長さを変更するので、常にデータローダーを準備した後に行う必要があることを忘れないでください。ここでは、学習率から0までの古典的な線形スケジュールを使用します。",Ol,L,ls,K,ds="最後に、私たちのモデルをハブにプッシュするために、作業フォルダに <code>Repository</code> オブジェクトを作成する必要があります。まず、ハギング フェイス ハブ にログインしてください（まだログインしていない場合）。モデルに付与したいモデル ID からリポジトリ名を決定します（<code>repo_name</code> を自由に置き換えてください。これはユーザー名を含む必要があり、関数 <code>get_full_repo_name()</code> が行っている事です)。",tl,Jl,Ul,Wl,ss,P,bs="そして、そのリポジトリをローカルフォルダーにクローンすることができます。すでに存在するのであれば、このローカルフォルダーは作業中のリポジトリの既存のクローンであるべきです。",ml,ol,Tl,zl,fs="これで <code>repo.push_to_hub()</code> メソッドを呼び出すことで、<code>output_dir</code> に保存したものをアップロードできるようになりました。これにより、各エポック終了時に中間モデルをアップロードすることができます。",wl,ul,Vl="学習する前に、評価関数が正しく動作するかどうか、簡単なテストを実行してみましょう。",es,O,Cs,jl,dl,El,hs="損失とパープレキシティは非常に高い値ですが、まだモデルを訓練していないので驚くことではありません。これで、学習スクリプトの核となる部分、学習ループを書く準備が整いました。学習ループでは、データローダーを繰り返し処理し、そのバッチをモデルに渡します。ロジットを取得することで、独自の損失関数を評価することができます。損失は勾配累積のステップ数でスケーリングし、より多くのステップを集約する際に大きな損失が生じないようにします。また、最適化する前に、収束を良くするために勾配を切り取ります。最後に、数ステップごとに、新しい <code>evaluate()</code> 関数を用いて、評価セットでモデルを評価します。",al,Al,ts,ll,ke=`これで完了です。
貴方はGPT-2のような因果言語モデルのためのカスタム学習ループを作成できるようになり、更にニーズに合わせてカスタマイズすることができます。`,as,sl,ns,el,Ms;return a=new de({props:{title:"🤗 Accelerate を使ったトレーニング",local:"-accelerate-を使ったトレーニング",headingTag:"h2"}}),f=new ht({props:{id:"Hm8_PgVTFuc"}}),C=new h({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}}),V=new h({props:{code:"J0tleXdvcmQlMjBoYXMlMjBub3QlMjBzaW5nbGUlMjB0b2tlbiUzQSUyMHRlc3R0ZXN0Jw==",highlighted:'<span class="hljs-string">&#x27;Keyword has not single token: testtest&#x27;</span>',wrap:!1}}),Xl=new h({props:{code:"ZnJvbSUyMHRvcmNoLm5uJTIwaW1wb3J0JTIwQ3Jvc3NFbnRyb3B5TG9zcyUwQWltcG9ydCUyMHRvcmNoJTBBJTBBJTBBZGVmJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhpbnB1dHMlMkMlMjBsb2dpdHMlMkMlMjBrZXl0b2tlbl9pZHMlMkMlMjBhbHBoYSUzRDEuMCklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBTaGlmdCUyMHNvJTIwdGhhdCUyMHRva2VucyUyMCUzQyUyMG4lMjBwcmVkaWN0JTIwbiUwQSUyMCUyMCUyMCUyMHNoaWZ0X2xhYmVscyUyMCUzRCUyMGlucHV0cyU1Qi4uLiUyQyUyMDElM0ElNUQuY29udGlndW91cygpJTBBJTIwJTIwJTIwJTIwc2hpZnRfbG9naXRzJTIwJTNEJTIwbG9naXRzJTVCLi4uJTJDJTIwJTNBLTElMkMlMjAlM0ElNUQuY29udGlndW91cygpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwcGVyLXRva2VuJTIwbG9zcyUwQSUyMCUyMCUyMCUyMGxvc3NfZmN0JTIwJTNEJTIwQ3Jvc3NFbnRyb3B5TG9zcyhyZWR1Y2UlM0RGYWxzZSklMEElMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwbG9zc19mY3Qoc2hpZnRfbG9naXRzLnZpZXcoLTElMkMlMjBzaGlmdF9sb2dpdHMuc2l6ZSgtMSkpJTJDJTIwc2hpZnRfbGFiZWxzLnZpZXcoLTEpKSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlc2l6ZSUyMGFuZCUyMGF2ZXJhZ2UlMjBsb3NzJTIwcGVyJTIwc2FtcGxlJTBBJTIwJTIwJTIwJTIwbG9zc19wZXJfc2FtcGxlJTIwJTNEJTIwbG9zcy52aWV3KHNoaWZ0X2xvZ2l0cy5zaXplKDApJTJDJTIwc2hpZnRfbG9naXRzLnNpemUoMSkpLm1lYW4oYXhpcyUzRDEpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwYW5kJTIwc2NhbGUlMjB3ZWlnaHRpbmclMEElMjAlMjAlMjAlMjB3ZWlnaHRzJTIwJTNEJTIwdG9yY2guc3RhY2soJTVCKGlucHV0cyUyMCUzRCUzRCUyMGt0KS5mbG9hdCgpJTIwZm9yJTIwa3QlMjBpbiUyMGtleXRva2VuX2lkcyU1RCkuc3VtKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF4aXMlM0QlNUIwJTJDJTIwMiU1RCUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjB3ZWlnaHRzJTIwJTNEJTIwYWxwaGElMjAqJTIwKDEuMCUyMCUyQiUyMHdlaWdodHMpJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsYXRlJTIwd2VpZ2h0ZWQlMjBhdmVyYWdlJTBBJTIwJTIwJTIwJTIwd2VpZ2h0ZWRfbG9zcyUyMCUzRCUyMChsb3NzX3Blcl9zYW1wbGUlMjAqJTIwd2VpZ2h0cykubWVhbigpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwd2VpZ2h0ZWRfbG9zcw==",highlighted:`<span class="hljs-keyword">from</span> torch.nn <span class="hljs-keyword">import</span> CrossEntropyLoss
<span class="hljs-keyword">import</span> torch


<span class="hljs-keyword">def</span> <span class="hljs-title function_">keytoken_weighted_loss</span>(<span class="hljs-params">inputs, logits, keytoken_ids, alpha=<span class="hljs-number">1.0</span></span>):
    <span class="hljs-comment"># Shift so that tokens &lt; n predict n</span>
    shift_labels = inputs[..., <span class="hljs-number">1</span>:].contiguous()
    shift_logits = logits[..., :-<span class="hljs-number">1</span>, :].contiguous()
    <span class="hljs-comment"># Calculate per-token loss</span>
    loss_fct = CrossEntropyLoss(reduce=<span class="hljs-literal">False</span>)
    loss = loss_fct(shift_logits.view(-<span class="hljs-number">1</span>, shift_logits.size(-<span class="hljs-number">1</span>)), shift_labels.view(-<span class="hljs-number">1</span>))
    <span class="hljs-comment"># Resize and average loss per sample</span>
    loss_per_sample = loss.view(shift_logits.size(<span class="hljs-number">0</span>), shift_logits.size(<span class="hljs-number">1</span>)).mean(axis=<span class="hljs-number">1</span>)
    <span class="hljs-comment"># Calculate and scale weighting</span>
    weights = torch.stack([(inputs == kt).<span class="hljs-built_in">float</span>() <span class="hljs-keyword">for</span> kt <span class="hljs-keyword">in</span> keytoken_ids]).<span class="hljs-built_in">sum</span>(
        axis=[<span class="hljs-number">0</span>, <span class="hljs-number">2</span>]
    )
    weights = alpha * (<span class="hljs-number">1.0</span> + weights)
    <span class="hljs-comment"># Calculate weighted average</span>
    weighted_loss = (loss_per_sample * weights).mean()
    <span class="hljs-keyword">return</span> weighted_loss`,wrap:!1}}),Bl=new h({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}}),x=new h({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}}),F=new h({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}}),gl=new h({props:{code:"bW9kZWwlMjAlM0QlMjBHUFQyTE1IZWFkTW9kZWwoY29uZmlnKQ==",highlighted:"model = GPT2LMHeadModel(config)",wrap:!1}}),Rl=new h({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}}),cl=new h({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}}),Ql=new ms({props:{$$slots:{default:[Fa]},$$scope:{ctx:I}}}),L=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMSUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwbmFtZSUzRCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QxXzAwMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler

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

lr_scheduler = get_scheduler(
    name=<span class="hljs-string">&quot;linear&quot;</span>,
    optimizer=optimizer,
    num_warmup_steps=<span class="hljs-number">1_000</span>,
    num_training_steps=num_training_steps,
)`,wrap:!1}}),Jl=new h({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}}),Wl=new h({props:{code:"J3NndWdnZXIlMkZjb2RlcGFycm90LWRzLWFjY2VsZXJhdGUn",highlighted:'<span class="hljs-string">&#x27;sgugger/codeparrot-ds-accelerate&#x27;</span>',wrap:!1}}),ol=new h({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}}),O=new h({props:{code:"ZXZhbHVhdGUoKQ==",highlighted:"evaluate()",wrap:!1}}),jl=new h({props:{code:"KDEwLjkzNDEyNjg1Mzk0Mjg3MSUyQyUyMDU2MDU3LjE0NDUzMTI1KQ==",highlighted:'(<span class="hljs-number">10.934126853942871</span>, <span class="hljs-number">56057.14453125</span>)',wrap:!1}}),Al=new h({props:{code:"ZnJvbSUyMHRxZG0ubm90ZWJvb2slMjBpbXBvcnQlMjB0cWRtJTBBJTBBZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTIwJTNEJTIwOCUwQWV2YWxfc3RlcHMlMjAlM0QlMjA1XzAwMCUwQSUwQW1vZGVsLnRyYWluKCklMEFjb21wbGV0ZWRfc3RlcHMlMjAlM0QlMjAwJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV90cmFpbl9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RlcCUyQyUyMGJhdGNoJTIwaW4lMjB0cWRtKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVudW1lcmF0ZSh0cmFpbl9kYXRhbG9hZGVyJTJDJTIwc3RhcnQlM0QxKSUyQyUyMHRvdGFsJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTBBJTIwJTIwJTIwJTIwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvZ2l0cyUyMCUzRCUyMG1vZGVsKGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEKS5sb2dpdHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwa2V5dG9rZW5fd2VpZ2h0ZWRfbG9zcyhiYXRjaCU1QiUyMmlucHV0X2lkcyUyMiU1RCUyQyUyMGxvZ2l0cyUyQyUyMGtleXRva2VuX2lkcyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHN0ZXAlMjAlMjUlMjAxMDAlMjAlM0QlM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybHIlMjIlM0ElMjBnZXRfbHIoKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnNhbXBsZXMlMjIlM0ElMjBzdGVwJTIwKiUyMHNhbXBsZXNfcGVyX3N0ZXAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJzdGVwcyUyMiUzQSUyMGNvbXBsZXRlZF9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmxvc3MlMkZ0cmFpbiUyMiUzQSUyMGxvc3MuaXRlbSgpJTIwKiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwbG9zcyUyMCUyRiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBzdGVwJTIwJTI1JTIwZ3JhZGllbnRfYWNjdW11bGF0aW9uX3N0ZXBzJTIwJTNEJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmNsaXBfZ3JhZF9ub3JtXyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjAxLjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21wbGV0ZWRfc3RlcHMlMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAoc3RlcCUyMCUyNSUyMChldmFsX3N0ZXBzJTIwKiUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcykpJTIwJTNEJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV2YWxfbG9zcyUyQyUyMHBlcnBsZXhpdHklMjAlM0QlMjBldmFsdWF0ZSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTdCJTIybG9zcyUyRmV2YWwlMjIlM0ElMjBldmFsX2xvc3MlMkMlMjAlMjJwZXJwbGV4aXR5JTIyJTNBJTIwcGVycGxleGl0eSU3RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMHN0ZXAlMjAlN0JzdGVwJTdEJTIyJTJDJTIwYmxvY2tpbmclM0RGYWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCk=",highlighted:`<span class="hljs-keyword">from</span> tqdm.notebook <span class="hljs-keyword">import</span> tqdm

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

model.train()
completed_steps = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_train_epochs):
    <span class="hljs-keyword">for</span> step, batch <span class="hljs-keyword">in</span> tqdm(
        <span class="hljs-built_in">enumerate</span>(train_dataloader, start=<span class="hljs-number">1</span>), total=num_training_steps
    ):
        logits = model(batch[<span class="hljs-string">&quot;input_ids&quot;</span>]).logits
        loss = keytoken_weighted_loss(batch[<span class="hljs-string">&quot;input_ids&quot;</span>], logits, keytoken_ids)
        <span class="hljs-keyword">if</span> step % <span class="hljs-number">100</span> == <span class="hljs-number">0</span>:
            accelerator.<span class="hljs-built_in">print</span>(
                {
                    <span class="hljs-string">&quot;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}}),sl=new ms({props:{$$slots:{default:[Ha]},$$scope:{ctx:I}}}),el=new ms({props:{$$slots:{default:[Sa]},$$scope:{ctx:I}}}),{c(){o(a.$$.fragment),r=p(),M=j("p"),M.innerHTML=J,_=p(),o(f.$$.fragment),G=p(),$=j("p"),$.innerHTML=Z,U=p(),o(C.$$.fragment),X=p(),o(V.$$.fragment),z=p(),R=j("p"),R.textContent=k,B=p(),E=j("p"),E.textContent=os,nl=p(),o(Xl.$$.fragment),Nl=p(),g=j("p"),g.textContent=fe,xl=p(),A=j("ul"),A.innerHTML=Ce,Yl=p(),v=j("p"),v.innerHTML=Ts,Ml=p(),o(Bl.$$.fragment),Fl=p(),N=j("p"),N.textContent=he,Hl=p(),o(x.$$.fragment),Sl=p(),Y=j("p"),Y.textContent=Ie,ql=p(),o(F.$$.fragment),Dl=p(),H=j("p"),H.innerHTML=ws,pl=p(),o(gl.$$.fragment),Ll=p(),S=j("p"),S.textContent=us,yl=p(),o(Rl.$$.fragment),Kl=p(),q=j("p"),q.textContent=js,rl=p(),o(cl.$$.fragment),il=p(),o(Ql.$$.fragment),Pl=p(),D=j("p"),D.innerHTML=_e,Ol=p(),o(L.$$.fragment),ls=p(),K=j("p"),K.innerHTML=ds,tl=p(),o(Jl.$$.fragment),Ul=p(),o(Wl.$$.fragment),ss=p(),P=j("p"),P.textContent=bs,ml=p(),o(ol.$$.fragment),Tl=p(),zl=j("p"),zl.innerHTML=fs,wl=p(),ul=j("p"),ul.textContent=Vl,es=p(),o(O.$$.fragment),Cs=p(),o(jl.$$.fragment),dl=p(),El=j("p"),El.innerHTML=hs,al=p(),o(Al.$$.fragment),ts=p(),ll=j("p"),ll.textContent=ke,as=p(),o(sl.$$.fragment),ns=p(),o(el.$$.fragment)},l(s){T(a.$$.fragment,s),r=y(s),M=d(s,"P",{"data-svelte-h":!0}),b(M)!=="svelte-t8bvuc"&&(M.innerHTML=J),_=y(s),T(f.$$.fragment,s),G=y(s),$=d(s,"P",{"data-svelte-h":!0}),b($)!=="svelte-1dlw0qh"&&($.innerHTML=Z),U=y(s),T(C.$$.fragment,s),X=y(s),T(V.$$.fragment,s),z=y(s),R=d(s,"P",{"data-svelte-h":!0}),b(R)!=="svelte-1ktdjpp"&&(R.textContent=k),B=y(s),E=d(s,"P",{"data-svelte-h":!0}),b(E)!=="svelte-cfnp9l"&&(E.textContent=os),nl=y(s),T(Xl.$$.fragment,s),Nl=y(s),g=d(s,"P",{"data-svelte-h":!0}),b(g)!=="svelte-1j28rfc"&&(g.textContent=fe),xl=y(s),A=d(s,"UL",{"data-svelte-h":!0}),b(A)!=="svelte-x15gzw"&&(A.innerHTML=Ce),Yl=y(s),v=d(s,"P",{"data-svelte-h":!0}),b(v)!=="svelte-c3xkg4"&&(v.innerHTML=Ts),Ml=y(s),T(Bl.$$.fragment,s),Fl=y(s),N=d(s,"P",{"data-svelte-h":!0}),b(N)!=="svelte-1jsw2o8"&&(N.textContent=he),Hl=y(s),T(x.$$.fragment,s),Sl=y(s),Y=d(s,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-6jly6"&&(Y.textContent=Ie),ql=y(s),T(F.$$.fragment,s),Dl=y(s),H=d(s,"P",{"data-svelte-h":!0}),b(H)!=="svelte-1izuzo9"&&(H.innerHTML=ws),pl=y(s),T(gl.$$.fragment,s),Ll=y(s),S=d(s,"P",{"data-svelte-h":!0}),b(S)!=="svelte-1kl1q1o"&&(S.textContent=us),yl=y(s),T(Rl.$$.fragment,s),Kl=y(s),q=d(s,"P",{"data-svelte-h":!0}),b(q)!=="svelte-20ocpd"&&(q.textContent=js),rl=y(s),T(cl.$$.fragment,s),il=y(s),T(Ql.$$.fragment,s),Pl=y(s),D=d(s,"P",{"data-svelte-h":!0}),b(D)!=="svelte-1fmitt1"&&(D.innerHTML=_e),Ol=y(s),T(L.$$.fragment,s),ls=y(s),K=d(s,"P",{"data-svelte-h":!0}),b(K)!=="svelte-1pe9imq"&&(K.innerHTML=ds),tl=y(s),T(Jl.$$.fragment,s),Ul=y(s),T(Wl.$$.fragment,s),ss=y(s),P=d(s,"P",{"data-svelte-h":!0}),b(P)!=="svelte-18fmna4"&&(P.textContent=bs),ml=y(s),T(ol.$$.fragment,s),Tl=y(s),zl=d(s,"P",{"data-svelte-h":!0}),b(zl)!=="svelte-eo772a"&&(zl.innerHTML=fs),wl=y(s),ul=d(s,"P",{"data-svelte-h":!0}),b(ul)!=="svelte-1pg2ysk"&&(ul.textContent=Vl),es=y(s),T(O.$$.fragment,s),Cs=y(s),T(jl.$$.fragment,s),dl=y(s),El=d(s,"P",{"data-svelte-h":!0}),b(El)!=="svelte-188jn46"&&(El.innerHTML=hs),al=y(s),T(Al.$$.fragment,s),ts=y(s),ll=d(s,"P",{"data-svelte-h":!0}),b(ll)!=="svelte-6y2100"&&(ll.textContent=ke),as=y(s),T(sl.$$.fragment,s),ns=y(s),T(el.$$.fragment,s)},m(s,m){w(a,s,m),t(s,r,m),t(s,M,m),t(s,_,m),w(f,s,m),t(s,G,m),t(s,$,m),t(s,U,m),w(C,s,m),t(s,X,m),w(V,s,m),t(s,z,m),t(s,R,m),t(s,B,m),t(s,E,m),t(s,nl,m),w(Xl,s,m),t(s,Nl,m),t(s,g,m),t(s,xl,m),t(s,A,m),t(s,Yl,m),t(s,v,m),t(s,Ml,m),w(Bl,s,m),t(s,Fl,m),t(s,N,m),t(s,Hl,m),w(x,s,m),t(s,Sl,m),t(s,Y,m),t(s,ql,m),w(F,s,m),t(s,Dl,m),t(s,H,m),t(s,pl,m),w(gl,s,m),t(s,Ll,m),t(s,S,m),t(s,yl,m),w(Rl,s,m),t(s,Kl,m),t(s,q,m),t(s,rl,m),w(cl,s,m),t(s,il,m),w(Ql,s,m),t(s,Pl,m),t(s,D,m),t(s,Ol,m),w(L,s,m),t(s,ls,m),t(s,K,m),t(s,tl,m),w(Jl,s,m),t(s,Ul,m),w(Wl,s,m),t(s,ss,m),t(s,P,m),t(s,ml,m),w(ol,s,m),t(s,Tl,m),t(s,zl,m),t(s,wl,m),t(s,ul,m),t(s,es,m),w(O,s,m),t(s,Cs,m),w(jl,s,m),t(s,dl,m),t(s,El,m),t(s,al,m),w(Al,s,m),t(s,ts,m),t(s,ll,m),t(s,as,m),w(sl,s,m),t(s,ns,m),w(el,s,m),Ms=!0},i(s){Ms||(c(a.$$.fragment,s),c(f.$$.fragment,s),c(C.$$.fragment,s),c(V.$$.fragment,s),c(Xl.$$.fragment,s),c(Bl.$$.fragment,s),c(x.$$.fragment,s),c(F.$$.fragment,s),c(gl.$$.fragment,s),c(Rl.$$.fragment,s),c(cl.$$.fragment,s),c(Ql.$$.fragment,s),c(L.$$.fragment,s),c(Jl.$$.fragment,s),c(Wl.$$.fragment,s),c(ol.$$.fragment,s),c(O.$$.fragment,s),c(jl.$$.fragment,s),c(Al.$$.fragment,s),c(sl.$$.fragment,s),c(el.$$.fragment,s),Ms=!0)},o(s){i(a.$$.fragment,s),i(f.$$.fragment,s),i(C.$$.fragment,s),i(V.$$.fragment,s),i(Xl.$$.fragment,s),i(Bl.$$.fragment,s),i(x.$$.fragment,s),i(F.$$.fragment,s),i(gl.$$.fragment,s),i(Rl.$$.fragment,s),i(cl.$$.fragment,s),i(Ql.$$.fragment,s),i(L.$$.fragment,s),i(Jl.$$.fragment,s),i(Wl.$$.fragment,s),i(ol.$$.fragment,s),i(O.$$.fragment,s),i(jl.$$.fragment,s),i(Al.$$.fragment,s),i(sl.$$.fragment,s),i(el.$$.fragment,s),Ms=!1},d(s){s&&(e(r),e(M),e(_),e(G),e($),e(U),e(X),e(z),e(R),e(B),e(E),e(nl),e(Nl),e(g),e(xl),e(A),e(Yl),e(v),e(Ml),e(Fl),e(N),e(Hl),e(Sl),e(Y),e(ql),e(Dl),e(H),e(pl),e(Ll),e(S),e(yl),e(Kl),e(q),e(rl),e(il),e(Pl),e(D),e(Ol),e(ls),e(K),e(tl),e(Ul),e(ss),e(P),e(ml),e(Tl),e(zl),e(wl),e(ul),e(es),e(Cs),e(dl),e(El),e(al),e(ts),e(ll),e(as),e(ns)),u(a,s),u(f,s),u(C,s),u(V,s),u(Xl,s),u(Bl,s),u(x,s),u(F,s),u(gl,s),u(Rl,s),u(cl,s),u(Ql,s),u(L,s),u(Jl,s),u(Wl,s),u(ol,s),u(O,s),u(jl,s),u(Al,s),u(sl,s),u(el,s)}}}function Fa(I){let a,r='🚨 TPUでトレーニングする場合は、上記のセルから始まるコードを全て専用のトレーニング関数に移動する必要があります。詳しくは<a href="/course/ja/chapter3">第3章</a>を参照してください。';return{c(){a=j("p"),a.innerHTML=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-eca5te"&&(a.innerHTML=r)},m(M,J){t(M,a,J)},p:be,d(M){M&&e(a)}}}function Ha(I){let a;return{c(){a=da("✏️ **あなたの番です！** 用途に合わせた独自の損失関数を作成するか、トレーニングループに別のカスタムステップを追加してみましょう。")},l(r){a=ba(r,"✏️ **あなたの番です！** 用途に合わせた独自の損失関数を作成するか、トレーニングループに別のカスタムステップを追加してみましょう。")},m(r,M){t(r,a,M)},d(r){r&&e(a)}}}function Sa(I){let a,r="✏️ <strong>あなたの番です！</strong> 長時間に及ぶ学習実験を行う場合、TensorBoardやWeights &amp; Biasesなどのツールを使って重要な指標を記録しておくとよいでしょう。学習ループに適切なログを追加することで、学習がどのように進んでいるかを常に確認することができます。";return{c(){a=j("p"),a.innerHTML=r},l(M){a=d(M,"P",{"data-svelte-h":!0}),b(a)!=="svelte-xuabzv"&&(a.innerHTML=r)},m(M,J){t(M,a,J)},p:be,d(M){M&&e(a)}}}function qa(I){let a,r,M,J,_,f,G,$,Z,U,C,X,V='今までは、事前学習したモデルを使い、事前学習時の重みを再利用して新しい用途向けに微調整を行うことがほとんどでした。<a href="/course/ja/chapter1">第1章</a>で見たように、これは一般的に <em>転移学習</em> と呼ばれ、ラベル付きデータがあまりない実世界のほとんどの用途でTransformerモデルを適用するための非常に成功した戦略です。この章では、別のアプローチで、全く新しいモデルをゼロから学習します。これは多くのデータを持っている場合に取るべき良いアプローチで、利用可能なモデルに使われる事前学習データとは全く異なります。しかし、言語モデルの事前学習には、既存のモデルを微調整するよりも、かなり多くの計算リソースが必要になります。例えば、音符やDNAなどの分子配列、プログラミング言語などのデータセットに新しいモデルを学習させることが有効な場合があります。後者については、OpenAIのCodexモデルを搭載したTabNineやGitHubのCopilotのような、長いコード列を生成できるツールが最近人気を集めています。このテキスト生成のタスクは、GPT-2のような自己回帰型言語モデルや因果関係言語モデルで対応するのが最適です。',z,R,k="このセクションでは、コード生成モデルの縮小版を構築します。Pythonコードのサブセットを使用して、完全な関数やクラスではなく、1行の補完に焦点を当てます。Pythonでデータを扱うとき、<code>matplotlib</code>, <code>seaborn</code>, <code>pandas</code>, <code>scikit-learn</code> ライブラリからなるPythonデータサイエンススタックと頻繁に接触することになります。これらのフレームワークを使うとき、特定のコマンドを調べる必要があるのはよくあることです。そこで、これらの呼び出しを補完するためにモデルを使うことができれば素敵です。",B,E,os,nl,Xl='<a href="/course/ja/chapter6">第6章</a>では、Pythonソースコードを処理するための効率的なトークナイザーを作成しましたが、モデルを事前学習するためには、やはり大規模なデータセットが必要です。ここでは、GitHub リポジトリから得た Python コードのコーパスにトークナイザを適用します。そして、<code>Trainer</code> API と 🤗 Accelerate を使ってモデルを学習します。さあ、始めましょう',Nl,g,fe,xl,A,Ce='これは実際に、このセクションで示したコードを使って学習し、ハブにアップロードしたモデルを紹介しているものです。<a href="https://huggingface.co/huggingface-course/codeparrot-ds?text=plt.imshow%28" rel="nofollow">こちら</a>をご覧ください。なお、テキスト生成の際にランダム化が行われているので、おそらく少し異なる結果が得られると思います。',Yl,v,Ts,Ml,Bl='PythonのコードはGitHubなどのコードリポジトリから豊富に提供されており、これを利用してPythonのリポジトリごとにスクレイピングすることでデータセットを作成することができます。これは<a href="https://learning.oreilly.com/library/view/natural-language-processing/9781098103231/" rel="nofollow">トランスフォーマーの教科書</a>で大規模なGPT-2モデルを事前学習させるために取られたアプローチです。著者らは<code>codeparrot</code>と呼ばれる約2000万のPythonファイルを含む約180GBのGitHubダンプを使ってデータセットを作り、それを<a href="https://huggingface.co/datasets/transformersbook/codeparrot" rel="nofollow">ハギング フェイス ハブ</a>で共有しました。',Fl,N,he="しかし、コーパス全体に対する学習は時間と計算がかかるので、Pythonを使用したデータサイエンスに関連するデータだけが必要です。そこで、まず<code>codeparrot</code>データセットから、データサイエンスに使われるライブラリのいずれかを含むすべてのファイルをフィルタリングしてみましょう。データセットのサイズが大きいので、ダウンロードは避けたいです。その代わりに、ストリーミング機能を使って、その場でフィルタリングすることにしましょう。先ほど紹介したライブラリを使ったコードサンプルをフィルタリングするために、次の関数を使います。",Hl,x,Sl,Y,Ie="2つの例でテストしてみましょう。",ql,F,Dl,H,ws,pl,gl="これを利用して、データセットをストリーミングし、必要な要素をフィルタリングする関数を作成することができます。",Ll,S,us,yl,Rl="そして、この関数をストリーミングデータセットに適用するだけです。",Kl,q,js,rl,cl,il,Ql="この結果、元のデータセットの約3%が残されましたが、それでもかなり大きなサイズです。このデータセットは6GBで、60万のPythonスクリプトから構成されています！",Pl,D,_e="データセット全体のフィルタリングには、マシンや帯域幅にもよりますが、2〜3時間かかると思われます。もし、この長いプロセスを自分でやりたくない場合、私達は既にフィルタリングされたデータセットをハブで提供し、ダウンロードできるようにしています。",Ol,L,ls,K,ds,tl,Jl,Ul,Wl="データセット内の例を見てみましょう。ここでは、各フィールドの最初の200文字だけを表示することにします。",ss,P,bs,ml,ol,Tl,zl="<code>content</code> フィールドに、モデルに学習させたいコードが含まれていることがわかります。データセットができたので、テキストを準備し、事前学習に適した形式にする必要があります。",fs,wl,ul,Vl,es,O,Cs="まず最初に、データをトークン化し、学習に利用できるようにします。私達の目標は主に短い関数呼び出しを自動補完することなので、コンテキストのサイズを比較的小さく保つことができます。これにより、モデルをより速く学習させることができ、必要なメモリ量も大幅に少なくなるという利点があります。もしあなたのアプリケーションにとってより多くのコンテキストを持つことが重要であれば(例えば、関数定義を含むファイルに基づいてユニットテストを書くようにモデルをしたい場合)、この数を増やした事を確認してください。GPT-2 のコンテキストサイズは 1,024、GPT-3 では 2,048 ですが、現在のところ、私達のコンテキストサイズは 128 トークンに固定しましょう。",jl,dl,El='ほとんどの文書は128トークンより多いので、単純に入力を最大長に切り詰めると、データセットの大部分を除去してしまうことになります。その代わりに、<a href="/course/ja/chapter6/4">第6章</a> で行ったように、 <code>return_overflowing_tokens</code> オプションを使って入力全体をトークン化し、いくつかの断片に分割してみます。また、<code>return_length</code>オプションを使用して、作成された各断片の長さを自動的に返します。多くの場合、最後の断片はコンテキストのサイズよりも小さくなるので、パディングの問題を避けるためにこれらの断片を取り除きます。',hs,al,Al='<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."/>',ts,ll,ke="最初の2つの例で、この仕組みを具体的に見てみましょう。",as,sl,ns,el,Ms,s,m="これらの 2 つのサンプルから、合計で 34 の断片が得られることがわかります。断片の長さを見ると、両方のドキュメントの末尾にある断片は 128 トークンより短いことがわかります。(それぞれ 117 と 41)これらは全断片のほんの一部なので、安全に捨てることができます。<code>overflow_to_sample_mapping</code> フィールドを使うと、どの断片がどの入力サンプルに属していたかを再構築することもできます。",$e,Is,It='この操作では、🤗 Datasetsの <code>Dataset.map()</code> 関数の便利な機能を使っています。それは、一対一の対応を必要としないことです。<a href="/course/ja/chapter7/3">セクション 3</a> で見たように、入力バッチよりも要素が多いバッチや少ないバッチを作成することが可能です。これは、データ拡張やデータフィルタリングなど、要素数を変更するような操作を行う場合に有用です。私達の場合、各要素を指定されたコンテキストサイズの断片にトークン化する際に、各文書から多くのサンプルを作成します。ただ、既存の列はサイズが競合しているので、必ず削除する必要があります。もしそれらを残しておきたい場合は、 <code>Dataset.map()</code> 呼び出しを適切に繰り返して返すことができます。',Ge,_s,Xe,ks,Be,Zs,_t="現在、各トークンが128個の1670万サンプルがあり、これは合計で約21億トークンに相当します。参考までに、OpenAIのGPT-3とCodexモデルはそれぞれ3000億、1000億のトークンで学習されており、CodexモデルはGPT-3のチェックポイントから初期化されています。このセクションの目的は、長くて一貫性のあるテキストを生成できるこれらのモデルと競合することではなく、データサイエンティストのための迅速な自動補完機能を提供する縮小版を作成することです。",ge,$s,kt="さて、データセットの準備ができたので、モデルをセットアップしてみましょう!",Re,ys,Qe,Gs,We,Xs,Zt="最初のステップは GPT-2 モデルを新しく初期化することです。このモデルには小型のGPT-2モデルと同じ設定を使用します。そのため、事前学習済みの設定をロードし、トークナイザーのサイズがモデルの語彙サイズと一致することを確認し、<code>bos</code>と<code>eos</code>（シーケンスの開始と終了を意味します）のトークンIDを渡します。",ze,bl,fl,Je,Bs,$t="このモデルには1億2400万のパラメータがあり、これを調整する必要があります。トレーニングを開始する前に、バッチを作成するためのデータコレーターをセットアップする必要があります。私達は<code>DataCollatorForLanguageModeling</code>を使う事ができます。",Ve,gs,Gt="これは言語モデリング用に特別に設計されたものです（その名前が示すとおり）。バッチのスタックとパディングの他にまた、言語モデルのラベルを作成することもできます。因果言語モデリングでは、入力もラベルの役割を果たしますが（要素を1つずらすだけです）、このデータコレーターは学習中にラベルを作成するので、 <code>input_ids</code> を重複させる必要がありません。",Ee,Rs,Xt="<code>DataCollatorForLanguageModeling</code> はマスク言語モデリング (MLM) と因果言語モデリング (CLM) の両方をサポートすることに注意してください。デフォルトでは MLM 用のデータが用意されていますが、引数 <code>mlm=False</code> を設定することでCLMに切り替えることができます。",Ae,Cl,hl,Ue,Qs,Bt="例を見てみましょう。",ve,Ws,Ne,Il,_l,me,zs,gt="サンプルを重ねてみると、すべてのテンソルが同じ形をしていることがわかります。",xe,oe,rs,Ye,Vs,Rt="これで、実際にモデルを訓練するための準備が整いました。",Fe,Es,Qt="結局のところ、それほど大変な作業ではありませんでしたね。トレーニングを始める前に、ハギング フェイスにログインする必要があります。もしノートブックで作業しているなら、次のユーティリティ関数でログインできます。",He,As,Se,vs,Wt="これにより、ハギング フェイスのログイン情報を入力するウィジェットが表示されます。",qe,Ns,zt="ノートブックで作業していない場合は、ターミナルで次の行を入力するだけです。",De,xs,Le,kl,Zl,Te,cs,Ke,is,Pe,Ys,Oe,Fs,Vt="さて、いよいよ本番です！学習したモデルが実際にどの程度機能するのか見てみましょう。ログを見ると損失が着実に減っていることがわかりますが、モデルをテストするために、いくつかのプロンプトに対してどの程度効果があるのか見てみましょう。そのために、テキスト生成の <code>pipeline</code> でモデルをラップし、利用可能であれば高速に生成するために GPU に乗せることにします。",lt,$l,Gl,we,Hs,Et="まずは散布図を作るという簡単な作業から始めてみましょう。",st,Ss,et,qs,tt,Ds,At=`結果は正しいようです。
これは <code>pandas</code> オペレーションでも動作するのでしょうか？2つの配列から <code>DataFrame</code> を作成できるかどうか見てみましょう。`,at,Ls,nt,Ks,Mt,Ps,vt="いいねですね！それが正解です。",pt,Os,Nt=`しかし、その後、列 <code>x</code> を再び挿入しています。生成されるトークンの数には限りがあるので、次の <code>for</code> ループは切り捨てられいます。
もう少し複雑なことをして、モデルに <code>groupby</code> 操作を使わせることができるか見てみましょう。`,yt,le,rt,se,ct,ee,xt=`悪くないですね。これは正しいやり方です。
最後に、<code>scikit-learn</code>にも使えるかどうか、Random Forestモデルを設定してみましょう。`,it,te,Jt,ae,Ut,ue,je,ne,mt,Ze,ot;_=new fa({props:{fw:I[0]}}),G=new de({props:{title:"因果言語モデルを一から学習",local:"因果言語モデルを一から学習",headingTag:"h1"}});const Yt=[Ia,ha],Me=[];function Ft(l,n){return l[0]==="pt"?0:1}Z=Ft(I),U=Me[Z]=Yt[Z](I),E=new ht({props:{id:"Vpjb1lu0MDk"}}),v=new de({props:{title:"データを収集する",local:"データを収集する",headingTag:"h2"}}),x=new h({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}}),F=new h({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}}),H=new h({props:{code:"RmFsc2UlMjBUcnVl",highlighted:'<span class="hljs-literal">False</span> <span class="hljs-literal">True</span>',wrap:!1}}),S=new h({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEFmcm9tJTIwdHFkbSUyMGltcG9ydCUyMHRxZG0lMEFmcm9tJTIwZGF0YXNldHMlMjBpbXBvcnQlMjBEYXRhc2V0JTBBJTBBJTBBZGVmJTIwZmlsdGVyX3N0cmVhbWluZ19kYXRhc2V0KGRhdGFzZXQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlMjAlM0QlMjBkZWZhdWx0ZGljdChsaXN0KSUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMGZvciUyMHNhbXBsZSUyMGluJTIwdHFkbShpdGVyKGRhdGFzZXQpKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsJTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwYW55X2tleXdvcmRfaW5fc3RyaW5nKHNhbXBsZSU1QiUyMmNvbnRlbnQlMjIlNUQlMkMlMjBmaWx0ZXJzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGUuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbHRlcmVkX2RpY3QlNUJrJTVELmFwcGVuZCh2KSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JsZW4oZmlsdGVyZWRfZGljdCU1Qidjb250ZW50JyU1RCklMkZ0b3RhbCUzQS4yJTI1JTdEJTIwb2YlMjBkYXRhJTIwYWZ0ZXIlMjBmaWx0ZXJpbmcuJTIyKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMERhdGFzZXQuZnJvbV9kaWN0KGZpbHRlcmVkX2RpY3Qp",highlighted:`<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict
<span class="hljs-keyword">from</span> tqdm <span class="hljs-keyword">import</span> tqdm
<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Dataset


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

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

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

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

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

raw_datasets`,wrap:!1}}),K=new h({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}}),tl=new ms({props:{$$slots:{default:[_a]},$$scope:{ctx:I}}}),P=new h({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}}),ml=new h({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}}),wl=new de({props:{title:"データセットの準備",local:"データセットの準備",headingTag:"h2"}}),Vl=new ht({props:{id:"ma1TrR7gE7I"}}),sl=new h({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}}),el=new h({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}}),_s=new h({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 h({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}}),ys=new ms({props:{$$slots:{default:[ka]},$$scope:{ctx:I}}}),Gs=new de({props:{title:"新しいモデルを初期化する",local:"新しいモデルを初期化する",headingTag:"h2"}});const Ht=[$a,Za],pe=[];function St(l,n){return l[0]==="pt"?0:1}bl=St(I),fl=pe[bl]=Ht[bl](I);const qt=[Xa,Ga],ye=[];function Dt(l,n){return l[0]==="pt"?0:1}Cl=Dt(I),hl=ye[Cl]=qt[Cl](I),Ws=new h({props:{code:"b3V0JTIwJTNEJTIwZGF0YV9jb2xsYXRvciglNUJ0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QmklNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSg1KSU1RCklMEFmb3IlMjBrZXklMjBpbiUyMG91dCUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlMjBzaGFwZSUzQSUyMCU3Qm91dCU1QmtleSU1RC5zaGFwZSU3RCUyMik=",highlighted:`out = data_collator([tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">5</span>)])
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> out:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{key}</span> shape: <span class="hljs-subst">{out[key].shape}</span>&quot;</span>)`,wrap:!1}});const Lt=[ga,Ba],re=[];function Kt(l,n){return l[0]==="pt"?0:1}Il=Kt(I),_l=re[Il]=Lt[Il](I);let Q=I[0]==="tf"&&ca();rs=new ms({props:{warning:!0,$$slots:{default:[Ra]},$$scope:{ctx:I}}}),As=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),xs=new h({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const Pt=[Wa,Qa],ce=[];function Ot(l,n){return l[0]==="pt"?0:1}kl=Ot(I),Zl=ce[kl]=Pt[kl](I),cs=new ms({props:{$$slots:{default:[za]},$$scope:{ctx:I}}}),is=new ms({props:{$$slots:{default:[Aa]},$$scope:{ctx:I}}}),Ys=new de({props:{title:"パイプラインによるコード生成",local:"パイプラインによるコード生成",headingTag:"h2"}});const la=[Na,va],ie=[];function sa(l,n){return l[0]==="pt"?0:1}$l=sa(I),Gl=ie[$l]=la[$l](I),Ss=new h({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVhdGUlMjBzY2F0dGVyJTIwcGxvdCUyMHdpdGglMjB4JTJDJTIweSUwQSUyMiUyMiUyMiUwQXByaW50KHBpcGUodHh0JTJDJTIwbnVtX3JldHVybl9zZXF1ZW5jZXMlM0QxKSU1QjAlNUQlNUIlMjJnZW5lcmF0ZWRfdGV4dCUyMiU1RCk=",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# create some data
x = np.random.randn(100)
y = np.random.randn(100)

# create scatter plot with 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}}),qs=new h({props:{code:"JTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVhdGUlMjBzY2F0dGVyJTIwcGxvdCUyMHdpdGglMjB4JTJDJTIweSUwQXBsdC5zY2F0dGVyKHglMkMlMjB5KSUwQSUwQSUyMyUyMGNyZWF0ZSUyMHNjYXR0ZXI=",highlighted:`<span class="hljs-comment"># create some data</span>
x = np.random.randn(<span class="hljs-number">100</span>)
y = np.random.randn(<span class="hljs-number">100</span>)

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

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

# create dataframe from x and 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 h({props:{code:"JTIzJTIwY3JlYXRlJTIwc29tZSUyMGRhdGElMEF4JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEF5JTIwJTNEJTIwbnAucmFuZG9tLnJhbmRuKDEwMCklMEElMEElMjMlMjBjcmVhdGUlMjBkYXRhZnJhbWUlMjBmcm9tJTIweCUyMGFuZCUyMHklMEFkZiUyMCUzRCUyMHBkLkRhdGFGcmFtZSglN0IneCclM0ElMjB4JTJDJTIwJ3knJTNBJTIweSU3RCklMEFkZi5pbnNlcnQoMCUyQyd4JyUyQyUyMHgpJTBBZm9y",highlighted:`<span class="hljs-comment"># create some data</span>
x = np.random.randn(<span class="hljs-number">100</span>)
y = np.random.randn(<span class="hljs-number">100</span>)

<span class="hljs-comment"># create dataframe from x and 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}}),le=new h({props:{code:"dHh0JTIwJTNEJTIwJTIyJTIyJTIyJTVDJTBBJTIzJTIwZGF0YWZyYW1lJTIwd2l0aCUyMHByb2Zlc3Npb24lMkMlMjBpbmNvbWUlMjBhbmQlMjBuYW1lJTBBZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUoJTdCJ3Byb2Zlc3Npb24nJTNBJTIweCUyQyUyMCdpbmNvbWUnJTNBeSUyQyUyMCduYW1lJyUzQSUyMHolN0QpJTBBJTBBJTIzJTIwY2FsY3VsYXRlJTIwdGhlJTIwbWVhbiUyMGluY29tZSUyMHBlciUyMHByb2Zlc3Npb24lMEElMjIlMjIlMjIlMEFwcmludChwaXBlKHR4dCUyQyUyMG51bV9yZXR1cm5fc2VxdWVuY2VzJTNEMSklNUIwJTVEJTVCJTIyZ2VuZXJhdGVkX3RleHQlMjIlNUQp",highlighted:`txt = <span class="hljs-string">&quot;&quot;&quot;\\
# dataframe with profession, income and name
df = pd.DataFrame({&#x27;profession&#x27;: x, &#x27;income&#x27;:y, &#x27;name&#x27;: z})

# calculate the mean income per 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}}),se=new h({props:{code:"JTIzJTIwZGF0YWZyYW1lJTIwd2l0aCUyMHByb2Zlc3Npb24lMkMlMjBpbmNvbWUlMjBhbmQlMjBuYW1lJTBBZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUoJTdCJ3Byb2Zlc3Npb24nJTNBJTIweCUyQyUyMCdpbmNvbWUnJTNBeSUyQyUyMCduYW1lJyUzQSUyMHolN0QpJTBBJTBBJTIzJTIwY2FsY3VsYXRlJTIwdGhlJTIwbWVhbiUyMGluY29tZSUyMHBlciUyMHByb2Zlc3Npb24lMEFwcm9mZXNzaW9uJTIwJTNEJTIwZGYuZ3JvdXBieSglNUIncHJvZmVzc2lvbiclNUQpLm1lYW4oKSUwQSUwQSUyMyUyMGNvbXB1dGUlMjB0aGU=",highlighted:`<span class="hljs-comment"># dataframe with profession, income and name</span>
df = pd.DataFrame({<span class="hljs-string">&#x27;profession&#x27;</span>: x, <span class="hljs-string">&#x27;income&#x27;</span>:y, <span class="hljs-string">&#x27;name&#x27;</span>: z})

<span class="hljs-comment"># calculate the mean income per profession</span>
profession = df.groupby([<span class="hljs-string">&#x27;profession&#x27;</span>]).mean()

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

# fit random forest model with 300 estimators on 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}}),ae=new h({props:{code:"JTIzJTIwaW1wb3J0JTIwcmFuZG9tJTIwZm9yZXN0JTIwcmVncmVzc29yJTIwZnJvbSUyMHNjaWtpdC1sZWFybiUwQWZyb20lMjBza2xlYXJuLmVuc2VtYmxlJTIwaW1wb3J0JTIwUmFuZG9tRm9yZXN0UmVncmVzc29yJTBBJTBBJTIzJTIwZml0JTIwcmFuZG9tJTIwZm9yZXN0JTIwbW9kZWwlMjB3aXRoJTIwMzAwJTIwZXN0aW1hdG9ycyUyMG9uJTIwWCUyQyUyMHklM0ElMEFyZiUyMCUzRCUyMFJhbmRvbUZvcmVzdFJlZ3Jlc3NvcihuX2VzdGltYXRvcnMlM0QzMDAlMkMlMjByYW5kb21fc3RhdGUlM0RyYW5kb21fc3RhdGUlMkMlMjBtYXhfZGVwdGglM0QzKSUwQXJmLmZpdChYJTJDJTIweSklMEFyZg==",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"># fit random forest model with 300 estimators on 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 ea(l,n){return l[0]==="tf"?Ya:xa}let Tt=ea(I),ps=Tt(I),W=I[0]==="pt"&&ia(I);return ne=new Ca({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ja/chapter7/6.mdx"}}),{c(){a=j("meta"),r=p(),M=j("p"),J=p(),o(_.$$.fragment),f=p(),o(G.$$.fragment),$=p(),U.c(),C=p(),X=j("p"),X.innerHTML=V,z=p(),R=j("p"),R.innerHTML=k,B=p(),o(E.$$.fragment),os=p(),nl=j("p"),nl.innerHTML=Xl,Nl=p(),g=j("iframe"),xl=p(),A=j("p"),A.innerHTML=Ce,Yl=p(),o(v.$$.fragment),Ts=p(),Ml=j("p"),Ml.innerHTML=Bl,Fl=p(),N=j("p"),N.innerHTML=he,Hl=p(),o(x.$$.fragment),Sl=p(),Y=j("p"),Y.textContent=Ie,ql=p(),o(F.$$.fragment),Dl=p(),o(H.$$.fragment),ws=p(),pl=j("p"),pl.textContent=gl,Ll=p(),o(S.$$.fragment),us=p(),yl=j("p"),yl.textContent=Rl,Kl=p(),o(q.$$.fragment),js=p(),o(rl.$$.fragment),cl=p(),il=j("p"),il.textContent=Ql,Pl=p(),D=j("p"),D.textContent=_e,Ol=p(),o(L.$$.fragment),ls=p(),o(K.$$.fragment),ds=p(),o(tl.$$.fragment),Jl=p(),Ul=j("p"),Ul.textContent=Wl,ss=p(),o(P.$$.fragment),bs=p(),o(ml.$$.fragment),ol=p(),Tl=j("p"),Tl.innerHTML=zl,fs=p(),o(wl.$$.fragment),ul=p(),o(Vl.$$.fragment),es=p(),O=j("p"),O.textContent=Cs,jl=p(),dl=j("p"),dl.innerHTML=El,hs=p(),al=j("div"),al.innerHTML=Al,ts=p(),ll=j("p"),ll.textContent=ke,as=p(),o(sl.$$.fragment),ns=p(),o(el.$$.fragment),Ms=p(),s=j("p"),s.innerHTML=m,$e=p(),Is=j("p"),Is.innerHTML=It,Ge=p(),o(_s.$$.fragment),Xe=p(),o(ks.$$.fragment),Be=p(),Zs=j("p"),Zs.textContent=_t,ge=p(),$s=j("p"),$s.textContent=kt,Re=p(),o(ys.$$.fragment),Qe=p(),o(Gs.$$.fragment),We=p(),Xs=j("p"),Xs.innerHTML=Zt,ze=p(),fl.c(),Je=p(),Bs=j("p"),Bs.innerHTML=$t,Ve=p(),gs=j("p"),gs.innerHTML=Gt,Ee=p(),Rs=j("p"),Rs.innerHTML=Xt,Ae=p(),hl.c(),Ue=p(),Qs=j("p"),Qs.textContent=Bt,ve=p(),o(Ws.$$.fragment),Ne=p(),_l.c(),me=p(),zs=j("p"),zs.textContent=gt,xe=p(),Q&&Q.c(),oe=p(),o(rs.$$.fragment),Ye=p(),Vs=j("p"),Vs.textContent=Rt,Fe=p(),Es=j("p"),Es.textContent=Qt,He=p(),o(As.$$.fragment),Se=p(),vs=j("p"),vs.textContent=Wt,qe=p(),Ns=j("p"),Ns.textContent=zt,De=p(),o(xs.$$.fragment),Le=p(),Zl.c(),Te=p(),o(cs.$$.fragment),Ke=p(),o(is.$$.fragment),Pe=p(),o(Ys.$$.fragment),Oe=p(),Fs=j("p"),Fs.innerHTML=Vt,lt=p(),Gl.c(),we=p(),Hs=j("p"),Hs.textContent=Et,st=p(),o(Ss.$$.fragment),et=p(),o(qs.$$.fragment),tt=p(),Ds=j("p"),Ds.innerHTML=At,at=p(),o(Ls.$$.fragment),nt=p(),o(Ks.$$.fragment),Mt=p(),Ps=j("p"),Ps.textContent=vt,pt=p(),Os=j("p"),Os.innerHTML=Nt,yt=p(),o(le.$$.fragment),rt=p(),o(se.$$.fragment),ct=p(),ee=j("p"),ee.innerHTML=xt,it=p(),o(te.$$.fragment),Jt=p(),o(ae.$$.fragment),Ut=p(),ps.c(),ue=p(),W&&W.c(),je=p(),o(ne.$$.fragment),mt=p(),Ze=j("p"),this.h()},l(l){const n=ua("svelte-u9bgzb",document.head);a=d(n,"META",{name:!0,content:!0}),n.forEach(e),r=y(l),M=d(l,"P",{}),Ct(M).forEach(e),J=y(l),T(_.$$.fragment,l),f=y(l),T(G.$$.fragment,l),$=y(l),U.l(l),C=y(l),X=d(l,"P",{"data-svelte-h":!0}),b(X)!=="svelte-p8bwvw"&&(X.innerHTML=V),z=y(l),R=d(l,"P",{"data-svelte-h":!0}),b(R)!=="svelte-1579h9x"&&(R.innerHTML=k),B=y(l),T(E.$$.fragment,l),os=y(l),nl=d(l,"P",{"data-svelte-h":!0}),b(nl)!=="svelte-amowew"&&(nl.innerHTML=Xl),Nl=y(l),g=d(l,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Ct(g).forEach(e),xl=y(l),A=d(l,"P",{"data-svelte-h":!0}),b(A)!=="svelte-ws0b7m"&&(A.innerHTML=Ce),Yl=y(l),T(v.$$.fragment,l),Ts=y(l),Ml=d(l,"P",{"data-svelte-h":!0}),b(Ml)!=="svelte-1j1z5c1"&&(Ml.innerHTML=Bl),Fl=y(l),N=d(l,"P",{"data-svelte-h":!0}),b(N)!=="svelte-qxu1js"&&(N.innerHTML=he),Hl=y(l),T(x.$$.fragment,l),Sl=y(l),Y=d(l,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-i41c9p"&&(Y.textContent=Ie),ql=y(l),T(F.$$.fragment,l),Dl=y(l),T(H.$$.fragment,l),ws=y(l),pl=d(l,"P",{"data-svelte-h":!0}),b(pl)!=="svelte-snrl8d"&&(pl.textContent=gl),Ll=y(l),T(S.$$.fragment,l),us=y(l),yl=d(l,"P",{"data-svelte-h":!0}),b(yl)!=="svelte-9eorpe"&&(yl.textContent=Rl),Kl=y(l),T(q.$$.fragment,l),js=y(l),T(rl.$$.fragment,l),cl=y(l),il=d(l,"P",{"data-svelte-h":!0}),b(il)!=="svelte-h3e8bj"&&(il.textContent=Ql),Pl=y(l),D=d(l,"P",{"data-svelte-h":!0}),b(D)!=="svelte-1hrdlyr"&&(D.textContent=_e),Ol=y(l),T(L.$$.fragment,l),ls=y(l),T(K.$$.fragment,l),ds=y(l),T(tl.$$.fragment,l),Jl=y(l),Ul=d(l,"P",{"data-svelte-h":!0}),b(Ul)!=="svelte-f0xrgb"&&(Ul.textContent=Wl),ss=y(l),T(P.$$.fragment,l),bs=y(l),T(ml.$$.fragment,l),ol=y(l),Tl=d(l,"P",{"data-svelte-h":!0}),b(Tl)!=="svelte-1lu90tb"&&(Tl.innerHTML=zl),fs=y(l),T(wl.$$.fragment,l),ul=y(l),T(Vl.$$.fragment,l),es=y(l),O=d(l,"P",{"data-svelte-h":!0}),b(O)!=="svelte-z8ic2l"&&(O.textContent=Cs),jl=y(l),dl=d(l,"P",{"data-svelte-h":!0}),b(dl)!=="svelte-107an91"&&(dl.innerHTML=El),hs=y(l),al=d(l,"DIV",{class:!0,"data-svelte-h":!0}),b(al)!=="svelte-1mf8pz"&&(al.innerHTML=Al),ts=y(l),ll=d(l,"P",{"data-svelte-h":!0}),b(ll)!=="svelte-wirlby"&&(ll.textContent=ke),as=y(l),T(sl.$$.fragment,l),ns=y(l),T(el.$$.fragment,l),Ms=y(l),s=d(l,"P",{"data-svelte-h":!0}),b(s)!=="svelte-1depku0"&&(s.innerHTML=m),$e=y(l),Is=d(l,"P",{"data-svelte-h":!0}),b(Is)!=="svelte-17cjez6"&&(Is.innerHTML=It),Ge=y(l),T(_s.$$.fragment,l),Xe=y(l),T(ks.$$.fragment,l),Be=y(l),Zs=d(l,"P",{"data-svelte-h":!0}),b(Zs)!=="svelte-1881my"&&(Zs.textContent=_t),ge=y(l),$s=d(l,"P",{"data-svelte-h":!0}),b($s)!=="svelte-28n0rz"&&($s.textContent=kt),Re=y(l),T(ys.$$.fragment,l),Qe=y(l),T(Gs.$$.fragment,l),We=y(l),Xs=d(l,"P",{"data-svelte-h":!0}),b(Xs)!=="svelte-6uyp7r"&&(Xs.innerHTML=Zt),ze=y(l),fl.l(l),Je=y(l),Bs=d(l,"P",{"data-svelte-h":!0}),b(Bs)!=="svelte-wxjs2h"&&(Bs.innerHTML=$t),Ve=y(l),gs=d(l,"P",{"data-svelte-h":!0}),b(gs)!=="svelte-7zvll1"&&(gs.innerHTML=Gt),Ee=y(l),Rs=d(l,"P",{"data-svelte-h":!0}),b(Rs)!=="svelte-n77klb"&&(Rs.innerHTML=Xt),Ae=y(l),hl.l(l),Ue=y(l),Qs=d(l,"P",{"data-svelte-h":!0}),b(Qs)!=="svelte-1okkglt"&&(Qs.textContent=Bt),ve=y(l),T(Ws.$$.fragment,l),Ne=y(l),_l.l(l),me=y(l),zs=d(l,"P",{"data-svelte-h":!0}),b(zs)!=="svelte-1cfmal4"&&(zs.textContent=gt),xe=y(l),Q&&Q.l(l),oe=y(l),T(rs.$$.fragment,l),Ye=y(l),Vs=d(l,"P",{"data-svelte-h":!0}),b(Vs)!=="svelte-1elug08"&&(Vs.textContent=Rt),Fe=y(l),Es=d(l,"P",{"data-svelte-h":!0}),b(Es)!=="svelte-19psayi"&&(Es.textContent=Qt),He=y(l),T(As.$$.fragment,l),Se=y(l),vs=d(l,"P",{"data-svelte-h":!0}),b(vs)!=="svelte-1n952op"&&(vs.textContent=Wt),qe=y(l),Ns=d(l,"P",{"data-svelte-h":!0}),b(Ns)!=="svelte-1ce92wf"&&(Ns.textContent=zt),De=y(l),T(xs.$$.fragment,l),Le=y(l),Zl.l(l),Te=y(l),T(cs.$$.fragment,l),Ke=y(l),T(is.$$.fragment,l),Pe=y(l),T(Ys.$$.fragment,l),Oe=y(l),Fs=d(l,"P",{"data-svelte-h":!0}),b(Fs)!=="svelte-1ik4ky5"&&(Fs.innerHTML=Vt),lt=y(l),Gl.l(l),we=y(l),Hs=d(l,"P",{"data-svelte-h":!0}),b(Hs)!=="svelte-1kua91s"&&(Hs.textContent=Et),st=y(l),T(Ss.$$.fragment,l),et=y(l),T(qs.$$.fragment,l),tt=y(l),Ds=d(l,"P",{"data-svelte-h":!0}),b(Ds)!=="svelte-v1pzfz"&&(Ds.innerHTML=At),at=y(l),T(Ls.$$.fragment,l),nt=y(l),T(Ks.$$.fragment,l),Mt=y(l),Ps=d(l,"P",{"data-svelte-h":!0}),b(Ps)!=="svelte-a4ba9c"&&(Ps.textContent=vt),pt=y(l),Os=d(l,"P",{"data-svelte-h":!0}),b(Os)!=="svelte-1hxnmhu"&&(Os.innerHTML=Nt),yt=y(l),T(le.$$.fragment,l),rt=y(l),T(se.$$.fragment,l),ct=y(l),ee=d(l,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-15bf420"&&(ee.innerHTML=xt),it=y(l),T(te.$$.fragment,l),Jt=y(l),T(ae.$$.fragment,l),Ut=y(l),ps.l(l),ue=y(l),W&&W.l(l),je=y(l),T(ne.$$.fragment,l),mt=y(l),Ze=d(l,"P",{}),Ct(Ze).forEach(e),this.h()},h(){vl(a,"name","hf:doc:metadata"),vl(a,"content",Da),ma(g.src,fe="https://course-demos-codeparrot-ds.hf.space")||vl(g,"src",fe),vl(g,"frameborder","0"),vl(g,"height","300"),vl(g,"title","Gradio app"),vl(g,"class","block dark:hidden container p-0 flex-grow space-iframe"),vl(g,"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"),vl(g,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),vl(al,"class","flex justify-center")},m(l,n){ja(document.head,a),t(l,r,n),t(l,M,n),t(l,J,n),w(_,l,n),t(l,f,n),w(G,l,n),t(l,$,n),Me[Z].m(l,n),t(l,C,n),t(l,X,n),t(l,z,n),t(l,R,n),t(l,B,n),w(E,l,n),t(l,os,n),t(l,nl,n),t(l,Nl,n),t(l,g,n),t(l,xl,n),t(l,A,n),t(l,Yl,n),w(v,l,n),t(l,Ts,n),t(l,Ml,n),t(l,Fl,n),t(l,N,n),t(l,Hl,n),w(x,l,n),t(l,Sl,n),t(l,Y,n),t(l,ql,n),w(F,l,n),t(l,Dl,n),w(H,l,n),t(l,ws,n),t(l,pl,n),t(l,Ll,n),w(S,l,n),t(l,us,n),t(l,yl,n),t(l,Kl,n),w(q,l,n),t(l,js,n),w(rl,l,n),t(l,cl,n),t(l,il,n),t(l,Pl,n),t(l,D,n),t(l,Ol,n),w(L,l,n),t(l,ls,n),w(K,l,n),t(l,ds,n),w(tl,l,n),t(l,Jl,n),t(l,Ul,n),t(l,ss,n),w(P,l,n),t(l,bs,n),w(ml,l,n),t(l,ol,n),t(l,Tl,n),t(l,fs,n),w(wl,l,n),t(l,ul,n),w(Vl,l,n),t(l,es,n),t(l,O,n),t(l,jl,n),t(l,dl,n),t(l,hs,n),t(l,al,n),t(l,ts,n),t(l,ll,n),t(l,as,n),w(sl,l,n),t(l,ns,n),w(el,l,n),t(l,Ms,n),t(l,s,n),t(l,$e,n),t(l,Is,n),t(l,Ge,n),w(_s,l,n),t(l,Xe,n),w(ks,l,n),t(l,Be,n),t(l,Zs,n),t(l,ge,n),t(l,$s,n),t(l,Re,n),w(ys,l,n),t(l,Qe,n),w(Gs,l,n),t(l,We,n),t(l,Xs,n),t(l,ze,n),pe[bl].m(l,n),t(l,Je,n),t(l,Bs,n),t(l,Ve,n),t(l,gs,n),t(l,Ee,n),t(l,Rs,n),t(l,Ae,n),ye[Cl].m(l,n),t(l,Ue,n),t(l,Qs,n),t(l,ve,n),w(Ws,l,n),t(l,Ne,n),re[Il].m(l,n),t(l,me,n),t(l,zs,n),t(l,xe,n),Q&&Q.m(l,n),t(l,oe,n),w(rs,l,n),t(l,Ye,n),t(l,Vs,n),t(l,Fe,n),t(l,Es,n),t(l,He,n),w(As,l,n),t(l,Se,n),t(l,vs,n),t(l,qe,n),t(l,Ns,n),t(l,De,n),w(xs,l,n),t(l,Le,n),ce[kl].m(l,n),t(l,Te,n),w(cs,l,n),t(l,Ke,n),w(is,l,n),t(l,Pe,n),w(Ys,l,n),t(l,Oe,n),t(l,Fs,n),t(l,lt,n),ie[$l].m(l,n),t(l,we,n),t(l,Hs,n),t(l,st,n),w(Ss,l,n),t(l,et,n),w(qs,l,n),t(l,tt,n),t(l,Ds,n),t(l,at,n),w(Ls,l,n),t(l,nt,n),w(Ks,l,n),t(l,Mt,n),t(l,Ps,n),t(l,pt,n),t(l,Os,n),t(l,yt,n),w(le,l,n),t(l,rt,n),w(se,l,n),t(l,ct,n),t(l,ee,n),t(l,it,n),w(te,l,n),t(l,Jt,n),w(ae,l,n),t(l,Ut,n),ps.m(l,n),t(l,ue,n),W&&W.m(l,n),t(l,je,n),w(ne,l,n),t(l,mt,n),t(l,Ze,n),ot=!0},p(l,[n]){const ta={};n&1&&(ta.fw=l[0]),_.$set(ta);let wt=Z;Z=Ft(l),Z!==wt&&(Us(),i(Me[wt],1,1,()=>{Me[wt]=null}),Js(),U=Me[Z],U||(U=Me[Z]=Yt[Z](l),U.c()),c(U,1),U.m(C.parentNode,C));const aa={};n&2&&(aa.$$scope={dirty:n,ctx:l}),tl.$set(aa);const na={};n&2&&(na.$$scope={dirty:n,ctx:l}),ys.$set(na);let ut=bl;bl=St(l),bl!==ut&&(Us(),i(pe[ut],1,1,()=>{pe[ut]=null}),Js(),fl=pe[bl],fl||(fl=pe[bl]=Ht[bl](l),fl.c()),c(fl,1),fl.m(Je.parentNode,Je));let jt=Cl;Cl=Dt(l),Cl!==jt&&(Us(),i(ye[jt],1,1,()=>{ye[jt]=null}),Js(),hl=ye[Cl],hl||(hl=ye[Cl]=qt[Cl](l),hl.c()),c(hl,1),hl.m(Ue.parentNode,Ue));let dt=Il;Il=Kt(l),Il!==dt&&(Us(),i(re[dt],1,1,()=>{re[dt]=null}),Js(),_l=re[Il],_l||(_l=re[Il]=Lt[Il](l),_l.c()),c(_l,1),_l.m(me.parentNode,me)),l[0]==="tf"?Q?n&1&&c(Q,1):(Q=ca(),Q.c(),c(Q,1),Q.m(oe.parentNode,oe)):Q&&(Us(),i(Q,1,1,()=>{Q=null}),Js());const Ma={};n&2&&(Ma.$$scope={dirty:n,ctx:l}),rs.$set(Ma);let bt=kl;kl=Ot(l),kl!==bt&&(Us(),i(ce[bt],1,1,()=>{ce[bt]=null}),Js(),Zl=ce[kl],Zl||(Zl=ce[kl]=Pt[kl](l),Zl.c()),c(Zl,1),Zl.m(Te.parentNode,Te));const pa={};n&2&&(pa.$$scope={dirty:n,ctx:l}),cs.$set(pa);const ya={};n&3&&(ya.$$scope={dirty:n,ctx:l}),is.$set(ya);let ft=$l;$l=sa(l),$l!==ft&&(Us(),i(ie[ft],1,1,()=>{ie[ft]=null}),Js(),Gl=ie[$l],Gl||(Gl=ie[$l]=la[$l](l),Gl.c()),c(Gl,1),Gl.m(we.parentNode,we)),Tt!==(Tt=ea(l))&&(ps.d(1),ps=Tt(l),ps&&(ps.c(),ps.m(ue.parentNode,ue))),l[0]==="pt"?W?n&1&&c(W,1):(W=ia(l),W.c(),c(W,1),W.m(je.parentNode,je)):W&&(Us(),i(W,1,1,()=>{W=null}),Js())},i(l){ot||(c(_.$$.fragment,l),c(G.$$.fragment,l),c(U),c(E.$$.fragment,l),c(v.$$.fragment,l),c(x.$$.fragment,l),c(F.$$.fragment,l),c(H.$$.fragment,l),c(S.$$.fragment,l),c(q.$$.fragment,l),c(rl.$$.fragment,l),c(L.$$.fragment,l),c(K.$$.fragment,l),c(tl.$$.fragment,l),c(P.$$.fragment,l),c(ml.$$.fragment,l),c(wl.$$.fragment,l),c(Vl.$$.fragment,l),c(sl.$$.fragment,l),c(el.$$.fragment,l),c(_s.$$.fragment,l),c(ks.$$.fragment,l),c(ys.$$.fragment,l),c(Gs.$$.fragment,l),c(fl),c(hl),c(Ws.$$.fragment,l),c(_l),c(Q),c(rs.$$.fragment,l),c(As.$$.fragment,l),c(xs.$$.fragment,l),c(Zl),c(cs.$$.fragment,l),c(is.$$.fragment,l),c(Ys.$$.fragment,l),c(Gl),c(Ss.$$.fragment,l),c(qs.$$.fragment,l),c(Ls.$$.fragment,l),c(Ks.$$.fragment,l),c(le.$$.fragment,l),c(se.$$.fragment,l),c(te.$$.fragment,l),c(ae.$$.fragment,l),c(W),c(ne.$$.fragment,l),ot=!0)},o(l){i(_.$$.fragment,l),i(G.$$.fragment,l),i(U),i(E.$$.fragment,l),i(v.$$.fragment,l),i(x.$$.fragment,l),i(F.$$.fragment,l),i(H.$$.fragment,l),i(S.$$.fragment,l),i(q.$$.fragment,l),i(rl.$$.fragment,l),i(L.$$.fragment,l),i(K.$$.fragment,l),i(tl.$$.fragment,l),i(P.$$.fragment,l),i(ml.$$.fragment,l),i(wl.$$.fragment,l),i(Vl.$$.fragment,l),i(sl.$$.fragment,l),i(el.$$.fragment,l),i(_s.$$.fragment,l),i(ks.$$.fragment,l),i(ys.$$.fragment,l),i(Gs.$$.fragment,l),i(fl),i(hl),i(Ws.$$.fragment,l),i(_l),i(Q),i(rs.$$.fragment,l),i(As.$$.fragment,l),i(xs.$$.fragment,l),i(Zl),i(cs.$$.fragment,l),i(is.$$.fragment,l),i(Ys.$$.fragment,l),i(Gl),i(Ss.$$.fragment,l),i(qs.$$.fragment,l),i(Ls.$$.fragment,l),i(Ks.$$.fragment,l),i(le.$$.fragment,l),i(se.$$.fragment,l),i(te.$$.fragment,l),i(ae.$$.fragment,l),i(W),i(ne.$$.fragment,l),ot=!1},d(l){l&&(e(r),e(M),e(J),e(f),e($),e(C),e(X),e(z),e(R),e(B),e(os),e(nl),e(Nl),e(g),e(xl),e(A),e(Yl),e(Ts),e(Ml),e(Fl),e(N),e(Hl),e(Sl),e(Y),e(ql),e(Dl),e(ws),e(pl),e(Ll),e(us),e(yl),e(Kl),e(js),e(cl),e(il),e(Pl),e(D),e(Ol),e(ls),e(ds),e(Jl),e(Ul),e(ss),e(bs),e(ol),e(Tl),e(fs),e(ul),e(es),e(O),e(jl),e(dl),e(hs),e(al),e(ts),e(ll),e(as),e(ns),e(Ms),e(s),e($e),e(Is),e(Ge),e(Xe),e(Be),e(Zs),e(ge),e($s),e(Re),e(Qe),e(We),e(Xs),e(ze),e(Je),e(Bs),e(Ve),e(gs),e(Ee),e(Rs),e(Ae),e(Ue),e(Qs),e(ve),e(Ne),e(me),e(zs),e(xe),e(oe),e(Ye),e(Vs),e(Fe),e(Es),e(He),e(Se),e(vs),e(qe),e(Ns),e(De),e(Le),e(Te),e(Ke),e(Pe),e(Oe),e(Fs),e(lt),e(we),e(Hs),e(st),e(et),e(tt),e(Ds),e(at),e(nt),e(Mt),e(Ps),e(pt),e(Os),e(yt),e(rt),e(ct),e(ee),e(it),e(Jt),e(Ut),e(ue),e(je),e(mt),e(Ze)),e(a),u(_,l),u(G,l),Me[Z].d(l),u(E,l),u(v,l),u(x,l),u(F,l),u(H,l),u(S,l),u(q,l),u(rl,l),u(L,l),u(K,l),u(tl,l),u(P,l),u(ml,l),u(wl,l),u(Vl,l),u(sl,l),u(el,l),u(_s,l),u(ks,l),u(ys,l),u(Gs,l),pe[bl].d(l),ye[Cl].d(l),u(Ws,l),re[Il].d(l),Q&&Q.d(l),u(rs,l),u(As,l),u(xs,l),ce[kl].d(l),u(cs,l),u(is,l),u(Ys,l),ie[$l].d(l),u(Ss,l),u(qs,l),u(Ls,l),u(Ks,l),u(le,l),u(se,l),u(te,l),u(ae,l),ps.d(l),W&&W.d(l),u(ne,l)}}}const Da='{"title":"因果言語モデルを一から学習","local":"因果言語モデルを一から学習","sections":[{"title":"データを収集する","local":"データを収集する","sections":[],"depth":2},{"title":"データセットの準備","local":"データセットの準備","sections":[],"depth":2},{"title":"新しいモデルを初期化する","local":"新しいモデルを初期化する","sections":[],"depth":2},{"title":"パイプラインによるコード生成","local":"パイプラインによるコード生成","sections":[],"depth":2},{"title":"🤗 Accelerate を使ったトレーニング","local":"-accelerate-を使ったトレーニング","sections":[],"depth":2}],"depth":1}';function La(I,a,r){let M="pt";return oa(()=>{const J=new URLSearchParams(window.location.search);r(0,M=J.get("fw")||"pt")}),[M]}class nn extends Ta{constructor(a){super(),wa(this,a,La,qa,Ua,{})}}export{nn as component};
