Buckets:
| import{s as us,o as Ts,n as hs}from"../chunks/scheduler.37c15a92.js";import{S as fs,i as Cs,g as m,s as a,r as p,A as Zs,h as y,f as s,c as n,j as bs,u as M,x as d,k as Js,y as Gs,a as t,v as i,d as c,t as r,w as o,m as Is,n as $s}from"../chunks/index.2bf4358c.js";import{T as ws}from"../chunks/Tip.363c041f.js";import{Y as Us}from"../chunks/Youtube.1e50a667.js";import{C as j}from"../chunks/CodeBlock.4e987730.js";import{C as ks}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as Bl,E as Bs}from"../chunks/getInferenceSnippets.ebf8be91.js";function Xs(Il){let b,J="✏️ <strong>ลองเลย!</strong> แก้ไขลูปในการเทรนก่อนหน้านี้เพื่อทำการ fine-tune โมเดลของคุณด้วย SST-2 dataset.";return{c(){b=m("p"),b.innerHTML=J},l(w){b=y(w,"P",{"data-svelte-h":!0}),d(b)!=="svelte-13iqpjx"&&(b.innerHTML=J)},m(w,$l){t(w,b,$l)},p:hs,d(w){w&&s(b)}}}function Ws(Il){let b;return{c(){b=Is('⚠️ เพื่อที่จะได้ประโยชน์จากความเร็วที่เพิ่มขึ้นจากการใช้ Cloud TPUs เราแนะนำให้คุณเติมข้อมูลของคุณด้วยความยาวที่คงที่โดยการกำหนดอากิวเมนต์ `padding="max_length"` และ `max_length` ให้กับ tokenizer')},l(J){b=$s(J,'⚠️ เพื่อที่จะได้ประโยชน์จากความเร็วที่เพิ่มขึ้นจากการใช้ Cloud TPUs เราแนะนำให้คุณเติมข้อมูลของคุณด้วยความยาวที่คงที่โดยการกำหนดอากิวเมนต์ `padding="max_length"` และ `max_length` ให้กับ tokenizer')},m(J,w){t(J,b,w)},d(J){J&&s(b)}}}function gs(Il){let b,J,w,$l,T,Xl,h,Wl,f,gl,C,ze="คราวนี้เราจะมาดูกันว่าถ้าเราอยากเขียนโค้ดให้ได้ผลลัพธ์แบบเดียวกันกับใน section ที่แล้วโดยไม่ต้องเรียกใช้ <code>Trainer</code> class จะต้องทำอย่างไร เราสันนิษฐานว่าคุณได้ทำกระบวนการประมวลผลข้อมูลใน section 2 มาแล้ว โค้ดข้างล่างนี้เป็นการสรุปอย่างย่อครอบคลุมถึงกระบวนการทุกอย่างที่คุณจำเป็นต้องทำ:",vl,Z,Rl,G,_l,I,Ne="ก่อนที่เราจะเริ่มเขียนลูปในการเทรนโมเดล เราจะต้องกำหนดออพเจ็กต์บางตัวก่อน โดยออพเจ็กต์ชุดแรกที่เราต้องกำหนดก็คือ dataloaders (ออพเจ็กต์สำหรับโหลดข้อมูล) ที่เราจะใช้ในการโหลดข้อมูล โดยการทำซ้ำกับหลาย ๆ batch ของข้อมูล แต่ก่อนที่คุณจะกำหนด dataloaders เหล่านี้ เราจะต้องทำกระบวนการ postprocessing บางอย่างกับ <code>tokenized_datasets</code> ของเราก่อน เพื่อทำกระบวนการบางอย่างที่ <code>Trainer</code> ได้จัดการให้เราโดยอัตโนมัติ ซึ่งกระบวนการเหล่านั้นได้แก่:",Vl,$,Ee="<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>",Yl,k,Fe="<code>tokenized_datasets</code> ของเรามีเมธอดสำหรับการจัดการแต่ละขั้นตอนดังนี้:",Al,B,zl,X,Qe="จากนั้นเราก็สามารถตรวจสอบผลลัพธ์ได้ว่ามีเฉพาะคอลัมน์ที่โมเดลต้องการใช้:",Nl,W,El,g,He="เมื่อเราทำขั้นตอนนี้เสร็จแล้ว เราก็สามารถกำหนด dataloaders ของเราได้อย่างง่ายดาย ดังนี้:",Fl,v,Ql,R,xe="เพื่อจะตรวจสอบอย่างรวดเร็วว่าไม่มีข้อผิดพลาดจากการประมวลผลข้อมูล เราสามารถลองเรียกข้อมูล batch หนึ่งมาดูได้ดังนี้:",Hl,_,xl,V,Sl,Y,Se="ควรระวังไว้ว่า shape ที่คุณได้อาจจะแตกต่างไปจากนี้เล็กน้อย เนื่องจากเราได้กำหนดค่าให้ training dataloader มีการทำ <code>shuffle=True</code> และเราได้เติมข้อมูลให้ยาวเท่ากับข้อมูลตัวที่ยาวที่สุดใน batch",ql,A,qe="ตอนนี้เราก็ทำกระบวนการประมวลผลข้อมูลเสร็จแล้ว (สำหรับนักปฏิบัติ ML แล้วนี่เป็นเป้าหมายที่น่าพึงพอใจทีเดียว แต่ยังไม่ได้ให้ผลลัพธ์อะไรออกมาเป็นรูปธรรมนะ) ลองกลับมาดูที่โมเดลกัน เราจะสร้างโมเดลขึ้นมาแบบเดียวกับที่เราทำใน section ที่แล้ว:",Ll,z,Kl,N,Le="เพื่อให้แน่ใจว่าทุกอย่างจะทำงานได้ราบรื่นตลอดการเทรน เราจึงลองส่ง batch ของเราเข้าไปในโมเดลนี้ดู:",Dl,E,Pl,F,Ol,Q,Ke="โมเดล 🤗 Transformers ทุกตัวจะให้ผลลัพธ์ค่า loss ออกมาด้วยถ้าหากเราใส่ข้อมูล <code>labels</code> เข้าไปด้วย และเรายังได้ผลลัพธ์ออกมาเป็น logits (ได้ออกมาเป็น 2 ค่าสำหรับแต่ละ input ใน batch ของเรา ดังนั้น logits จะเป็น tensor ที่มีขนาด 8 x 2)",le,H,De='เราเกือบจะพร้อมสำหรับการเขียนลูปในการเทรนแล้ว! เราแค่ต้องการอีกสองสิ่งเท่านั้นเอง: 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):',ee,x,se,S,Pe="เราก็มาถึงขั้นตอนสุดท้าย เราจะต้องกำหนดตัว learning rate scheduler ซึ่งมีค่าเริ่มต้นให้ learningrate มีการ decay แบบเชิงเส้น โดยมีการลดค่าจากค่า learning rate ที่สูงที่สุด (5e-5) ไปเรื่อย ๆ จนมีค่าเป็น 0 เพื่อจะกำหนดค่าให้ถูกต้อง เราจะต้องรู้ว่าการเทรนครั้งนี้มีการเทรนจำนวนทั้งสิ้นกี่ step ซึ่งคำนวณได้จากจำนวน epochs ที่เราจะเทรน คูณด้วยจำนวน training batches (ซึ่งก็คือความยาวของ training dataloader ของเรา) โดยตัว <code>Trainer</code> มีค่าเริ่มต้นในการเทรนอยู่ที่ 3 epochs เราก็จะยึดตามค่านี้:",te,q,ae,L,ne,K,pe,D,Oe="ข้อควรคำนึงถึงข้อสุดท้าย: เราจะต้องการใช้ GPU ถ้าหากเรามีการติดตั้งไว้ (ถ้าเราเทรนบน CPU จะต้องใช้เวลาหลายชั่วโมงแทนที่จะเป็นเวลาไม่กี่นาที) เพื่อกำหนดให้มีการใช้ GPU ทุกครั้งที่เป็นไปได้ เราสามารถกำหนด <code>device</code> ที่เราจะใส่โมเดลและ batches ของข้อมูลของเราลงไปได้ดังนี้:",Me,P,ie,O,ce,ll,ls="ตอนนี้เราก็พร้อมจะเทรนโมเดลแล้ว! เพื่อให้เราพอคาดการณ์ได้ว่าการเทรนจะใช้เวลานานเท่าไร เราจึงเพิ่มแถบแสดงสถานะความคืบหน้าตามจำนวน step ในการเทรน โดยใช้ไลบรารี่ <code>tqdm</code> ดังนี้:",re,el,oe,sl,es="คุณจะสามารถเห็นได้ว่าแก่นของลูปในการเทรนนั้นก็เหมือนกับตัวที่เราแสดงให้ดูในบทนำ เรายังไม่ได้กำหนดให้มีการรายงานค่าใด ๆ ออกมา ดังนั้นลูปในการเทรนตัวนี้จึงไม่ได้บอกอะไรเราเลยว่าโมเดลมีประสิทธิภาพเป็นอย่างไร เราจึงจำเป็นต้องเขียนลูปในการประเมินผลโมเดล (evaluation loop) ด้วย",me,tl,ye,al,ss="เหมือนกับที่เราได้ทำไว้ก่อนหน้านี้ เราสามารถเรียกใช้ metric จากไลบรารี่ 🤗 Evaluate ได้เลย เราได้เห็นเมธอด <code>metric.compute()</code> มาแล้ว แต่ metrics ยังสามารถรวบรวมผลมาเป็น batches ให้เราได้ด้วย โดยใช้เมธอด <code>add_batch()</code> โดยเมื่อเรารวบรวมผลมาจากทุก batches แล้ว เราก็จะคำนวณผลลัพธ์สุดท้ายได้โดยใช้เมธอด <code>metric.compute()</code> โค้ดข้างล่างนี้เป็นตัวอย่างการทำทุกอย่างที่เรากล่าวมานี้ในลูปสำหรับประเมินผลโมเดล:",de,nl,je,pl,be,Ml,ts="ผลลัพธ์ที่ได้อาจแตกต่างไปเล็กน้อยเนื่องจากมีการสุ่มค่า weight ตอนสร้าง model head และมีการสลับข้อมูลแบบสุ่ม แต่ผลที่ได้ก็ควรจะใกล้เคียงกัน",Je,U,we,il,Ue,cl,ue,rl,as='ลูปในการเทรนที่เรากำหนดขึ้นก่อนหน้านี้ทำงานได้ดีบน CPU หรือ GPU ตัวเดียว แต่การใช้ไลบรารี่ <a href="https://github.com/huggingface/accelerate" rel="nofollow">🤗 Accelerate</a> และเพิ่มการปรับค่าอีกเพียงเล็กน้อย จะช่วยให้เราสามารถเทรนบน distributed setup ที่มีการใช้ GPUs หรือ TPUs หลายตัวได้ โดยเริ่มต้นจากการสร้าง training และ validation dataloaders ลูปในการเทรนแบบ manual ของเรามีลักษณะดังนี้:',Te,ol,he,ml,ns="และต่อไปนี้คือสิ่งที่ต้องปรับแก้:",fe,yl,Ce,dl,ps="โค้ดบรรทัดแรกที่ต้องเพิ่มเข้ามาเป็นส่วนของการ import โดยบรรทัดที่สองเป็นการสร้างออพเจ็กต์ <code>Accelerator</code> ที่จะตรวจสอบ environment ของคุณและสร้าง distributed setup ที่เหมาะสมขึ้นมาให้ โดย 🤗 Accelerate จะช่วยจัดการ device ให้คุณ คุณจึงสามารถเอาโค้ดส่วนที่คุณใส่โมเดลเข้าไปใน device ออกได้ (หรือถ้าคุณอยากคงไว้ ก็เปลี่ยนจาก <code>device</code> เป็น <code>accelerator.device</code>)",Ze,jl,Ms="จากนัั้นก็มีการทำงานหลัก ๆ ในบรรทัดที่ส่ง 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>)",Ge,u,Ie,bl,is="ถ้าคุณอยากคัดลองและวางโค้ดเพื่อทดลองดู โค้ดข้างล่างนี้คือตัวอย่างของลูปในการเทรนโดยใช้ 🤗 Accelerate แบบสมบูรณ์:",$e,Jl,ke,wl,cs="การใส่โค้ดข้างบนนี้เข้าไปในสคริปต์ <code>train.py</code> จะทำให้สคริปต์ของคุณรันได้ไม่ว่าจะมี distributed setup เป็นแบบใดก็ตาม เพื่อจะลองบน distributed setup ของคุณ ให้รันคำสั่งนี้:",Be,Ul,Xe,ul,rs="ซึ่งจะให้คุณตอบคำถาม 2-3 ข้อ และใส่คำตอบของคุณลงไปในไฟล์ configuration ที่ใช้ในคำสั่งนี้:",We,Tl,ge,hl,os="ซึ่งจะเริ่มการเทรนโมเดลแบบ distributed",ve,fl,ms="ถ้าคุณอยากลองโค้ดนี้บน Notebook (เช่น ทดลองกับ TPUs บน Colab) แค่วางโค้ดนี้ลงไปใน <code>training_function()</code> และรัน cell สุดท้ายด้วยโค้ดนี้:",Re,Cl,_e,Zl,ys='คุณสามารถศึกษาจากตัวอย่างอื่น ๆ เพิ่มเติม ได้ใน <a href="https://github.com/huggingface/accelerate/tree/main/examples" rel="nofollow">🤗 Accelerate repo</a>',Ve,Gl,Ye,kl,Ae;return T=new Bl({props:{title:"การเทรนโมเดลฉบับสมบูรณ์",local:"การเทรนโมเดลฉบบสมบรณ",headingTag:"h1"}}),h=new ks({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"}]}}),f=new Us({props:{id:"Dh9CL8fyG80"}}),Z=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">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</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">"sentence1"</span>], example[<span class="hljs-string">"sentence2"</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}}),G=new Bl({props:{title:"เตรียมพร้อมก่อนเทรน",local:"เตรยมพรอมกอนเทรน",headingTag:"h3"}}),B=new j({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbW92ZV9jb2x1bW5zKCU1QiUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiUyQyUyMCUyMmlkeCUyMiU1RCklMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMucmVuYW1lX2NvbHVtbiglMjJsYWJlbCUyMiUyQyUyMCUyMmxhYmVscyUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5jb2x1bW5fbmFtZXM=",highlighted:`tokenized_datasets = tokenized_datasets.remove_columns([<span class="hljs-string">"sentence1"</span>, <span class="hljs-string">"sentence2"</span>, <span class="hljs-string">"idx"</span>]) | |
| tokenized_datasets = tokenized_datasets.rename_column(<span class="hljs-string">"label"</span>, <span class="hljs-string">"labels"</span>) | |
| tokenized_datasets.set_format(<span class="hljs-string">"torch"</span>) | |
| tokenized_datasets[<span class="hljs-string">"train"</span>].column_names`,wrap:!1}}),W=new j({props:{code:"JTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RA==",highlighted:'[<span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"labels"</span>, <span class="hljs-string">"token_type_ids"</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">"train"</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">"validation"</span>], batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator | |
| )`,wrap:!1}}),_=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">'attention_mask'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]), | |
| <span class="hljs-string">'input_ids'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]), | |
| <span class="hljs-string">'labels'</span>: torch.Size([<span class="hljs-number">8</span>]), | |
| <span class="hljs-string">'token_type_ids'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>])}`,wrap:!1}}),z=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}}),E=new j({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBcHJpbnQob3V0cHV0cy5sb3NzJTJDJTIwb3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**batch) | |
| <span class="hljs-built_in">print</span>(outputs.loss, outputs.logits.shape)`,wrap:!1}}),F=new j({props:{code:"dGVuc29yKDAuNTQ0MSUyQyUyMGdyYWRfZm4lM0QlM0NObGxMb3NzQmFja3dhcmQlM0UpJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwMiU1RCk=",highlighted:'tensor(<span class="hljs-number">0.5441</span>, grad_fn=<NllLossBackward>) torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">2</span>])',wrap:!1}}),x=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}}),q=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">"linear"</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}}),L=new j({props:{code:"MTM3Nw==",highlighted:'<span class="hljs-number">1377</span>',wrap:!1}}),K=new Bl({props:{title:"ลูปในการเทรน",local:"ลปในการเทรน",headingTag:"h3"}}),P=new j({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFtb2RlbC50byhkZXZpY2UpJTBBZGV2aWNl",highlighted:`<span class="hljs-keyword">import</span> torch | |
| device = torch.device(<span class="hljs-string">"cuda"</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">"cpu"</span>) | |
| model.to(device) | |
| device`,wrap:!1}}),O=new j({props:{code:"ZGV2aWNlKHR5cGUlM0QnY3VkYScp",highlighted:'device(<span class="hljs-built_in">type</span>=<span class="hljs-string">'cuda'</span>)',wrap:!1}}),el=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 Bl({props:{title:"ลูปในการประเมินผลโมเดล (evaluation loop)",local:"ลปในการประเมนผลโมเดล-evaluation-loop",headingTag:"h3"}}),nl=new j({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1vZGVsLmV2YWwoKSUwQWZvciUyMGJhdGNoJTIwaW4lMjBldmFsX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmxvZ2l0cyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwdG9yY2guYXJnbWF4KGxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQSUyMCUyMCUyMCUyMG1ldHJpYy5hZGRfYmF0Y2gocHJlZGljdGlvbnMlM0RwcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0RiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCklMEElMEFtZXRyaWMuY29tcHV0ZSgp",highlighted:`<span class="hljs-keyword">import</span> evaluate | |
| metric = evaluate.load(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</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">"labels"</span>]) | |
| metric.compute()`,wrap:!1}}),pl=new j({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODQzMTM3MjU0OTAxOTYwOCUyQyUyMCdmMSclM0ElMjAwLjg5MDc4NDk4MjkzNTE1MzUlN0Q=",highlighted:'{<span class="hljs-string">'accuracy'</span>: <span class="hljs-number">0.8431372549019608</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">0.8907849829351535</span>}',wrap:!1}}),U=new ws({props:{$$slots:{default:[Xs]},$$scope:{ctx:Il}}}),il=new Bl({props:{title:"เร่งความเร็วให้ลูปในการเทรนของคุณด้วย 🤗 Accelerate",local:"เรงความเรวใหลปในการเทรนของคณดวย--accelerate",headingTag:"h3"}}),cl=new Us({props:{id:"s7dy8QRgjJ0"}}),ol=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">"cuda"</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">"cpu"</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">"linear"</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}}),yl=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("cuda") if torch.cuda.is_available() else torch.device("cpu")</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( | |
| "linear", | |
| 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}}),u=new ws({props:{$$slots:{default:[Ws]},$$scope:{ctx:Il}}}),Jl=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">"linear"</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}}),Ul=new j({props:{code:"YWNjZWxlcmF0ZSUyMGNvbmZpZw==",highlighted:"accelerate config",wrap:!1}}),Tl=new j({props:{code:"YWNjZWxlcmF0ZSUyMGxhdW5jaCUyMHRyYWluLnB5",highlighted:'accelerate <span class="hljs-built_in">launch</span> train.py',wrap:!1}}),Cl=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}}),Gl=new Bs({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter3/4.mdx"}}),{c(){b=m("meta"),J=a(),w=m("p"),$l=a(),p(T.$$.fragment),Xl=a(),p(h.$$.fragment),Wl=a(),p(f.$$.fragment),gl=a(),C=m("p"),C.innerHTML=ze,vl=a(),p(Z.$$.fragment),Rl=a(),p(G.$$.fragment),_l=a(),I=m("p"),I.innerHTML=Ne,Vl=a(),$=m("ul"),$.innerHTML=Ee,Yl=a(),k=m("p"),k.innerHTML=Fe,Al=a(),p(B.$$.fragment),zl=a(),X=m("p"),X.textContent=Qe,Nl=a(),p(W.$$.fragment),El=a(),g=m("p"),g.textContent=He,Fl=a(),p(v.$$.fragment),Ql=a(),R=m("p"),R.textContent=xe,Hl=a(),p(_.$$.fragment),xl=a(),p(V.$$.fragment),Sl=a(),Y=m("p"),Y.innerHTML=Se,ql=a(),A=m("p"),A.textContent=qe,Ll=a(),p(z.$$.fragment),Kl=a(),N=m("p"),N.textContent=Le,Dl=a(),p(E.$$.fragment),Pl=a(),p(F.$$.fragment),Ol=a(),Q=m("p"),Q.innerHTML=Ke,le=a(),H=m("p"),H.innerHTML=De,ee=a(),p(x.$$.fragment),se=a(),S=m("p"),S.innerHTML=Pe,te=a(),p(q.$$.fragment),ae=a(),p(L.$$.fragment),ne=a(),p(K.$$.fragment),pe=a(),D=m("p"),D.innerHTML=Oe,Me=a(),p(P.$$.fragment),ie=a(),p(O.$$.fragment),ce=a(),ll=m("p"),ll.innerHTML=ls,re=a(),p(el.$$.fragment),oe=a(),sl=m("p"),sl.textContent=es,me=a(),p(tl.$$.fragment),ye=a(),al=m("p"),al.innerHTML=ss,de=a(),p(nl.$$.fragment),je=a(),p(pl.$$.fragment),be=a(),Ml=m("p"),Ml.textContent=ts,Je=a(),p(U.$$.fragment),we=a(),p(il.$$.fragment),Ue=a(),p(cl.$$.fragment),ue=a(),rl=m("p"),rl.innerHTML=as,Te=a(),p(ol.$$.fragment),he=a(),ml=m("p"),ml.textContent=ns,fe=a(),p(yl.$$.fragment),Ce=a(),dl=m("p"),dl.innerHTML=ps,Ze=a(),jl=m("p"),jl.innerHTML=Ms,Ge=a(),p(u.$$.fragment),Ie=a(),bl=m("p"),bl.textContent=is,$e=a(),p(Jl.$$.fragment),ke=a(),wl=m("p"),wl.innerHTML=cs,Be=a(),p(Ul.$$.fragment),Xe=a(),ul=m("p"),ul.textContent=rs,We=a(),p(Tl.$$.fragment),ge=a(),hl=m("p"),hl.textContent=os,ve=a(),fl=m("p"),fl.innerHTML=ms,Re=a(),p(Cl.$$.fragment),_e=a(),Zl=m("p"),Zl.innerHTML=ys,Ve=a(),p(Gl.$$.fragment),Ye=a(),kl=m("p"),this.h()},l(l){const e=Zs("svelte-u9bgzb",document.head);b=y(e,"META",{name:!0,content:!0}),e.forEach(s),J=n(l),w=y(l,"P",{}),bs(w).forEach(s),$l=n(l),M(T.$$.fragment,l),Xl=n(l),M(h.$$.fragment,l),Wl=n(l),M(f.$$.fragment,l),gl=n(l),C=y(l,"P",{"data-svelte-h":!0}),d(C)!=="svelte-3eihvy"&&(C.innerHTML=ze),vl=n(l),M(Z.$$.fragment,l),Rl=n(l),M(G.$$.fragment,l),_l=n(l),I=y(l,"P",{"data-svelte-h":!0}),d(I)!=="svelte-yx9pto"&&(I.innerHTML=Ne),Vl=n(l),$=y(l,"UL",{"data-svelte-h":!0}),d($)!=="svelte-1j37sla"&&($.innerHTML=Ee),Yl=n(l),k=y(l,"P",{"data-svelte-h":!0}),d(k)!=="svelte-13yiw4s"&&(k.innerHTML=Fe),Al=n(l),M(B.$$.fragment,l),zl=n(l),X=y(l,"P",{"data-svelte-h":!0}),d(X)!=="svelte-16qvpmp"&&(X.textContent=Qe),Nl=n(l),M(W.$$.fragment,l),El=n(l),g=y(l,"P",{"data-svelte-h":!0}),d(g)!=="svelte-tlxg70"&&(g.textContent=He),Fl=n(l),M(v.$$.fragment,l),Ql=n(l),R=y(l,"P",{"data-svelte-h":!0}),d(R)!=="svelte-6oxrgh"&&(R.textContent=xe),Hl=n(l),M(_.$$.fragment,l),xl=n(l),M(V.$$.fragment,l),Sl=n(l),Y=y(l,"P",{"data-svelte-h":!0}),d(Y)!=="svelte-o8oji2"&&(Y.innerHTML=Se),ql=n(l),A=y(l,"P",{"data-svelte-h":!0}),d(A)!=="svelte-11xpnnj"&&(A.textContent=qe),Ll=n(l),M(z.$$.fragment,l),Kl=n(l),N=y(l,"P",{"data-svelte-h":!0}),d(N)!=="svelte-k4769v"&&(N.textContent=Le),Dl=n(l),M(E.$$.fragment,l),Pl=n(l),M(F.$$.fragment,l),Ol=n(l),Q=y(l,"P",{"data-svelte-h":!0}),d(Q)!=="svelte-1y9yqwp"&&(Q.innerHTML=Ke),le=n(l),H=y(l,"P",{"data-svelte-h":!0}),d(H)!=="svelte-1xhxymx"&&(H.innerHTML=De),ee=n(l),M(x.$$.fragment,l),se=n(l),S=y(l,"P",{"data-svelte-h":!0}),d(S)!=="svelte-hfwyzg"&&(S.innerHTML=Pe),te=n(l),M(q.$$.fragment,l),ae=n(l),M(L.$$.fragment,l),ne=n(l),M(K.$$.fragment,l),pe=n(l),D=y(l,"P",{"data-svelte-h":!0}),d(D)!=="svelte-1anars6"&&(D.innerHTML=Oe),Me=n(l),M(P.$$.fragment,l),ie=n(l),M(O.$$.fragment,l),ce=n(l),ll=y(l,"P",{"data-svelte-h":!0}),d(ll)!=="svelte-4yu8h4"&&(ll.innerHTML=ls),re=n(l),M(el.$$.fragment,l),oe=n(l),sl=y(l,"P",{"data-svelte-h":!0}),d(sl)!=="svelte-jwseiv"&&(sl.textContent=es),me=n(l),M(tl.$$.fragment,l),ye=n(l),al=y(l,"P",{"data-svelte-h":!0}),d(al)!=="svelte-13kl1fe"&&(al.innerHTML=ss),de=n(l),M(nl.$$.fragment,l),je=n(l),M(pl.$$.fragment,l),be=n(l),Ml=y(l,"P",{"data-svelte-h":!0}),d(Ml)!=="svelte-opmd1y"&&(Ml.textContent=ts),Je=n(l),M(U.$$.fragment,l),we=n(l),M(il.$$.fragment,l),Ue=n(l),M(cl.$$.fragment,l),ue=n(l),rl=y(l,"P",{"data-svelte-h":!0}),d(rl)!=="svelte-i04rp4"&&(rl.innerHTML=as),Te=n(l),M(ol.$$.fragment,l),he=n(l),ml=y(l,"P",{"data-svelte-h":!0}),d(ml)!=="svelte-1u1yq0z"&&(ml.textContent=ns),fe=n(l),M(yl.$$.fragment,l),Ce=n(l),dl=y(l,"P",{"data-svelte-h":!0}),d(dl)!=="svelte-o1s535"&&(dl.innerHTML=ps),Ze=n(l),jl=y(l,"P",{"data-svelte-h":!0}),d(jl)!=="svelte-xmivnj"&&(jl.innerHTML=Ms),Ge=n(l),M(u.$$.fragment,l),Ie=n(l),bl=y(l,"P",{"data-svelte-h":!0}),d(bl)!=="svelte-1y2btcy"&&(bl.textContent=is),$e=n(l),M(Jl.$$.fragment,l),ke=n(l),wl=y(l,"P",{"data-svelte-h":!0}),d(wl)!=="svelte-9tts6q"&&(wl.innerHTML=cs),Be=n(l),M(Ul.$$.fragment,l),Xe=n(l),ul=y(l,"P",{"data-svelte-h":!0}),d(ul)!=="svelte-16sfa88"&&(ul.textContent=rs),We=n(l),M(Tl.$$.fragment,l),ge=n(l),hl=y(l,"P",{"data-svelte-h":!0}),d(hl)!=="svelte-ds4mw9"&&(hl.textContent=os),ve=n(l),fl=y(l,"P",{"data-svelte-h":!0}),d(fl)!=="svelte-9mxkg3"&&(fl.innerHTML=ms),Re=n(l),M(Cl.$$.fragment,l),_e=n(l),Zl=y(l,"P",{"data-svelte-h":!0}),d(Zl)!=="svelte-17ruqm2"&&(Zl.innerHTML=ys),Ve=n(l),M(Gl.$$.fragment,l),Ye=n(l),kl=y(l,"P",{}),bs(kl).forEach(s),this.h()},h(){Js(b,"name","hf:doc:metadata"),Js(b,"content",vs)},m(l,e){Gs(document.head,b),t(l,J,e),t(l,w,e),t(l,$l,e),i(T,l,e),t(l,Xl,e),i(h,l,e),t(l,Wl,e),i(f,l,e),t(l,gl,e),t(l,C,e),t(l,vl,e),i(Z,l,e),t(l,Rl,e),i(G,l,e),t(l,_l,e),t(l,I,e),t(l,Vl,e),t(l,$,e),t(l,Yl,e),t(l,k,e),t(l,Al,e),i(B,l,e),t(l,zl,e),t(l,X,e),t(l,Nl,e),i(W,l,e),t(l,El,e),t(l,g,e),t(l,Fl,e),i(v,l,e),t(l,Ql,e),t(l,R,e),t(l,Hl,e),i(_,l,e),t(l,xl,e),i(V,l,e),t(l,Sl,e),t(l,Y,e),t(l,ql,e),t(l,A,e),t(l,Ll,e),i(z,l,e),t(l,Kl,e),t(l,N,e),t(l,Dl,e),i(E,l,e),t(l,Pl,e),i(F,l,e),t(l,Ol,e),t(l,Q,e),t(l,le,e),t(l,H,e),t(l,ee,e),i(x,l,e),t(l,se,e),t(l,S,e),t(l,te,e),i(q,l,e),t(l,ae,e),i(L,l,e),t(l,ne,e),i(K,l,e),t(l,pe,e),t(l,D,e),t(l,Me,e),i(P,l,e),t(l,ie,e),i(O,l,e),t(l,ce,e),t(l,ll,e),t(l,re,e),i(el,l,e),t(l,oe,e),t(l,sl,e),t(l,me,e),i(tl,l,e),t(l,ye,e),t(l,al,e),t(l,de,e),i(nl,l,e),t(l,je,e),i(pl,l,e),t(l,be,e),t(l,Ml,e),t(l,Je,e),i(U,l,e),t(l,we,e),i(il,l,e),t(l,Ue,e),i(cl,l,e),t(l,ue,e),t(l,rl,e),t(l,Te,e),i(ol,l,e),t(l,he,e),t(l,ml,e),t(l,fe,e),i(yl,l,e),t(l,Ce,e),t(l,dl,e),t(l,Ze,e),t(l,jl,e),t(l,Ge,e),i(u,l,e),t(l,Ie,e),t(l,bl,e),t(l,$e,e),i(Jl,l,e),t(l,ke,e),t(l,wl,e),t(l,Be,e),i(Ul,l,e),t(l,Xe,e),t(l,ul,e),t(l,We,e),i(Tl,l,e),t(l,ge,e),t(l,hl,e),t(l,ve,e),t(l,fl,e),t(l,Re,e),i(Cl,l,e),t(l,_e,e),t(l,Zl,e),t(l,Ve,e),i(Gl,l,e),t(l,Ye,e),t(l,kl,e),Ae=!0},p(l,[e]){const ds={};e&2&&(ds.$$scope={dirty:e,ctx:l}),U.$set(ds);const js={};e&2&&(js.$$scope={dirty:e,ctx:l}),u.$set(js)},i(l){Ae||(c(T.$$.fragment,l),c(h.$$.fragment,l),c(f.$$.fragment,l),c(Z.$$.fragment,l),c(G.$$.fragment,l),c(B.$$.fragment,l),c(W.$$.fragment,l),c(v.$$.fragment,l),c(_.$$.fragment,l),c(V.$$.fragment,l),c(z.$$.fragment,l),c(E.$$.fragment,l),c(F.$$.fragment,l),c(x.$$.fragment,l),c(q.$$.fragment,l),c(L.$$.fragment,l),c(K.$$.fragment,l),c(P.$$.fragment,l),c(O.$$.fragment,l),c(el.$$.fragment,l),c(tl.$$.fragment,l),c(nl.$$.fragment,l),c(pl.$$.fragment,l),c(U.$$.fragment,l),c(il.$$.fragment,l),c(cl.$$.fragment,l),c(ol.$$.fragment,l),c(yl.$$.fragment,l),c(u.$$.fragment,l),c(Jl.$$.fragment,l),c(Ul.$$.fragment,l),c(Tl.$$.fragment,l),c(Cl.$$.fragment,l),c(Gl.$$.fragment,l),Ae=!0)},o(l){r(T.$$.fragment,l),r(h.$$.fragment,l),r(f.$$.fragment,l),r(Z.$$.fragment,l),r(G.$$.fragment,l),r(B.$$.fragment,l),r(W.$$.fragment,l),r(v.$$.fragment,l),r(_.$$.fragment,l),r(V.$$.fragment,l),r(z.$$.fragment,l),r(E.$$.fragment,l),r(F.$$.fragment,l),r(x.$$.fragment,l),r(q.$$.fragment,l),r(L.$$.fragment,l),r(K.$$.fragment,l),r(P.$$.fragment,l),r(O.$$.fragment,l),r(el.$$.fragment,l),r(tl.$$.fragment,l),r(nl.$$.fragment,l),r(pl.$$.fragment,l),r(U.$$.fragment,l),r(il.$$.fragment,l),r(cl.$$.fragment,l),r(ol.$$.fragment,l),r(yl.$$.fragment,l),r(u.$$.fragment,l),r(Jl.$$.fragment,l),r(Ul.$$.fragment,l),r(Tl.$$.fragment,l),r(Cl.$$.fragment,l),r(Gl.$$.fragment,l),Ae=!1},d(l){l&&(s(J),s(w),s($l),s(Xl),s(Wl),s(gl),s(C),s(vl),s(Rl),s(_l),s(I),s(Vl),s($),s(Yl),s(k),s(Al),s(zl),s(X),s(Nl),s(El),s(g),s(Fl),s(Ql),s(R),s(Hl),s(xl),s(Sl),s(Y),s(ql),s(A),s(Ll),s(Kl),s(N),s(Dl),s(Pl),s(Ol),s(Q),s(le),s(H),s(ee),s(se),s(S),s(te),s(ae),s(ne),s(pe),s(D),s(Me),s(ie),s(ce),s(ll),s(re),s(oe),s(sl),s(me),s(ye),s(al),s(de),s(je),s(be),s(Ml),s(Je),s(we),s(Ue),s(ue),s(rl),s(Te),s(he),s(ml),s(fe),s(Ce),s(dl),s(Ze),s(jl),s(Ge),s(Ie),s(bl),s($e),s(ke),s(wl),s(Be),s(Xe),s(ul),s(We),s(ge),s(hl),s(ve),s(fl),s(Re),s(_e),s(Zl),s(Ve),s(Ye),s(kl)),s(b),o(T,l),o(h,l),o(f,l),o(Z,l),o(G,l),o(B,l),o(W,l),o(v,l),o(_,l),o(V,l),o(z,l),o(E,l),o(F,l),o(x,l),o(q,l),o(L,l),o(K,l),o(P,l),o(O,l),o(el,l),o(tl,l),o(nl,l),o(pl,l),o(U,l),o(il,l),o(cl,l),o(ol,l),o(yl,l),o(u,l),o(Jl,l),o(Ul,l),o(Tl,l),o(Cl,l),o(Gl,l)}}}const vs='{"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 Rs(Il){return Ts(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Fs extends fs{constructor(b){super(),Cs(this,b,Rs,gs,us,{})}}export{Fs as component}; | |
Xet Storage Details
- Size:
- 54.2 kB
- Xet hash:
- cb47d42a9eeb87ab88d9dfef51be6d66e3c764a3f77f5ed37dc2608a1ee77ac0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.