import{S as Oi,i as qi,s as Ki,e as i,k as c,w as M,t as a,M as so,c as o,d as e,m as u,a as p,x as j,h as n,b as y,G as l,g as r,y as w,q as b,o as f,B as h,v as eo}from"../chunks/vendor-hf-doc-builder.js";import{T as Bt}from"../chunks/Tip-hf-doc-builder.js";import{I as pa}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as E}from"../chunks/CodeBlock-hf-doc-builder.js";function lo(X){let m,v;return{c(){m=i("p"),v=a("Questa funzionalit\xE0 al momento \xE8 disponibile solo per PyTorch.")},l(d){m=o(d,"P",{});var J=p(m);v=n(J,"Questa funzionalit\xE0 al momento \xE8 disponibile solo per PyTorch."),J.forEach(e)},m(d,J){r(d,m,J),l(m,v)},d(d){d&&e(m)}}}function ao(X){let m,v,d,J,A;return{c(){m=i("p"),v=a("Per addestramento multi-GPU richiede DDP ("),d=i("code"),J=a("torch.distributed.launch"),A=a(").")},l(I){m=o(I,"P",{});var U=p(m);v=n(U,"Per addestramento multi-GPU richiede DDP ("),d=o(U,"CODE",{});var D=p(d);J=n(D,"torch.distributed.launch"),D.forEach(e),A=n(U,")."),U.forEach(e)},m(I,U){r(I,m,U),l(m,v),l(m,d),l(d,J),l(m,A)},d(I){I&&e(m)}}}function no(X){let m,v,d,J,A;return{c(){m=i("p"),v=a("Questa funzionalit\xE0 pu\xF2 essere usata con modelli basati su "),d=i("code"),J=a("nn.Module"),A=a(".")},l(I){m=o(I,"P",{});var U=p(m);v=n(U,"Questa funzionalit\xE0 pu\xF2 essere usata con modelli basati su "),d=o(U,"CODE",{});var D=p(d);J=n(D,"nn.Module"),D.forEach(e),A=n(U,"."),U.forEach(e)},m(I,U){r(I,m,U),l(m,v),l(m,d),l(d,J),l(m,A)},d(I){I&&e(m)}}}function to(X){let m,v,d,J,A,I,U,D,ca,xe,z,S,Ps,us,ua,Hs,ma,Fe,Y,da,Os,Ma,ja,Pe,ms,He,Gs,wa,Oe,ds,qe,_s,ba,Ke,Vs,fa,sl,Bs,ha,el,x,Ja,qs,Ta,Ia,ll,Ms,al,Rs,ya,nl,W,F,Ks,js,Ua,se,va,tl,P,il,H,ol,O,rl,_,Ca,ee,Za,Ea,le,Aa,Ga,ae,_a,Va,pl,q,Ba,ne,Ra,$a,cl,ws,ul,g,Na,te,Da,ga,ie,ka,za,ml,$s,Wa,dl,bs,Ml,G,oe,Qa,La,re,Xa,Sa,pe,Ya,xa,ce,Fa,Pa,jl,fs,wl,Ns,Ha,bl,T,Oa,ue,qa,Ka,me,sn,en,de,ln,an,Me,nn,tn,je,on,rn,we,pn,cn,be,un,mn,fl,K,dn,fe,Mn,jn,hl,Ds,wn,Jl,hs,Tl,V,bn,he,fn,hn,Je,Jn,Tn,Te,In,yn,Il,gs,Un,yl,Js,Ul,C,vn,Ie,Cn,Zn,ye,En,An,Ue,Gn,_n,ve,Vn,Bn,Ce,Rn,$n,vl,B,Nn,Ze,Dn,gn,Ee,kn,zn,Ae,Wn,Qn,Cl,ks,Ln,Zl,ss,Xn,Ge,Sn,Yn,El,Ts,Al,es,xn,_e,Fn,Pn,Gl,ls,Hn,Ve,On,qn,_l,R,Kn,Be,st,et,Re,lt,at,$e,nt,tt,Vl,Is,Bl,k,it,Ne,ot,rt,De,pt,ct,Rl,ys,$l,$,ut,ge,mt,dt,ke,Mt,jt,ze,wt,bt,Nl,as,ft,We,ht,Jt,Dl,zs,Tt,gl,Us,kl,Q,ns,Qe,vs,It,Le,yt,zl,Ws,Ut,Wl,ts,vt,Xe,Ct,Zt,Ql,Cs,Ll,Qs,Et,Xl,Ls,At,Sl,Xs,Gt,Yl,Zs,xl,Ss,_t,Fl,Ys,Vt,Pl,Es,Hl;return I=new pa({}),us=new pa({}),ms=new E({props:{code:"d2dldCUyMGh0dHBzJTNBJTJGJTJGcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSUyRmh1Z2dpbmdmYWNlJTJGdHJhbnNmb3JtZXJzJTJGbWFpbiUyRnNjcmlwdHMlMkZkaXN0cmlidXRlZCUyRnRvcmNoLWRpc3RyaWJ1dGVkLWdwdS10ZXN0LnB5",highlighted:"wget https://raw.githubusercontent.com/huggingface/transformers/main/scripts/distributed/torch-distributed-gpu-test.py"}}),ds=new E({props:{code:"cHl0aG9uJTIwLW0lMjB0b3JjaC5kaXN0cmlidXRlZC5ydW4lMjAtLW5wcm9jX3Blcl9ub2RlJTIwMiUyMC0tbm5vZGVzJTIwMSUyMHRvcmNoLWRpc3RyaWJ1dGVkLWdwdS10ZXN0LnB5",highlighted:"python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py"}}),Ms=new E({props:{code:"TkNDTF9ERUJVRyUzRElORk8lMjBweXRob24lMjAtbSUyMHRvcmNoLmRpc3RyaWJ1dGVkLnJ1biUyMC0tbnByb2NfcGVyX25vZGUlMjAyJTIwLS1ubm9kZXMlMjAxJTIwdG9yY2gtZGlzdHJpYnV0ZWQtZ3B1LXRlc3QucHk=",highlighted:"NCCL_DEBUG=INFO python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py"}}),js=new pa({}),P=new Bt({props:{$$slots:{default:[lo]},$$scope:{ctx:X}}}),H=new Bt({props:{$$slots:{default:[ao]},$$scope:{ctx:X}}}),O=new Bt({props:{$$slots:{default:[no]},$$scope:{ctx:X}}}),ws=new E({props:{code:"LS1kZWJ1ZyUyMHVuZGVyZmxvd19vdmVyZmxvdw==",highlighted:"--debug underflow_overflow"}}),bs=new E({props:{code:"ZnJvbSUyMC5kZWJ1Z191dGlscyUyMGltcG9ydCUyMERlYnVnVW5kZXJmbG93T3ZlcmZsb3clMEElMEFkZWJ1Z19vdmVyZmxvdyUyMCUzRCUyMERlYnVnVW5kZXJmbG93T3ZlcmZsb3cobW9kZWwp",highlighted:`<span class="hljs-keyword">from</span> .debug_utils <span class="hljs-keyword">import</span> DebugUnderflowOverflow

debug_overflow = DebugUnderflowOverflow(model)`}}),fs=new E({props:{code:"RGV0ZWN0ZWQlMjBpbmYlMkZuYW4lMjBkdXJpbmclMjBiYXRjaF9udW1iZXIlM0QwJTBBTGFzdCUyMDIxJTIwZm9yd2FyZCUyMGZyYW1lcyUzQSUwQWFicyUyMG1pbiUyMCUyMGFicyUyMG1heCUyMCUyMG1ldGFkYXRhJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4xLmxheWVyLjEuRGVuc2VSZWx1RGVuc2UuZHJvcG91dCUyMERyb3BvdXQlMEEwLjAwZSUyQjAwJTIwMi41N2UlMkIwMiUyMGlucHV0JTVCMCU1RCUwQTAuMDBlJTJCMDAlMjAyLjg1ZSUyQjAyJTIwb3V0cHV0JTBBJTVCLi4uJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjAlMjBUNUxheWVyU2VsZkF0dGVudGlvbiUwQTYuNzhlLTA0JTIwMy4xNWUlMkIwMyUyMGlucHV0JTVCMCU1RCUwQTIuNjVlLTA0JTIwMy40MmUlMkIwMyUyMG91dHB1dCU1QjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBOb25lJTIwb3V0cHV0JTVCMSU1RCUwQTIuMjVlLTAxJTIwMS4wMGUlMkIwNCUyMG91dHB1dCU1QjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5sYXllcl9ub3JtJTIwVDVMYXllck5vcm0lMEE4LjY5ZS0wMiUyMDQuMThlLTAxJTIwd2VpZ2h0JTBBMi42NWUtMDQlMjAzLjQyZSUyQjAzJTIwaW5wdXQlNUIwJTVEJTBBMS43OWUtMDYlMjA0LjY1ZSUyQjAwJTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjEuRGVuc2VSZWx1RGVuc2Uud2lfMCUyMExpbmVhciUwQTIuMTdlLTA3JTIwNC41MGUlMkIwMCUyMHdlaWdodCUwQTEuNzllLTA2JTIwNC42NWUlMkIwMCUyMGlucHV0JTVCMCU1RCUwQTIuNjhlLTA2JTIwMy43MGUlMkIwMSUyMG91dHB1dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuY29kZXIuYmxvY2suMi5sYXllci4xLkRlbnNlUmVsdURlbnNlLndpXzElMjBMaW5lYXIlMEE4LjA4ZS0wNyUyMDIuNjZlJTJCMDElMjB3ZWlnaHQlMEExLjc5ZS0wNiUyMDQuNjVlJTJCMDAlMjBpbnB1dCU1QjAlNUQlMEExLjI3ZS0wNCUyMDIuMzdlJTJCMDIlMjBvdXRwdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5EZW5zZVJlbHVEZW5zZS5kcm9wb3V0JTIwRHJvcG91dCUwQTAuMDBlJTJCMDAlMjA4Ljc2ZSUyQjAzJTIwaW5wdXQlNUIwJTVEJTBBMC4wMGUlMkIwMCUyMDkuNzRlJTJCMDMlMjBvdXRwdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5EZW5zZVJlbHVEZW5zZS53byUyMExpbmVhciUwQTEuMDFlLTA2JTIwNi40NGUlMkIwMCUyMHdlaWdodCUwQTAuMDBlJTJCMDAlMjA5Ljc0ZSUyQjAzJTIwaW5wdXQlNUIwJTVEJTBBMy4xOGUtMDQlMjA2LjI3ZSUyQjA0JTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjEuRGVuc2VSZWx1RGVuc2UlMjBUNURlbnNlR2F0ZWRHZWx1RGVuc2UlMEExLjc5ZS0wNiUyMDQuNjVlJTJCMDAlMjBpbnB1dCU1QjAlNUQlMEEzLjE4ZS0wNCUyMDYuMjdlJTJCMDQlMjBvdXRwdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5kcm9wb3V0JTIwRHJvcG91dCUwQTMuMThlLTA0JTIwNi4yN2UlMkIwNCUyMGlucHV0JTVCMCU1RCUwQTAuMDBlJTJCMDAlMjAlMjAlMjAlMjAlMjAlMjBpbmYlMjBvdXRwdXQ=",highlighted:`<span class="hljs-attribute">Detected</span> inf/nan during batch_number=<span class="hljs-number">0</span>
<span class="hljs-attribute">Last</span> <span class="hljs-number">21</span> forward frames:
<span class="hljs-attribute">abs</span> min  abs max  metadata
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">1</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.dropout Dropout
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">2</span>.<span class="hljs-number">57</span>e+<span class="hljs-number">02</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">2</span>.<span class="hljs-number">85</span>e+<span class="hljs-number">02</span> output<span class="hljs-meta">
[...]</span>
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">0</span> T5LayerSelfAttention
<span class="hljs-attribute">6</span>.<span class="hljs-number">78</span>e-<span class="hljs-number">04</span> <span class="hljs-number">3</span>.<span class="hljs-number">15</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">2</span>.<span class="hljs-number">65</span>e-<span class="hljs-number">04</span> <span class="hljs-number">3</span>.<span class="hljs-number">42</span>e+<span class="hljs-number">03</span> output[<span class="hljs-number">0</span>]
             <span class="hljs-attribute">None</span> output[<span class="hljs-number">1</span>]
<span class="hljs-attribute">2</span>.<span class="hljs-number">25</span>e-<span class="hljs-number">01</span> <span class="hljs-number">1</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">04</span> output[<span class="hljs-number">2</span>]
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.layer_norm T5LayerNorm
<span class="hljs-attribute">8</span>.<span class="hljs-number">69</span>e-<span class="hljs-number">02</span> <span class="hljs-number">4</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">01</span> weight
<span class="hljs-attribute">2</span>.<span class="hljs-number">65</span>e-<span class="hljs-number">04</span> <span class="hljs-number">3</span>.<span class="hljs-number">42</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wi_0 Linear
<span class="hljs-attribute">2</span>.<span class="hljs-number">17</span>e-<span class="hljs-number">07</span> <span class="hljs-number">4</span>.<span class="hljs-number">50</span>e+<span class="hljs-number">00</span> weight
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">2</span>.<span class="hljs-number">68</span>e-<span class="hljs-number">06</span> <span class="hljs-number">3</span>.<span class="hljs-number">70</span>e+<span class="hljs-number">01</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wi_1 Linear
<span class="hljs-attribute">8</span>.<span class="hljs-number">08</span>e-<span class="hljs-number">07</span> <span class="hljs-number">2</span>.<span class="hljs-number">66</span>e+<span class="hljs-number">01</span> weight
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">1</span>.<span class="hljs-number">27</span>e-<span class="hljs-number">04</span> <span class="hljs-number">2</span>.<span class="hljs-number">37</span>e+<span class="hljs-number">02</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.dropout Dropout
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">8</span>.<span class="hljs-number">76</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">9</span>.<span class="hljs-number">74</span>e+<span class="hljs-number">03</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wo Linear
<span class="hljs-attribute">1</span>.<span class="hljs-number">01</span>e-<span class="hljs-number">06</span> <span class="hljs-number">6</span>.<span class="hljs-number">44</span>e+<span class="hljs-number">00</span> weight
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">9</span>.<span class="hljs-number">74</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense T5DenseGatedGeluDense
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.dropout Dropout
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span>      inf output`}}),hs=new E({props:{code:"JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjEubGF5ZXJfbm9ybSUyMFQ1TGF5ZXJOb3JtJTBBOC42OWUtMDIlMjA0LjE4ZS0wMSUyMHdlaWdodCUwQTIuNjVlLTA0JTIwMy40MmUlMkIwMyUyMGlucHV0JTVCMCU1RCUwQTEuNzllLTA2JTIwNC42NWUlMkIwMCUyMG91dHB1dA==",highlighted:`                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.layer_norm T5LayerNorm
<span class="hljs-attribute">8</span>.<span class="hljs-number">69</span>e-<span class="hljs-number">02</span> <span class="hljs-number">4</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">01</span> weight
<span class="hljs-attribute">2</span>.<span class="hljs-number">65</span>e-<span class="hljs-number">04</span> <span class="hljs-number">3</span>.<span class="hljs-number">42</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> output`}}),Js=new E({props:{code:"RGV0ZWN0ZWQlMjBpbmYlMkZuYW4lMjBkdXJpbmclMjBiYXRjaF9udW1iZXIlM0QwJTBBTGFzdCUyMDIxJTIwZm9yd2FyZCUyMGZyYW1lcyUzQSUwQWFicyUyMG1pbiUyMCUyMGFicyUyMG1heCUyMCUyMG1ldGFkYXRhJTBBJTVCLi4uJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjEuRGVuc2VSZWx1RGVuc2Uud2lfMCUyMExpbmVhciUwQTIuMTdlLTA3JTIwNC41MGUlMkIwMCUyMHdlaWdodCUwQTEuNzllLTA2JTIwNC42NWUlMkIwMCUyMGlucHV0JTVCMCU1RCUwQTIuNjhlLTA2JTIwMy43MGUlMkIwMSUyMG91dHB1dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuY29kZXIuYmxvY2suMi5sYXllci4xLkRlbnNlUmVsdURlbnNlLndpXzElMjBMaW5lYXIlMEE4LjA4ZS0wNyUyMDIuNjZlJTJCMDElMjB3ZWlnaHQlMEExLjc5ZS0wNiUyMDQuNjVlJTJCMDAlMjBpbnB1dCU1QjAlNUQlMEExLjI3ZS0wNCUyMDIuMzdlJTJCMDIlMjBvdXRwdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5EZW5zZVJlbHVEZW5zZS53byUyMExpbmVhciUwQTEuMDFlLTA2JTIwNi40NGUlMkIwMCUyMHdlaWdodCUwQTAuMDBlJTJCMDAlMjA5Ljc0ZSUyQjAzJTIwaW5wdXQlNUIwJTVEJTBBMy4xOGUtMDQlMjA2LjI3ZSUyQjA0JTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5jb2Rlci5ibG9jay4yLmxheWVyLjEuRGVuc2VSZWx1RGVuc2UlMjBUNURlbnNlR2F0ZWRHZWx1RGVuc2UlMEExLjc5ZS0wNiUyMDQuNjVlJTJCMDAlMjBpbnB1dCU1QjAlNUQlMEEzLjE4ZS0wNCUyMDYuMjdlJTJCMDQlMjBvdXRwdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmNvZGVyLmJsb2NrLjIubGF5ZXIuMS5kcm9wb3V0JTIwRHJvcG91dCUwQTMuMThlLTA0JTIwNi4yN2UlMkIwNCUyMGlucHV0JTVCMCU1RCUwQTAuMDBlJTJCMDAlMjAlMjAlMjAlMjAlMjAlMjBpbmYlMjBvdXRwdXQ=",highlighted:`<span class="hljs-attribute">Detected</span> inf/nan during batch_number=<span class="hljs-number">0</span>
<span class="hljs-attribute">Last</span> <span class="hljs-number">21</span> forward frames:
<span class="hljs-attribute">abs</span> min  abs max  metadata<span class="hljs-meta">
[...]</span>
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wi_0 Linear
<span class="hljs-attribute">2</span>.<span class="hljs-number">17</span>e-<span class="hljs-number">07</span> <span class="hljs-number">4</span>.<span class="hljs-number">50</span>e+<span class="hljs-number">00</span> weight
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">2</span>.<span class="hljs-number">68</span>e-<span class="hljs-number">06</span> <span class="hljs-number">3</span>.<span class="hljs-number">70</span>e+<span class="hljs-number">01</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wi_1 Linear
<span class="hljs-attribute">8</span>.<span class="hljs-number">08</span>e-<span class="hljs-number">07</span> <span class="hljs-number">2</span>.<span class="hljs-number">66</span>e+<span class="hljs-number">01</span> weight
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">1</span>.<span class="hljs-number">27</span>e-<span class="hljs-number">04</span> <span class="hljs-number">2</span>.<span class="hljs-number">37</span>e+<span class="hljs-number">02</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense.wo Linear
<span class="hljs-attribute">1</span>.<span class="hljs-number">01</span>e-<span class="hljs-number">06</span> <span class="hljs-number">6</span>.<span class="hljs-number">44</span>e+<span class="hljs-number">00</span> weight
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span> <span class="hljs-number">9</span>.<span class="hljs-number">74</span>e+<span class="hljs-number">03</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.DenseReluDense T5DenseGatedGeluDense
<span class="hljs-attribute">1</span>.<span class="hljs-number">79</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4</span>.<span class="hljs-number">65</span>e+<span class="hljs-number">00</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> output
                  <span class="hljs-attribute">encoder</span>.block.<span class="hljs-number">2</span>.layer.<span class="hljs-number">1</span>.dropout Dropout
<span class="hljs-attribute">3</span>.<span class="hljs-number">18</span>e-<span class="hljs-number">04</span> <span class="hljs-number">6</span>.<span class="hljs-number">27</span>e+<span class="hljs-number">04</span> input[<span class="hljs-number">0</span>]
<span class="hljs-attribute">0</span>.<span class="hljs-number">00</span>e+<span class="hljs-number">00</span>      inf output`}}),Ts=new E({props:{code:"Y2xhc3MlMjBUNURlbnNlR2F0ZWRHZWx1RGVuc2Uobm4uTW9kdWxlKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9faW5pdF9fKHNlbGYlMkMlMjBjb25maWcpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3VwZXIoKS5fX2luaXRfXygpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi53aV8wJTIwJTNEJTIwbm4uTGluZWFyKGNvbmZpZy5kX21vZGVsJTJDJTIwY29uZmlnLmRfZmYlMkMlMjBiaWFzJTNERmFsc2UpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi53aV8xJTIwJTNEJTIwbm4uTGluZWFyKGNvbmZpZy5kX21vZGVsJTJDJTIwY29uZmlnLmRfZmYlMkMlMjBiaWFzJTNERmFsc2UpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi53byUyMCUzRCUyMG5uLkxpbmVhcihjb25maWcuZF9mZiUyQyUyMGNvbmZpZy5kX21vZGVsJTJDJTIwYmlhcyUzREZhbHNlKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYuZHJvcG91dCUyMCUzRCUyMG5uLkRyb3BvdXQoY29uZmlnLmRyb3BvdXRfcmF0ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmdlbHVfYWN0JTIwJTNEJTIwQUNUMkZOJTVCJTIyZ2VsdV9uZXclMjIlNUQlMEElMEElMjAlMjAlMjAlMjBkZWYlMjBmb3J3YXJkKHNlbGYlMkMlMjBoaWRkZW5fc3RhdGVzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGhpZGRlbl9nZWx1JTIwJTNEJTIwc2VsZi5nZWx1X2FjdChzZWxmLndpXzAoaGlkZGVuX3N0YXRlcykpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaGlkZGVuX2xpbmVhciUyMCUzRCUyMHNlbGYud2lfMShoaWRkZW5fc3RhdGVzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGhpZGRlbl9zdGF0ZXMlMjAlM0QlMjBoaWRkZW5fZ2VsdSUyMColMjBoaWRkZW5fbGluZWFyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaGlkZGVuX3N0YXRlcyUyMCUzRCUyMHNlbGYuZHJvcG91dChoaWRkZW5fc3RhdGVzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGhpZGRlbl9zdGF0ZXMlMjAlM0QlMjBzZWxmLndvKGhpZGRlbl9zdGF0ZXMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwaGlkZGVuX3N0YXRlcw==",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">T5DenseGatedGeluDense</span>(nn.Module):
    <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, config</span>):
        <span class="hljs-built_in">super</span>().__init__()
        self.wi_0 = nn.Linear(config.d_model, config.d_ff, bias=<span class="hljs-literal">False</span>)
        self.wi_1 = nn.Linear(config.d_model, config.d_ff, bias=<span class="hljs-literal">False</span>)
        self.wo = nn.Linear(config.d_ff, config.d_model, bias=<span class="hljs-literal">False</span>)
        self.dropout = nn.Dropout(config.dropout_rate)
        self.gelu_act = ACT2FN[<span class="hljs-string">&quot;gelu_new&quot;</span>]

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, hidden_states</span>):
        hidden_gelu = self.gelu_act(self.wi_0(hidden_states))
        hidden_linear = self.wi_1(hidden_states)
        hidden_states = hidden_gelu * hidden_linear
        hidden_states = self.dropout(hidden_states)
        hidden_states = self.wo(hidden_states)
        <span class="hljs-keyword">return</span> hidden_states`}}),Is=new E({props:{code:"ZGVmJTIwX2ZvcndhcmQoc2VsZiUyQyUyMGhpZGRlbl9zdGF0ZXMpJTNBJTBBJTIwJTIwJTIwJTIwaGlkZGVuX2dlbHUlMjAlM0QlMjBzZWxmLmdlbHVfYWN0KHNlbGYud2lfMChoaWRkZW5fc3RhdGVzKSklMEElMjAlMjAlMjAlMjBoaWRkZW5fbGluZWFyJTIwJTNEJTIwc2VsZi53aV8xKGhpZGRlbl9zdGF0ZXMpJTBBJTIwJTIwJTIwJTIwaGlkZGVuX3N0YXRlcyUyMCUzRCUyMGhpZGRlbl9nZWx1JTIwKiUyMGhpZGRlbl9saW5lYXIlMEElMjAlMjAlMjAlMjBoaWRkZW5fc3RhdGVzJTIwJTNEJTIwc2VsZi5kcm9wb3V0KGhpZGRlbl9zdGF0ZXMpJTBBJTIwJTIwJTIwJTIwaGlkZGVuX3N0YXRlcyUyMCUzRCUyMHNlbGYud28oaGlkZGVuX3N0YXRlcyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBoaWRkZW5fc3RhdGVzJTBBJTBBJTBBaW1wb3J0JTIwdG9yY2glMEElMEElMEFkZWYlMjBmb3J3YXJkKHNlbGYlMkMlMjBoaWRkZW5fc3RhdGVzKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwdG9yY2guaXNfYXV0b2Nhc3RfZW5hYmxlZCgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLmN1ZGEuYW1wLmF1dG9jYXN0KGVuYWJsZWQlM0RGYWxzZSklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBzZWxmLl9mb3J3YXJkKGhpZGRlbl9zdGF0ZXMpJTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHNlbGYuX2ZvcndhcmQoaGlkZGVuX3N0YXRlcyk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">_forward</span>(<span class="hljs-params">self, hidden_states</span>):
    hidden_gelu = self.gelu_act(self.wi_0(hidden_states))
    hidden_linear = self.wi_1(hidden_states)
    hidden_states = hidden_gelu * hidden_linear
    hidden_states = self.dropout(hidden_states)
    hidden_states = self.wo(hidden_states)
    <span class="hljs-keyword">return</span> hidden_states


<span class="hljs-keyword">import</span> torch


<span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, hidden_states</span>):
    <span class="hljs-keyword">if</span> torch.is_autocast_enabled():
        <span class="hljs-keyword">with</span> torch.cuda.amp.autocast(enabled=<span class="hljs-literal">False</span>):
            <span class="hljs-keyword">return</span> self._forward(hidden_states)
    <span class="hljs-keyword">else</span>:
        <span class="hljs-keyword">return</span> self._forward(hidden_states)`}}),ys=new E({props:{code:"ZnJvbSUyMGRlYnVnX3V0aWxzJTIwaW1wb3J0JTIwZGV0ZWN0X292ZXJmbG93JTBBJTBBJTBBY2xhc3MlMjBUNUxheWVyRkYobm4uTW9kdWxlKSUzQSUwQSUyMCUyMCUyMCUyMCU1Qi4uLiU1RCUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMGZvcndhcmQoc2VsZiUyQyUyMGhpZGRlbl9zdGF0ZXMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yd2FyZGVkX3N0YXRlcyUyMCUzRCUyMHNlbGYubGF5ZXJfbm9ybShoaWRkZW5fc3RhdGVzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRldGVjdF9vdmVyZmxvdyhmb3J3YXJkZWRfc3RhdGVzJTJDJTIwJTIyYWZ0ZXIlMjBsYXllcl9ub3JtJTIyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvcndhcmRlZF9zdGF0ZXMlMjAlM0QlMjBzZWxmLkRlbnNlUmVsdURlbnNlKGZvcndhcmRlZF9zdGF0ZXMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGV0ZWN0X292ZXJmbG93KGZvcndhcmRlZF9zdGF0ZXMlMkMlMjAlMjJhZnRlciUyMERlbnNlUmVsdURlbnNlJTIyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMGhpZGRlbl9zdGF0ZXMlMjAlMkIlMjBzZWxmLmRyb3BvdXQoZm9yd2FyZGVkX3N0YXRlcyk=",highlighted:`<span class="hljs-keyword">from</span> debug_utils <span class="hljs-keyword">import</span> detect_overflow


<span class="hljs-keyword">class</span> <span class="hljs-title class_">T5LayerFF</span>(nn.Module):
    [...]

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, hidden_states</span>):
        forwarded_states = self.layer_norm(hidden_states)
        detect_overflow(forwarded_states, <span class="hljs-string">&quot;after layer_norm&quot;</span>)
        forwarded_states = self.DenseReluDense(forwarded_states)
        detect_overflow(forwarded_states, <span class="hljs-string">&quot;after DenseReluDense&quot;</span>)
        <span class="hljs-keyword">return</span> hidden_states + self.dropout(forwarded_states)`}}),Us=new E({props:{code:"ZnJvbSUyMC5kZWJ1Z191dGlscyUyMGltcG9ydCUyMERlYnVnVW5kZXJmbG93T3ZlcmZsb3clMEElMEFkZWJ1Z19vdmVyZmxvdyUyMCUzRCUyMERlYnVnVW5kZXJmbG93T3ZlcmZsb3cobW9kZWwlMkMlMjBtYXhfZnJhbWVzX3RvX3NhdmUlM0QxMDAp",highlighted:`<span class="hljs-keyword">from</span> .debug_utils <span class="hljs-keyword">import</span> DebugUnderflowOverflow

debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=<span class="hljs-number">100</span>)`}}),vs=new pa({}),Cs=new E({props:{code:"ZGVidWdfb3ZlcmZsb3clMjAlM0QlMjBEZWJ1Z1VuZGVyZmxvd092ZXJmbG93KG1vZGVsJTJDJTIwdHJhY2VfYmF0Y2hfbnVtcyUzRCU1QjElMkMlMjAzJTVEKQ==",highlighted:'debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[<span class="hljs-number">1</span>, <span class="hljs-number">3</span>])'}}),Zs=new E({props:{code:"JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKioqJTIwU3RhcnRpbmclMjBiYXRjaCUyMG51bWJlciUzRDElMjAqKiolMEFhYnMlMjBtaW4lMjAlMjBhYnMlMjBtYXglMjAlMjBtZXRhZGF0YSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNoYXJlZCUyMEVtYmVkZGluZyUwQTEuMDFlLTA2JTIwNy45MmUlMkIwMiUyMHdlaWdodCUwQTAuMDBlJTJCMDAlMjAyLjQ3ZSUyQjA0JTIwaW5wdXQlNUIwJTVEJTBBNS4zNmUtMDUlMjA3LjkyZSUyQjAyJTIwb3V0cHV0JTBBJTVCLi4uJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2Rlci5kcm9wb3V0JTIwRHJvcG91dCUwQTEuNjBlLTA3JTIwMi4yN2UlMkIwMSUyMGlucHV0JTVCMCU1RCUwQTAuMDBlJTJCMDAlMjAyLjUyZSUyQjAxJTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlciUyMFQ1U3RhY2slMEElMjAlMjAlMjAlMjAlMjBub3QlMjBhJTIwdGVuc29yJTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG1faGVhZCUyMExpbmVhciUwQTEuMDFlLTA2JTIwNy45MmUlMkIwMiUyMHdlaWdodCUwQTAuMDBlJTJCMDAlMjAxLjExZSUyQjAwJTIwaW5wdXQlNUIwJTVEJTBBNi4wNmUtMDIlMjA4LjM5ZSUyQjAxJTIwb3V0cHV0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwVDVGb3JDb25kaXRpb25hbEdlbmVyYXRpb24lMEElMjAlMjAlMjAlMjAlMjBub3QlMjBhJTIwdGVuc29yJTIwb3V0cHV0JTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKioqJTIwU3RhcnRpbmclMjBiYXRjaCUyMG51bWJlciUzRDMlMjAqKiolMEFhYnMlMjBtaW4lMjAlMjBhYnMlMjBtYXglMjAlMjBtZXRhZGF0YSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNoYXJlZCUyMEVtYmVkZGluZyUwQTEuMDFlLTA2JTIwNy45MmUlMkIwMiUyMHdlaWdodCUwQTAuMDBlJTJCMDAlMjAyLjc4ZSUyQjA0JTIwaW5wdXQlNUIwJTVEJTBBNS4zNmUtMDUlMjA3LjkyZSUyQjAyJTIwb3V0cHV0JTBBJTVCLi4uJTVE",highlighted:`                  *** Starting batch number=1 ***
abs min  abs max  metadata
                  shared Embedding
1.01e<span class="hljs-string">-06</span> 7.92e<span class="hljs-string">+02</span> weight
0.00e<span class="hljs-string">+00</span> 2.47e<span class="hljs-string">+04</span> input[0]
5.36e<span class="hljs-string">-05</span> 7.92e<span class="hljs-string">+02</span> output
[...]
                  decoder.dropout Dropout
1.60e<span class="hljs-string">-07</span> 2.27e<span class="hljs-string">+01</span> input[0]
0.00e<span class="hljs-string">+00</span> 2.52e<span class="hljs-string">+01</span> output
                  decoder T5Stack
     not a tensor output
                  lm_head Linear
1.01e<span class="hljs-string">-06</span> 7.92e<span class="hljs-string">+02</span> weight
0.00e<span class="hljs-string">+00</span> 1.11e<span class="hljs-string">+00</span> input[0]
6.06e<span class="hljs-string">-02</span> 8.39e<span class="hljs-string">+01</span> output
                   T5ForConditionalGeneration
     not a tensor output

                  *** Starting batch number=3 ***
abs min  abs max  metadata
                  shared Embedding
1.01e<span class="hljs-string">-06</span> 7.92e<span class="hljs-string">+02</span> weight
0.00e<span class="hljs-string">+00</span> 2.78e<span class="hljs-string">+04</span> input[0]
5.36e<span class="hljs-string">-05</span> 7.92e<span class="hljs-string">+02</span> output
[...]`}}),Es=new E({props:{code:"ZGVidWdfb3ZlcmZsb3clMjAlM0QlMjBEZWJ1Z1VuZGVyZmxvd092ZXJmbG93KG1vZGVsJTJDJTIwdHJhY2VfYmF0Y2hfbnVtcyUzRCU1QjElMkMlMjAzJTVEJTJDJTIwYWJvcnRfYWZ0ZXJfYmF0Y2hfbnVtJTNEMyk=",highlighted:'debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[<span class="hljs-number">1</span>, <span class="hljs-number">3</span>], abort_after_batch_num=<span class="hljs-number">3</span>)'}}),{c(){m=i("meta"),v=c(),d=i("h1"),J=i("a"),A=i("span"),M(I.$$.fragment),U=c(),D=i("span"),ca=a("Debugging"),xe=c(),z=i("h2"),S=i("a"),Ps=i("span"),M(us.$$.fragment),ua=c(),Hs=i("span"),ma=a("Debug dei problemi di rete multi-GPU"),Fe=c(),Y=i("p"),da=a("Quando addestri o fai inferenza con "),Os=i("code"),Ma=a("DistributedDataParallel"),ja=a(" e GPU multiple, se si verificano problemi di intercomunicazione tra processi e/o nodi, puoi utilizzare il seguente script per diagnosticare i problemi della rete."),Pe=c(),M(ms.$$.fragment),He=c(),Gs=i("p"),wa=a("Per esempio per testare come 2 GPU interagiscono fai:"),Oe=c(),M(ds.$$.fragment),qe=c(),_s=i("p"),ba=a("Se entrambi i processi sono in grado di comunicare tra loro e di allocare la memoria della GPU, ciascuno di essi stamper\xE0 lo stato OK."),Ke=c(),Vs=i("p"),fa=a("Per pi\xF9 GPU o nodi adatta gli argumenti nello script."),sl=c(),Bs=i("p"),ha=a("All\u2019interno dello script di diagnostica troverai molti altri dettagli e anche una guida per eseguirlo in ambiente SLURM."),el=c(),x=i("p"),Ja=a("Un livello di debug superiore \xE8 aggiungere la variabile d\u2019ambiente "),qs=i("code"),Ta=a("NCCL_DEBUG=INFO"),Ia=a(" come di seguito:"),ll=c(),M(Ms.$$.fragment),al=c(),Rs=i("p"),ya=a("In questo modo si scaricano molte informazioni di debug relative a NCCL, che puoi cercare online in caso di problemi. Oppure, se non hai la sicurezza di come interpretare l\u2019output, puoi condividere il file di log in una Issue."),nl=c(),W=i("h2"),F=i("a"),Ks=i("span"),M(js.$$.fragment),Ua=c(),se=i("span"),va=a("Rilevamento di Underflow e Overflow"),tl=c(),M(P.$$.fragment),il=c(),M(H.$$.fragment),ol=c(),M(O.$$.fragment),rl=c(),_=i("p"),Ca=a("Se inizi a ottenere "),ee=i("code"),Za=a("loss=NaN"),Ea=a(" o il modello presenta qualche altro comportamento anomalo a causa di valori "),le=i("code"),Aa=a("inf"),Ga=a(" o "),ae=i("code"),_a=a("nan"),Va=a(` in
attivazioni o nei pesi, \xE8 necessario scoprire dove si verifica il primo underflow o overflow e cosa lo ha determinato. Fortunatamente
\xE8 possibile farlo facilmente attivando un modulo speciale che effettuer\xE0 il rilevamento automaticamente.`),pl=c(),q=i("p"),Ba=a("Se stai usando "),ne=i("code"),Ra=a("Trainer"),$a=a(", hai bisogno di aggiungere solo:"),cl=c(),M(ws.$$.fragment),ul=c(),g=i("p"),Na=a("ai normali argomenti della riga di comando, o passa "),te=i("code"),Da=a('debug="underflow_overflow"'),ga=a(` quando viene creato l\u2019oggetto
`),ie=i("code"),ka=a("TrainingArguments"),za=a("."),ml=c(),$s=i("p"),Wa=a("Se stai usando il tuo ciclo di allenamento o un altro trainer, puoi ottenere lo stesso risultato con:"),dl=c(),M(bs.$$.fragment),Ml=c(),G=i("p"),oe=i("code"),Qa=a("DebugUnderflowOverflow"),La=a(` inserisce dei ganci nel modello che dopo ogni chiamata
testeranno le variabili di ingresso e di uscita e anche i pesi del modulo corrispondente. Non appena viene rilevato `),re=i("code"),Xa=a("inf"),Sa=a(` o
o `),pe=i("code"),Ya=a("nan"),xa=a(" in almeno un elemento delle attivazioni o dei pesi, il programma lo notifica e stampa un rapporto come il seguente (questo \xE8 stato rilevato con "),ce=i("code"),Fa=a("google/mt5-small"),Pa=a(" sotto fp16 mixed precision):"),jl=c(),M(fs.$$.fragment),wl=c(),Ns=i("p"),Ha=a("L\u2019output di esempio \xE8 stato tagliato al centro per brevit\xE0."),bl=c(),T=i("p"),Oa=a(`La seconda colonna mostra il valore dell\u2019elemento pi\xF9 grande in assoluto,cos\xEC se osserviamo da vicino gli ultimi istanti,
input e output sono nel range di `),ue=i("code"),qa=a("1e4"),Ka=a(". Questo addestramento \xE8 stato eseguito con una mixed precision fp16 e l\u2019ultimo passo usciva fuori (sotto "),me=i("code"),sn=a("fp16"),en=a(" il valore pi\xF9 grande prima di "),de=i("code"),ln=a("inf"),an=a(" \xE8 "),Me=i("code"),nn=a("64e3"),tn=a("). Per evitare overflows sotto "),je=i("code"),on=a("fp16"),rn=a(" le attivazionioni devono rimanere molto al di sotto di "),we=i("code"),pn=a("1e4"),cn=a(", perch\xE9 "),be=i("code"),un=a("1e4 * 1e4 = 1e8"),mn=a(" quindi qualsiasi moltiplicazione di matrice con grandi attivazioni porter\xE0 a una condizione di overflow numerico."),fl=c(),K=i("p"),dn=a("All\u2019inizio della traccia \xE8 possibile scoprire a quale lotto si \xE8 verificato il problema (questo "),fe=i("code"),Mn=a("Detected inf/nan during batch_number=0"),jn=a(" significa che il problema si \xE8 verificato nel primo lotto)."),hl=c(),Ds=i("p"),wn=a(`Ogni frame segnalato inizia dichiarando la voce completamente qualificata per il modulo corrispondente per il quale il frame \xE8 stato segnalato.
Se osserviamo il seguente frame:`),Jl=c(),M(hs.$$.fragment),Tl=c(),V=i("p"),bn=a("Questo, "),he=i("code"),fn=a("encoder.block.2.layer.1.layer_norm"),hn=a(" indica che si tratta di un layer norm nel primo layer, del secondo blocco dell\u2019encoder. E le chiamata specifica di "),Je=i("code"),Jn=a("forward"),Tn=a(" \xE8 "),Te=i("code"),In=a("T5LayerNorm"),yn=a("."),Il=c(),gs=i("p"),Un=a("Osserviamo gli ultimi frame del report:"),yl=c(),M(Js.$$.fragment),Ul=c(),C=i("p"),vn=a("L\u2019ultimo frame report per la funzione "),Ie=i("code"),Cn=a("Dropout.forward"),Zn=a(" con la prima voce per l\u2019unico input e la seconda per l\u2019unico output. Si pu\xF2 notare che \xE8 stato richiamato da un attibuto "),ye=i("code"),En=a("dropout"),An=a(" dentro la classe "),Ue=i("code"),Gn=a("DenseReluDense"),_n=a(". Si pu\xF2 notare che ci\xF2 \xE8 avvenuto durante il primo strato, del 2\xB0 blocco, durante il primissimo lotto. Infine, gli elementi di input pi\xF9 grandi in assoluto sono stati "),ve=i("code"),Vn=a("6.27e+04"),Bn=a(" e l\u2019equivalente per l\u2019output era "),Ce=i("code"),Rn=a("inf"),$n=a("."),vl=c(),B=i("p"),Nn=a("Puoi vedere qui, che "),Ze=i("code"),Dn=a("T5DenseGatedGeluDense.forward"),gn=a(" risulta in output activations, il cui valore massimo assoluto era circa 62,7K, che \xE8 molto vicino al limite massimo di 64K di fp16. Nel prossimo frame abbiamo "),Ee=i("code"),kn=a("Dropout"),zn=a(" che rinormalizza i pesi, dopo aver azzerato alcuni elementi, il che spinge il valore massimo assoluto a pi\xF9 di 64K e si verifica un overflow.("),Ae=i("code"),Wn=a("inf"),Qn=a(")."),Cl=c(),ks=i("p"),Ln=a("Come puoi notare, \xE8 nei frames precedenti che occorre esaminare quando i numeri iniziano a diventare molto grandi per i valori fp16."),Zl=c(),ss=i("p"),Xn=a("Confrontiamo il report al codice "),Ge=i("code"),Sn=a("models/t5/modeling_t5.py"),Yn=a(":"),El=c(),M(Ts.$$.fragment),Al=c(),es=i("p"),xn=a("Ora \xE8 facile vedere la chiamata "),_e=i("code"),Fn=a("dropout"),Pn=a(", e tutte le chiamate precedenti."),Gl=c(),ls=i("p"),Hn=a("Poich\xE9 il rilevamento avviene in un avanzamento (forward hook in eng.), i rapporti vengono creati immeditamente dopo ogni rientro da "),Ve=i("code"),On=a("forward"),qn=a(" (forward returns in eng.)."),_l=c(),R=i("p"),Kn=a("Tornando al rapporto completo, per agire e risolvere il problema, dobbiamo andare qualche frame pi\xF9 in alto, dove i numeri hanno iniziato a salire, e probabilmente passare alla modalit\xE0 "),Be=i("code"),st=a("fp32"),et=a(", in modo che i numeri non trabocchino quando vengono moltiplicati o sommati. Naturalmente, potrebbero esserci altre soluzioni. Per esempio, potremmo spegnere temporanemante "),Re=i("code"),lt=a("amp"),at=a(" se \xE8 abilitato, successivamente spostare "),$e=i("code"),nt=a("forward"),tt=a(" in un helper wrapper, come:"),Vl=c(),M(Is.$$.fragment),Bl=c(),k=i("p"),it=a(`Poich\xE9 il rilevatore automatico riporta solo gli ingressi e le uscite di fotogrammi completi, una volta che si sa dove cercare, si pu\xF2
analizzare anche le fasi intermedie di una specifica funzione `),Ne=i("code"),ot=a("forward"),rt=a(". In alcuni casi puoi usare la funzione di supporto "),De=i("code"),pt=a("detect_overflow"),ct=a(" per indirizzare il rilevatore dove preferisci, ad esempio:"),Rl=c(),M(ys.$$.fragment),$l=c(),$=i("p"),ut=a("Si pu\xF2 vedere che abbiamo aggiunto 2 di questi e ora teniamo traccia se "),ge=i("code"),mt=a("inf"),dt=a(" o "),ke=i("code"),Mt=a("nan"),jt=a(" per "),ze=i("code"),wt=a("forwarded_states"),bt=a(` \xE8 stato rilevato
da qualche parte.`),Nl=c(),as=i("p"),ft=a("In realt\xE0, il rilevatore li riporta gi\xE0, perch\xE9 ciascuna delle chiamate nell\u2019esempio precedente \xE8 un "),We=i("code"),ht=a("nn.Module"),Jt=a(`, ma
diciamo che se avessimo dei calcoli diretti locali, questo \xE8 il modo in cui lo faremmo.`),Dl=c(),zs=i("p"),Tt=a(`Inoltre, se si istanzia il debugger nel proprio codice, \xE8 possibile modificare il numero di fotogrammi stampati rispetto a
predefinito, ad esempio.:`),gl=c(),M(Us.$$.fragment),kl=c(),Q=i("h3"),ns=i("a"),Qe=i("span"),M(vs.$$.fragment),It=c(),Le=i("span"),yt=a("Tracciamento della mistura assoluta del lotto specifico e del valore massimo"),zl=c(),Ws=i("p"),Ut=a("La stessa classe di debug pu\xF2 essere utilizzata per il tracciamento per-batch con la funzione di rilevamento di underflow/overflow disattivata."),Wl=c(),ts=i("p"),vt=a("Supponiamo di voler osservare i valori minimi e massimi assoluti per tutti gli ingredienti di ogni chiamata "),Xe=i("code"),Ct=a("forward"),Zt=a(` di un dato lotto.
lotto, e che lo si voglia fare solo per i lotti 1 e 3. Si istanzia questa classe come:`),Ql=c(),M(Cs.$$.fragment),Ll=c(),Qs=i("p"),Et=a("Ora i batch completi 1 e 3 saranno tracciati utilizzando lo stesso formato del rilevatore di underflow/overflow."),Xl=c(),Ls=i("p"),At=a("I batches sono 0-indexed."),Sl=c(),Xs=i("p"),Gt=a(`Questo \xE8 utile se si sa che il programma inizia a comportarsi male dopo un certo numero di batch, in modo da poter avanzare velocemente fino a quell\u2019area.
direttamente a quell\u2019area. Ecco un esempio di output troncato per questa configurazione:`),Yl=c(),M(Zs.$$.fragment),xl=c(),Ss=i("p"),_t=a("Qui verr\xE0 scaricato un numero enorme di fotogrammi, tanti quanti sono le chiamate in avanti nel modello, quindi pu\xF2 essere o non essere quello che volete, ma a volte pu\xF2 essere pi\xF9 utile usarlo di un classico debugger. Per esempio, se il problema inizia a verificarsi a partire dal lotto numero 150. Quindi \xE8 possibile scaricare le tracce dei lotti 149 e 150 e confrontare i punti in cui i numeri hanno iniziato a divergere."),Fl=c(),Ys=i("p"),Vt=a("\xC8 inoltre possibile specificare il numero di batch dopo il quale interrompere l\u2019addestramento, con:"),Pl=c(),M(Es.$$.fragment),this.h()},l(s){const t=so('[data-svelte="svelte-1phssyn"]',document.head);m=o(t,"META",{name:!0,content:!0}),t.forEach(e),v=u(s),d=o(s,"H1",{class:!0});var As=p(d);J=o(As,"A",{id:!0,class:!0,href:!0});var Se=p(J);A=o(Se,"SPAN",{});var Ye=p(A);j(I.$$.fragment,Ye),Ye.forEach(e),Se.forEach(e),U=u(As),D=o(As,"SPAN",{});var Rt=p(D);ca=n(Rt,"Debugging"),Rt.forEach(e),As.forEach(e),xe=u(s),z=o(s,"H2",{class:!0});var Ol=p(z);S=o(Ol,"A",{id:!0,class:!0,href:!0});var $t=p(S);Ps=o($t,"SPAN",{});var Nt=p(Ps);j(us.$$.fragment,Nt),Nt.forEach(e),$t.forEach(e),ua=u(Ol),Hs=o(Ol,"SPAN",{});var Dt=p(Hs);ma=n(Dt,"Debug dei problemi di rete multi-GPU"),Dt.forEach(e),Ol.forEach(e),Fe=u(s),Y=o(s,"P",{});var ql=p(Y);da=n(ql,"Quando addestri o fai inferenza con "),Os=o(ql,"CODE",{});var gt=p(Os);Ma=n(gt,"DistributedDataParallel"),gt.forEach(e),ja=n(ql," e GPU multiple, se si verificano problemi di intercomunicazione tra processi e/o nodi, puoi utilizzare il seguente script per diagnosticare i problemi della rete."),ql.forEach(e),Pe=u(s),j(ms.$$.fragment,s),He=u(s),Gs=o(s,"P",{});var kt=p(Gs);wa=n(kt,"Per esempio per testare come 2 GPU interagiscono fai:"),kt.forEach(e),Oe=u(s),j(ds.$$.fragment,s),qe=u(s),_s=o(s,"P",{});var zt=p(_s);ba=n(zt,"Se entrambi i processi sono in grado di comunicare tra loro e di allocare la memoria della GPU, ciascuno di essi stamper\xE0 lo stato OK."),zt.forEach(e),Ke=u(s),Vs=o(s,"P",{});var Wt=p(Vs);fa=n(Wt,"Per pi\xF9 GPU o nodi adatta gli argumenti nello script."),Wt.forEach(e),sl=u(s),Bs=o(s,"P",{});var Qt=p(Bs);ha=n(Qt,"All\u2019interno dello script di diagnostica troverai molti altri dettagli e anche una guida per eseguirlo in ambiente SLURM."),Qt.forEach(e),el=u(s),x=o(s,"P",{});var Kl=p(x);Ja=n(Kl,"Un livello di debug superiore \xE8 aggiungere la variabile d\u2019ambiente "),qs=o(Kl,"CODE",{});var Lt=p(qs);Ta=n(Lt,"NCCL_DEBUG=INFO"),Lt.forEach(e),Ia=n(Kl," come di seguito:"),Kl.forEach(e),ll=u(s),j(Ms.$$.fragment,s),al=u(s),Rs=o(s,"P",{});var Xt=p(Rs);ya=n(Xt,"In questo modo si scaricano molte informazioni di debug relative a NCCL, che puoi cercare online in caso di problemi. Oppure, se non hai la sicurezza di come interpretare l\u2019output, puoi condividere il file di log in una Issue."),Xt.forEach(e),nl=u(s),W=o(s,"H2",{class:!0});var sa=p(W);F=o(sa,"A",{id:!0,class:!0,href:!0});var St=p(F);Ks=o(St,"SPAN",{});var Yt=p(Ks);j(js.$$.fragment,Yt),Yt.forEach(e),St.forEach(e),Ua=u(sa),se=o(sa,"SPAN",{});var xt=p(se);va=n(xt,"Rilevamento di Underflow e Overflow"),xt.forEach(e),sa.forEach(e),tl=u(s),j(P.$$.fragment,s),il=u(s),j(H.$$.fragment,s),ol=u(s),j(O.$$.fragment,s),rl=u(s),_=o(s,"P",{});var is=p(_);Ca=n(is,"Se inizi a ottenere "),ee=o(is,"CODE",{});var Ft=p(ee);Za=n(Ft,"loss=NaN"),Ft.forEach(e),Ea=n(is," o il modello presenta qualche altro comportamento anomalo a causa di valori "),le=o(is,"CODE",{});var Pt=p(le);Aa=n(Pt,"inf"),Pt.forEach(e),Ga=n(is," o "),ae=o(is,"CODE",{});var Ht=p(ae);_a=n(Ht,"nan"),Ht.forEach(e),Va=n(is,` in
attivazioni o nei pesi, \xE8 necessario scoprire dove si verifica il primo underflow o overflow e cosa lo ha determinato. Fortunatamente
\xE8 possibile farlo facilmente attivando un modulo speciale che effettuer\xE0 il rilevamento automaticamente.`),is.forEach(e),pl=u(s),q=o(s,"P",{});var ea=p(q);Ba=n(ea,"Se stai usando "),ne=o(ea,"CODE",{});var Ot=p(ne);Ra=n(Ot,"Trainer"),Ot.forEach(e),$a=n(ea,", hai bisogno di aggiungere solo:"),ea.forEach(e),cl=u(s),j(ws.$$.fragment,s),ul=u(s),g=o(s,"P",{});var xs=p(g);Na=n(xs,"ai normali argomenti della riga di comando, o passa "),te=o(xs,"CODE",{});var qt=p(te);Da=n(qt,'debug="underflow_overflow"'),qt.forEach(e),ga=n(xs,` quando viene creato l\u2019oggetto
`),ie=o(xs,"CODE",{});var Kt=p(ie);ka=n(Kt,"TrainingArguments"),Kt.forEach(e),za=n(xs,"."),xs.forEach(e),ml=u(s),$s=o(s,"P",{});var si=p($s);Wa=n(si,"Se stai usando il tuo ciclo di allenamento o un altro trainer, puoi ottenere lo stesso risultato con:"),si.forEach(e),dl=u(s),j(bs.$$.fragment,s),Ml=u(s),G=o(s,"P",{});var L=p(G);oe=o(L,"CODE",{});var ei=p(oe);Qa=n(ei,"DebugUnderflowOverflow"),ei.forEach(e),La=n(L,` inserisce dei ganci nel modello che dopo ogni chiamata
testeranno le variabili di ingresso e di uscita e anche i pesi del modulo corrispondente. Non appena viene rilevato `),re=o(L,"CODE",{});var li=p(re);Xa=n(li,"inf"),li.forEach(e),Sa=n(L,` o
o `),pe=o(L,"CODE",{});var ai=p(pe);Ya=n(ai,"nan"),ai.forEach(e),xa=n(L," in almeno un elemento delle attivazioni o dei pesi, il programma lo notifica e stampa un rapporto come il seguente (questo \xE8 stato rilevato con "),ce=o(L,"CODE",{});var ni=p(ce);Fa=n(ni,"google/mt5-small"),ni.forEach(e),Pa=n(L," sotto fp16 mixed precision):"),L.forEach(e),jl=u(s),j(fs.$$.fragment,s),wl=u(s),Ns=o(s,"P",{});var ti=p(Ns);Ha=n(ti,"L\u2019output di esempio \xE8 stato tagliato al centro per brevit\xE0."),ti.forEach(e),bl=u(s),T=o(s,"P",{});var Z=p(T);Oa=n(Z,`La seconda colonna mostra il valore dell\u2019elemento pi\xF9 grande in assoluto,cos\xEC se osserviamo da vicino gli ultimi istanti,
input e output sono nel range di `),ue=o(Z,"CODE",{});var ii=p(ue);qa=n(ii,"1e4"),ii.forEach(e),Ka=n(Z,". Questo addestramento \xE8 stato eseguito con una mixed precision fp16 e l\u2019ultimo passo usciva fuori (sotto "),me=o(Z,"CODE",{});var oi=p(me);sn=n(oi,"fp16"),oi.forEach(e),en=n(Z," il valore pi\xF9 grande prima di "),de=o(Z,"CODE",{});var ri=p(de);ln=n(ri,"inf"),ri.forEach(e),an=n(Z," \xE8 "),Me=o(Z,"CODE",{});var pi=p(Me);nn=n(pi,"64e3"),pi.forEach(e),tn=n(Z,"). Per evitare overflows sotto "),je=o(Z,"CODE",{});var ci=p(je);on=n(ci,"fp16"),ci.forEach(e),rn=n(Z," le attivazionioni devono rimanere molto al di sotto di "),we=o(Z,"CODE",{});var ui=p(we);pn=n(ui,"1e4"),ui.forEach(e),cn=n(Z,", perch\xE9 "),be=o(Z,"CODE",{});var mi=p(be);un=n(mi,"1e4 * 1e4 = 1e8"),mi.forEach(e),mn=n(Z," quindi qualsiasi moltiplicazione di matrice con grandi attivazioni porter\xE0 a una condizione di overflow numerico."),Z.forEach(e),fl=u(s),K=o(s,"P",{});var la=p(K);dn=n(la,"All\u2019inizio della traccia \xE8 possibile scoprire a quale lotto si \xE8 verificato il problema (questo "),fe=o(la,"CODE",{});var di=p(fe);Mn=n(di,"Detected inf/nan during batch_number=0"),di.forEach(e),jn=n(la," significa che il problema si \xE8 verificato nel primo lotto)."),la.forEach(e),hl=u(s),Ds=o(s,"P",{});var Mi=p(Ds);wn=n(Mi,`Ogni frame segnalato inizia dichiarando la voce completamente qualificata per il modulo corrispondente per il quale il frame \xE8 stato segnalato.
Se osserviamo il seguente frame:`),Mi.forEach(e),Jl=u(s),j(hs.$$.fragment,s),Tl=u(s),V=o(s,"P",{});var os=p(V);bn=n(os,"Questo, "),he=o(os,"CODE",{});var ji=p(he);fn=n(ji,"encoder.block.2.layer.1.layer_norm"),ji.forEach(e),hn=n(os," indica che si tratta di un layer norm nel primo layer, del secondo blocco dell\u2019encoder. E le chiamata specifica di "),Je=o(os,"CODE",{});var wi=p(Je);Jn=n(wi,"forward"),wi.forEach(e),Tn=n(os," \xE8 "),Te=o(os,"CODE",{});var bi=p(Te);In=n(bi,"T5LayerNorm"),bi.forEach(e),yn=n(os,"."),os.forEach(e),Il=u(s),gs=o(s,"P",{});var fi=p(gs);Un=n(fi,"Osserviamo gli ultimi frame del report:"),fi.forEach(e),yl=u(s),j(Js.$$.fragment,s),Ul=u(s),C=o(s,"P",{});var N=p(C);vn=n(N,"L\u2019ultimo frame report per la funzione "),Ie=o(N,"CODE",{});var hi=p(Ie);Cn=n(hi,"Dropout.forward"),hi.forEach(e),Zn=n(N," con la prima voce per l\u2019unico input e la seconda per l\u2019unico output. Si pu\xF2 notare che \xE8 stato richiamato da un attibuto "),ye=o(N,"CODE",{});var Ji=p(ye);En=n(Ji,"dropout"),Ji.forEach(e),An=n(N," dentro la classe "),Ue=o(N,"CODE",{});var Ti=p(Ue);Gn=n(Ti,"DenseReluDense"),Ti.forEach(e),_n=n(N,". Si pu\xF2 notare che ci\xF2 \xE8 avvenuto durante il primo strato, del 2\xB0 blocco, durante il primissimo lotto. Infine, gli elementi di input pi\xF9 grandi in assoluto sono stati "),ve=o(N,"CODE",{});var Ii=p(ve);Vn=n(Ii,"6.27e+04"),Ii.forEach(e),Bn=n(N," e l\u2019equivalente per l\u2019output era "),Ce=o(N,"CODE",{});var yi=p(Ce);Rn=n(yi,"inf"),yi.forEach(e),$n=n(N,"."),N.forEach(e),vl=u(s),B=o(s,"P",{});var rs=p(B);Nn=n(rs,"Puoi vedere qui, che "),Ze=o(rs,"CODE",{});var Ui=p(Ze);Dn=n(Ui,"T5DenseGatedGeluDense.forward"),Ui.forEach(e),gn=n(rs," risulta in output activations, il cui valore massimo assoluto era circa 62,7K, che \xE8 molto vicino al limite massimo di 64K di fp16. Nel prossimo frame abbiamo "),Ee=o(rs,"CODE",{});var vi=p(Ee);kn=n(vi,"Dropout"),vi.forEach(e),zn=n(rs," che rinormalizza i pesi, dopo aver azzerato alcuni elementi, il che spinge il valore massimo assoluto a pi\xF9 di 64K e si verifica un overflow.("),Ae=o(rs,"CODE",{});var Ci=p(Ae);Wn=n(Ci,"inf"),Ci.forEach(e),Qn=n(rs,")."),rs.forEach(e),Cl=u(s),ks=o(s,"P",{});var Zi=p(ks);Ln=n(Zi,"Come puoi notare, \xE8 nei frames precedenti che occorre esaminare quando i numeri iniziano a diventare molto grandi per i valori fp16."),Zi.forEach(e),Zl=u(s),ss=o(s,"P",{});var aa=p(ss);Xn=n(aa,"Confrontiamo il report al codice "),Ge=o(aa,"CODE",{});var Ei=p(Ge);Sn=n(Ei,"models/t5/modeling_t5.py"),Ei.forEach(e),Yn=n(aa,":"),aa.forEach(e),El=u(s),j(Ts.$$.fragment,s),Al=u(s),es=o(s,"P",{});var na=p(es);xn=n(na,"Ora \xE8 facile vedere la chiamata "),_e=o(na,"CODE",{});var Ai=p(_e);Fn=n(Ai,"dropout"),Ai.forEach(e),Pn=n(na,", e tutte le chiamate precedenti."),na.forEach(e),Gl=u(s),ls=o(s,"P",{});var ta=p(ls);Hn=n(ta,"Poich\xE9 il rilevamento avviene in un avanzamento (forward hook in eng.), i rapporti vengono creati immeditamente dopo ogni rientro da "),Ve=o(ta,"CODE",{});var Gi=p(Ve);On=n(Gi,"forward"),Gi.forEach(e),qn=n(ta," (forward returns in eng.)."),ta.forEach(e),_l=u(s),R=o(s,"P",{});var ps=p(R);Kn=n(ps,"Tornando al rapporto completo, per agire e risolvere il problema, dobbiamo andare qualche frame pi\xF9 in alto, dove i numeri hanno iniziato a salire, e probabilmente passare alla modalit\xE0 "),Be=o(ps,"CODE",{});var _i=p(Be);st=n(_i,"fp32"),_i.forEach(e),et=n(ps,", in modo che i numeri non trabocchino quando vengono moltiplicati o sommati. Naturalmente, potrebbero esserci altre soluzioni. Per esempio, potremmo spegnere temporanemante "),Re=o(ps,"CODE",{});var Vi=p(Re);lt=n(Vi,"amp"),Vi.forEach(e),at=n(ps," se \xE8 abilitato, successivamente spostare "),$e=o(ps,"CODE",{});var Bi=p($e);nt=n(Bi,"forward"),Bi.forEach(e),tt=n(ps," in un helper wrapper, come:"),ps.forEach(e),Vl=u(s),j(Is.$$.fragment,s),Bl=u(s),k=o(s,"P",{});var Fs=p(k);it=n(Fs,`Poich\xE9 il rilevatore automatico riporta solo gli ingressi e le uscite di fotogrammi completi, una volta che si sa dove cercare, si pu\xF2
analizzare anche le fasi intermedie di una specifica funzione `),Ne=o(Fs,"CODE",{});var Ri=p(Ne);ot=n(Ri,"forward"),Ri.forEach(e),rt=n(Fs,". In alcuni casi puoi usare la funzione di supporto "),De=o(Fs,"CODE",{});var $i=p(De);pt=n($i,"detect_overflow"),$i.forEach(e),ct=n(Fs," per indirizzare il rilevatore dove preferisci, ad esempio:"),Fs.forEach(e),Rl=u(s),j(ys.$$.fragment,s),$l=u(s),$=o(s,"P",{});var cs=p($);ut=n(cs,"Si pu\xF2 vedere che abbiamo aggiunto 2 di questi e ora teniamo traccia se "),ge=o(cs,"CODE",{});var Ni=p(ge);mt=n(Ni,"inf"),Ni.forEach(e),dt=n(cs," o "),ke=o(cs,"CODE",{});var Di=p(ke);Mt=n(Di,"nan"),Di.forEach(e),jt=n(cs," per "),ze=o(cs,"CODE",{});var gi=p(ze);wt=n(gi,"forwarded_states"),gi.forEach(e),bt=n(cs,` \xE8 stato rilevato
da qualche parte.`),cs.forEach(e),Nl=u(s),as=o(s,"P",{});var ia=p(as);ft=n(ia,"In realt\xE0, il rilevatore li riporta gi\xE0, perch\xE9 ciascuna delle chiamate nell\u2019esempio precedente \xE8 un "),We=o(ia,"CODE",{});var ki=p(We);ht=n(ki,"nn.Module"),ki.forEach(e),Jt=n(ia,`, ma
diciamo che se avessimo dei calcoli diretti locali, questo \xE8 il modo in cui lo faremmo.`),ia.forEach(e),Dl=u(s),zs=o(s,"P",{});var zi=p(zs);Tt=n(zi,`Inoltre, se si istanzia il debugger nel proprio codice, \xE8 possibile modificare il numero di fotogrammi stampati rispetto a
predefinito, ad esempio.:`),zi.forEach(e),gl=u(s),j(Us.$$.fragment,s),kl=u(s),Q=o(s,"H3",{class:!0});var oa=p(Q);ns=o(oa,"A",{id:!0,class:!0,href:!0});var Wi=p(ns);Qe=o(Wi,"SPAN",{});var Qi=p(Qe);j(vs.$$.fragment,Qi),Qi.forEach(e),Wi.forEach(e),It=u(oa),Le=o(oa,"SPAN",{});var Li=p(Le);yt=n(Li,"Tracciamento della mistura assoluta del lotto specifico e del valore massimo"),Li.forEach(e),oa.forEach(e),zl=u(s),Ws=o(s,"P",{});var Xi=p(Ws);Ut=n(Xi,"La stessa classe di debug pu\xF2 essere utilizzata per il tracciamento per-batch con la funzione di rilevamento di underflow/overflow disattivata."),Xi.forEach(e),Wl=u(s),ts=o(s,"P",{});var ra=p(ts);vt=n(ra,"Supponiamo di voler osservare i valori minimi e massimi assoluti per tutti gli ingredienti di ogni chiamata "),Xe=o(ra,"CODE",{});var Si=p(Xe);Ct=n(Si,"forward"),Si.forEach(e),Zt=n(ra,` di un dato lotto.
lotto, e che lo si voglia fare solo per i lotti 1 e 3. Si istanzia questa classe come:`),ra.forEach(e),Ql=u(s),j(Cs.$$.fragment,s),Ll=u(s),Qs=o(s,"P",{});var Yi=p(Qs);Et=n(Yi,"Ora i batch completi 1 e 3 saranno tracciati utilizzando lo stesso formato del rilevatore di underflow/overflow."),Yi.forEach(e),Xl=u(s),Ls=o(s,"P",{});var xi=p(Ls);At=n(xi,"I batches sono 0-indexed."),xi.forEach(e),Sl=u(s),Xs=o(s,"P",{});var Fi=p(Xs);Gt=n(Fi,`Questo \xE8 utile se si sa che il programma inizia a comportarsi male dopo un certo numero di batch, in modo da poter avanzare velocemente fino a quell\u2019area.
direttamente a quell\u2019area. Ecco un esempio di output troncato per questa configurazione:`),Fi.forEach(e),Yl=u(s),j(Zs.$$.fragment,s),xl=u(s),Ss=o(s,"P",{});var Pi=p(Ss);_t=n(Pi,"Qui verr\xE0 scaricato un numero enorme di fotogrammi, tanti quanti sono le chiamate in avanti nel modello, quindi pu\xF2 essere o non essere quello che volete, ma a volte pu\xF2 essere pi\xF9 utile usarlo di un classico debugger. Per esempio, se il problema inizia a verificarsi a partire dal lotto numero 150. Quindi \xE8 possibile scaricare le tracce dei lotti 149 e 150 e confrontare i punti in cui i numeri hanno iniziato a divergere."),Pi.forEach(e),Fl=u(s),Ys=o(s,"P",{});var Hi=p(Ys);Vt=n(Hi,"\xC8 inoltre possibile specificare il numero di batch dopo il quale interrompere l\u2019addestramento, con:"),Hi.forEach(e),Pl=u(s),j(Es.$$.fragment,s),this.h()},h(){y(m,"name","hf:doc:metadata"),y(m,"content",JSON.stringify(io)),y(J,"id","debugging"),y(J,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),y(J,"href","#debugging"),y(d,"class","relative group"),y(S,"id","debug-dei-problemi-di-rete-multigpu"),y(S,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),y(S,"href","#debug-dei-problemi-di-rete-multigpu"),y(z,"class","relative group"),y(F,"id","rilevamento-di-underflow-e-overflow"),y(F,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),y(F,"href","#rilevamento-di-underflow-e-overflow"),y(W,"class","relative group"),y(ns,"id","tracciamento-della-mistura-assoluta-del-lotto-specifico-e-del-valore-massimo"),y(ns,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),y(ns,"href","#tracciamento-della-mistura-assoluta-del-lotto-specifico-e-del-valore-massimo"),y(Q,"class","relative group")},m(s,t){l(document.head,m),r(s,v,t),r(s,d,t),l(d,J),l(J,A),w(I,A,null),l(d,U),l(d,D),l(D,ca),r(s,xe,t),r(s,z,t),l(z,S),l(S,Ps),w(us,Ps,null),l(z,ua),l(z,Hs),l(Hs,ma),r(s,Fe,t),r(s,Y,t),l(Y,da),l(Y,Os),l(Os,Ma),l(Y,ja),r(s,Pe,t),w(ms,s,t),r(s,He,t),r(s,Gs,t),l(Gs,wa),r(s,Oe,t),w(ds,s,t),r(s,qe,t),r(s,_s,t),l(_s,ba),r(s,Ke,t),r(s,Vs,t),l(Vs,fa),r(s,sl,t),r(s,Bs,t),l(Bs,ha),r(s,el,t),r(s,x,t),l(x,Ja),l(x,qs),l(qs,Ta),l(x,Ia),r(s,ll,t),w(Ms,s,t),r(s,al,t),r(s,Rs,t),l(Rs,ya),r(s,nl,t),r(s,W,t),l(W,F),l(F,Ks),w(js,Ks,null),l(W,Ua),l(W,se),l(se,va),r(s,tl,t),w(P,s,t),r(s,il,t),w(H,s,t),r(s,ol,t),w(O,s,t),r(s,rl,t),r(s,_,t),l(_,Ca),l(_,ee),l(ee,Za),l(_,Ea),l(_,le),l(le,Aa),l(_,Ga),l(_,ae),l(ae,_a),l(_,Va),r(s,pl,t),r(s,q,t),l(q,Ba),l(q,ne),l(ne,Ra),l(q,$a),r(s,cl,t),w(ws,s,t),r(s,ul,t),r(s,g,t),l(g,Na),l(g,te),l(te,Da),l(g,ga),l(g,ie),l(ie,ka),l(g,za),r(s,ml,t),r(s,$s,t),l($s,Wa),r(s,dl,t),w(bs,s,t),r(s,Ml,t),r(s,G,t),l(G,oe),l(oe,Qa),l(G,La),l(G,re),l(re,Xa),l(G,Sa),l(G,pe),l(pe,Ya),l(G,xa),l(G,ce),l(ce,Fa),l(G,Pa),r(s,jl,t),w(fs,s,t),r(s,wl,t),r(s,Ns,t),l(Ns,Ha),r(s,bl,t),r(s,T,t),l(T,Oa),l(T,ue),l(ue,qa),l(T,Ka),l(T,me),l(me,sn),l(T,en),l(T,de),l(de,ln),l(T,an),l(T,Me),l(Me,nn),l(T,tn),l(T,je),l(je,on),l(T,rn),l(T,we),l(we,pn),l(T,cn),l(T,be),l(be,un),l(T,mn),r(s,fl,t),r(s,K,t),l(K,dn),l(K,fe),l(fe,Mn),l(K,jn),r(s,hl,t),r(s,Ds,t),l(Ds,wn),r(s,Jl,t),w(hs,s,t),r(s,Tl,t),r(s,V,t),l(V,bn),l(V,he),l(he,fn),l(V,hn),l(V,Je),l(Je,Jn),l(V,Tn),l(V,Te),l(Te,In),l(V,yn),r(s,Il,t),r(s,gs,t),l(gs,Un),r(s,yl,t),w(Js,s,t),r(s,Ul,t),r(s,C,t),l(C,vn),l(C,Ie),l(Ie,Cn),l(C,Zn),l(C,ye),l(ye,En),l(C,An),l(C,Ue),l(Ue,Gn),l(C,_n),l(C,ve),l(ve,Vn),l(C,Bn),l(C,Ce),l(Ce,Rn),l(C,$n),r(s,vl,t),r(s,B,t),l(B,Nn),l(B,Ze),l(Ze,Dn),l(B,gn),l(B,Ee),l(Ee,kn),l(B,zn),l(B,Ae),l(Ae,Wn),l(B,Qn),r(s,Cl,t),r(s,ks,t),l(ks,Ln),r(s,Zl,t),r(s,ss,t),l(ss,Xn),l(ss,Ge),l(Ge,Sn),l(ss,Yn),r(s,El,t),w(Ts,s,t),r(s,Al,t),r(s,es,t),l(es,xn),l(es,_e),l(_e,Fn),l(es,Pn),r(s,Gl,t),r(s,ls,t),l(ls,Hn),l(ls,Ve),l(Ve,On),l(ls,qn),r(s,_l,t),r(s,R,t),l(R,Kn),l(R,Be),l(Be,st),l(R,et),l(R,Re),l(Re,lt),l(R,at),l(R,$e),l($e,nt),l(R,tt),r(s,Vl,t),w(Is,s,t),r(s,Bl,t),r(s,k,t),l(k,it),l(k,Ne),l(Ne,ot),l(k,rt),l(k,De),l(De,pt),l(k,ct),r(s,Rl,t),w(ys,s,t),r(s,$l,t),r(s,$,t),l($,ut),l($,ge),l(ge,mt),l($,dt),l($,ke),l(ke,Mt),l($,jt),l($,ze),l(ze,wt),l($,bt),r(s,Nl,t),r(s,as,t),l(as,ft),l(as,We),l(We,ht),l(as,Jt),r(s,Dl,t),r(s,zs,t),l(zs,Tt),r(s,gl,t),w(Us,s,t),r(s,kl,t),r(s,Q,t),l(Q,ns),l(ns,Qe),w(vs,Qe,null),l(Q,It),l(Q,Le),l(Le,yt),r(s,zl,t),r(s,Ws,t),l(Ws,Ut),r(s,Wl,t),r(s,ts,t),l(ts,vt),l(ts,Xe),l(Xe,Ct),l(ts,Zt),r(s,Ql,t),w(Cs,s,t),r(s,Ll,t),r(s,Qs,t),l(Qs,Et),r(s,Xl,t),r(s,Ls,t),l(Ls,At),r(s,Sl,t),r(s,Xs,t),l(Xs,Gt),r(s,Yl,t),w(Zs,s,t),r(s,xl,t),r(s,Ss,t),l(Ss,_t),r(s,Fl,t),r(s,Ys,t),l(Ys,Vt),r(s,Pl,t),w(Es,s,t),Hl=!0},p(s,[t]){const As={};t&2&&(As.$$scope={dirty:t,ctx:s}),P.$set(As);const Se={};t&2&&(Se.$$scope={dirty:t,ctx:s}),H.$set(Se);const Ye={};t&2&&(Ye.$$scope={dirty:t,ctx:s}),O.$set(Ye)},i(s){Hl||(b(I.$$.fragment,s),b(us.$$.fragment,s),b(ms.$$.fragment,s),b(ds.$$.fragment,s),b(Ms.$$.fragment,s),b(js.$$.fragment,s),b(P.$$.fragment,s),b(H.$$.fragment,s),b(O.$$.fragment,s),b(ws.$$.fragment,s),b(bs.$$.fragment,s),b(fs.$$.fragment,s),b(hs.$$.fragment,s),b(Js.$$.fragment,s),b(Ts.$$.fragment,s),b(Is.$$.fragment,s),b(ys.$$.fragment,s),b(Us.$$.fragment,s),b(vs.$$.fragment,s),b(Cs.$$.fragment,s),b(Zs.$$.fragment,s),b(Es.$$.fragment,s),Hl=!0)},o(s){f(I.$$.fragment,s),f(us.$$.fragment,s),f(ms.$$.fragment,s),f(ds.$$.fragment,s),f(Ms.$$.fragment,s),f(js.$$.fragment,s),f(P.$$.fragment,s),f(H.$$.fragment,s),f(O.$$.fragment,s),f(ws.$$.fragment,s),f(bs.$$.fragment,s),f(fs.$$.fragment,s),f(hs.$$.fragment,s),f(Js.$$.fragment,s),f(Ts.$$.fragment,s),f(Is.$$.fragment,s),f(ys.$$.fragment,s),f(Us.$$.fragment,s),f(vs.$$.fragment,s),f(Cs.$$.fragment,s),f(Zs.$$.fragment,s),f(Es.$$.fragment,s),Hl=!1},d(s){e(m),s&&e(v),s&&e(d),h(I),s&&e(xe),s&&e(z),h(us),s&&e(Fe),s&&e(Y),s&&e(Pe),h(ms,s),s&&e(He),s&&e(Gs),s&&e(Oe),h(ds,s),s&&e(qe),s&&e(_s),s&&e(Ke),s&&e(Vs),s&&e(sl),s&&e(Bs),s&&e(el),s&&e(x),s&&e(ll),h(Ms,s),s&&e(al),s&&e(Rs),s&&e(nl),s&&e(W),h(js),s&&e(tl),h(P,s),s&&e(il),h(H,s),s&&e(ol),h(O,s),s&&e(rl),s&&e(_),s&&e(pl),s&&e(q),s&&e(cl),h(ws,s),s&&e(ul),s&&e(g),s&&e(ml),s&&e($s),s&&e(dl),h(bs,s),s&&e(Ml),s&&e(G),s&&e(jl),h(fs,s),s&&e(wl),s&&e(Ns),s&&e(bl),s&&e(T),s&&e(fl),s&&e(K),s&&e(hl),s&&e(Ds),s&&e(Jl),h(hs,s),s&&e(Tl),s&&e(V),s&&e(Il),s&&e(gs),s&&e(yl),h(Js,s),s&&e(Ul),s&&e(C),s&&e(vl),s&&e(B),s&&e(Cl),s&&e(ks),s&&e(Zl),s&&e(ss),s&&e(El),h(Ts,s),s&&e(Al),s&&e(es),s&&e(Gl),s&&e(ls),s&&e(_l),s&&e(R),s&&e(Vl),h(Is,s),s&&e(Bl),s&&e(k),s&&e(Rl),h(ys,s),s&&e($l),s&&e($),s&&e(Nl),s&&e(as),s&&e(Dl),s&&e(zs),s&&e(gl),h(Us,s),s&&e(kl),s&&e(Q),h(vs),s&&e(zl),s&&e(Ws),s&&e(Wl),s&&e(ts),s&&e(Ql),h(Cs,s),s&&e(Ll),s&&e(Qs),s&&e(Xl),s&&e(Ls),s&&e(Sl),s&&e(Xs),s&&e(Yl),h(Zs,s),s&&e(xl),s&&e(Ss),s&&e(Fl),s&&e(Ys),s&&e(Pl),h(Es,s)}}}const io={local:"debugging",sections:[{local:"debug-dei-problemi-di-rete-multigpu",title:"Debug dei problemi di rete multi-GPU"},{local:"rilevamento-di-underflow-e-overflow",sections:[{local:"tracciamento-della-mistura-assoluta-del-lotto-specifico-e-del-valore-massimo",title:"Tracciamento della mistura assoluta del lotto specifico e del valore massimo"}],title:"Rilevamento di Underflow e Overflow"}],title:"Debugging"};function oo(X){return eo(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class mo extends Oi{constructor(m){super();qi(this,m,oo,to,Ki,{})}}export{mo as default,io as metadata};
