Buckets:

rtrm's picture
download
raw
53.6 kB
import{s as Tt,n as ht,o as ft}from"../chunks/scheduler.505acc25.js";import{S as Ct,i as Zt,e as p,s as a,c as M,h as Gt,a as i,d as t,b as n,f as Ut,g as c,j as d,k as Ne,l as It,m as s,n as r,t as o,o as m,p as y}from"../chunks/index.17dd9071.js";import{C as kt,H as kl,E as Bt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e10c4d85.js";import{Y as ut}from"../chunks/Youtube.793fe4bf.js";import{C as j}from"../chunks/CodeBlock.dd2f6940.js";import{C as $t}from"../chunks/CourseFloatingBanner.9496b79e.js";function Xt(Ee){let b,Bl,Gl,$l,U,Xl,u,Wl,T,vl,h,gl,f,Fe="คราวนี้เราจะมาดูกันว่าถ้าเราอยากเขียนโค้ดให้ได้ผลลัพธ์แบบเดียวกันกับใน section ที่แล้วโดยไม่ต้องเรียกใช้ <code>Trainer</code> class จะต้องทำอย่างไร เราสันนิษฐานว่าคุณได้ทำกระบวนการประมวลผลข้อมูลใน section 2 มาแล้ว โค้ดข้างล่างนี้เป็นการสรุปอย่างย่อครอบคลุมถึงกระบวนการทุกอย่างที่คุณจำเป็นต้องทำ:",Rl,C,Vl,Z,_l,G,Qe="ก่อนที่เราจะเริ่มเขียนลูปในการเทรนโมเดล เราจะต้องกำหนดออพเจ็กต์บางตัวก่อน โดยออพเจ็กต์ชุดแรกที่เราต้องกำหนดก็คือ dataloaders (ออพเจ็กต์สำหรับโหลดข้อมูล) ที่เราจะใช้ในการโหลดข้อมูล โดยการทำซ้ำกับหลาย ๆ batch ของข้อมูล แต่ก่อนที่คุณจะกำหนด dataloaders เหล่านี้ เราจะต้องทำกระบวนการ postprocessing บางอย่างกับ <code>tokenized_datasets</code> ของเราก่อน เพื่อทำกระบวนการบางอย่างที่ <code>Trainer</code> ได้จัดการให้เราโดยอัตโนมัติ ซึ่งกระบวนการเหล่านั้นได้แก่:",Yl,I,He="<li>ลบคอลัมน์ที่มีข้อมูลที่โมเดลไม่ต้องการใช้ (เช่น คอลัมน์ <code>sentence1</code> และ <code>sentence2</code>)</li> <li>เปลี่ยนชื่อคอลัมน์ <code>label</code> เป็น <code>labels</code> (เพราะว่าโมเดลคาดหวังอากิวเมนต์ชื่อว่า <code>labels</code>)</li> <li>กำหนดรูปแบบของ datasets ให้ส่งผลลัพธ์ออกมาเป็น PyTorach tensors แทนที่จะเป็น lists</li>",Al,k,xe="<code>tokenized_datasets</code> ของเรามีเมธอดสำหรับการจัดการแต่ละขั้นตอนดังนี้:",zl,B,Nl,$,Se="จากนั้นเราก็สามารถตรวจสอบผลลัพธ์ได้ว่ามีเฉพาะคอลัมน์ที่โมเดลต้องการใช้:",El,X,Fl,W,qe="เมื่อเราทำขั้นตอนนี้เสร็จแล้ว เราก็สามารถกำหนด dataloaders ของเราได้อย่างง่ายดาย ดังนี้:",Ql,v,Hl,g,Le="เพื่อจะตรวจสอบอย่างรวดเร็วว่าไม่มีข้อผิดพลาดจากการประมวลผลข้อมูล เราสามารถลองเรียกข้อมูล batch หนึ่งมาดูได้ดังนี้:",xl,R,Sl,V,ql,_,Ke="ควรระวังไว้ว่า shape ที่คุณได้อาจจะแตกต่างไปจากนี้เล็กน้อย เนื่องจากเราได้กำหนดค่าให้ training dataloader มีการทำ <code>shuffle=True</code> และเราได้เติมข้อมูลให้ยาวเท่ากับข้อมูลตัวที่ยาวที่สุดใน batch",Ll,Y,De="ตอนนี้เราก็ทำกระบวนการประมวลผลข้อมูลเสร็จแล้ว (สำหรับนักปฏิบัติ ML แล้วนี่เป็นเป้าหมายที่น่าพึงพอใจทีเดียว แต่ยังไม่ได้ให้ผลลัพธ์อะไรออกมาเป็นรูปธรรมนะ) ลองกลับมาดูที่โมเดลกัน เราจะสร้างโมเดลขึ้นมาแบบเดียวกับที่เราทำใน section ที่แล้ว:",Kl,A,Dl,z,Pe="เพื่อให้แน่ใจว่าทุกอย่างจะทำงานได้ราบรื่นตลอดการเทรน เราจึงลองส่ง batch ของเราเข้าไปในโมเดลนี้ดู:",Pl,N,Ol,E,le,F,Oe="โมเดล 🤗 Transformers ทุกตัวจะให้ผลลัพธ์ค่า loss ออกมาด้วยถ้าหากเราใส่ข้อมูล <code>labels</code> เข้าไปด้วย และเรายังได้ผลลัพธ์ออกมาเป็น logits (ได้ออกมาเป็น 2 ค่าสำหรับแต่ละ input ใน batch ของเรา ดังนั้น logits จะเป็น tensor ที่มีขนาด 8 x 2)",ee,Q,lt='เราเกือบจะพร้อมสำหรับการเขียนลูปในการเทรนแล้ว! เราแค่ต้องการอีกสองสิ่งเท่านั้นเอง: optimizer (ตัวปรับปรุงให้การเทรนราบรื่นขึ้น) และ learning rate scheduler (ตัวกำหนดค่า learning rate ตามเวลา) เนื่องจากตอนนี้เราพยายามจะเลียนแบบสิ่งที่ <code>Trainer</code> ทำไว้ เราก็จะใช้ค่าเริ่มต้นที่เหมือนกัน โดยตัว optimizer ที่ <code>Trainer</code> ใช้คือ <code>AdamW</code> ซึ่งเป็นตัวเดียวกันกับ Adam แต่มีการพลิกแพลงในส่วนของ weight decay regularization (ดูเพิ่มเติมที่ <a href="https://arxiv.org/abs/1711.05101" rel="nofollow">“Decoupled Weight Decay Regularization”</a> โดย Ilya Loshchilov and Frank Hutter):',te,H,se,x,et="เราก็มาถึงขั้นตอนสุดท้าย เราจะต้องกำหนดตัว learning rate scheduler ซึ่งมีค่าเริ่มต้นให้ learningrate มีการ decay แบบเชิงเส้น โดยมีการลดค่าจากค่า learning rate ที่สูงที่สุด (5e-5) ไปเรื่อย ๆ จนมีค่าเป็น 0 เพื่อจะกำหนดค่าให้ถูกต้อง เราจะต้องรู้ว่าการเทรนครั้งนี้มีการเทรนจำนวนทั้งสิ้นกี่ step ซึ่งคำนวณได้จากจำนวน epochs ที่เราจะเทรน คูณด้วยจำนวน training batches (ซึ่งก็คือความยาวของ training dataloader ของเรา) โดยตัว <code>Trainer</code> มีค่าเริ่มต้นในการเทรนอยู่ที่ 3 epochs เราก็จะยึดตามค่านี้:",ae,S,ne,q,pe,L,Me,K,tt="ข้อควรคำนึงถึงข้อสุดท้าย: เราจะต้องการใช้ GPU ถ้าหากเรามีการติดตั้งไว้ (ถ้าเราเทรนบน CPU จะต้องใช้เวลาหลายชั่วโมงแทนที่จะเป็นเวลาไม่กี่นาที) เพื่อกำหนดให้มีการใช้ GPU ทุกครั้งที่เป็นไปได้ เราสามารถกำหนด <code>device</code> ที่เราจะใส่โมเดลและ batches ของข้อมูลของเราลงไปได้ดังนี้:",ie,D,ce,P,re,O,st="ตอนนี้เราก็พร้อมจะเทรนโมเดลแล้ว! เพื่อให้เราพอคาดการณ์ได้ว่าการเทรนจะใช้เวลานานเท่าไร เราจึงเพิ่มแถบแสดงสถานะความคืบหน้าตามจำนวน step ในการเทรน โดยใช้ไลบรารี่ <code>tqdm</code> ดังนี้:",oe,ll,me,el,at="คุณจะสามารถเห็นได้ว่าแก่นของลูปในการเทรนนั้นก็เหมือนกับตัวที่เราแสดงให้ดูในบทนำ เรายังไม่ได้กำหนดให้มีการรายงานค่าใด ๆ ออกมา ดังนั้นลูปในการเทรนตัวนี้จึงไม่ได้บอกอะไรเราเลยว่าโมเดลมีประสิทธิภาพเป็นอย่างไร เราจึงจำเป็นต้องเขียนลูปในการประเมินผลโมเดล (evaluation loop) ด้วย",ye,tl,de,sl,nt="เหมือนกับที่เราได้ทำไว้ก่อนหน้านี้ เราสามารถเรียกใช้ metric จากไลบรารี่ 🤗 Evaluate ได้เลย เราได้เห็นเมธอด <code>metric.compute()</code> มาแล้ว แต่ metrics ยังสามารถรวบรวมผลมาเป็น batches ให้เราได้ด้วย โดยใช้เมธอด <code>add_batch()</code> โดยเมื่อเรารวบรวมผลมาจากทุก batches แล้ว เราก็จะคำนวณผลลัพธ์สุดท้ายได้โดยใช้เมธอด <code>metric.compute()</code> โค้ดข้างล่างนี้เป็นตัวอย่างการทำทุกอย่างที่เรากล่าวมานี้ในลูปสำหรับประเมินผลโมเดล:",je,al,be,nl,Je,pl,pt="ผลลัพธ์ที่ได้อาจแตกต่างไปเล็กน้อยเนื่องจากมีการสุ่มค่า weight ตอนสร้าง model head และมีการสลับข้อมูลแบบสุ่ม แต่ผลที่ได้ก็ควรจะใกล้เคียงกัน",we,J,Mt="<p>✏️ <strong>ลองเลย!</strong> แก้ไขลูปในการเทรนก่อนหน้านี้เพื่อทำการ fine-tune โมเดลของคุณด้วย SST-2 dataset.</p>",Ue,Ml,ue,il,Te,cl,it='ลูปในการเทรนที่เรากำหนดขึ้นก่อนหน้านี้ทำงานได้ดีบน CPU หรือ GPU ตัวเดียว แต่การใช้ไลบรารี่ <a href="https://github.com/huggingface/accelerate" rel="nofollow">🤗 Accelerate</a> และเพิ่มการปรับค่าอีกเพียงเล็กน้อย จะช่วยให้เราสามารถเทรนบน distributed setup ที่มีการใช้ GPUs หรือ TPUs หลายตัวได้ โดยเริ่มต้นจากการสร้าง training และ validation dataloaders ลูปในการเทรนแบบ manual ของเรามีลักษณะดังนี้:',he,rl,fe,ol,ct="และต่อไปนี้คือสิ่งที่ต้องปรับแก้:",Ce,ml,Ze,yl,rt="โค้ดบรรทัดแรกที่ต้องเพิ่มเข้ามาเป็นส่วนของการ import โดยบรรทัดที่สองเป็นการสร้างออพเจ็กต์ <code>Accelerator</code> ที่จะตรวจสอบ environment ของคุณและสร้าง distributed setup ที่เหมาะสมขึ้นมาให้ โดย 🤗 Accelerate จะช่วยจัดการ device ให้คุณ คุณจึงสามารถเอาโค้ดส่วนที่คุณใส่โมเดลเข้าไปใน device ออกได้ (หรือถ้าคุณอยากคงไว้ ก็เปลี่ยนจาก <code>device</code> เป็น <code>accelerator.device</code>)",Ge,dl,ot="จากนัั้นก็มีการทำงานหลัก ๆ ในบรรทัดที่ส่ง dataloaders, โมเดล และ optimizer เข้าไปที่ <code>accelerator.prepare()</code> ซึ่งเป็นการ wrap ออพเจ็กต์เหล่านี้ให้อยู่ใน container ที่เหมาะสม และทำให้แน่ใจว่า distributed training ของคุณทำงานได้ตามที่ตั้งใจไว้ การเปลี่ยนแปลงส่วนที่เหลือคือการเอาโค้ดส่วนที่คุณใส่ batch เข้าไปใน <code>device</code> ออก (และอีกครั้ง ถ้าคุณอยากคงไว้ ก็เปลี่ยนจาก <code>device</code> เป็น <code>accelerator.device</code> และแก้จาก <code>loss.backward()</code> เป็น <code>accelerator.backward(loss)</code>)",Ie,w,mt="<p>⚠️ เพื่อที่จะได้ประโยชน์จากความเร็วที่เพิ่มขึ้นจากการใช้ Cloud TPUs เราแนะนำให้คุณเติมข้อมูลของคุณด้วยความยาวที่คงที่โดยการกำหนดอากิวเมนต์ <code>padding=&quot;max_length&quot;</code> และ <code>max_length</code> ให้กับ tokenizer</p>",ke,jl,yt="ถ้าคุณอยากคัดลองและวางโค้ดเพื่อทดลองดู โค้ดข้างล่างนี้คือตัวอย่างของลูปในการเทรนโดยใช้ 🤗 Accelerate แบบสมบูรณ์:",Be,bl,$e,Jl,dt="การใส่โค้ดข้างบนนี้เข้าไปในสคริปต์ <code>train.py</code> จะทำให้สคริปต์ของคุณรันได้ไม่ว่าจะมี distributed setup เป็นแบบใดก็ตาม เพื่อจะลองบน distributed setup ของคุณ ให้รันคำสั่งนี้:",Xe,wl,We,Ul,jt="ซึ่งจะให้คุณตอบคำถาม 2-3 ข้อ และใส่คำตอบของคุณลงไปในไฟล์ configuration ที่ใช้ในคำสั่งนี้:",ve,ul,ge,Tl,bt="ซึ่งจะเริ่มการเทรนโมเดลแบบ distributed",Re,hl,Jt="ถ้าคุณอยากลองโค้ดนี้บน Notebook (เช่น ทดลองกับ TPUs บน Colab) แค่วางโค้ดนี้ลงไปใน <code>training_function()</code> และรัน cell สุดท้ายด้วยโค้ดนี้:",Ve,fl,_e,Cl,wt='คุณสามารถศึกษาจากตัวอย่างอื่น ๆ เพิ่มเติม ได้ใน <a href="https://github.com/huggingface/accelerate/tree/main/examples" rel="nofollow">🤗 Accelerate repo</a>',Ye,Zl,Ae,Il,ze;return U=new kt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),u=new kl({props:{title:"การเทรนโมเดลฉบับสมบูรณ์",local:"การเทรนโมเดลฉบบสมบรณ",headingTag:"h1"}}),T=new $t({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/th/chapter3/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter3/section4.ipynb"}]}}),h=new ut({props:{id:"Dh9CL8fyG80"}}),C=new j({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, DataCollatorWithPadding
raw_datasets = load_dataset(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
<span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)
tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),Z=new kl({props:{title:"เตรียมพร้อมก่อนเทรน",local:"เตรยมพรอมกอนเทรน",headingTag:"h3"}}),B=new j({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbW92ZV9jb2x1bW5zKCU1QiUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiUyQyUyMCUyMmlkeCUyMiU1RCklMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMucmVuYW1lX2NvbHVtbiglMjJsYWJlbCUyMiUyQyUyMCUyMmxhYmVscyUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5jb2x1bW5fbmFtZXM=",highlighted:`tokenized_datasets = tokenized_datasets.remove_columns([<span class="hljs-string">&quot;sentence1&quot;</span>, <span class="hljs-string">&quot;sentence2&quot;</span>, <span class="hljs-string">&quot;idx&quot;</span>])
tokenized_datasets = tokenized_datasets.rename_column(<span class="hljs-string">&quot;label&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>)
tokenized_datasets.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names`,wrap:!1}}),X=new j({props:{code:"JTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RA==",highlighted:'[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>]',wrap:!1}}),v=new j({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUyMGJhdGNoX3NpemUlM0Q4JTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
train_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>], shuffle=<span class="hljs-literal">True</span>, batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)
eval_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)`,wrap:!1}}),R=new j({props:{code:"Zm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBicmVhayUwQSU3QmslM0ElMjB2LnNoYXBlJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0Q=",highlighted:`<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
<span class="hljs-keyword">break</span>
{k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}}),V=new j({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjUlNUQpJTJDJTBBJTIwJ2xhYmVscyclM0ElMjB0b3JjaC5TaXplKCU1QjglNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSU3RA==",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;input_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;labels&#x27;</span>: torch.Size([<span class="hljs-number">8</span>]),
<span class="hljs-string">&#x27;token_type_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>])}`,wrap:!1}}),A=new j({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),N=new j({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBcHJpbnQob3V0cHV0cy5sb3NzJTJDJTIwb3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**batch)
<span class="hljs-built_in">print</span>(outputs.loss, outputs.logits.shape)`,wrap:!1}}),E=new j({props:{code:"dGVuc29yKDAuNTQ0MSUyQyUyMGdyYWRfZm4lM0QlM0NObGxMb3NzQmFja3dhcmQlM0UpJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwMiU1RCk=",highlighted:'tensor(<span class="hljs-number">0.5441</span>, grad_fn=&lt;NllLossBackward&gt;) torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">2</span>])',wrap:!1}}),H=new j({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDVlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">5e-5</span>)`,wrap:!1}}),S=new j({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV9lcG9jaHMlMjAqJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbHJfc2NoZWR1bGVyJTIwJTNEJTIwZ2V0X3NjaGVkdWxlciglMEElMjAlMjAlMjAlMjAlMjJsaW5lYXIlMjIlMkMlMEElMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUyQyUwQSklMEFwcmludChudW1fdHJhaW5pbmdfc3RlcHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
<span class="hljs-built_in">print</span>(num_training_steps)`,wrap:!1}}),q=new j({props:{code:"MTM3Nw==",highlighted:'<span class="hljs-number">1377</span>',wrap:!1}}),L=new kl({props:{title:"ลูปในการเทรน",local:"ลปในการเทรน",headingTag:"h3"}}),D=new j({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFtb2RlbC50byhkZXZpY2UpJTBBZGV2aWNl",highlighted:`<span class="hljs-keyword">import</span> torch
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
device`,wrap:!1}}),P=new j({props:{code:"ZGV2aWNlKHR5cGUlM0QnY3VkYScp",highlighted:'device(<span class="hljs-built_in">type</span>=<span class="hljs-string">&#x27;cuda&#x27;</span>)',wrap:!1}}),ll=new j({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBbW9kZWwudHJhaW4oKSUwQWZvciUyMGVwb2NoJTIwaW4lMjByYW5nZShudW1fZXBvY2hzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGJhdGNoJTIwaW4lMjB0cmFpbl9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcy5iYWNrd2FyZCgpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),tl=new kl({props:{title:"ลูปในการประเมินผลโมเดล (evaluation loop)",local:"ลปในการประเมนผลโมเดล-evaluation-loop",headingTag:"h3"}}),al=new j({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1vZGVsLmV2YWwoKSUwQWZvciUyMGJhdGNoJTIwaW4lMjBldmFsX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmxvZ2l0cyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwdG9yY2guYXJnbWF4KGxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQSUyMCUyMCUyMCUyMG1ldHJpYy5hZGRfYmF0Y2gocHJlZGljdGlvbnMlM0RwcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0RiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCklMEElMEFtZXRyaWMuY29tcHV0ZSgp",highlighted:`<span class="hljs-keyword">import</span> evaluate
metric = evaluate.load(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
model.<span class="hljs-built_in">eval</span>()
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
<span class="hljs-keyword">with</span> torch.no_grad():
outputs = model(**batch)
logits = outputs.logits
predictions = torch.argmax(logits, dim=-<span class="hljs-number">1</span>)
metric.add_batch(predictions=predictions, references=batch[<span class="hljs-string">&quot;labels&quot;</span>])
metric.compute()`,wrap:!1}}),nl=new j({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODQzMTM3MjU0OTAxOTYwOCUyQyUyMCdmMSclM0ElMjAwLjg5MDc4NDk4MjkzNTE1MzUlN0Q=",highlighted:'{<span class="hljs-string">&#x27;accuracy&#x27;</span>: <span class="hljs-number">0.8431372549019608</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.8907849829351535</span>}',wrap:!1}}),Ml=new kl({props:{title:"เร่งความเร็วให้ลูปในการเทรนของคุณด้วย 🤗 Accelerate",local:"เรงความเรวใหลปในการเทรนของคณดวย--accelerate",headingTag:"h3"}}),il=new ut({props:{id:"s7dy8QRgjJ0"}}),rl=new j({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUyQyUyMGdldF9zY2hlZHVsZXIlMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDNlLTUpJTBBJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBbW9kZWwudG8oZGV2aWNlKSUwQSUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX2Vwb2NocyUyMColMjBsZW4odHJhaW5fZGF0YWxvYWRlciklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzLmJhY2t3YXJkKCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb2dyZXNzX2Jhci51cGRhdGUoMSk=",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),ml=new j({props:{code:"JTJCJTIwZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUyMCUyMGZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTJDJTIwZ2V0X3NjaGVkdWxlciUwQSUwQSUyQiUyMGFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoKSUwQSUwQSUyMCUyMG1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCUyQyUyMG51bV9sYWJlbHMlM0QyKSUwQSUyMCUyMG9wdGltaXplciUyMCUzRCUyMEFkYW1XKG1vZGVsLnBhcmFtZXRlcnMoKSUyQyUyMGxyJTNEM2UtNSklMEElMEEtJTIwZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBLSUyMG1vZGVsLnRvKGRldmljZSklMEElMEElMkIlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTJDJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMjAlM0QlMjBhY2NlbGVyYXRvci5wcmVwYXJlKCUwQSUyQiUyMCUyMCUyMCUyMCUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMkMlMjBtb2RlbCUyQyUyMG9wdGltaXplciUwQSUyQiUyMCklMEElMEElMjAlMjBudW1fZXBvY2hzJTIwJTNEJTIwMyUwQSUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV9lcG9jaHMlMjAqJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBJTIwJTIwbHJfc2NoZWR1bGVyJTIwJTNEJTIwZ2V0X3NjaGVkdWxlciglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJsaW5lYXIlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUwQSUyMCUyMCklMEElMEElMjAlMjBwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBJTIwJTIwbW9kZWwudHJhaW4oKSUwQSUyMCUyMGZvciUyMGVwb2NoJTIwaW4lMjByYW5nZShudW1fZXBvY2hzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGJhdGNoJTIwaW4lMjB0cmFpbl9kYXRhbG9hZGVyJTNBJTBBLSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJhdGNoJTIwJTNEJTIwJTdCayUzQSUyMHYudG8oZGV2aWNlKSUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBiYXRjaC5pdGVtcygpJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcyUyMCUzRCUyMG91dHB1dHMubG9zcyUwQS0lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzLmJhY2t3YXJkKCklMEElMkIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKQ==",highlighted:`<span class="hljs-addition">+ from accelerate import Accelerator</span>
from transformers import AutoModelForSequenceClassification, get_scheduler
<span class="hljs-addition">+ accelerator = Accelerator()</span>
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
optimizer = AdamW(model.parameters(), lr=3e-5)
<span class="hljs-deletion">- device = torch.device(&quot;cuda&quot;) if torch.cuda.is_available() else torch.device(&quot;cpu&quot;)</span>
<span class="hljs-deletion">- model.to(device)</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare(</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer</span>
<span class="hljs-addition">+ )</span>
num_epochs = 3
num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
&quot;linear&quot;,
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps
)
progress_bar = tqdm(range(num_training_steps))
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
<span class="hljs-deletion">- batch = {k: v.to(device) for k, v in batch.items()}</span>
outputs = model(**batch)
loss = outputs.loss
<span class="hljs-deletion">- loss.backward()</span>
<span class="hljs-addition">+ accelerator.backward(loss)</span>
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)`,wrap:!1}}),bl=new j({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQWZyb20lMjB0b3JjaC5vcHRpbSUyMGltcG9ydCUyMEFkYW1XJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMjBnZXRfc2NoZWR1bGVyJTBBJTBBYWNjZWxlcmF0b3IlMjAlM0QlMjBBY2NlbGVyYXRvcigpJTBBJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIpJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QzZS01KSUwQSUwQXRyYWluX2RsJTJDJTIwZXZhbF9kbCUyQyUyMG1vZGVsJTJDJTIwb3B0aW1pemVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTJDJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMEEpJTBBJTBBbnVtX2Vwb2NocyUyMCUzRCUyMDMlMEFudW1fdHJhaW5pbmdfc3RlcHMlMjAlM0QlMjBudW1fZXBvY2hzJTIwKiUyMGxlbih0cmFpbl9kbCklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RsJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcyUyMCUzRCUyMG91dHB1dHMubG9zcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator
<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
accelerator = Accelerator()
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
train_dl, eval_dl, model, optimizer = accelerator.prepare(
train_dataloader, eval_dataloader, model, optimizer
)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dl)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dl:
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),wl=new j({props:{code:"YWNjZWxlcmF0ZSUyMGNvbmZpZw==",highlighted:"accelerate config",wrap:!1}}),ul=new j({props:{code:"YWNjZWxlcmF0ZSUyMGxhdW5jaCUyMHRyYWluLnB5",highlighted:'accelerate <span class="hljs-built_in">launch</span> train.py',wrap:!1}}),fl=new j({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBub3RlYm9va19sYXVuY2hlciUwQSUwQW5vdGVib29rX2xhdW5jaGVyKHRyYWluaW5nX2Z1bmN0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> notebook_launcher
notebook_launcher(training_function)`,wrap:!1}}),Zl=new Bt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter3/4.mdx"}}),{c(){b=p("meta"),Bl=a(),Gl=p("p"),$l=a(),M(U.$$.fragment),Xl=a(),M(u.$$.fragment),Wl=a(),M(T.$$.fragment),vl=a(),M(h.$$.fragment),gl=a(),f=p("p"),f.innerHTML=Fe,Rl=a(),M(C.$$.fragment),Vl=a(),M(Z.$$.fragment),_l=a(),G=p("p"),G.innerHTML=Qe,Yl=a(),I=p("ul"),I.innerHTML=He,Al=a(),k=p("p"),k.innerHTML=xe,zl=a(),M(B.$$.fragment),Nl=a(),$=p("p"),$.textContent=Se,El=a(),M(X.$$.fragment),Fl=a(),W=p("p"),W.textContent=qe,Ql=a(),M(v.$$.fragment),Hl=a(),g=p("p"),g.textContent=Le,xl=a(),M(R.$$.fragment),Sl=a(),M(V.$$.fragment),ql=a(),_=p("p"),_.innerHTML=Ke,Ll=a(),Y=p("p"),Y.textContent=De,Kl=a(),M(A.$$.fragment),Dl=a(),z=p("p"),z.textContent=Pe,Pl=a(),M(N.$$.fragment),Ol=a(),M(E.$$.fragment),le=a(),F=p("p"),F.innerHTML=Oe,ee=a(),Q=p("p"),Q.innerHTML=lt,te=a(),M(H.$$.fragment),se=a(),x=p("p"),x.innerHTML=et,ae=a(),M(S.$$.fragment),ne=a(),M(q.$$.fragment),pe=a(),M(L.$$.fragment),Me=a(),K=p("p"),K.innerHTML=tt,ie=a(),M(D.$$.fragment),ce=a(),M(P.$$.fragment),re=a(),O=p("p"),O.innerHTML=st,oe=a(),M(ll.$$.fragment),me=a(),el=p("p"),el.textContent=at,ye=a(),M(tl.$$.fragment),de=a(),sl=p("p"),sl.innerHTML=nt,je=a(),M(al.$$.fragment),be=a(),M(nl.$$.fragment),Je=a(),pl=p("p"),pl.textContent=pt,we=a(),J=p("blockquote"),J.innerHTML=Mt,Ue=a(),M(Ml.$$.fragment),ue=a(),M(il.$$.fragment),Te=a(),cl=p("p"),cl.innerHTML=it,he=a(),M(rl.$$.fragment),fe=a(),ol=p("p"),ol.textContent=ct,Ce=a(),M(ml.$$.fragment),Ze=a(),yl=p("p"),yl.innerHTML=rt,Ge=a(),dl=p("p"),dl.innerHTML=ot,Ie=a(),w=p("blockquote"),w.innerHTML=mt,ke=a(),jl=p("p"),jl.textContent=yt,Be=a(),M(bl.$$.fragment),$e=a(),Jl=p("p"),Jl.innerHTML=dt,Xe=a(),M(wl.$$.fragment),We=a(),Ul=p("p"),Ul.textContent=jt,ve=a(),M(ul.$$.fragment),ge=a(),Tl=p("p"),Tl.textContent=bt,Re=a(),hl=p("p"),hl.innerHTML=Jt,Ve=a(),M(fl.$$.fragment),_e=a(),Cl=p("p"),Cl.innerHTML=wt,Ye=a(),M(Zl.$$.fragment),Ae=a(),Il=p("p"),this.h()},l(l){const e=Gt("svelte-u9bgzb",document.head);b=i(e,"META",{name:!0,content:!0}),e.forEach(t),Bl=n(l),Gl=i(l,"P",{}),Ut(Gl).forEach(t),$l=n(l),c(U.$$.fragment,l),Xl=n(l),c(u.$$.fragment,l),Wl=n(l),c(T.$$.fragment,l),vl=n(l),c(h.$$.fragment,l),gl=n(l),f=i(l,"P",{"data-svelte-h":!0}),d(f)!=="svelte-3eihvy"&&(f.innerHTML=Fe),Rl=n(l),c(C.$$.fragment,l),Vl=n(l),c(Z.$$.fragment,l),_l=n(l),G=i(l,"P",{"data-svelte-h":!0}),d(G)!=="svelte-yx9pto"&&(G.innerHTML=Qe),Yl=n(l),I=i(l,"UL",{"data-svelte-h":!0}),d(I)!=="svelte-1j37sla"&&(I.innerHTML=He),Al=n(l),k=i(l,"P",{"data-svelte-h":!0}),d(k)!=="svelte-13yiw4s"&&(k.innerHTML=xe),zl=n(l),c(B.$$.fragment,l),Nl=n(l),$=i(l,"P",{"data-svelte-h":!0}),d($)!=="svelte-16qvpmp"&&($.textContent=Se),El=n(l),c(X.$$.fragment,l),Fl=n(l),W=i(l,"P",{"data-svelte-h":!0}),d(W)!=="svelte-tlxg70"&&(W.textContent=qe),Ql=n(l),c(v.$$.fragment,l),Hl=n(l),g=i(l,"P",{"data-svelte-h":!0}),d(g)!=="svelte-6oxrgh"&&(g.textContent=Le),xl=n(l),c(R.$$.fragment,l),Sl=n(l),c(V.$$.fragment,l),ql=n(l),_=i(l,"P",{"data-svelte-h":!0}),d(_)!=="svelte-o8oji2"&&(_.innerHTML=Ke),Ll=n(l),Y=i(l,"P",{"data-svelte-h":!0}),d(Y)!=="svelte-11xpnnj"&&(Y.textContent=De),Kl=n(l),c(A.$$.fragment,l),Dl=n(l),z=i(l,"P",{"data-svelte-h":!0}),d(z)!=="svelte-k4769v"&&(z.textContent=Pe),Pl=n(l),c(N.$$.fragment,l),Ol=n(l),c(E.$$.fragment,l),le=n(l),F=i(l,"P",{"data-svelte-h":!0}),d(F)!=="svelte-1y9yqwp"&&(F.innerHTML=Oe),ee=n(l),Q=i(l,"P",{"data-svelte-h":!0}),d(Q)!=="svelte-1xhxymx"&&(Q.innerHTML=lt),te=n(l),c(H.$$.fragment,l),se=n(l),x=i(l,"P",{"data-svelte-h":!0}),d(x)!=="svelte-hfwyzg"&&(x.innerHTML=et),ae=n(l),c(S.$$.fragment,l),ne=n(l),c(q.$$.fragment,l),pe=n(l),c(L.$$.fragment,l),Me=n(l),K=i(l,"P",{"data-svelte-h":!0}),d(K)!=="svelte-1anars6"&&(K.innerHTML=tt),ie=n(l),c(D.$$.fragment,l),ce=n(l),c(P.$$.fragment,l),re=n(l),O=i(l,"P",{"data-svelte-h":!0}),d(O)!=="svelte-4yu8h4"&&(O.innerHTML=st),oe=n(l),c(ll.$$.fragment,l),me=n(l),el=i(l,"P",{"data-svelte-h":!0}),d(el)!=="svelte-jwseiv"&&(el.textContent=at),ye=n(l),c(tl.$$.fragment,l),de=n(l),sl=i(l,"P",{"data-svelte-h":!0}),d(sl)!=="svelte-13kl1fe"&&(sl.innerHTML=nt),je=n(l),c(al.$$.fragment,l),be=n(l),c(nl.$$.fragment,l),Je=n(l),pl=i(l,"P",{"data-svelte-h":!0}),d(pl)!=="svelte-opmd1y"&&(pl.textContent=pt),we=n(l),J=i(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),d(J)!=="svelte-ehavwu"&&(J.innerHTML=Mt),Ue=n(l),c(Ml.$$.fragment,l),ue=n(l),c(il.$$.fragment,l),Te=n(l),cl=i(l,"P",{"data-svelte-h":!0}),d(cl)!=="svelte-i04rp4"&&(cl.innerHTML=it),he=n(l),c(rl.$$.fragment,l),fe=n(l),ol=i(l,"P",{"data-svelte-h":!0}),d(ol)!=="svelte-1u1yq0z"&&(ol.textContent=ct),Ce=n(l),c(ml.$$.fragment,l),Ze=n(l),yl=i(l,"P",{"data-svelte-h":!0}),d(yl)!=="svelte-o1s535"&&(yl.innerHTML=rt),Ge=n(l),dl=i(l,"P",{"data-svelte-h":!0}),d(dl)!=="svelte-xmivnj"&&(dl.innerHTML=ot),Ie=n(l),w=i(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),d(w)!=="svelte-1kyyw3o"&&(w.innerHTML=mt),ke=n(l),jl=i(l,"P",{"data-svelte-h":!0}),d(jl)!=="svelte-1y2btcy"&&(jl.textContent=yt),Be=n(l),c(bl.$$.fragment,l),$e=n(l),Jl=i(l,"P",{"data-svelte-h":!0}),d(Jl)!=="svelte-9tts6q"&&(Jl.innerHTML=dt),Xe=n(l),c(wl.$$.fragment,l),We=n(l),Ul=i(l,"P",{"data-svelte-h":!0}),d(Ul)!=="svelte-16sfa88"&&(Ul.textContent=jt),ve=n(l),c(ul.$$.fragment,l),ge=n(l),Tl=i(l,"P",{"data-svelte-h":!0}),d(Tl)!=="svelte-ds4mw9"&&(Tl.textContent=bt),Re=n(l),hl=i(l,"P",{"data-svelte-h":!0}),d(hl)!=="svelte-9mxkg3"&&(hl.innerHTML=Jt),Ve=n(l),c(fl.$$.fragment,l),_e=n(l),Cl=i(l,"P",{"data-svelte-h":!0}),d(Cl)!=="svelte-17ruqm2"&&(Cl.innerHTML=wt),Ye=n(l),c(Zl.$$.fragment,l),Ae=n(l),Il=i(l,"P",{}),Ut(Il).forEach(t),this.h()},h(){Ne(b,"name","hf:doc:metadata"),Ne(b,"content",Wt),Ne(J,"class","tip"),Ne(w,"class","tip")},m(l,e){It(document.head,b),s(l,Bl,e),s(l,Gl,e),s(l,$l,e),r(U,l,e),s(l,Xl,e),r(u,l,e),s(l,Wl,e),r(T,l,e),s(l,vl,e),r(h,l,e),s(l,gl,e),s(l,f,e),s(l,Rl,e),r(C,l,e),s(l,Vl,e),r(Z,l,e),s(l,_l,e),s(l,G,e),s(l,Yl,e),s(l,I,e),s(l,Al,e),s(l,k,e),s(l,zl,e),r(B,l,e),s(l,Nl,e),s(l,$,e),s(l,El,e),r(X,l,e),s(l,Fl,e),s(l,W,e),s(l,Ql,e),r(v,l,e),s(l,Hl,e),s(l,g,e),s(l,xl,e),r(R,l,e),s(l,Sl,e),r(V,l,e),s(l,ql,e),s(l,_,e),s(l,Ll,e),s(l,Y,e),s(l,Kl,e),r(A,l,e),s(l,Dl,e),s(l,z,e),s(l,Pl,e),r(N,l,e),s(l,Ol,e),r(E,l,e),s(l,le,e),s(l,F,e),s(l,ee,e),s(l,Q,e),s(l,te,e),r(H,l,e),s(l,se,e),s(l,x,e),s(l,ae,e),r(S,l,e),s(l,ne,e),r(q,l,e),s(l,pe,e),r(L,l,e),s(l,Me,e),s(l,K,e),s(l,ie,e),r(D,l,e),s(l,ce,e),r(P,l,e),s(l,re,e),s(l,O,e),s(l,oe,e),r(ll,l,e),s(l,me,e),s(l,el,e),s(l,ye,e),r(tl,l,e),s(l,de,e),s(l,sl,e),s(l,je,e),r(al,l,e),s(l,be,e),r(nl,l,e),s(l,Je,e),s(l,pl,e),s(l,we,e),s(l,J,e),s(l,Ue,e),r(Ml,l,e),s(l,ue,e),r(il,l,e),s(l,Te,e),s(l,cl,e),s(l,he,e),r(rl,l,e),s(l,fe,e),s(l,ol,e),s(l,Ce,e),r(ml,l,e),s(l,Ze,e),s(l,yl,e),s(l,Ge,e),s(l,dl,e),s(l,Ie,e),s(l,w,e),s(l,ke,e),s(l,jl,e),s(l,Be,e),r(bl,l,e),s(l,$e,e),s(l,Jl,e),s(l,Xe,e),r(wl,l,e),s(l,We,e),s(l,Ul,e),s(l,ve,e),r(ul,l,e),s(l,ge,e),s(l,Tl,e),s(l,Re,e),s(l,hl,e),s(l,Ve,e),r(fl,l,e),s(l,_e,e),s(l,Cl,e),s(l,Ye,e),r(Zl,l,e),s(l,Ae,e),s(l,Il,e),ze=!0},p:ht,i(l){ze||(o(U.$$.fragment,l),o(u.$$.fragment,l),o(T.$$.fragment,l),o(h.$$.fragment,l),o(C.$$.fragment,l),o(Z.$$.fragment,l),o(B.$$.fragment,l),o(X.$$.fragment,l),o(v.$$.fragment,l),o(R.$$.fragment,l),o(V.$$.fragment,l),o(A.$$.fragment,l),o(N.$$.fragment,l),o(E.$$.fragment,l),o(H.$$.fragment,l),o(S.$$.fragment,l),o(q.$$.fragment,l),o(L.$$.fragment,l),o(D.$$.fragment,l),o(P.$$.fragment,l),o(ll.$$.fragment,l),o(tl.$$.fragment,l),o(al.$$.fragment,l),o(nl.$$.fragment,l),o(Ml.$$.fragment,l),o(il.$$.fragment,l),o(rl.$$.fragment,l),o(ml.$$.fragment,l),o(bl.$$.fragment,l),o(wl.$$.fragment,l),o(ul.$$.fragment,l),o(fl.$$.fragment,l),o(Zl.$$.fragment,l),ze=!0)},o(l){m(U.$$.fragment,l),m(u.$$.fragment,l),m(T.$$.fragment,l),m(h.$$.fragment,l),m(C.$$.fragment,l),m(Z.$$.fragment,l),m(B.$$.fragment,l),m(X.$$.fragment,l),m(v.$$.fragment,l),m(R.$$.fragment,l),m(V.$$.fragment,l),m(A.$$.fragment,l),m(N.$$.fragment,l),m(E.$$.fragment,l),m(H.$$.fragment,l),m(S.$$.fragment,l),m(q.$$.fragment,l),m(L.$$.fragment,l),m(D.$$.fragment,l),m(P.$$.fragment,l),m(ll.$$.fragment,l),m(tl.$$.fragment,l),m(al.$$.fragment,l),m(nl.$$.fragment,l),m(Ml.$$.fragment,l),m(il.$$.fragment,l),m(rl.$$.fragment,l),m(ml.$$.fragment,l),m(bl.$$.fragment,l),m(wl.$$.fragment,l),m(ul.$$.fragment,l),m(fl.$$.fragment,l),m(Zl.$$.fragment,l),ze=!1},d(l){l&&(t(Bl),t(Gl),t($l),t(Xl),t(Wl),t(vl),t(gl),t(f),t(Rl),t(Vl),t(_l),t(G),t(Yl),t(I),t(Al),t(k),t(zl),t(Nl),t($),t(El),t(Fl),t(W),t(Ql),t(Hl),t(g),t(xl),t(Sl),t(ql),t(_),t(Ll),t(Y),t(Kl),t(Dl),t(z),t(Pl),t(Ol),t(le),t(F),t(ee),t(Q),t(te),t(se),t(x),t(ae),t(ne),t(pe),t(Me),t(K),t(ie),t(ce),t(re),t(O),t(oe),t(me),t(el),t(ye),t(de),t(sl),t(je),t(be),t(Je),t(pl),t(we),t(J),t(Ue),t(ue),t(Te),t(cl),t(he),t(fe),t(ol),t(Ce),t(Ze),t(yl),t(Ge),t(dl),t(Ie),t(w),t(ke),t(jl),t(Be),t($e),t(Jl),t(Xe),t(We),t(Ul),t(ve),t(ge),t(Tl),t(Re),t(hl),t(Ve),t(_e),t(Cl),t(Ye),t(Ae),t(Il)),t(b),y(U,l),y(u,l),y(T,l),y(h,l),y(C,l),y(Z,l),y(B,l),y(X,l),y(v,l),y(R,l),y(V,l),y(A,l),y(N,l),y(E,l),y(H,l),y(S,l),y(q,l),y(L,l),y(D,l),y(P,l),y(ll,l),y(tl,l),y(al,l),y(nl,l),y(Ml,l),y(il,l),y(rl,l),y(ml,l),y(bl,l),y(wl,l),y(ul,l),y(fl,l),y(Zl,l)}}}const Wt='{"title":"การเทรนโมเดลฉบับสมบูรณ์","local":"การเทรนโมเดลฉบบสมบรณ","sections":[{"title":"เตรียมพร้อมก่อนเทรน","local":"เตรยมพรอมกอนเทรน","sections":[],"depth":3},{"title":"ลูปในการเทรน","local":"ลปในการเทรน","sections":[],"depth":3},{"title":"ลูปในการประเมินผลโมเดล (evaluation loop)","local":"ลปในการประเมนผลโมเดล-evaluation-loop","sections":[],"depth":3},{"title":"เร่งความเร็วให้ลูปในการเทรนของคุณด้วย 🤗 Accelerate","local":"เรงความเรวใหลปในการเทรนของคณดวย--accelerate","sections":[],"depth":3}],"depth":1}';function vt(Ee){return ft(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class zt extends Ct{constructor(b){super(),Zt(this,b,vt,Xt,Tt,{})}}export{zt as component};

Xet Storage Details

Size:
53.6 kB
·
Xet hash:
9ecde5b9f04e6b7c5c30673b56b269bde9da91b3ba985cef9d47195a2a4e7755

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