Buckets:
| import{s as Na,n as La,o as Qa}from"../chunks/scheduler.893fe8c9.js";import{S as qa,i as Sa,e as m,s,c as i,h as Pa,a as g,d as l,b as n,f as Ea,g as r,j as u,k as b,l as Da,m as a,n as o,t as p,o as c,p as d}from"../chunks/index.b1df2166.js";import{C as Ka,H as y,E as Oa}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.1373e284.js";import{Y as Fa}from"../chunks/Youtube.ec5d7916.js";import{C as M}from"../chunks/CodeBlock.28ad1d7f.js";import{C as es}from"../chunks/CourseFloatingBanner.c1c08878.js";import{Q as nt}from"../chunks/Question.ea6d4cb0.js";function ts(Dl){let h,ot,it,pt,C,ct,Z,dt,_,mt,G,gt,B,Kl="ယခု ကျွန်တော်တို့သည် <code>Trainer</code> class ကို အသုံးမပြုဘဲ၊ ခေတ်မီ PyTorch ၏ အကောင်းဆုံး အလေ့အကျင့်များနှင့်အတူ training loop တစ်ခုကို စတင်တည်ဆောက်ခြင်းဖြင့် ယခင်အပိုင်းတွင် ရရှိခဲ့သော ရလဒ်များအတိုင်း မည်သို့ရရှိနိုင်ကြောင်း လေ့လာပါမည်။ ထပ်မံ၍ သင်သည် အပိုင်း ၂ တွင် ဒေတာ စီမံဆောင်ရွက်မှု (data processing) ကို လုပ်ဆောင်ပြီးဖြစ်သည်ဟု ကျွန်တော်တို့ ယူဆပါသည်။ သင်လိုအပ်မည့် အရာအားလုံး၏ အကျဉ်းချုပ်ကို ဤတွင် ဖော်ပြထားသည်။",ut,f,Ol='<p>🏗️ <strong>Scratch မှ Training လုပ်ခြင်း</strong>: ဤအပိုင်းသည် ယခင်အကြောင်းအရာများပေါ်တွင် အခြေခံထားသည်။ PyTorch training loops နှင့် အကောင်းဆုံးအလေ့အကျင့်များဆိုင်ရာ ပြည့်စုံသော လမ်းညွှန်ချက်များအတွက် <a href="https://huggingface.co/docs/transformers/main/en/training#train-in-native-pytorch" rel="nofollow">🤗 Transformers training documentation</a> နှင့် <a href="https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu#model" rel="nofollow">custom training cookbook</a> ကို ကြည့်ရှုပါ။</p>',Mt,I,yt,x,bt,W,ea="ကျွန်တော်တို့၏ training loop ကို တကယ်တမ်း မရေးမီတွင် objects အချို့ကို သတ်မှတ်ရန် လိုအပ်ပါလိမ့်မည်။ ပထမဆုံးအရာများမှာ batches များကို ထပ်ခါတလဲလဲ လုပ်ဆောင်ရန် အသုံးပြုမည့် dataloaders များဖြစ်သည်။ သို့သော် ထို dataloaders များကို မသတ်မှတ်မီ၊ <code>Trainer</code> က ကျွန်တော်တို့အတွက် အလိုအလျောက် လုပ်ဆောင်ပေးခဲ့သော အရာအချို့ကို ဂရုစိုက်ရန်အတွက် ကျွန်တော်တို့၏ <code>tokenized_datasets</code> ကို postprocessing အနည်းငယ် လုပ်ရန်လိုအပ်သည်။ အထူးသဖြင့်၊ ကျွန်တော်တို့ လုပ်ရန်လိုအပ်သည်များမှာ",ht,z,ta="<li>model က မမျှော်လင့်ထားသော (ဥပမာ <code>sentence1</code> နှင့် <code>sentence2</code> columns ကဲ့သို့) values များနှင့် ကိုက်ညီသော columns များကို ဖယ်ရှားပါ။</li> <li><code>label</code> column ကို <code>labels</code> ဟု ပြန်လည်အမည်ပြောင်းပါ (ဘာလို့လဲဆိုတော့ model က argument ကို <code>labels</code> ဟု အမည်ပေးထားတာကို မျှော်လင့်ထားလို့ပါ)။</li> <li>datasets ၏ format ကို PyTorch tensors များကို ပြန်ပို့မည့်အစား lists များကို ပြန်ပို့ရန် သတ်မှတ်ပါ။</li>",ft,A,la="ကျွန်တော်တို့၏ <code>tokenized_datasets</code> တွင် ထိုအဆင့်တစ်ခုစီအတွက် method တစ်ခုစီ ရှိသည်။",Tt,X,wt,R,aa="ထို့နောက် ရလဒ်တွင် ကျွန်တော်တို့၏ model က လက်ခံမည့် columns များသာ ပါဝင်ခြင်း ရှိမရှိ စစ်ဆေးနိုင်သည်။",jt,V,Jt,Y,sa="ယခု ဒါတွေအားလုံး ပြီးသွားပြီဆိုတော့ ကျွန်တော်တို့၏ dataloaders များကို အလွယ်တကူ သတ်မှတ်နိုင်သည်။",$t,H,Ut,E,na="ဒေတာ စီမံဆောင်ရွက်မှု (data processing) တွင် အမှားအယွင်းမရှိစေရန် လျင်မြန်စွာ စစ်ဆေးရန်အတွက် batch တစ်ခုကို ဤသို့ စစ်ဆေးနိုင်သည်။",vt,F,kt,N,Ct,L,ia="training dataloader အတွက် <code>shuffle=True</code> ကို သတ်မှတ်ထားပြီး batch အတွင်းရှိ အများဆုံးအရှည်အထိ padding လုပ်ထားသောကြောင့် အမှန်တကယ် shape များသည် သင်အတွက် အနည်းငယ် ကွဲပြားနိုင်သည်ကို သတိပြုပါ။",Zt,Q,ra="ယခု ဒေတာ preprocessing ကို ကျွန်တော်တို့ အပြည့်အဝ ပြီးဆုံးသွားပြီဖြစ်ရာ (မည်သည့် ML (Machine Learning) practitioner အတွက်မဆို ကျေနပ်ဖွယ်ကောင်းသော်လည်း ရရှိရန်ခက်ခဲသော ပန်းတိုင်တစ်ခု) model ဆီသို့ ပြောင်းရအောင်။ ၎င်းကို ယခင်အပိုင်းတွင် ကျွန်တော်တို့ လုပ်ဆောင်ခဲ့သည့်အတိုင်း အတိအကျ instantiate လုပ်သည်။",_t,q,Gt,S,oa="training လုပ်နေစဉ် အားလုံးချောမွေ့စွာ ဖြစ်ပျက်စေရန်အတွက် ကျွန်တော်တို့၏ batch ကို model ထံ ပေးပို့သည်။",Bt,P,It,D,xt,K,pa="🤗 Transformers model များအားလုံးသည် <code>labels</code> များကို ပေးဆောင်သောအခါ loss ကို ပြန်ပေးလိမ့်မည်ဖြစ်ပြီး ကျွန်တော်တို့သည် logits (ကျွန်တော်တို့၏ batch ရှိ input တစ်ခုစီအတွက် နှစ်ခုစီ၊ ထို့ကြောင့် size 8 x 2 tensor တစ်ခု) ကိုလည်း ရရှိသည်။",Wt,O,ca='ကျွန်တော်တို့၏ training loop ကို ရေးရန် အသင့်ဖြစ်ခါနီးပြီ။ ကျွန်တော်တို့ နှစ်ခုသာ လိုအပ်တော့သည်- optimizer နှင့် learning rate scheduler။ <code>Trainer</code> က လုပ်ဆောင်ခဲ့သည့်အရာများကို ကိုယ်တိုင် ပြန်လုပ်ရန် ကြိုးစားနေသောကြောင့် တူညီသော defaults များကို အသုံးပြုမည်။ <code>Trainer</code> မှ အသုံးပြုသော optimizer မှာ <code>AdamW</code> ဖြစ်သည်။ ၎င်းသည် Adam နှင့် တူသော်လည်း weight decay regularization အတွက် အနည်းငယ် ကွဲပြားမှုရှိသည် (Ilya Loshchilov နှင့် Frank Hutter ရေးသားသော <a href="https://arxiv.org/abs/1711.05101" rel="nofollow">“Decoupled Weight Decay Regularization”</a> ကို ကြည့်ပါ)။',zt,ee,At,T,da='<p>💡 <strong>ခေတ်မီ Optimization အကြံပြုချက်များ</strong>: ပိုမိုကောင်းမွန်သော စွမ်းဆောင်ရည်အတွက်၊ အောက်ပါတို့ကို စမ်းသပ်နိုင်သည်။</p> <ul><li><strong>Weight decay ပါသော AdamW</strong>: <code>AdamW(model.parameters(), lr=5e-5, weight_decay=0.01)</code></li> <li><strong>8-bit Adam</strong>: memory-efficient optimization အတွက် <code>bitsandbytes</code> ကို အသုံးပြုပါ။</li> <li><strong>မတူညီသော learning rates</strong>: large models များအတွက် learning rates နည်းပါးခြင်း (1e-5 မှ 3e-5) က ပိုမိုကောင်းမွန်စွာ အလုပ်လုပ်လေ့ရှိသည်။</li></ul> <p>🚀 <strong>Optimization အရင်းအမြစ်များ</strong>: optimizers များနှင့် training strategies များအကြောင်း <a href="https://huggingface.co/docs/transformers/main/en/performance#optimizer" rel="nofollow">🤗 Transformers optimization guide</a> တွင် ပိုမိုလေ့လာပါ။</p>',Xt,te,ma="နောက်ဆုံးအနေဖြင့်၊ default အားဖြင့် အသုံးပြုသော learning rate scheduler သည် အများဆုံးတန်ဖိုး (5e-5) မှ 0 အထိ linear decay သက်သက်ဖြစ်သည်။ ၎င်းကို မှန်ကန်စွာ သတ်မှတ်ရန်အတွက် ကျွန်တော်တို့ လုပ်ဆောင်မည့် training steps အရေအတွက်ကို သိရှိရန် လိုအပ်သည်၊ ၎င်းသည် ကျွန်တော်တို့ run လိုသော epochs အရေအတွက်ကို training batches အရေအတွက် (ကျွန်တော်တို့၏ training dataloader ၏ length) ဖြင့် မြှောက်ခြင်းဖြစ်သည်။ <code>Trainer</code> သည် default အားဖြင့် သုံး epochs ကို အသုံးပြုသောကြောင့် ကျွန်တော်တို့ ထိုအတိုင်း လိုက်နာမည်။",Rt,le,Vt,ae,Yt,se,Ht,ne,ga="နောက်ဆုံးတစ်ချက်- ကျွန်တော်တို့ GPU တစ်ခုကို အသုံးပြုနိုင်သည်ဆိုလျှင် ၎င်းကို အသုံးပြုလိုသည် (CPU ပေါ်တွင် training သည် မိနစ်အနည်းငယ်အစား နာရီများစွာ ကြာနိုင်သည်)။ ၎င်းကို လုပ်ဆောင်ရန်အတွက် ကျွန်တော်တို့၏ model နှင့် batches များကို တင်မည့် <code>device</code> တစ်ခုကို သတ်မှတ်သည်။",Et,ie,Ft,re,Nt,oe,ua="ကျွန်တော်တို့ training လုပ်ရန် အသင့်ဖြစ်ပြီ။ training ပြီးဆုံးမည့်အချိန်ကို ခန့်မှန်းနိုင်ရန် <code>tqdm</code> library ကို အသုံးပြု၍ ကျွန်တော်တို့၏ training steps အရေအတွက်ပေါ်တွင် progress bar တစ်ခု ထည့်သွင်းသည်။",Lt,pe,Qt,w,Ma='<p>💡 <strong>ခေတ်မီ Training Optimization များ</strong>: သင်၏ training loop ကို ပိုမိုထိရောက်စေရန်အတွက် အောက်ပါတို့ကို ထည့်သွင်းစဉ်းစားပါ။</p> <ul><li><strong>Gradient Clipping</strong>: <code>optimizer.step()</code> မတိုင်မီ <code>torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)</code> ကို ထည့်သွင်းပါ။</li> <li><strong>Mixed Precision</strong>: ပိုမိုမြန်ဆန်သော training အတွက် <code>torch.cuda.amp.autocast()</code> နှင့် <code>GradScaler</code> ကို အသုံးပြုပါ။</li> <li><strong>Gradient Accumulation</strong>: ပိုကြီးမားသော batch sizes များကို အတုယူရန် batches အများအပြားပေါ်တွင် gradients များကို စုဆောင်းပါ။</li> <li><strong>Checkpointing</strong>: training လုပ်ငန်းစဉ် ပြတ်တောက်သွားပါက ပြန်လည်စတင်နိုင်ရန် model checkpoints များကို အခါအားလျော်စွာ သိမ်းဆည်းပါ။</li></ul> <p>🔧 <strong>Implementation လမ်းညွှန်</strong>: ဤ optimization များ၏ အသေးစိတ်ဥပမာများအတွက် <a href="https://huggingface.co/docs/transformers/main/en/perf_train_gpu_one" rel="nofollow">🤗 Transformers efficient training guide</a> နှင့် <a href="https://huggingface.co/docs/transformers/main/en/optimizers" rel="nofollow">optimizers များ</a> ကို ကြည့်ရှုပါ။</p>',qt,ce,ya="training loop ၏ အဓိက အစိတ်အပိုင်းသည် နိဒါန်းတွင် ပါရှိသည့်ပုံစံနှင့် အလွန်တူညီကြောင်း သင်တွေ့ရပါလိမ့်မည်။ ကျွန်တော်တို့သည် မည်သည့်အစီရင်ခံမှုကိုမျှ တောင်းဆိုခြင်း မရှိသောကြောင့် ဤ training loop က model ၏ စွမ်းဆောင်ရည်နှင့် ပတ်သက်၍ ဘာမျှ ပြောပြမည်မဟုတ်ပါ။ ထိုအတွက် evaluation loop တစ်ခု ထည့်သွင်းရန် လိုအပ်သည်။",St,de,Pt,me,ba="ကျွန်တော်တို့ ယခင်က လုပ်ဆောင်ခဲ့သည့်အတိုင်း 🤗 Evaluate library မှ ပံ့ပိုးပေးထားသော metric တစ်ခုကို အသုံးပြုမည်။ ကျွန်တော်တို့သည် <code>metric.compute()</code> method ကို မြင်တွေ့ခဲ့ပြီးဖြစ်သော်လည်း metrics များသည် <code>add_batch()</code> method ဖြင့် prediction loop ကို လုပ်ဆောင်နေစဉ် batches များကို တကယ်တမ်း စုဆောင်းနိုင်ပါသည်။ batches အားလုံးကို စုဆောင်းပြီးသည်နှင့် <code>metric.compute()</code> ဖြင့် နောက်ဆုံးရလဒ်ကို ရရှိနိုင်ပါသည်။ evaluation loop တွင် ဤအရာအားလုံးကို မည်သို့ အကောင်အထည်ဖော်ရမည်ကို ဤတွင် ဖော်ပြထားသည်။",Dt,j,ha='<p>📊 <strong>Evaluation အကောင်းဆုံးအလေ့အကျင့်များ</strong>: ပိုမိုရှုပ်ထွေးသော evaluation strategies နှင့် metrics များအတွက် <a href="https://huggingface.co/docs/evaluate/" rel="nofollow">🤗 Evaluate documentation</a> နှင့် <a href="https://github.com/huggingface/evaluation-guidebook" rel="nofollow">comprehensive evaluation cookbook</a> ကို လေ့လာပါ။</p>',Kt,ge,Ot,ue,el,Me,fa="ထပ်မံ၍ သင်၏ရလဒ်များသည် model head initialization နှင့် data shuffling ရှိ ကျပန်း (randomness) ကြောင့် အနည်းငယ် ကွဲပြားနိုင်သော်လည်း ၎င်းတို့သည် အနီးစပ်ဆုံး တူညီသင့်သည်။",tl,J,Ta="<p>✏️ <strong>စမ်းသပ်ကြည့်ပါ။</strong> သင်၏ model ကို SST-2 dataset ပေါ်တွင် fine-tune လုပ်ရန် ယခင် training loop ကို ပြင်ဆင်ပါ။</p>",ll,ye,al,be,sl,he,wa='ကျွန်တော်တို့ ယခင်က သတ်မှတ်ခဲ့သော training loop သည် single CPU (Central Processing Unit) သို့မဟုတ် GPU (Graphics Processing Unit) ပေါ်တွင် ကောင်းစွာ အလုပ်လုပ်ပါသည်။ သို့သော် <a href="https://github.com/huggingface/accelerate" rel="nofollow">🤗 Accelerate</a> library ကို အသုံးပြု၍ အပြောင်းအလဲ အနည်းငယ်ဖြင့် GPUs များစွာ သို့မဟုတ် TPUs (Tensor Processing Units) များပေါ်တွင် distributed training (ဖြန့်ကျက်လေ့ကျင့်မှု) ကို ဖွင့်နိုင်ပါသည်။ 🤗 Accelerate သည် distributed training၊ mixed precision နှင့် device placement တို့၏ ရှုပ်ထွေးမှုများကို အလိုအလျောက် ကိုင်တွယ်ပေးပါသည်။ training နှင့် validation dataloaders များ ဖန်တီးခြင်းမှ စတင်၍ ကျွန်တော်တို့၏ manual training loop သည် ဤသို့ ဖြစ်ပါသည်။',nl,$,ja='<p>⚡ <strong>Accelerate Deep Dive</strong>: distributed training၊ mixed precision နှင့် hardware optimization အကြောင်း <a href="https://huggingface.co/docs/accelerate/" rel="nofollow">🤗 Accelerate documentation</a> တွင် အားလုံးကို လေ့လာပြီး <a href="https://huggingface.co/docs/transformers/main/en/accelerate" rel="nofollow">transformers documentation</a> တွင် လက်တွေ့ဥပမာများကို ရှာဖွေပါ။</p>',il,fe,rl,Te,Ja="ပထမဆုံး ထည့်သွင်းရမည့် လိုင်းမှာ import လိုင်းဖြစ်သည်။ ဒုတိယလိုင်းတွင် <code>Accelerator</code> object တစ်ခုကို instantiate လုပ်ထားသည်၊ ၎င်းသည် ပတ်ဝန်းကျင်ကို ကြည့်ရှုပြီး မှန်ကန်သော distributed setup ကို initialize လုပ်ပေးမည်။ 🤗 Accelerate သည် သင့်အတွက် device placement ကို ကိုင်တွယ်ပေးသောကြောင့် model ကို device ပေါ်တွင် တင်မည့်လိုင်းများကို ဖယ်ရှားနိုင်သည် (သို့မဟုတ် သင်ပိုနှစ်သက်ပါက ၎င်းတို့ကို <code>device</code> အစား <code>accelerator.device</code> ကို အသုံးပြုရန် ပြောင်းလဲနိုင်သည်)။",ol,we,$a="ထို့နောက် အလုပ်၏ အဓိကအစိတ်အပိုင်းကို dataloaders, model နှင့် optimizer တို့ကို <code>accelerator.prepare()</code> ထံ ပေးပို့သည့် လိုင်းတွင် လုပ်ဆောင်သည်။ ၎င်းသည် ထို objects များကို သင်၏ distributed training က ရည်ရွယ်ထားသည့်အတိုင်း အလုပ်လုပ်ကြောင်း သေချာစေရန် မှန်ကန်သော container ထဲတွင် ထည့်သွင်းပေးမည်။ ပြုလုပ်ရမည့် ကျန်ရှိသော အပြောင်းအလဲများမှာ batch ကို <code>device</code> ပေါ်တွင် တင်သည့်လိုင်းကို ဖယ်ရှားခြင်း (ထပ်မံ၍ သင် ၎င်းကို ထားလိုပါက <code>accelerator.device</code> ကို အသုံးပြုရန် ပြောင်းလဲနိုင်သည်) နှင့် <code>loss.backward()</code> ကို <code>accelerator.backward(loss)</code> ဖြင့် အစားထိုးခြင်းတို့ဖြစ်သည်။",pl,U,Ua="<p>⚠️ Cloud TPUs မှ ပေးဆောင်သော အရှိန်အဟုန်ကို အကျိုးခံစားရန်အတွက် သင်၏ samples များကို tokenizer ၏ <code>padding="max_length"</code> နှင့် <code>max_length</code> arguments များဖြင့် fixed length တစ်ခုသို့ padding လုပ်ရန် ကျွန်ုပ်တို့ အကြံပြုပါသည်။</p>",cl,je,va="သင် ကူးယူပြီး ကစားကြည့်လိုပါက 🤗 Accelerate ဖြင့် ပြည့်စုံသော training loop သည် ဤသို့ ဖြစ်ပါသည်။",dl,Je,ml,$e,ka="ဤ code ကို <code>train.py</code> script တစ်ခုထဲတွင် ထည့်သွင်းခြင်းဖြင့် မည်သည့် distributed setup အမျိုးအစားပေါ်တွင်မဆို ထို script ကို run နိုင်မည်ဖြစ်သည်။ သင်၏ distributed setup တွင် ၎င်းကို စမ်းသပ်ရန်အတွက် အောက်ပါ command ကို run ပါ။",gl,Ue,ul,ve,Ca="၎င်းသည် သင့်အား မေးခွန်းအနည်းငယ် မေးပြီး သင်၏ အဖြေများကို configuration file တစ်ခုထဲတွင် dump လုပ်လိမ့်မည်၊ ၎င်းကို ဤ command မှ အသုံးပြုသည်။",Ml,ke,yl,Ce,Za="၎င်းသည် distributed training ကို စတင်လိမ့်မည်။",bl,Ze,_a="သင် ၎င်းကို Notebook (ဥပမာ Colab တွင် TPUs ဖြင့် စမ်းသပ်ရန်) တွင် စမ်းသပ်လိုပါက code ကို <code>training_function()</code> တစ်ခုထဲတွင် ကူးထည့်ပြီး နောက်ဆုံး cell တစ်ခုကို ဤသို့ run ပါ။",hl,_e,fl,Ge,Ga='<a href="https://github.com/huggingface/accelerate/tree/main/examples" rel="nofollow">🤗 Accelerate repo</a> တွင် ဥပမာများ ထပ်မံ ရှာဖွေနိုင်ပါသည်။',Tl,v,Ba='<p>🌐 <strong>Distributed Training</strong>: multi-GPU နှင့် multi-node training များအကြောင်း ပြည့်စုံသော အကြောင်းအရာများအတွက် <a href="https://huggingface.co/docs/transformers/main/en/perf_train_gpu_many" rel="nofollow">🤗 Transformers distributed training guide</a> နှင့် <a href="https://huggingface.co/docs/transformers/main/en/accelerate" rel="nofollow">scaling training cookbook</a> ကို ကြည့်ရှုပါ။</p>',wl,Be,jl,Ie,Ia="ယခု သင်သည် training ကို အစမှ အကောင်အထည်ဖော်နည်းကို သင်ယူပြီးပြီဖြစ်ရာ၊ ထုတ်လုပ်မှု (production) အတွက် ထပ်မံ ထည့်သွင်းစဉ်းစားရမည့် အချက်အချို့ ဤတွင် ဖော်ပြထားသည်။",Jl,xe,xa="<strong>Model Evaluation</strong>: သင်၏ model ကို accuracy သက်သက်မဟုတ်ဘဲ metrics များစွာဖြင့် အမြဲတမ်း အကဲဖြတ်ပါ။ ပြည့်စုံသော evaluation အတွက် 🤗 Evaluate library ကို အသုံးပြုပါ။",$l,We,Wa="<strong>Hyperparameter Tuning</strong>: စနစ်တကျ hyperparameter optimization အတွက် Optuna သို့မဟုတ် Ray Tune ကဲ့သို့သော library များကို အသုံးပြုရန် စဉ်းစားပါ။",Ul,ze,za="<strong>Model Monitoring</strong>: training လုပ်နေစဉ် တစ်လျှောက်လုံး training metrics၊ learning curves နှင့် validation performance များကို မှတ်တမ်းတင်ပါ။",vl,Ae,Aa="<strong>Model Sharing</strong>: လေ့ကျင့်ပြီးသည်နှင့် သင်၏ model ကို Hugging Face Hub ပေါ်တွင် မျှဝေခြင်းဖြင့် လူအဖွဲ့အစည်း (community) အတွက် ရရှိနိုင်စေပါ။",kl,Xe,Xa="<strong>Efficiency</strong>: large models များအတွက် gradient checkpointing၊ parameter-efficient fine-tuning (LoRA, AdaLoRA) သို့မဟုတ် quantization methods ကဲ့သို့သော နည်းလမ်းများကို ထည့်သွင်းစဉ်းစားပါ။",Cl,Re,Ra="ဒါက custom training loops တွေနဲ့ fine-tuning လုပ်ခြင်းအကြောင်း ကျွန်တော်တို့ရဲ့ နက်နက်နဲနဲ လေ့လာမှုကို နိဂုံးချုပ်လိုက်ပါပြီ။ ဒီနေရာမှာ သင်သင်ယူခဲ့တဲ့ ကျွမ်းကျင်မှုတွေက training process ပေါ်မှာ အပြည့်အဝ ထိန်းချုပ်ဖို့ လိုအပ်တဲ့အခါ ဒါမှမဟုတ် <code>Trainer</code> API က ပေးစွမ်းနိုင်တာထက် ကျော်လွန်တဲ့ custom training logic ကို အကောင်အထည်ဖော်ချင်တဲ့အခါ သင့်ကို အထောက်အကူပြုပါလိမ့်မယ်။",Zl,Ve,_l,Ye,Va="custom training loops များနှင့် advanced training နည်းလမ်းများအကြောင်း သင့်နားလည်မှုကို စမ်းသပ်ပါ။",Gl,He,Bl,Ee,Il,Fe,xl,Ne,Wl,Le,zl,Qe,Al,qe,Xl,Se,Rl,Pe,Vl,De,Yl,Ke,Hl,Oe,El,et,Fl,tt,Nl,k,Ya="<p>💡 <strong>အဓိက အချက်များ:</strong></p> <ul><li>Manual training loops များသည် သင့်အား အပြည့်အဝ ထိန်းချုပ်ခွင့်ပေးသော်လည်း မှန်ကန်သော အစီအစဉ်ကို နားလည်ရန် လိုအပ်သည်- forward → backward → optimizer step → scheduler step → zero gradients။</li> <li>Weight decay ပါသော AdamW သည် transformer models များအတွက် အကြံပြုထားသော optimizer ဖြစ်သည်။</li> <li>မှန်ကန်သော အပြုအမူနှင့် ထိရောက်မှုအတွက် evaluation လုပ်နေစဉ် <code>model.eval()</code> နှင့် <code>torch.no_grad()</code> ကို အမြဲတမ်း အသုံးပြုပါ။</li> <li>🤗 Accelerate သည် code အပြောင်းအလဲ အနည်းငယ်ဖြင့် distributed training ကို လက်လှမ်းမီစေသည်။</li> <li>Device management (tensors များကို GPU/CPU သို့ ရွှေ့ခြင်း) သည် PyTorch operation များအတွက် အရေးကြီးသည်။</li> <li>Mixed precision၊ gradient accumulation နှင့် gradient clipping ကဲ့သို့သော ခေတ်မီနည်းလမ်းများသည် training ထိရောက်မှုကို သိသိသာသာ တိုးတက်စေနိုင်သည်။</li></ul>",Ll,lt,Ql,at,Ha="<li><strong>Training Loop</strong>: AI (Artificial Intelligence) မော်ဒယ်တစ်ခုကို ဒေတာများဖြင့် အကြိမ်ကြိမ် လေ့ကျင့်ပေးသည့် လုပ်ငန်းစဉ်။</li> <li><strong><code>Trainer</code> Class</strong>: 🤗 Transformers library မှ model များကို လေ့ကျင့်ရန်နှင့် အကဲဖြတ်ရန်အတွက် အသုံးပြုသော class။</li> <li><strong>PyTorch</strong>: Facebook (ယခု Meta) က ဖန်တီးထားတဲ့ open-source machine learning library တစ်ခုဖြစ်ပြီး deep learning မော်ဒယ်တွေ တည်ဆောက်ဖို့အတွက် အသုံးပြုပါတယ်။</li> <li><strong>Data Processing</strong>: ဒေတာများကို model က နားလည်ပြီး လုပ်ဆောင်နိုင်တဲ့ ပုံစံအဖြစ် ပြောင်းလဲပြင်ဆင်ခြင်း လုပ်ငန်းစဉ်။</li> <li><strong>Dataloaders</strong>: Datasets များမှ ဒေတာများကို batches အလိုက် ထုတ်ယူပေးသည့် PyTorch utility class။</li> <li><strong>Batch</strong>: မတူညီသော input များစွာကို တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နိုင်ရန် အုပ်စုဖွဲ့ခြင်း။</li> <li><strong>Postprocessing</strong>: Preprocessing လုပ်ပြီးနောက် ဒေတာများကို ထပ်မံပြင်ဆင်ခြင်း လုပ်ငန်းစဉ်။</li> <li><strong><code>tokenized_datasets</code></strong>: Tokenization ပြုလုပ်ပြီးသော dataset များ ပါဝင်သော object။</li> <li><strong><code>remove_columns()</code> Method</strong>: Dataset မှ မလိုအပ်သော columns များကို ဖယ်ရှားရန် အသုံးပြုသော method။</li> <li><strong><code>rename_column()</code> Method</strong>: Dataset ၏ column အမည်ကို ပြောင်းလဲရန် အသုံးပြုသော method။</li> <li><strong><code>set_format("torch")</code> Method</strong>: Dataset ၏ output format ကို PyTorch tensors အဖြစ် ပြောင်းလဲရန် သတ်မှတ်သော method။</li> <li><strong>PyTorch Tensors</strong>: PyTorch framework မှာ data တွေကို ကိုယ်စားပြုသော multi-dimensional array များ။</li> <li><strong><code>torch.utils.data.DataLoader</code></strong>: PyTorch မှာ dataloaders များကို ဖန်တီးရန် အသုံးပြုသော class။</li> <li><strong><code>shuffle=True</code></strong>: <code>DataLoader</code> တွင် samples များကို training လုပ်နေစဉ် ကျပန်း (randomly) ရောနှောရန် သတ်မှတ်သော parameter။</li> <li><strong><code>batch_size</code></strong>: batch တစ်ခုစီတွင် ပါဝင်မည့် samples အရေအတွက်။</li> <li><strong><code>collate_fn</code></strong>: batch တစ်ခုအတွင်း samples များကို စုစည်းပေးသော function (ဥပမာ- <code>DataCollatorWithPadding</code>)။</li> <li><strong><code>DataCollatorWithPadding</code></strong>: Hugging Face Transformers library မှ ပံ့ပိုးပေးသော class တစ်ခုဖြစ်ပြီး dynamic padding ကို အသုံးပြု၍ batch တစ်ခုအတွင်း samples များကို စုစည်းပေးသည်။</li> <li><strong>Model</strong>: Artificial Intelligence (AI) နယ်ပယ်တွင် အချက်အလက်များကို လေ့လာပြီး ခန့်မှန်းချက်များ ပြုလုပ်ရန် ဒီဇိုင်းထုတ်ထားသော သင်္ချာဆိုင်ရာဖွဲ့စည်းပုံ။</li> <li><strong><code>AutoModelForSequenceClassification</code></strong>: Hugging Face Transformers library မှာ ပါဝင်တဲ့ class တစ်ခုဖြစ်ပြီး sequence classification အတွက် pre-trained model ကို အလိုအလျောက် load လုပ်ပေးသည်။</li> <li><strong><code>num_labels</code></strong>: Classification လုပ်ငန်းအတွက် label (အမျိုးအစား) အရေအတွက်။</li> <li><strong>`outputs = model(</strong>batch)`**: Model ကို input batch ပေးပို့ပြီး output ရယူခြင်း။</li> <li><strong><code>outputs.loss</code></strong>: Model ၏ output မှ ပြန်ပေးသော loss တန်ဖိုး။</li> <li><strong><code>outputs.logits</code></strong>: Model ၏ output မှ ပြန်ပေးသော raw, unnormalized scores များ။</li> <li><strong>Optimizer</strong>: Model ၏ parameters များကို လေ့ကျင့်နေစဉ် update လုပ်ရန် အသုံးပြုသော algorithm။</li> <li><strong>Learning Rate Scheduler</strong>: Training လုပ်နေစဉ် learning rate ကို အချိန်ကြာလာသည်နှင့်အမျှ ပြောင်းလဲသွားစေရန် နည်းလမ်း။</li> <li><strong><code>AdamW</code></strong>: <code>Adam</code> optimizer ၏ မူကွဲတစ်ခုဖြစ်ပြီး weight decay regularization ကို ပိုမိုထိရောက်စွာ လုပ်ဆောင်သည်။\n<ul><li><strong>Adam (Adaptive Moment Estimation)</strong>: Deep learning တွင် အသုံးများသော optimizer တစ်ခုဖြစ်ပြီး learning rate ကို အလိုအလျောက် ချိန်ညှိပေးသည်။</li> <li><strong>Weight Decay Regularization</strong>: model ၏ weights များကို သေးငယ်အောင် ထိန်းညှိခြင်းဖြင့် overfitting ကို လျှော့ချရန် အသုံးပြုသော နည်းလမ်း။</li> <li><strong>Decoupled Weight Decay</strong>: Weight decay ကို gradient update များနှင့် သီးခြားစီ လုပ်ဆောင်ခြင်း။</li></ul></li> <li><strong><code>model.parameters()</code></strong>: model ၏ လေ့ကျင့်နိုင်သော parameters (weights နှင့် biases) များကို ပြန်ပေးသော method။</li> <li><strong><code>lr</code> (Learning Rate)</strong>: Training လုပ်နေစဉ် model ၏ weights များကို update လုပ်ရာတွင် အသုံးပြုသော step size။</li> <li><strong><code>get_scheduler()</code> Function</strong>: Hugging Face Transformers library မှ learning rate scheduler တစ်ခုကို ဖန်တီးရန် အသုံးပြုသော function။</li> <li><strong>Linear Decay</strong>: Learning rate ကို အချိန်ကြာလာသည်နှင့်အမျှ လိုင်းဖြောင့်အတိုင်း (linearly) လျှော့ချသွားသော scheduling နည်းလမ်း။</li> <li><strong><code>num_warmup_steps</code></strong>: learning rate ကို တိုးမြှင့်မည့် training steps အရေအတွက်။</li> <li><strong><code>num_training_steps</code></strong>: training လုပ်ငန်းစဉ်၏ စုစုပေါင်း steps အရေအတွက်။</li> <li><strong><code>device</code></strong>: Model နှင့် data များကို ထားရှိမည့် computing device (CPU သို့မဟုတ် GPU)။</li> <li><strong><code>torch.device("cuda")</code></strong>: GPU (CUDA enabled) ကို အသုံးပြုရန် သတ်မှတ်ခြင်း။</li> <li><strong><code>torch.device("cpu")</code></strong>: CPU ကို အသုံးပြုရန် သတ်မှတ်ခြင်း။</li> <li><strong><code>model.to(device)</code></strong>: Model ကို သတ်မှတ်ထားသော device သို့ ရွှေ့ပြောင်းခြင်း။</li> <li><strong><code>tqdm</code> (Library)</strong>: Python loop များအတွက် progress bars များကို ဖန်တီးရန် အသုံးပြုသော library။</li> <li><strong><code>tqdm.auto.tqdm</code></strong>: <code>tqdm</code> library မှ progress bar class။</li> <li><strong><code>progress_bar.update(1)</code></strong>: progress bar ကို တစ် step တိုးမြှင့်ခြင်း။</li> <li><strong><code>model.train()</code> Method</strong>: Model ကို training mode သို့ ပြောင်းလဲခြင်း။ ၎င်းသည် dropout နှင့် batch normalization ကဲ့သို့သော layers များကို training အတွက် သင့်လျော်သောအပြုအမူသို့ ပြောင်းလဲပေးသည်။</li> <li><strong><code>batch = {k: v.to(device) for k, v in batch.items()}</code></strong>: batch ထဲရှိ tensors များကို သတ်မှတ်ထားသော device သို့ ရွှေ့ပြောင်းခြင်း။</li> <li><strong><code>loss.backward()</code> Method</strong>: PyTorch မှာ backpropagation ကို လုပ်ဆောင်ပြီး model ၏ parameters တွေအတွက် gradients များကို တွက်ချက်သော method။</li> <li><strong><code>optimizer.step()</code> Method</strong>: တွက်ချက်ထားသော gradients များကို အသုံးပြုပြီး model ၏ parameters များကို update လုပ်သော optimizer method။</li> <li><strong><code>lr_scheduler.step()</code> Method</strong>: Learning rate scheduler ကို update လုပ်သော method။</li> <li><strong><code>optimizer.zero_grad()</code> Method</strong>: Optimizer အတွင်းရှိ gradient များကို zero ပြန်လုပ်ခြင်း (နောက်ထပ် batch အတွက် gradient များကို စုပုံခြင်းမှ ကာကွယ်ရန်)။</li> <li><strong>Gradient Clipping</strong>: Gradients များ၏ တန်ဖိုးကို ကန့်သတ်ခြင်းဖြင့် gradient exploding ပြဿနာကို ကာကွယ်သော နည်းလမ်း။</li> <li><strong><code>torch.nn.utils.clip_grad_norm_</code></strong>: PyTorch function တစ်ခုဖြစ်ပြီး gradients များကို clip လုပ်ရန် အသုံးပြုသည်။</li> <li><strong><code>max_norm</code></strong>: Gradient clipping လုပ်ရာတွင် သတ်မှတ်သော အများဆုံး norm တန်ဖိုး။</li> <li><strong><code>torch.cuda.amp.autocast()</code></strong>: PyTorch တွင် mixed precision training ကို အသုံးပြုရန်အတွက် context manager။</li> <li><strong><code>GradScaler</code></strong>: PyTorch တွင် mixed precision training အတွက် gradients များကို scale လုပ်ရန် အသုံးပြုသော class။</li> <li><strong>Gradient Accumulation</strong>: GPU memory ကန့်သတ်ချက်ရှိသောအခါ ပိုကြီးမားသော batch sizes များကို အတုယူရန် batches အများအပြားပေါ်တွင် gradients များကို စုဆောင်းပြီးမှ update လုပ်ခြင်း။</li> <li><strong>Checkpointing</strong>: Model parameters များကို အခါအားလျော်စွာ သိမ်းဆည်းထားခြင်း။</li> <li><strong><code>model.eval()</code> Method</strong>: Model ကို evaluation mode သို့ ပြောင်းလဲခြင်း။ ၎င်းသည် dropout နှင့် batch normalization ကဲ့သို့သော layers များကို inference အတွက် သင့်လျော်သောအပြုအမူသို့ ပြောင်းလဲပေးသည်။</li> <li><strong><code>torch.no_grad()</code></strong>: PyTorch တွင် gradient တွက်ချက်မှုကို ပိတ်ရန်အတွက် context manager။ Evaluation လုပ်နေစဉ် memory ချွေတာရန်နှင့် အရှိန်မြှင့်ရန် အသုံးပြုသည်။</li> <li><strong><code>torch.argmax(logits, dim=-1)</code></strong>: Logits များမှ အများဆုံးတန်ဖိုးရှိသော index ကို ယူခြင်းဖြင့် prediction ကို ရရှိစေသည်။ <code>dim=-1</code> ဆိုသည်မှာ နောက်ဆုံး dimension ကို ဆိုလိုသည်။</li> <li><strong><code>metric.add_batch()</code> Method</strong>: 🤗 Evaluate library ၏ metric object ၏ method ဖြစ်ပြီး predictions နှင့် references များကို batch အလိုက် စုဆောင်းပေးသည်။</li> <li><strong><code>metric.compute()</code> Method</strong>: စုဆောင်းထားသော predictions နှင့် references များမှ နောက်ဆုံး metric value ကို တွက်ချက်ရန် metric object ၏ method။</li> <li><strong><code>tqdm</code> (Library)</strong>: Python loop များအတွက် progress bars များကို ဖန်တီးရန် အသုံးပြုသော library။</li> <li><strong><code>randomness</code></strong>: ကျပန်းသဘောတရား၊ ကြိုတင်ခန့်မှန်း၍မရသော အဖြစ်အပျက်များ။</li> <li><strong>SST-2 Dataset</strong>: GLUE benchmark ထဲက sentiment analysis task တစ်ခုဖြစ်ပြီး single sentences တွေ ပါဝင်ပါတယ်။</li> <li><strong>🤗 Accelerate Library</strong>: Hugging Face က ထုတ်လုပ်ထားတဲ့ library တစ်ခုဖြစ်ပြီး PyTorch training loops တွေကို code အပြောင်းအလဲ အနည်းငယ်နဲ့ distributed training (multiple GPUs, TPUs) မှာ run နိုင်အောင် ကူညီပေးပါတယ်။</li> <li><strong><code>Accelerator</code> Object</strong>: 🤗 Accelerate library မှ main object ဖြစ်ပြီး distributed setup ကို initialize လုပ်ပေးသည်။</li> <li><strong><code>accelerator.prepare()</code> Method</strong>: <code>Accelerator</code> object ၏ method ဖြစ်ပြီး dataloaders, model နှင့် optimizer များကို distributed training အတွက် သင့်လျော်သော container များအဖြစ် ထုပ်ပိုးပေးသည်။</li> <li><strong><code>accelerator.device</code></strong>: <code>Accelerator</code> object မှ ဖော်ပြသော လက်ရှိအသုံးပြုနေသော device (CPU သို့မဟုတ် GPU)။</li> <li><strong><code>accelerator.backward(loss)</code> Method</strong>: <code>Accelerator</code> object မှ gradient များကို တွက်ချက်ရန် အသုံးပြုသော method ဖြစ်ပြီး distributed training အတွက် မှန်ကန်စွာ လုပ်ဆောင်ပေးသည်။</li> <li><strong><code>accelerate config</code> Command</strong>: 🤗 Accelerate ကို စတင်အသုံးပြုရန်အတွက် configuration file တစ်ခုကို ဖန်တီးရန် အသုံးပြုသော command line tool။</li> <li><strong><code>accelerate launch train.py</code> Command</strong>: <code>train.py</code> script ကို distributed setup တွင် run ရန် အသုံးပြုသော command line tool။</li> <li><strong><code>notebook_launcher()</code> Function</strong>: 🤗 Accelerate library မှ function တစ်ခုဖြစ်ပြီး Notebook environment တွင် distributed training function များကို run နိုင်စေသည်။</li> <li><strong>Production Use</strong>: ဆော့ဖ်ဝဲလ် သို့မဟုတ် AI model တစ်ခုကို လက်တွေ့အသုံးချရန် အဆင့်။</li> <li><strong>Optuna / Ray Tune (Libraries)</strong>: Hyperparameter optimization အတွက် အသုံးပြုသော library များ။</li> <li><strong>Hyperparameter Tuning</strong>: Model ၏ စွမ်းဆောင်ရည်ကို အကောင်းဆုံးဖြစ်စေရန် hyperparameters များကို ရှာဖွေခြင်း လုပ်ငန်းစဉ်။</li> <li><strong>Model Monitoring</strong>: Training metrics, learning curves နှင့် validation performance များကို အချိန်နှင့်တစ်ပြေးညီ စောင့်ကြည့်ခြင်း။</li> <li><strong>Learning Curves</strong>: Training လုပ်နေစဉ် training loss နှင့် validation loss/metrics များကို ဂရပ်ဖြင့် ပြသထားခြင်း။</li> <li><strong>Parameter-efficient Fine-tuning (PEFT)</strong>: Model ၏ အချို့သော parameters များကိုသာ fine-tune လုပ်ခြင်းဖြင့် memory နှင့် computation ကို ချွေတာသော နည်းလမ်းများ (ဥပမာ- LoRA, AdaLoRA)။\n<ul><li><strong>LoRA (Low-Rank Adaptation)</strong>: Pretrained model ၏ weights များကို freeze လုပ်ထားပြီး small, low-rank matrices များကိုသာ fine-tune လုပ်သော PEFT နည်းလမ်း။</li> <li><strong>AdaLoRA</strong>: LoRA ၏ မူကွဲတစ်ခုဖြစ်ပြီး adaptive rank selection ကို အသုံးပြုသည်။</li></ul></li> <li><strong>Quantization</strong>: Model ၏ parameters များကို floating-point မှ integer ကဲ့သို့သော ပိုမိုသေးငယ်သော data types များသို့ ပြောင်းလဲခြင်းဖြင့် memory အသုံးပြုမှုနှင့် computation ကို လျှော့ချသော နည်းလမ်း။</li> <li><strong>Gradient Checkpointing</strong>: Computation graph ၏ အချို့သော အလယ်အလတ် activations များကိုသာ သိမ်းဆည်းခြင်းဖြင့် memory အသုံးပြုမှုကို လျှော့ချသော နည်းလမ်း (backward pass အတွက် လိုအပ်သောအခါ ၎င်းတို့ကို ပြန်လည်တွက်ချက်သည်)။</li>",ql,st,Sl,rt,Pl;return C=new Ka({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),Z=new y({props:{title:"ပြည့်စုံသော Training Loop တစ်ခု",local:"a-full-training",headingTag:"h1"}}),_=new es({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/en/chapter3/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section4.ipynb"}]}}),G=new Fa({props:{id:"Dh9CL8fyG80"}}),I=new M({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}}),x=new y({props:{title:"Training အတွက် ပြင်ဆင်ခြင်း",local:"prepare-for-training",headingTag:"h3"}}),X=new M({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}}),V=new M({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}}),H=new M({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}}),F=new M({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}}),N=new M({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}}),q=new M({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}}),P=new M({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBcHJpbnQob3V0cHV0cy5sb3NzJTJDJTIwb3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**batch) | |
| <span class="hljs-built_in">print</span>(outputs.loss, outputs.logits.shape)`,wrap:!1}}),D=new M({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}}),ee=new M({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}}),le=new M({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}}),ae=new M({props:{code:"MTM3Nw==",highlighted:'<span class="hljs-number">1377</span>',wrap:!1}}),se=new y({props:{title:"Training Loop",local:"the-training-loop",headingTag:"h3"}}),ie=new M({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}}),re=new M({props:{code:"ZGV2aWNlKHR5cGUlM0QnY3VkYScp",highlighted:'device(<span class="hljs-built_in">type</span>=<span class="hljs-string">'cuda'</span>)',wrap:!1}}),pe=new M({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}}),de=new y({props:{title:"Evaluation Loop",local:"the-evaluation-loop",headingTag:"h3"}}),ge=new M({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}}),ue=new M({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}}),ye=new y({props:{title:"🤗 Accelerate ဖြင့် သင်၏ Training Loop ကို အစွမ်းထက်စေခြင်း",local:"supercharge-your-training-loop-with-accelerate",headingTag:"h3"}}),be=new Fa({props:{id:"s7dy8QRgjJ0"}}),fe=new M({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}}),Je=new M({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}}),Ue=new M({props:{code:"YWNjZWxlcmF0ZSUyMGNvbmZpZw==",highlighted:"accelerate config",wrap:!1}}),ke=new M({props:{code:"YWNjZWxlcmF0ZSUyMGxhdW5jaCUyMHRyYWluLnB5",highlighted:'accelerate <span class="hljs-built_in">launch</span> train.py',wrap:!1}}),_e=new M({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}}),Be=new y({props:{title:"နောက်တစ်ဆင့်များနှင့် အကောင်းဆုံးအလေ့အကျင့်များ",local:"next-steps-and-best-practices",headingTag:"h3"}}),Ve=new y({props:{title:"အခန်း၏ ဗဟုသုတစစ်ဆေးခြင်း",local:"section-quiz",headingTag:"h2"}}),He=new y({props:{title:"1. Adam နှင့် AdamW optimizers များကြား အဓိကကွာခြားချက်က ဘာလဲ။",local:"1-adam-နင-adamw-optimizers-မက-အဓကကခခကက-ဘလ",headingTag:"h3"}}),Ee=new nt({props:{choices:[{text:"AdamW သည် မတူညီသော learning rate schedule ကို အသုံးပြုသည်။",explain:"Learning rate scheduling သည် optimizer ရွေးချယ်မှုနှင့် သီးခြားဖြစ်သည်။"},{text:"AdamW တွင် decoupled weight decay regularization ပါဝင်သည်။",explain:"မှန်ပါသည်။ AdamW သည် gradient-based parameter updates မှ weight decay ကို ခွဲခြားထားခြင်းဖြင့် ပိုမိုကောင်းမွန်သော regularization ကို ဖြစ်ပေါ်စေသည်။",correct:!0},{text:"AdamW သည် transformer models များနှင့်သာ အလုပ်လုပ်သည်။",explain:"AdamW ကို transformers များသာမက မည်သည့် model architecture နှင့်မဆို အသုံးပြုနိုင်သည်။"},{text:"AdamW သည် Adam ထက် memory ပိုမိုနည်းပါးစွာ လိုအပ်သည်။",explain:"optimizers နှစ်ခုလုံးတွင် memory လိုအပ်ချက်များ တူညီသည်။"}]}}),Fe=new y({props:{title:"2. training loop တစ်ခုတွင် လုပ်ဆောင်မှုများ၏ မှန်ကန်သော အစီအစဉ်က ဘာလဲ။",local:"2-training-loop-တစခတင-လပဆငမမ-မနကနသ-အစအစဉက-ဘလ",headingTag:"h3"}}),Ne=new nt({props:{choices:[{text:"Forward pass → Backward pass → Optimizer step → Zero gradients",explain:"နီးစပ်သော်လည်း၊ gradients အဟောင်းများ စုပုံခြင်းကို ရှောင်ရှားရန် နောက်ထပ် forward pass မလုပ်မီ gradients များကို zero ပြန်လုပ်သင့်သည်။"},{text:"Forward pass → Backward pass → Optimizer step → Scheduler step → Zero gradients",explain:"မှန်ပါသည်။ ၎င်းသည် မှန်ကန်သော အစီအစဉ်ဖြစ်သည်။ loss ကို တွက်ချက်ပါ၊ gradients ကို တွက်ချက်ပါ၊ parameters ကို update လုပ်ပါ၊ learning rate ကို update လုပ်ပါ၊ ထို့နောက် gradients ကို ရှင်းလင်းပါ။",correct:!0},{text:"Zero gradients → Forward pass → Optimizer step → Backward pass",explain:"gradients ကို တွက်ချက်ရန်အတွက် backward pass သည် forward pass နောက်တွင် လာရမည်။"},{text:"Forward pass → Zero gradients → Backward pass → Optimizer step",explain:"backward pass မတိုင်မီ gradients များကို zero ပြန်လုပ်ခြင်းသည် သင်ခုမှ တွက်ချက်ထားသော gradients များကို ဖျက်ဆီးပစ်လိမ့်မည်။"}]}}),Le=new y({props:{title:"3. 🤗 Accelerate library သည် အဓိကအားဖြင့် ဘာကို ကူညီသလဲ။",local:"3--accelerate-library-သည-အဓကအဖင-ဘက-ကညသလ",headingTag:"h3"}}),Qe=new nt({props:{choices:[{text:"forward pass ကို optimized လုပ်ခြင်းဖြင့် သင်၏ models များကို ပိုမိုမြန်ဆန်စွာ train လုပ်ခြင်း။",explain:"Accelerate သည် model architecture ကိုယ်တိုင်ကို optimized လုပ်ခြင်း မရှိပါ။"},{text:"အကောင်းဆုံး hyperparameters များကို အလိုအလျောက် ရွေးချယ်ခြင်း။",explain:"Accelerate သည် hyperparameter optimization ကို မလုပ်ဆောင်ပါ။"},{text:"code အပြောင်းအလဲ အနည်းငယ်ဖြင့် GPUs/TPUs များစွာတွင် distributed training ကို ဖွင့်နိုင်စေခြင်း။",explain:"မှန်ပါသည်။ Accelerate သည် distributed training ၏ ရှုပ်ထွေးမှုများကို ကိုင်တွယ်ကာ သင်၏ code ကို single သို့မဟုတ် multiple devices များပေါ်တွင် ချောမွေ့စွာ run နိုင်စေသည်။",correct:!0},{text:"models များကို TensorFlow ကဲ့သို့သော မတူညီသော frameworks များသို့ ပြောင်းလဲခြင်း။",explain:"Accelerate သည် PyTorch အတွင်း၌ အလုပ်လုပ်ပြီး frameworks များကြား ပြောင်းလဲခြင်း မရှိပါ။"}]}}),qe=new y({props:{title:"4. training loop တစ်ခုတွင် batches များကို device သို့ ဘာကြောင့် ရွှေ့ရသလဲ။",local:"4-training-loop-တစခတင-batches-မက-device-သ-ဘကင-ရရသလ",headingTag:"h3"}}),Se=new nt({props:{choices:[{text:"training ကို ပိုမိုမြန်ဆန်စေရန်။",explain:"အရှိန်ကို ထိခိုက်စေနိုင်သော်လည်း၊ အဓိကအကြောင်းအရင်းမှာ လိုက်ဖက်မှုရှိခြင်း ဖြစ်သည်။"},{text:"computation လုပ်ဆောင်ရန်အတွက် model နှင့် data ကို တူညီသော device (CPU/GPU) ပေါ်တွင် ရှိရမည်ဖြစ်သောကြောင့်။",explain:"မှန်ပါသည်။ PyTorch သည် operation များ အလုပ်လုပ်ရန်အတွက် tensors များကို တူညီသော device ပေါ်တွင် ရှိရန် လိုအပ်သည်။",correct:!0},{text:"memory ချွေတာရန်။",explain:"device သို့ ရွှေ့ခြင်းသည် မူလအားဖြင့် memory ချွေတာခြင်း မရှိပါ။"},{text:"DataLoader က လိုအပ်သောကြောင့်။",explain:"DataLoader သည် သီးခြား device placement ကို မလိုအပ်ပါ။"}]}}),Pe=new y({props:{title:"5. evaluation မတိုင်မီ model.eval() က ဘာလုပ်သလဲ။",local:"5-evaluation-မတငမ-modeleval-က-ဘလပသလ",headingTag:"h3"}}),De=new nt({props:{choices:[{text:"model parameters များကို freeze လုပ်ခြင်းဖြင့် ၎င်းတို့ကို update လုပ်လို့ မရအောင် တားဆီးသည်။",explain:"model.eval() သည် parameters များကို freeze လုပ်ခြင်း မရှိပါ - ၎င်းကို requires_grad=False ဟု သတ်မှတ်ခြင်းဖြင့် လုပ်ဆောင်မည်။"},{text:"dropout နှင့် batch normalization ကဲ့သို့သော layers များ၏ အပြုအမူကို inference အတွက် ပြောင်းလဲသည်။",explain:"မှန်ပါသည်။ eval() mode သည် dropout ကို ပိတ်ကာ batch norm အတွက် running statistics များကို အသုံးပြုပြီး လက်ရှိ batch မှ တွက်ချက်ခြင်း မရှိပါ။",correct:!0},{text:"evaluation metrics အတွက် gradient computation ကို ဖွင့်ပေးသည်။",explain:"တကယ်တော့၊ evaluation လုပ်နေစဉ် gradient computation ကို ပိတ်ရန်အတွက် ကျွန်တော်တို့သည် များသောအားဖြင့် torch.no_grad() ကို အသုံးပြုသည်။"},{text:"evaluation metrics များကို အလိုအလျောက် တွက်ချက်သည်။",explain:"model.eval() သည် layer အပြုအမူကိုသာ ပြောင်းလဲသည် - metric တွက်ချက်မှုကို သင်ကိုယ်တိုင် အကောင်အထည်ဖော်ရန် လိုအပ်သေးသည်။"}]}}),Ke=new y({props:{title:"6. evaluation လုပ်နေစဉ် torch.no_grad() ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ။",local:"6-evaluation-လပနစဉ-torchnograd-ရ-ရညရယခကက-ဘလ",headingTag:"h3"}}),Oe=new nt({props:{choices:[{text:"model က predictions တွေ မလုပ်နိုင်အောင် တားဆီးရန်။",explain:"torch.no_grad() သည် predictions များကို တားဆီးခြင်း မရှိဘဲ gradient computation ကိုသာ တားဆီးသည်။"},{text:"gradient tracking ကို ပိတ်ခြင်းဖြင့် memory ချွေတာရန်နှင့် computation ကို အရှိန်မြှင့်ရန်။",explain:"မှန်ပါသည်။ evaluation အတွက် gradients မလိုအပ်သောကြောင့် ၎င်းတို့ကို ပိတ်ခြင်းသည် memory နှင့် computation ကို ချွေတာသည်။",correct:!0},{text:"model အတွက် evaluation mode ကို ဖွင့်ရန်။",explain:"Evaluation mode ကို model.eval() ဖြင့် ဖွင့်ပြီး torch.no_grad() ဖြင့် မဟုတ်ပါ။"},{text:"run များတစ်လျှောက် တူညီသောရလဒ်များ ရရှိစေရန်။",explain:"Reproducibility ကို random seeds များကို သတ်မှတ်ခြင်းဖြင့် ကိုင်တွယ်ပြီး torch.no_grad() ဖြင့် မဟုတ်ပါ။"}]}}),et=new y({props:{title:"7. သင်၏ training loop တွင် 🤗 Accelerate ကို အသုံးပြုသောအခါ ဘာတွေ ပြောင်းလဲသွားသလဲ။",local:"7-သင-training-loop-တင--accelerate-က-အသပသအခ-ဘတ-ပငလသသလ",headingTag:"h3"}}),tt=new nt({props:{choices:[{text:"သင်၏ training loop တစ်ခုလုံးကို အစမှ ပြန်ရေးရမည်။",explain:"Accelerate သည် ရှိပြီးသား PyTorch code တွင် အနည်းငယ်သော အပြောင်းအလဲများသာ လိုအပ်သည်။"},{text:"အဓိက objects များကို accelerator.prepare() ဖြင့် ထုပ်ပိုးပြီး loss.backward() အစား accelerator.backward() ကို အသုံးပြုရမည်။",explain:"မှန်ပါသည်။ ဤအရာများသည် အဓိကအပြောင်းအလဲများဖြစ်သည် - သင်၏ objects များကို ပြင်ဆင်ပြီး မှန်ကန်သော distributed training အတွက် accelerator.backward() ကို အသုံးပြုပါ။",correct:!0},{text:"သင်၏ code တွင် GPUs အရေအတွက်ကို သတ်မှတ်ရန် လိုအပ်သည်။",explain:"Accelerate သည် ရရှိနိုင်သော hardware ကို အလိုအလျောက် detect လုပ်သည်။"},{text:"သင်သည် မတူညီသော optimizer နှင့် scheduler ကို အသုံးပြုရမည်။",explain:"သင်သည် Accelerate ဖြင့် တူညီသော optimizers နှင့် schedulers များကို အသုံးပြုနိုင်သည်။"}]}}),lt=new y({props:{title:"ဝေါဟာရ ရှင်းလင်းချက် (Glossary)",local:"ဝဟရ-ရငလငခက-glossary",headingTag:"h2"}}),st=new Oa({props:{source:"https://github.com/huggingface/course/blob/main/chapters/my/chapter3/4.mdx"}}),{c(){h=m("meta"),ot=s(),it=m("p"),pt=s(),i(C.$$.fragment),ct=s(),i(Z.$$.fragment),dt=s(),i(_.$$.fragment),mt=s(),i(G.$$.fragment),gt=s(),B=m("p"),B.innerHTML=Kl,ut=s(),f=m("blockquote"),f.innerHTML=Ol,Mt=s(),i(I.$$.fragment),yt=s(),i(x.$$.fragment),bt=s(),W=m("p"),W.innerHTML=ea,ht=s(),z=m("ul"),z.innerHTML=ta,ft=s(),A=m("p"),A.innerHTML=la,Tt=s(),i(X.$$.fragment),wt=s(),R=m("p"),R.textContent=aa,jt=s(),i(V.$$.fragment),Jt=s(),Y=m("p"),Y.textContent=sa,$t=s(),i(H.$$.fragment),Ut=s(),E=m("p"),E.textContent=na,vt=s(),i(F.$$.fragment),kt=s(),i(N.$$.fragment),Ct=s(),L=m("p"),L.innerHTML=ia,Zt=s(),Q=m("p"),Q.textContent=ra,_t=s(),i(q.$$.fragment),Gt=s(),S=m("p"),S.textContent=oa,Bt=s(),i(P.$$.fragment),It=s(),i(D.$$.fragment),xt=s(),K=m("p"),K.innerHTML=pa,Wt=s(),O=m("p"),O.innerHTML=ca,zt=s(),i(ee.$$.fragment),At=s(),T=m("blockquote"),T.innerHTML=da,Xt=s(),te=m("p"),te.innerHTML=ma,Rt=s(),i(le.$$.fragment),Vt=s(),i(ae.$$.fragment),Yt=s(),i(se.$$.fragment),Ht=s(),ne=m("p"),ne.innerHTML=ga,Et=s(),i(ie.$$.fragment),Ft=s(),i(re.$$.fragment),Nt=s(),oe=m("p"),oe.innerHTML=ua,Lt=s(),i(pe.$$.fragment),Qt=s(),w=m("blockquote"),w.innerHTML=Ma,qt=s(),ce=m("p"),ce.textContent=ya,St=s(),i(de.$$.fragment),Pt=s(),me=m("p"),me.innerHTML=ba,Dt=s(),j=m("blockquote"),j.innerHTML=ha,Kt=s(),i(ge.$$.fragment),Ot=s(),i(ue.$$.fragment),el=s(),Me=m("p"),Me.textContent=fa,tl=s(),J=m("blockquote"),J.innerHTML=Ta,ll=s(),i(ye.$$.fragment),al=s(),i(be.$$.fragment),sl=s(),he=m("p"),he.innerHTML=wa,nl=s(),$=m("blockquote"),$.innerHTML=ja,il=s(),i(fe.$$.fragment),rl=s(),Te=m("p"),Te.innerHTML=Ja,ol=s(),we=m("p"),we.innerHTML=$a,pl=s(),U=m("blockquote"),U.innerHTML=Ua,cl=s(),je=m("p"),je.textContent=va,dl=s(),i(Je.$$.fragment),ml=s(),$e=m("p"),$e.innerHTML=ka,gl=s(),i(Ue.$$.fragment),ul=s(),ve=m("p"),ve.textContent=Ca,Ml=s(),i(ke.$$.fragment),yl=s(),Ce=m("p"),Ce.textContent=Za,bl=s(),Ze=m("p"),Ze.innerHTML=_a,hl=s(),i(_e.$$.fragment),fl=s(),Ge=m("p"),Ge.innerHTML=Ga,Tl=s(),v=m("blockquote"),v.innerHTML=Ba,wl=s(),i(Be.$$.fragment),jl=s(),Ie=m("p"),Ie.textContent=Ia,Jl=s(),xe=m("p"),xe.innerHTML=xa,$l=s(),We=m("p"),We.innerHTML=Wa,Ul=s(),ze=m("p"),ze.innerHTML=za,vl=s(),Ae=m("p"),Ae.innerHTML=Aa,kl=s(),Xe=m("p"),Xe.innerHTML=Xa,Cl=s(),Re=m("p"),Re.innerHTML=Ra,Zl=s(),i(Ve.$$.fragment),_l=s(),Ye=m("p"),Ye.textContent=Va,Gl=s(),i(He.$$.fragment),Bl=s(),i(Ee.$$.fragment),Il=s(),i(Fe.$$.fragment),xl=s(),i(Ne.$$.fragment),Wl=s(),i(Le.$$.fragment),zl=s(),i(Qe.$$.fragment),Al=s(),i(qe.$$.fragment),Xl=s(),i(Se.$$.fragment),Rl=s(),i(Pe.$$.fragment),Vl=s(),i(De.$$.fragment),Yl=s(),i(Ke.$$.fragment),Hl=s(),i(Oe.$$.fragment),El=s(),i(et.$$.fragment),Fl=s(),i(tt.$$.fragment),Nl=s(),k=m("blockquote"),k.innerHTML=Ya,Ll=s(),i(lt.$$.fragment),Ql=s(),at=m("ul"),at.innerHTML=Ha,ql=s(),i(st.$$.fragment),Sl=s(),rt=m("p"),this.h()},l(e){const t=Pa("svelte-u9bgzb",document.head);h=g(t,"META",{name:!0,content:!0}),t.forEach(l),ot=n(e),it=g(e,"P",{}),Ea(it).forEach(l),pt=n(e),r(C.$$.fragment,e),ct=n(e),r(Z.$$.fragment,e),dt=n(e),r(_.$$.fragment,e),mt=n(e),r(G.$$.fragment,e),gt=n(e),B=g(e,"P",{"data-svelte-h":!0}),u(B)!=="svelte-1o2uogw"&&(B.innerHTML=Kl),ut=n(e),f=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(f)!=="svelte-izqlv2"&&(f.innerHTML=Ol),Mt=n(e),r(I.$$.fragment,e),yt=n(e),r(x.$$.fragment,e),bt=n(e),W=g(e,"P",{"data-svelte-h":!0}),u(W)!=="svelte-1hderjf"&&(W.innerHTML=ea),ht=n(e),z=g(e,"UL",{"data-svelte-h":!0}),u(z)!=="svelte-1p3q9ex"&&(z.innerHTML=ta),ft=n(e),A=g(e,"P",{"data-svelte-h":!0}),u(A)!=="svelte-1hvrm35"&&(A.innerHTML=la),Tt=n(e),r(X.$$.fragment,e),wt=n(e),R=g(e,"P",{"data-svelte-h":!0}),u(R)!=="svelte-1gselsu"&&(R.textContent=aa),jt=n(e),r(V.$$.fragment,e),Jt=n(e),Y=g(e,"P",{"data-svelte-h":!0}),u(Y)!=="svelte-e4e29n"&&(Y.textContent=sa),$t=n(e),r(H.$$.fragment,e),Ut=n(e),E=g(e,"P",{"data-svelte-h":!0}),u(E)!=="svelte-1dbloqh"&&(E.textContent=na),vt=n(e),r(F.$$.fragment,e),kt=n(e),r(N.$$.fragment,e),Ct=n(e),L=g(e,"P",{"data-svelte-h":!0}),u(L)!=="svelte-st6ail"&&(L.innerHTML=ia),Zt=n(e),Q=g(e,"P",{"data-svelte-h":!0}),u(Q)!=="svelte-q97d4a"&&(Q.textContent=ra),_t=n(e),r(q.$$.fragment,e),Gt=n(e),S=g(e,"P",{"data-svelte-h":!0}),u(S)!=="svelte-16ya5nu"&&(S.textContent=oa),Bt=n(e),r(P.$$.fragment,e),It=n(e),r(D.$$.fragment,e),xt=n(e),K=g(e,"P",{"data-svelte-h":!0}),u(K)!=="svelte-1h5j7kg"&&(K.innerHTML=pa),Wt=n(e),O=g(e,"P",{"data-svelte-h":!0}),u(O)!=="svelte-f8508e"&&(O.innerHTML=ca),zt=n(e),r(ee.$$.fragment,e),At=n(e),T=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(T)!=="svelte-1b7mdp2"&&(T.innerHTML=da),Xt=n(e),te=g(e,"P",{"data-svelte-h":!0}),u(te)!=="svelte-ehbs2n"&&(te.innerHTML=ma),Rt=n(e),r(le.$$.fragment,e),Vt=n(e),r(ae.$$.fragment,e),Yt=n(e),r(se.$$.fragment,e),Ht=n(e),ne=g(e,"P",{"data-svelte-h":!0}),u(ne)!=="svelte-4ok8s0"&&(ne.innerHTML=ga),Et=n(e),r(ie.$$.fragment,e),Ft=n(e),r(re.$$.fragment,e),Nt=n(e),oe=g(e,"P",{"data-svelte-h":!0}),u(oe)!=="svelte-1jpqiod"&&(oe.innerHTML=ua),Lt=n(e),r(pe.$$.fragment,e),Qt=n(e),w=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(w)!=="svelte-1eklxvg"&&(w.innerHTML=Ma),qt=n(e),ce=g(e,"P",{"data-svelte-h":!0}),u(ce)!=="svelte-g09toq"&&(ce.textContent=ya),St=n(e),r(de.$$.fragment,e),Pt=n(e),me=g(e,"P",{"data-svelte-h":!0}),u(me)!=="svelte-1k1j4kf"&&(me.innerHTML=ba),Dt=n(e),j=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(j)!=="svelte-1yp9tui"&&(j.innerHTML=ha),Kt=n(e),r(ge.$$.fragment,e),Ot=n(e),r(ue.$$.fragment,e),el=n(e),Me=g(e,"P",{"data-svelte-h":!0}),u(Me)!=="svelte-swfkim"&&(Me.textContent=fa),tl=n(e),J=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(J)!=="svelte-rqoyj9"&&(J.innerHTML=Ta),ll=n(e),r(ye.$$.fragment,e),al=n(e),r(be.$$.fragment,e),sl=n(e),he=g(e,"P",{"data-svelte-h":!0}),u(he)!=="svelte-1g8av81"&&(he.innerHTML=wa),nl=n(e),$=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u($)!=="svelte-nsv3uf"&&($.innerHTML=ja),il=n(e),r(fe.$$.fragment,e),rl=n(e),Te=g(e,"P",{"data-svelte-h":!0}),u(Te)!=="svelte-95wxu2"&&(Te.innerHTML=Ja),ol=n(e),we=g(e,"P",{"data-svelte-h":!0}),u(we)!=="svelte-6h1m9i"&&(we.innerHTML=$a),pl=n(e),U=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(U)!=="svelte-130re8s"&&(U.innerHTML=Ua),cl=n(e),je=g(e,"P",{"data-svelte-h":!0}),u(je)!=="svelte-udsbt6"&&(je.textContent=va),dl=n(e),r(Je.$$.fragment,e),ml=n(e),$e=g(e,"P",{"data-svelte-h":!0}),u($e)!=="svelte-1q8llwv"&&($e.innerHTML=ka),gl=n(e),r(Ue.$$.fragment,e),ul=n(e),ve=g(e,"P",{"data-svelte-h":!0}),u(ve)!=="svelte-1bv6x7b"&&(ve.textContent=Ca),Ml=n(e),r(ke.$$.fragment,e),yl=n(e),Ce=g(e,"P",{"data-svelte-h":!0}),u(Ce)!=="svelte-15p5okf"&&(Ce.textContent=Za),bl=n(e),Ze=g(e,"P",{"data-svelte-h":!0}),u(Ze)!=="svelte-1nzfqok"&&(Ze.innerHTML=_a),hl=n(e),r(_e.$$.fragment,e),fl=n(e),Ge=g(e,"P",{"data-svelte-h":!0}),u(Ge)!=="svelte-tgdmxn"&&(Ge.innerHTML=Ga),Tl=n(e),v=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(v)!=="svelte-1folp5e"&&(v.innerHTML=Ba),wl=n(e),r(Be.$$.fragment,e),jl=n(e),Ie=g(e,"P",{"data-svelte-h":!0}),u(Ie)!=="svelte-x3or08"&&(Ie.textContent=Ia),Jl=n(e),xe=g(e,"P",{"data-svelte-h":!0}),u(xe)!=="svelte-jf66qy"&&(xe.innerHTML=xa),$l=n(e),We=g(e,"P",{"data-svelte-h":!0}),u(We)!=="svelte-10hgvco"&&(We.innerHTML=Wa),Ul=n(e),ze=g(e,"P",{"data-svelte-h":!0}),u(ze)!=="svelte-9gy3l7"&&(ze.innerHTML=za),vl=n(e),Ae=g(e,"P",{"data-svelte-h":!0}),u(Ae)!=="svelte-cxq0i6"&&(Ae.innerHTML=Aa),kl=n(e),Xe=g(e,"P",{"data-svelte-h":!0}),u(Xe)!=="svelte-qj123p"&&(Xe.innerHTML=Xa),Cl=n(e),Re=g(e,"P",{"data-svelte-h":!0}),u(Re)!=="svelte-sib0cr"&&(Re.innerHTML=Ra),Zl=n(e),r(Ve.$$.fragment,e),_l=n(e),Ye=g(e,"P",{"data-svelte-h":!0}),u(Ye)!=="svelte-1cnnhfl"&&(Ye.textContent=Va),Gl=n(e),r(He.$$.fragment,e),Bl=n(e),r(Ee.$$.fragment,e),Il=n(e),r(Fe.$$.fragment,e),xl=n(e),r(Ne.$$.fragment,e),Wl=n(e),r(Le.$$.fragment,e),zl=n(e),r(Qe.$$.fragment,e),Al=n(e),r(qe.$$.fragment,e),Xl=n(e),r(Se.$$.fragment,e),Rl=n(e),r(Pe.$$.fragment,e),Vl=n(e),r(De.$$.fragment,e),Yl=n(e),r(Ke.$$.fragment,e),Hl=n(e),r(Oe.$$.fragment,e),El=n(e),r(et.$$.fragment,e),Fl=n(e),r(tt.$$.fragment,e),Nl=n(e),k=g(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(k)!=="svelte-13flwci"&&(k.innerHTML=Ya),Ll=n(e),r(lt.$$.fragment,e),Ql=n(e),at=g(e,"UL",{"data-svelte-h":!0}),u(at)!=="svelte-16739rq"&&(at.innerHTML=Ha),ql=n(e),r(st.$$.fragment,e),Sl=n(e),rt=g(e,"P",{}),Ea(rt).forEach(l),this.h()},h(){b(h,"name","hf:doc:metadata"),b(h,"content",ls),b(f,"class","tip"),b(T,"class","tip"),b(w,"class","tip"),b(j,"class","tip"),b(J,"class","tip"),b($,"class","tip"),b(U,"class","tip"),b(v,"class","tip"),b(k,"class","tip")},m(e,t){Da(document.head,h),a(e,ot,t),a(e,it,t),a(e,pt,t),o(C,e,t),a(e,ct,t),o(Z,e,t),a(e,dt,t),o(_,e,t),a(e,mt,t),o(G,e,t),a(e,gt,t),a(e,B,t),a(e,ut,t),a(e,f,t),a(e,Mt,t),o(I,e,t),a(e,yt,t),o(x,e,t),a(e,bt,t),a(e,W,t),a(e,ht,t),a(e,z,t),a(e,ft,t),a(e,A,t),a(e,Tt,t),o(X,e,t),a(e,wt,t),a(e,R,t),a(e,jt,t),o(V,e,t),a(e,Jt,t),a(e,Y,t),a(e,$t,t),o(H,e,t),a(e,Ut,t),a(e,E,t),a(e,vt,t),o(F,e,t),a(e,kt,t),o(N,e,t),a(e,Ct,t),a(e,L,t),a(e,Zt,t),a(e,Q,t),a(e,_t,t),o(q,e,t),a(e,Gt,t),a(e,S,t),a(e,Bt,t),o(P,e,t),a(e,It,t),o(D,e,t),a(e,xt,t),a(e,K,t),a(e,Wt,t),a(e,O,t),a(e,zt,t),o(ee,e,t),a(e,At,t),a(e,T,t),a(e,Xt,t),a(e,te,t),a(e,Rt,t),o(le,e,t),a(e,Vt,t),o(ae,e,t),a(e,Yt,t),o(se,e,t),a(e,Ht,t),a(e,ne,t),a(e,Et,t),o(ie,e,t),a(e,Ft,t),o(re,e,t),a(e,Nt,t),a(e,oe,t),a(e,Lt,t),o(pe,e,t),a(e,Qt,t),a(e,w,t),a(e,qt,t),a(e,ce,t),a(e,St,t),o(de,e,t),a(e,Pt,t),a(e,me,t),a(e,Dt,t),a(e,j,t),a(e,Kt,t),o(ge,e,t),a(e,Ot,t),o(ue,e,t),a(e,el,t),a(e,Me,t),a(e,tl,t),a(e,J,t),a(e,ll,t),o(ye,e,t),a(e,al,t),o(be,e,t),a(e,sl,t),a(e,he,t),a(e,nl,t),a(e,$,t),a(e,il,t),o(fe,e,t),a(e,rl,t),a(e,Te,t),a(e,ol,t),a(e,we,t),a(e,pl,t),a(e,U,t),a(e,cl,t),a(e,je,t),a(e,dl,t),o(Je,e,t),a(e,ml,t),a(e,$e,t),a(e,gl,t),o(Ue,e,t),a(e,ul,t),a(e,ve,t),a(e,Ml,t),o(ke,e,t),a(e,yl,t),a(e,Ce,t),a(e,bl,t),a(e,Ze,t),a(e,hl,t),o(_e,e,t),a(e,fl,t),a(e,Ge,t),a(e,Tl,t),a(e,v,t),a(e,wl,t),o(Be,e,t),a(e,jl,t),a(e,Ie,t),a(e,Jl,t),a(e,xe,t),a(e,$l,t),a(e,We,t),a(e,Ul,t),a(e,ze,t),a(e,vl,t),a(e,Ae,t),a(e,kl,t),a(e,Xe,t),a(e,Cl,t),a(e,Re,t),a(e,Zl,t),o(Ve,e,t),a(e,_l,t),a(e,Ye,t),a(e,Gl,t),o(He,e,t),a(e,Bl,t),o(Ee,e,t),a(e,Il,t),o(Fe,e,t),a(e,xl,t),o(Ne,e,t),a(e,Wl,t),o(Le,e,t),a(e,zl,t),o(Qe,e,t),a(e,Al,t),o(qe,e,t),a(e,Xl,t),o(Se,e,t),a(e,Rl,t),o(Pe,e,t),a(e,Vl,t),o(De,e,t),a(e,Yl,t),o(Ke,e,t),a(e,Hl,t),o(Oe,e,t),a(e,El,t),o(et,e,t),a(e,Fl,t),o(tt,e,t),a(e,Nl,t),a(e,k,t),a(e,Ll,t),o(lt,e,t),a(e,Ql,t),a(e,at,t),a(e,ql,t),o(st,e,t),a(e,Sl,t),a(e,rt,t),Pl=!0},p:La,i(e){Pl||(p(C.$$.fragment,e),p(Z.$$.fragment,e),p(_.$$.fragment,e),p(G.$$.fragment,e),p(I.$$.fragment,e),p(x.$$.fragment,e),p(X.$$.fragment,e),p(V.$$.fragment,e),p(H.$$.fragment,e),p(F.$$.fragment,e),p(N.$$.fragment,e),p(q.$$.fragment,e),p(P.$$.fragment,e),p(D.$$.fragment,e),p(ee.$$.fragment,e),p(le.$$.fragment,e),p(ae.$$.fragment,e),p(se.$$.fragment,e),p(ie.$$.fragment,e),p(re.$$.fragment,e),p(pe.$$.fragment,e),p(de.$$.fragment,e),p(ge.$$.fragment,e),p(ue.$$.fragment,e),p(ye.$$.fragment,e),p(be.$$.fragment,e),p(fe.$$.fragment,e),p(Je.$$.fragment,e),p(Ue.$$.fragment,e),p(ke.$$.fragment,e),p(_e.$$.fragment,e),p(Be.$$.fragment,e),p(Ve.$$.fragment,e),p(He.$$.fragment,e),p(Ee.$$.fragment,e),p(Fe.$$.fragment,e),p(Ne.$$.fragment,e),p(Le.$$.fragment,e),p(Qe.$$.fragment,e),p(qe.$$.fragment,e),p(Se.$$.fragment,e),p(Pe.$$.fragment,e),p(De.$$.fragment,e),p(Ke.$$.fragment,e),p(Oe.$$.fragment,e),p(et.$$.fragment,e),p(tt.$$.fragment,e),p(lt.$$.fragment,e),p(st.$$.fragment,e),Pl=!0)},o(e){c(C.$$.fragment,e),c(Z.$$.fragment,e),c(_.$$.fragment,e),c(G.$$.fragment,e),c(I.$$.fragment,e),c(x.$$.fragment,e),c(X.$$.fragment,e),c(V.$$.fragment,e),c(H.$$.fragment,e),c(F.$$.fragment,e),c(N.$$.fragment,e),c(q.$$.fragment,e),c(P.$$.fragment,e),c(D.$$.fragment,e),c(ee.$$.fragment,e),c(le.$$.fragment,e),c(ae.$$.fragment,e),c(se.$$.fragment,e),c(ie.$$.fragment,e),c(re.$$.fragment,e),c(pe.$$.fragment,e),c(de.$$.fragment,e),c(ge.$$.fragment,e),c(ue.$$.fragment,e),c(ye.$$.fragment,e),c(be.$$.fragment,e),c(fe.$$.fragment,e),c(Je.$$.fragment,e),c(Ue.$$.fragment,e),c(ke.$$.fragment,e),c(_e.$$.fragment,e),c(Be.$$.fragment,e),c(Ve.$$.fragment,e),c(He.$$.fragment,e),c(Ee.$$.fragment,e),c(Fe.$$.fragment,e),c(Ne.$$.fragment,e),c(Le.$$.fragment,e),c(Qe.$$.fragment,e),c(qe.$$.fragment,e),c(Se.$$.fragment,e),c(Pe.$$.fragment,e),c(De.$$.fragment,e),c(Ke.$$.fragment,e),c(Oe.$$.fragment,e),c(et.$$.fragment,e),c(tt.$$.fragment,e),c(lt.$$.fragment,e),c(st.$$.fragment,e),Pl=!1},d(e){e&&(l(ot),l(it),l(pt),l(ct),l(dt),l(mt),l(gt),l(B),l(ut),l(f),l(Mt),l(yt),l(bt),l(W),l(ht),l(z),l(ft),l(A),l(Tt),l(wt),l(R),l(jt),l(Jt),l(Y),l($t),l(Ut),l(E),l(vt),l(kt),l(Ct),l(L),l(Zt),l(Q),l(_t),l(Gt),l(S),l(Bt),l(It),l(xt),l(K),l(Wt),l(O),l(zt),l(At),l(T),l(Xt),l(te),l(Rt),l(Vt),l(Yt),l(Ht),l(ne),l(Et),l(Ft),l(Nt),l(oe),l(Lt),l(Qt),l(w),l(qt),l(ce),l(St),l(Pt),l(me),l(Dt),l(j),l(Kt),l(Ot),l(el),l(Me),l(tl),l(J),l(ll),l(al),l(sl),l(he),l(nl),l($),l(il),l(rl),l(Te),l(ol),l(we),l(pl),l(U),l(cl),l(je),l(dl),l(ml),l($e),l(gl),l(ul),l(ve),l(Ml),l(yl),l(Ce),l(bl),l(Ze),l(hl),l(fl),l(Ge),l(Tl),l(v),l(wl),l(jl),l(Ie),l(Jl),l(xe),l($l),l(We),l(Ul),l(ze),l(vl),l(Ae),l(kl),l(Xe),l(Cl),l(Re),l(Zl),l(_l),l(Ye),l(Gl),l(Bl),l(Il),l(xl),l(Wl),l(zl),l(Al),l(Xl),l(Rl),l(Vl),l(Yl),l(Hl),l(El),l(Fl),l(Nl),l(k),l(Ll),l(Ql),l(at),l(ql),l(Sl),l(rt)),l(h),d(C,e),d(Z,e),d(_,e),d(G,e),d(I,e),d(x,e),d(X,e),d(V,e),d(H,e),d(F,e),d(N,e),d(q,e),d(P,e),d(D,e),d(ee,e),d(le,e),d(ae,e),d(se,e),d(ie,e),d(re,e),d(pe,e),d(de,e),d(ge,e),d(ue,e),d(ye,e),d(be,e),d(fe,e),d(Je,e),d(Ue,e),d(ke,e),d(_e,e),d(Be,e),d(Ve,e),d(He,e),d(Ee,e),d(Fe,e),d(Ne,e),d(Le,e),d(Qe,e),d(qe,e),d(Se,e),d(Pe,e),d(De,e),d(Ke,e),d(Oe,e),d(et,e),d(tt,e),d(lt,e),d(st,e)}}}const ls='{"title":"ပြည့်စုံသော Training Loop တစ်ခု","local":"a-full-training","sections":[{"title":"Training အတွက် ပြင်ဆင်ခြင်း","local":"prepare-for-training","sections":[],"depth":3},{"title":"Training Loop","local":"the-training-loop","sections":[],"depth":3},{"title":"Evaluation Loop","local":"the-evaluation-loop","sections":[],"depth":3},{"title":"🤗 Accelerate ဖြင့် သင်၏ Training Loop ကို အစွမ်းထက်စေခြင်း","local":"supercharge-your-training-loop-with-accelerate","sections":[],"depth":3},{"title":"နောက်တစ်ဆင့်များနှင့် အကောင်းဆုံးအလေ့အကျင့်များ","local":"next-steps-and-best-practices","sections":[],"depth":3},{"title":"အခန်း၏ ဗဟုသုတစစ်ဆေးခြင်း","local":"section-quiz","sections":[{"title":"1. Adam နှင့် AdamW optimizers များကြား အဓိကကွာခြားချက်က ဘာလဲ။","local":"1-adam-နင-adamw-optimizers-မက-အဓကကခခကက-ဘလ","sections":[],"depth":3},{"title":"2. training loop တစ်ခုတွင် လုပ်ဆောင်မှုများ၏ မှန်ကန်သော အစီအစဉ်က ဘာလဲ။","local":"2-training-loop-တစခတင-လပဆငမမ-မနကနသ-အစအစဉက-ဘလ","sections":[],"depth":3},{"title":"3. 🤗 Accelerate library သည် အဓိကအားဖြင့် ဘာကို ကူညီသလဲ။","local":"3--accelerate-library-သည-အဓကအဖင-ဘက-ကညသလ","sections":[],"depth":3},{"title":"4. training loop တစ်ခုတွင် batches များကို device သို့ ဘာကြောင့် ရွှေ့ရသလဲ။","local":"4-training-loop-တစခတင-batches-မက-device-သ-ဘကင-ရရသလ","sections":[],"depth":3},{"title":"5. evaluation မတိုင်မီ model.eval() က ဘာလုပ်သလဲ။","local":"5-evaluation-မတငမ-modeleval-က-ဘလပသလ","sections":[],"depth":3},{"title":"6. evaluation လုပ်နေစဉ် torch.no_grad() ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ။","local":"6-evaluation-လပနစဉ-torchnograd-ရ-ရညရယခကက-ဘလ","sections":[],"depth":3},{"title":"7. သင်၏ training loop တွင် 🤗 Accelerate ကို အသုံးပြုသောအခါ ဘာတွေ ပြောင်းလဲသွားသလဲ။","local":"7-သင-training-loop-တင--accelerate-က-အသပသအခ-ဘတ-ပငလသသလ","sections":[],"depth":3}],"depth":2},{"title":"ဝေါဟာရ ရှင်းလင်းချက် (Glossary)","local":"ဝဟရ-ရငလငခက-glossary","sections":[],"depth":2}],"depth":1}';function as(Dl){return Qa(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ds extends qa{constructor(h){super(),Sa(this,h,as,ts,Na,{})}}export{ds as component}; | |
Xet Storage Details
- Size:
- 101 kB
- Xet hash:
- 1462d30ef47437046ba969ada98d3c0563172ab781f2c8d44b08a3200d1dfd8c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.