import{S as Oo,i as Ko,s as st,e as o,k as c,w as j,t as l,M as et,c as t,d as e,m as d,a as u,x as M,h as n,b as I,G as a,g as p,y as b,q as w,o as f,B as h,v as at}from"../chunks/vendor-hf-doc-builder.js";import{T as Br}from"../chunks/Tip-hf-doc-builder.js";import{I as ul}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as Z}from"../chunks/CodeBlock-hf-doc-builder.js";function lt(S){let m,C;return{c(){m=o("p"),C=l("Esta funci\xF3n est\xE1 disponible actualmente s\xF3lo para PyTorch.")},l(i){m=t(i,"P",{});var J=u(m);C=n(J,"Esta funci\xF3n est\xE1 disponible actualmente s\xF3lo para PyTorch."),J.forEach(e)},m(i,J){p(i,m,J),a(m,C)},d(i){i&&e(m)}}}function nt(S){let m,C,i,J,A;return{c(){m=o("p"),C=l("Para el entrenamiento multi-GPU, requiere DDP ("),i=o("code"),J=l("torch.distributed.launch"),A=l(").")},l(y){m=t(y,"P",{});var U=u(m);C=n(U,"Para el entrenamiento multi-GPU, requiere DDP ("),i=t(U,"CODE",{});var $=u(i);J=n($,"torch.distributed.launch"),$.forEach(e),A=n(U,")."),U.forEach(e)},m(y,U){p(y,m,U),a(m,C),a(m,i),a(i,J),a(m,A)},d(y){y&&e(m)}}}function rt(S){let m,C,i,J,A;return{c(){m=o("p"),C=l("Esta funci\xF3n puede utilizarse con cualquier modelo basado en "),i=o("code"),J=l("nn.Module"),A=l(".")},l(y){m=t(y,"P",{});var U=u(m);C=n(U,"Esta funci\xF3n puede utilizarse con cualquier modelo basado en "),i=t(U,"CODE",{});var $=u(i);J=n($,"nn.Module"),$.forEach(e),A=n(U,"."),U.forEach(e)},m(y,U){p(y,m,U),a(m,C),a(m,i),a(i,J),a(m,A)},d(y){y&&e(m)}}}function ot(S){let m,C,i,J,A,y,U,$,cl,qe,g,z,Ps,ds,dl,Fs,ml,xe,Y,il,Hs,jl,Ml,Pe,ms,Fe,Gs,bl,He,is,Oe,_s,wl,Ke,Vs,fl,sa,Bs,hl,ea,q,Jl,Os,Tl,yl,aa,js,la,ks,Il,na,X,x,Ks,Ms,Ul,se,Cl,ra,P,oa,F,ta,H,pa,_,vl,ee,El,Zl,ae,Al,Gl,le,_l,Vl,ua,O,Bl,ne,kl,Dl,ca,bs,da,N,Rl,re,$l,Nl,oe,Wl,gl,ma,Ds,Xl,ia,ws,ja,G,te,Ll,Ql,pe,Sl,zl,ue,Yl,ql,ce,xl,Pl,Ma,fs,ba,Rs,Fl,wa,T,Hl,de,Ol,Kl,me,sn,en,ie,an,ln,je,nn,rn,Me,on,tn,be,pn,un,we,cn,dn,fa,K,mn,fe,jn,Mn,ha,$s,bn,Ja,hs,Ta,V,wn,he,fn,hn,Je,Jn,Tn,Te,yn,In,ya,Ns,Un,Ia,Js,Ua,v,Cn,ye,vn,En,Ie,Zn,An,Ue,Gn,_n,Ce,Vn,Bn,ve,kn,Dn,Ca,B,Rn,Ee,$n,Nn,Ze,Wn,gn,Ae,Xn,Ln,va,Ws,Qn,Ea,ss,Sn,Ge,zn,Yn,Za,Ts,Aa,es,qn,_e,xn,Pn,Ga,as,Fn,Ve,Hn,On,_a,k,Kn,Be,sr,er,ke,ar,lr,De,nr,rr,Va,ys,Ba,W,or,Re,tr,pr,$e,ur,cr,ka,Is,Da,D,dr,Ne,mr,ir,We,jr,Mr,ge,br,wr,Ra,ls,fr,Xe,hr,Jr,$a,gs,Tr,Na,Us,Wa,L,ns,Le,Cs,yr,Qe,Ir,ga,Xs,Ur,Xa,rs,Cr,Se,vr,Er,La,vs,Qa,Ls,Zr,Sa,Qs,Ar,za,Ss,Gr,Ya,Es,qa,zs,_r,xa,Ys,Vr,Pa,Zs,Fa;return y=new ul({}),ds=new ul({}),ms=new Z({props:{code:"d2dldCUyMGh0dHBzJTNBJTJGJTJGcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSUyRmh1Z2dpbmdmYWNlJTJGdHJhbnNmb3JtZXJzJTJGbWFpbiUyRnNjcmlwdHMlMkZkaXN0cmlidXRlZCUyRnRvcmNoLWRpc3RyaWJ1dGVkLWdwdS10ZXN0LnB5",highlighted:"wget https://raw.githubusercontent.com/huggingface/transformers/main/scripts/distributed/torch-distributed-gpu-test.py"}}),is=new Z({props:{code:"cHl0aG9uJTIwLW0lMjB0b3JjaC5kaXN0cmlidXRlZC5ydW4lMjAtLW5wcm9jX3Blcl9ub2RlJTIwMiUyMC0tbm5vZGVzJTIwMSUyMHRvcmNoLWRpc3RyaWJ1dGVkLWdwdS10ZXN0LnB5",highlighted:"python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py"}}),js=new Z({props:{code:"TkNDTF9ERUJVRyUzRElORk8lMjBweXRob24lMjAtbSUyMHRvcmNoLmRpc3RyaWJ1dGVkLnJ1biUyMC0tbnByb2NfcGVyX25vZGUlMjAyJTIwLS1ubm9kZXMlMjAxJTIwdG9yY2gtZGlzdHJpYnV0ZWQtZ3B1LXRlc3QucHk=",highlighted:"NCCL_DEBUG=INFO python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py"}}),Ms=new ul({}),P=new Br({props:{$$slots:{default:[lt]},$$scope:{ctx:S}}}),F=new Br({props:{$$slots:{default:[nt]},$$scope:{ctx:S}}}),H=new Br({props:{$$slots:{default:[rt]},$$scope:{ctx:S}}}),bs=new Z({props:{code:"LS1kZWJ1ZyUyMHVuZGVyZmxvd19vdmVyZmxvdw==",highlighted:"--debug underflow_overflow"}}),ws=new Z({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 Z({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 Z({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 Z({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 Z({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`}}),ys=new Z({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)`}}),Is=new Z({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 Z({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>)`}}),Cs=new ul({}),vs=new Z({props:{code:"ZGVidWdfb3ZlcmZsb3clMjAlM0QlMjBEZWJ1Z1VuZGVyZmxvd092ZXJmbG93KG1vZGVsJTJDJTIwdHJhY2VfYmF0Y2hfbnVtcyUzRCU1QjElMkMlMjAzJTVEKQ==",highlighted:'debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[<span class="hljs-number">1</span>, <span class="hljs-number">3</span>])'}}),Es=new Z({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
[...]`}}),Zs=new Z({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=o("meta"),C=c(),i=o("h1"),J=o("a"),A=o("span"),j(y.$$.fragment),U=c(),$=o("span"),cl=l("Debugging"),qe=c(),g=o("h2"),z=o("a"),Ps=o("span"),j(ds.$$.fragment),dl=c(),Fs=o("span"),ml=l("Debug de problemas de Network multi-GPU"),xe=c(),Y=o("p"),il=l("Cuando entrenas o infieres con "),Hs=o("code"),jl=l("DistributedDataParallel"),Ml=l(" y varias GPUs, si encuentras problemas de intercomunicaci\xF3n entre procesos y/o nodos, puedes usar el siguiente script para diagnosticar problemas de red."),Pe=c(),j(ms.$$.fragment),Fe=c(),Gs=o("p"),bl=l("Por ejemplo, para probar c\xF3mo interact\xFAan 2 GPUs, haz lo siguiente:"),He=c(),j(is.$$.fragment),Oe=c(),_s=o("p"),wl=l("Si ambos procesos pueden hablar entre s\xED y asignar la memoria de la GPU, cada uno imprimir\xE1 un status OK."),Ke=c(),Vs=o("p"),fl=l("Para m\xE1s GPUs o nodos, ajusta los argumentos en el script."),sa=c(),Bs=o("p"),hl=l("Encontrar\xE1s muchos m\xE1s detalles dentro del script de diagn\xF3stico e incluso una receta de c\xF3mo ejecutarlo en un entorno SLURM."),ea=c(),q=o("p"),Jl=l("Un nivel adicional de debug es agregar la variable de entorno "),Os=o("code"),Tl=l("NCCL_DEBUG=INFO"),yl=l(" de la siguiente manera:"),aa=c(),j(js.$$.fragment),la=c(),ks=o("p"),Il=l("Esto mostrar\xE1 mucha informaci\xF3n de debug relacionada con NCCL, que luego puedes buscar online si encuentras que reporta alg\xFAn problema. O si no est\xE1s seguro de c\xF3mo interpretar el output, puedes compartir el archivo de log en un Issue."),na=c(),X=o("h2"),x=o("a"),Ks=o("span"),j(Ms.$$.fragment),Ul=c(),se=o("span"),Cl=l("Detecci\xF3n de Underflow y Overflow"),ra=c(),j(P.$$.fragment),oa=c(),j(F.$$.fragment),ta=c(),j(H.$$.fragment),pa=c(),_=o("p"),vl=l("Si empiezas a obtener "),ee=o("code"),El=l("loss=NaN"),Zl=l(" o el modelo muestra alg\xFAn otro comportamiento anormal debido a "),ae=o("code"),Al=l("inf"),Gl=l(" o "),le=o("code"),_l=l("nan"),Vl=l(` en
activations o weights hay que descubrir d\xF3nde se produce el primer underflow o overflow y qu\xE9 lo ha provocado. Por suerte
puedes lograrlo f\xE1cilmente activando un m\xF3dulo especial que har\xE1 la detecci\xF3n autom\xE1ticamente.`),ua=c(),O=o("p"),Bl=l("Si est\xE1s usando "),ne=o("code"),kl=l("Trainer"),Dl=l(", solo necesitas a\xF1adir:"),ca=c(),j(bs.$$.fragment),da=c(),N=o("p"),Rl=l("a los argumentos normales de la l\xEDnea de comandos, o pasar "),re=o("code"),$l=l('debug="underflow_overflow"'),Nl=l(" al crear el objeto "),oe=o("code"),Wl=l("TrainingArguments"),gl=l("."),ma=c(),Ds=o("p"),Xl=l("Si est\xE1s usando tu propio bucle de entrenamiento u otro Trainer puedes lograr lo mismo con:"),ia=c(),j(ws.$$.fragment),ja=c(),G=o("p"),te=o("code"),Ll=l("DebugUnderflowOverflow"),Ql=l(` inserta hooks en el modelo que inmediatamente despu\xE9s de cada forward
testear\xE1 las variables de input y output y tambi\xE9n los weights del m\xF3dulo correspondiente. Tan pronto como se detecte `),pe=o("code"),Sl=l("inf"),zl=l(` o
`),ue=o("code"),Yl=l("nan"),ql=l(` se detecta en al menos un elemento de las activations o weights, el programa afirmar\xE1 e imprimir\xE1 un informe
como este (esto fue capturado con `),ce=o("code"),xl=l("google/mt5-small"),Pl=l(" bajo fp16 mixed precision):"),Ma=c(),j(fs.$$.fragment),ba=c(),Rs=o("p"),Fl=l("El output del ejemplo se ha recortado en el centro por razones de brevedad."),wa=c(),T=o("p"),Hl=l(`La segunda columna muestra el valor del elemento m\xE1s grande en t\xE9rminos absolutos, por lo que si observas con detenimiento los \xFAltimos fotogramas,
los inputs y outputs estaban en el rango de `),de=o("code"),Ol=l("1e4"),Kl=l(`. As\xED que cuando este entrenamiento se hizo con fp16 mixed precision,
el \xFAltimo paso sufri\xF3 overflow (ya que bajo `),me=o("code"),sn=l("fp16"),en=l(" el mayor n\xFAmero antes de "),ie=o("code"),an=l("inf"),ln=l(" es "),je=o("code"),nn=l("64e3"),rn=l(`). Para evitar overflows en
`),Me=o("code"),on=l("fp16"),tn=l(" las activations deben permanecer muy por debajo de "),be=o("code"),pn=l("1e4"),un=l(", porque "),we=o("code"),cn=l("1e4 * 1e4 = 1e8"),dn=l(` por lo que cualquier matrix multiplication con
grandes activations va a llevar a una condici\xF3n de overflow num\xE9rico.`),fa=c(),K=o("p"),mn=l("Al principio del output puedes descubrir en qu\xE9 n\xFAmero de batch se produjo el problema (aqu\xED "),fe=o("code"),jn=l("Detected inf/nan during batch_number=0"),Mn=l(" significa que el problema se produjo en el primer batch)."),ha=c(),$s=o("p"),bn=l(`Cada frame del informe comienza declarando la entrada completamente calificada para el m\xF3dulo correspondiente que este frame est\xE1 reportando.
Si nos fijamos s\xF3lo en este frame:`),Ja=c(),j(hs.$$.fragment),Ta=c(),V=o("p"),wn=l("Aqu\xED, "),he=o("code"),fn=l("encoder.block.2.layer.1.layer_norm"),hn=l(` indica que era una layer norm para la primera capa, del segundo
block del encoder. Y la call espec\xEDfica del `),Je=o("code"),Jn=l("forward"),Tn=l(" es "),Te=o("code"),yn=l("T5LayerNorm"),In=l("."),ya=c(),Ns=o("p"),Un=l("Veamos los \xFAltimos frames de ese informe:"),Ia=c(),j(Js.$$.fragment),Ua=c(),v=o("p"),Cn=l("El \xFAltimo frame informa para la funci\xF3n "),ye=o("code"),vn=l("Dropout.forward"),En=l(` con la primera entrada para el \xFAnico input y la segunda para el
\xFAnico output. Puedes ver que fue llamada desde un atributo `),Ie=o("code"),Zn=l("dropout"),An=l(" dentro de la clase "),Ue=o("code"),Gn=l("DenseReluDense"),_n=l(`. Podemos ver
que ocurri\xF3 durante la primera capa, del segundo block, durante el primer batch. Por \xFAltimo, el mayor absoluto
elementos de input fue `),Ce=o("code"),Vn=l("6.27e+04"),Bn=l(" y el mismo para el output fue "),ve=o("code"),kn=l("inf"),Dn=l("."),Ca=c(),B=o("p"),Rn=l("Puedes ver aqu\xED, que "),Ee=o("code"),$n=l("T5DenseGatedGeluDense.forward"),Nn=l(` result\xF3 en output activations, cuyo valor m\xE1ximo absoluto fue
alrededor de 62.7K, que est\xE1 muy cerca del l\xEDmite m\xE1ximo de fp16 de 64K. En el siguiente frame tenemos `),Ze=o("code"),Wn=l("Dropout"),gn=l(`, el cual renormaliza
los weights, despu\xE9s de poner a cero algunos de los elementos, lo que empuja el valor m\xE1ximo absoluto a m\xE1s de 64K, y obtenemos un
overflow (`),Ae=o("code"),Xn=l("inf"),Ln=l(")."),va=c(),Ws=o("p"),Qn=l("Como puedes ver son los frames anteriores los que tenemos que mirar cuando los n\xFAmeros empiezan a ser muy grandes para n\xFAmeros fp16."),Ea=c(),ss=o("p"),Sn=l("Combinemos el informe con el c\xF3digo de "),Ge=o("code"),zn=l("models/t5/modeling_t5.py"),Yn=l(":"),Za=c(),j(Ts.$$.fragment),Aa=c(),es=o("p"),qn=l("Ahora es f\xE1cil ver la call "),_e=o("code"),xn=l("dropout"),Pn=l(", y tambi\xE9n todas las calls anteriores."),Ga=c(),as=o("p"),Fn=l("Dado que la detecci\xF3n se produce en un forward hook, estos informes se imprimen inmediatamente despu\xE9s de que cada "),Ve=o("code"),Hn=l("forward"),On=l(`
responda.`),_a=c(),k=o("p"),Kn=l(`Volviendo al informe completo, para actuar sobre \xE9l y arreglar el problema, tenemos que subir unos cuantos frames donde los n\xFAmeros
empezaron a subir y probablemente cambiar al modo `),Be=o("code"),sr=l("fp32"),er=l(` aqu\xED, para que los n\xFAmeros no sufran overflow cuando se multipliquen
o al sumarlos. Por supuesto, puede haber otras soluciones. Por ejemplo, podr\xEDamos desactivar `),ke=o("code"),ar=l("amp"),lr=l(` temporalmente si est\xE1
activado, despu\xE9s de mover el original `),De=o("code"),nr=l("forward"),rr=l(" dentro de un helper wrapper, as\xED:"),Va=c(),j(ys.$$.fragment),Ba=c(),W=o("p"),or=l(`Como el detector autom\xE1tico s\xF3lo informa de los inputs y outputs de los frames completos, una vez que sepas d\xF3nde buscar, puedes
analizar tambi\xE9n las etapas intermedias de una funci\xF3n espec\xEDfica de `),Re=o("code"),tr=l("forward"),pr=l(`. En este caso, puede utilizar la funci\xF3n
funci\xF3n de ayuda `),$e=o("code"),ur=l("detect_overflow"),cr=l(" para inyectar el detector donde quieras, por ejemplo:"),ka=c(),j(Is.$$.fragment),Da=c(),D=o("p"),dr=l("Puedes ver que hemos a\xF1adido 2 de estos y ahora se trackea si "),Ne=o("code"),mr=l("inf"),ir=l(" o "),We=o("code"),jr=l("nan"),Mr=l(" para "),ge=o("code"),br=l("forwarded_states"),wr=l(` fue detectado
en alg\xFAn punto intermedio.`),Ra=c(),ls=o("p"),fr=l("De hecho, el detector ya informa de esto porque cada una de las llamadas en el ejemplo anterior es un "),Xe=o("code"),hr=l("nn.Module"),Jr=l(`, pero
digamos que si tuvieras algunos c\xE1lculos directos locales, as\xED es como lo har\xEDas.`),$a=c(),gs=o("p"),Tr=l(`Adem\xE1s, si est\xE1s instanciando el debugger en tu propio c\xF3digo, puedes ajustar el n\xFAmero de frames impresos de
su valor por defecto, por ejemplo:`),Na=c(),j(Us.$$.fragment),Wa=c(),L=o("h3"),ns=o("a"),Le=o("span"),j(Cs.$$.fragment),yr=c(),Qe=o("span"),Ir=l("Rastreo de valores m\xEDnimos y m\xE1ximos absolutos de batches espec\xEDficos"),ga=c(),Xs=o("p"),Ur=l("La misma clase de debugging se puede utilizar para el rastreo por batches con la funci\xF3n de detecci\xF3n de underflow/overflow desactivada."),Xa=c(),rs=o("p"),Cr=l("Digamos que quieres ver los valores m\xEDnimos y m\xE1ximos absolutos de todos los ingredientes de cada call "),Se=o("code"),vr=l("forward"),Er=l(` de un determinado
batch, y s\xF3lo hacerlo para los batches 1 y 3. Entonces instancias esta clase como:`),La=c(),j(vs.$$.fragment),Qa=c(),Ls=o("p"),Zr=l("Y ahora los batches 1 y 3 completos ser\xE1n rastreados usando el mismo formato que el detector de underflow/overflow."),Sa=c(),Qs=o("p"),Ar=l("Los batches son 0-index."),za=c(),Ss=o("p"),Gr=l(`Esto es muy \xFAtil si sabes que el programa empieza a comportarse mal despu\xE9s de un determinado n\xFAmero de batch, para que puedas avanzar r\xE1pidamente
hasta esa \xE1rea. Aqu\xED hay un ejemplo de output recortado para tal configuraci\xF3n:`),Ya=c(),j(Es.$$.fragment),qa=c(),zs=o("p"),_r=l(`Aqu\xED obtendr\xE1s un gran n\xFAmero de frames mostrados - tantos como forward calls haya en tu modelo, por lo que puede o no ser lo que quieras, pero a veces puede ser m\xE1s f\xE1cil de usar para debug que un debugger normal.
Por ejemplo, si un problema comienza a ocurrir en el batch 150. Entonces puedes mostrar las trazas de los batches 149 y 150 y comparar d\xF3nde
los n\xFAmeros empezaron a divergir.`),xa=c(),Ys=o("p"),Vr=l("Tambi\xE9n puedes especificar el n\xFAmero de batch despu\xE9s del cual se debe detener el entrenamiento, con:"),Pa=c(),j(Zs.$$.fragment),this.h()},l(s){const r=et('[data-svelte="svelte-1phssyn"]',document.head);m=t(r,"META",{name:!0,content:!0}),r.forEach(e),C=d(s),i=t(s,"H1",{class:!0});var As=u(i);J=t(As,"A",{id:!0,class:!0,href:!0});var ze=u(J);A=t(ze,"SPAN",{});var Ye=u(A);M(y.$$.fragment,Ye),Ye.forEach(e),ze.forEach(e),U=d(As),$=t(As,"SPAN",{});var kr=u($);cl=n(kr,"Debugging"),kr.forEach(e),As.forEach(e),qe=d(s),g=t(s,"H2",{class:!0});var Ha=u(g);z=t(Ha,"A",{id:!0,class:!0,href:!0});var Dr=u(z);Ps=t(Dr,"SPAN",{});var Rr=u(Ps);M(ds.$$.fragment,Rr),Rr.forEach(e),Dr.forEach(e),dl=d(Ha),Fs=t(Ha,"SPAN",{});var $r=u(Fs);ml=n($r,"Debug de problemas de Network multi-GPU"),$r.forEach(e),Ha.forEach(e),xe=d(s),Y=t(s,"P",{});var Oa=u(Y);il=n(Oa,"Cuando entrenas o infieres con "),Hs=t(Oa,"CODE",{});var Nr=u(Hs);jl=n(Nr,"DistributedDataParallel"),Nr.forEach(e),Ml=n(Oa," y varias GPUs, si encuentras problemas de intercomunicaci\xF3n entre procesos y/o nodos, puedes usar el siguiente script para diagnosticar problemas de red."),Oa.forEach(e),Pe=d(s),M(ms.$$.fragment,s),Fe=d(s),Gs=t(s,"P",{});var Wr=u(Gs);bl=n(Wr,"Por ejemplo, para probar c\xF3mo interact\xFAan 2 GPUs, haz lo siguiente:"),Wr.forEach(e),He=d(s),M(is.$$.fragment,s),Oe=d(s),_s=t(s,"P",{});var gr=u(_s);wl=n(gr,"Si ambos procesos pueden hablar entre s\xED y asignar la memoria de la GPU, cada uno imprimir\xE1 un status OK."),gr.forEach(e),Ke=d(s),Vs=t(s,"P",{});var Xr=u(Vs);fl=n(Xr,"Para m\xE1s GPUs o nodos, ajusta los argumentos en el script."),Xr.forEach(e),sa=d(s),Bs=t(s,"P",{});var Lr=u(Bs);hl=n(Lr,"Encontrar\xE1s muchos m\xE1s detalles dentro del script de diagn\xF3stico e incluso una receta de c\xF3mo ejecutarlo en un entorno SLURM."),Lr.forEach(e),ea=d(s),q=t(s,"P",{});var Ka=u(q);Jl=n(Ka,"Un nivel adicional de debug es agregar la variable de entorno "),Os=t(Ka,"CODE",{});var Qr=u(Os);Tl=n(Qr,"NCCL_DEBUG=INFO"),Qr.forEach(e),yl=n(Ka," de la siguiente manera:"),Ka.forEach(e),aa=d(s),M(js.$$.fragment,s),la=d(s),ks=t(s,"P",{});var Sr=u(ks);Il=n(Sr,"Esto mostrar\xE1 mucha informaci\xF3n de debug relacionada con NCCL, que luego puedes buscar online si encuentras que reporta alg\xFAn problema. O si no est\xE1s seguro de c\xF3mo interpretar el output, puedes compartir el archivo de log en un Issue."),Sr.forEach(e),na=d(s),X=t(s,"H2",{class:!0});var sl=u(X);x=t(sl,"A",{id:!0,class:!0,href:!0});var zr=u(x);Ks=t(zr,"SPAN",{});var Yr=u(Ks);M(Ms.$$.fragment,Yr),Yr.forEach(e),zr.forEach(e),Ul=d(sl),se=t(sl,"SPAN",{});var qr=u(se);Cl=n(qr,"Detecci\xF3n de Underflow y Overflow"),qr.forEach(e),sl.forEach(e),ra=d(s),M(P.$$.fragment,s),oa=d(s),M(F.$$.fragment,s),ta=d(s),M(H.$$.fragment,s),pa=d(s),_=t(s,"P",{});var os=u(_);vl=n(os,"Si empiezas a obtener "),ee=t(os,"CODE",{});var xr=u(ee);El=n(xr,"loss=NaN"),xr.forEach(e),Zl=n(os," o el modelo muestra alg\xFAn otro comportamiento anormal debido a "),ae=t(os,"CODE",{});var Pr=u(ae);Al=n(Pr,"inf"),Pr.forEach(e),Gl=n(os," o "),le=t(os,"CODE",{});var Fr=u(le);_l=n(Fr,"nan"),Fr.forEach(e),Vl=n(os,` en
activations o weights hay que descubrir d\xF3nde se produce el primer underflow o overflow y qu\xE9 lo ha provocado. Por suerte
puedes lograrlo f\xE1cilmente activando un m\xF3dulo especial que har\xE1 la detecci\xF3n autom\xE1ticamente.`),os.forEach(e),ua=d(s),O=t(s,"P",{});var el=u(O);Bl=n(el,"Si est\xE1s usando "),ne=t(el,"CODE",{});var Hr=u(ne);kl=n(Hr,"Trainer"),Hr.forEach(e),Dl=n(el,", solo necesitas a\xF1adir:"),el.forEach(e),ca=d(s),M(bs.$$.fragment,s),da=d(s),N=t(s,"P",{});var qs=u(N);Rl=n(qs,"a los argumentos normales de la l\xEDnea de comandos, o pasar "),re=t(qs,"CODE",{});var Or=u(re);$l=n(Or,'debug="underflow_overflow"'),Or.forEach(e),Nl=n(qs," al crear el objeto "),oe=t(qs,"CODE",{});var Kr=u(oe);Wl=n(Kr,"TrainingArguments"),Kr.forEach(e),gl=n(qs,"."),qs.forEach(e),ma=d(s),Ds=t(s,"P",{});var so=u(Ds);Xl=n(so,"Si est\xE1s usando tu propio bucle de entrenamiento u otro Trainer puedes lograr lo mismo con:"),so.forEach(e),ia=d(s),M(ws.$$.fragment,s),ja=d(s),G=t(s,"P",{});var Q=u(G);te=t(Q,"CODE",{});var eo=u(te);Ll=n(eo,"DebugUnderflowOverflow"),eo.forEach(e),Ql=n(Q,` inserta hooks en el modelo que inmediatamente despu\xE9s de cada forward
testear\xE1 las variables de input y output y tambi\xE9n los weights del m\xF3dulo correspondiente. Tan pronto como se detecte `),pe=t(Q,"CODE",{});var ao=u(pe);Sl=n(ao,"inf"),ao.forEach(e),zl=n(Q,` o
`),ue=t(Q,"CODE",{});var lo=u(ue);Yl=n(lo,"nan"),lo.forEach(e),ql=n(Q,` se detecta en al menos un elemento de las activations o weights, el programa afirmar\xE1 e imprimir\xE1 un informe
como este (esto fue capturado con `),ce=t(Q,"CODE",{});var no=u(ce);xl=n(no,"google/mt5-small"),no.forEach(e),Pl=n(Q," bajo fp16 mixed precision):"),Q.forEach(e),Ma=d(s),M(fs.$$.fragment,s),ba=d(s),Rs=t(s,"P",{});var ro=u(Rs);Fl=n(ro,"El output del ejemplo se ha recortado en el centro por razones de brevedad."),ro.forEach(e),wa=d(s),T=t(s,"P",{});var E=u(T);Hl=n(E,`La segunda columna muestra el valor del elemento m\xE1s grande en t\xE9rminos absolutos, por lo que si observas con detenimiento los \xFAltimos fotogramas,
los inputs y outputs estaban en el rango de `),de=t(E,"CODE",{});var oo=u(de);Ol=n(oo,"1e4"),oo.forEach(e),Kl=n(E,`. As\xED que cuando este entrenamiento se hizo con fp16 mixed precision,
el \xFAltimo paso sufri\xF3 overflow (ya que bajo `),me=t(E,"CODE",{});var to=u(me);sn=n(to,"fp16"),to.forEach(e),en=n(E," el mayor n\xFAmero antes de "),ie=t(E,"CODE",{});var po=u(ie);an=n(po,"inf"),po.forEach(e),ln=n(E," es "),je=t(E,"CODE",{});var uo=u(je);nn=n(uo,"64e3"),uo.forEach(e),rn=n(E,`). Para evitar overflows en
`),Me=t(E,"CODE",{});var co=u(Me);on=n(co,"fp16"),co.forEach(e),tn=n(E," las activations deben permanecer muy por debajo de "),be=t(E,"CODE",{});var mo=u(be);pn=n(mo,"1e4"),mo.forEach(e),un=n(E,", porque "),we=t(E,"CODE",{});var io=u(we);cn=n(io,"1e4 * 1e4 = 1e8"),io.forEach(e),dn=n(E,` por lo que cualquier matrix multiplication con
grandes activations va a llevar a una condici\xF3n de overflow num\xE9rico.`),E.forEach(e),fa=d(s),K=t(s,"P",{});var al=u(K);mn=n(al,"Al principio del output puedes descubrir en qu\xE9 n\xFAmero de batch se produjo el problema (aqu\xED "),fe=t(al,"CODE",{});var jo=u(fe);jn=n(jo,"Detected inf/nan during batch_number=0"),jo.forEach(e),Mn=n(al," significa que el problema se produjo en el primer batch)."),al.forEach(e),ha=d(s),$s=t(s,"P",{});var Mo=u($s);bn=n(Mo,`Cada frame del informe comienza declarando la entrada completamente calificada para el m\xF3dulo correspondiente que este frame est\xE1 reportando.
Si nos fijamos s\xF3lo en este frame:`),Mo.forEach(e),Ja=d(s),M(hs.$$.fragment,s),Ta=d(s),V=t(s,"P",{});var ts=u(V);wn=n(ts,"Aqu\xED, "),he=t(ts,"CODE",{});var bo=u(he);fn=n(bo,"encoder.block.2.layer.1.layer_norm"),bo.forEach(e),hn=n(ts,` indica que era una layer norm para la primera capa, del segundo
block del encoder. Y la call espec\xEDfica del `),Je=t(ts,"CODE",{});var wo=u(Je);Jn=n(wo,"forward"),wo.forEach(e),Tn=n(ts," es "),Te=t(ts,"CODE",{});var fo=u(Te);yn=n(fo,"T5LayerNorm"),fo.forEach(e),In=n(ts,"."),ts.forEach(e),ya=d(s),Ns=t(s,"P",{});var ho=u(Ns);Un=n(ho,"Veamos los \xFAltimos frames de ese informe:"),ho.forEach(e),Ia=d(s),M(Js.$$.fragment,s),Ua=d(s),v=t(s,"P",{});var R=u(v);Cn=n(R,"El \xFAltimo frame informa para la funci\xF3n "),ye=t(R,"CODE",{});var Jo=u(ye);vn=n(Jo,"Dropout.forward"),Jo.forEach(e),En=n(R,` con la primera entrada para el \xFAnico input y la segunda para el
\xFAnico output. Puedes ver que fue llamada desde un atributo `),Ie=t(R,"CODE",{});var To=u(Ie);Zn=n(To,"dropout"),To.forEach(e),An=n(R," dentro de la clase "),Ue=t(R,"CODE",{});var yo=u(Ue);Gn=n(yo,"DenseReluDense"),yo.forEach(e),_n=n(R,`. Podemos ver
que ocurri\xF3 durante la primera capa, del segundo block, durante el primer batch. Por \xFAltimo, el mayor absoluto
elementos de input fue `),Ce=t(R,"CODE",{});var Io=u(Ce);Vn=n(Io,"6.27e+04"),Io.forEach(e),Bn=n(R," y el mismo para el output fue "),ve=t(R,"CODE",{});var Uo=u(ve);kn=n(Uo,"inf"),Uo.forEach(e),Dn=n(R,"."),R.forEach(e),Ca=d(s),B=t(s,"P",{});var ps=u(B);Rn=n(ps,"Puedes ver aqu\xED, que "),Ee=t(ps,"CODE",{});var Co=u(Ee);$n=n(Co,"T5DenseGatedGeluDense.forward"),Co.forEach(e),Nn=n(ps,` result\xF3 en output activations, cuyo valor m\xE1ximo absoluto fue
alrededor de 62.7K, que est\xE1 muy cerca del l\xEDmite m\xE1ximo de fp16 de 64K. En el siguiente frame tenemos `),Ze=t(ps,"CODE",{});var vo=u(Ze);Wn=n(vo,"Dropout"),vo.forEach(e),gn=n(ps,`, el cual renormaliza
los weights, despu\xE9s de poner a cero algunos de los elementos, lo que empuja el valor m\xE1ximo absoluto a m\xE1s de 64K, y obtenemos un
overflow (`),Ae=t(ps,"CODE",{});var Eo=u(Ae);Xn=n(Eo,"inf"),Eo.forEach(e),Ln=n(ps,")."),ps.forEach(e),va=d(s),Ws=t(s,"P",{});var Zo=u(Ws);Qn=n(Zo,"Como puedes ver son los frames anteriores los que tenemos que mirar cuando los n\xFAmeros empiezan a ser muy grandes para n\xFAmeros fp16."),Zo.forEach(e),Ea=d(s),ss=t(s,"P",{});var ll=u(ss);Sn=n(ll,"Combinemos el informe con el c\xF3digo de "),Ge=t(ll,"CODE",{});var Ao=u(Ge);zn=n(Ao,"models/t5/modeling_t5.py"),Ao.forEach(e),Yn=n(ll,":"),ll.forEach(e),Za=d(s),M(Ts.$$.fragment,s),Aa=d(s),es=t(s,"P",{});var nl=u(es);qn=n(nl,"Ahora es f\xE1cil ver la call "),_e=t(nl,"CODE",{});var Go=u(_e);xn=n(Go,"dropout"),Go.forEach(e),Pn=n(nl,", y tambi\xE9n todas las calls anteriores."),nl.forEach(e),Ga=d(s),as=t(s,"P",{});var rl=u(as);Fn=n(rl,"Dado que la detecci\xF3n se produce en un forward hook, estos informes se imprimen inmediatamente despu\xE9s de que cada "),Ve=t(rl,"CODE",{});var _o=u(Ve);Hn=n(_o,"forward"),_o.forEach(e),On=n(rl,`
responda.`),rl.forEach(e),_a=d(s),k=t(s,"P",{});var us=u(k);Kn=n(us,`Volviendo al informe completo, para actuar sobre \xE9l y arreglar el problema, tenemos que subir unos cuantos frames donde los n\xFAmeros
empezaron a subir y probablemente cambiar al modo `),Be=t(us,"CODE",{});var Vo=u(Be);sr=n(Vo,"fp32"),Vo.forEach(e),er=n(us,` aqu\xED, para que los n\xFAmeros no sufran overflow cuando se multipliquen
o al sumarlos. Por supuesto, puede haber otras soluciones. Por ejemplo, podr\xEDamos desactivar `),ke=t(us,"CODE",{});var Bo=u(ke);ar=n(Bo,"amp"),Bo.forEach(e),lr=n(us,` temporalmente si est\xE1
activado, despu\xE9s de mover el original `),De=t(us,"CODE",{});var ko=u(De);nr=n(ko,"forward"),ko.forEach(e),rr=n(us," dentro de un helper wrapper, as\xED:"),us.forEach(e),Va=d(s),M(ys.$$.fragment,s),Ba=d(s),W=t(s,"P",{});var xs=u(W);or=n(xs,`Como el detector autom\xE1tico s\xF3lo informa de los inputs y outputs de los frames completos, una vez que sepas d\xF3nde buscar, puedes
analizar tambi\xE9n las etapas intermedias de una funci\xF3n espec\xEDfica de `),Re=t(xs,"CODE",{});var Do=u(Re);tr=n(Do,"forward"),Do.forEach(e),pr=n(xs,`. En este caso, puede utilizar la funci\xF3n
funci\xF3n de ayuda `),$e=t(xs,"CODE",{});var Ro=u($e);ur=n(Ro,"detect_overflow"),Ro.forEach(e),cr=n(xs," para inyectar el detector donde quieras, por ejemplo:"),xs.forEach(e),ka=d(s),M(Is.$$.fragment,s),Da=d(s),D=t(s,"P",{});var cs=u(D);dr=n(cs,"Puedes ver que hemos a\xF1adido 2 de estos y ahora se trackea si "),Ne=t(cs,"CODE",{});var $o=u(Ne);mr=n($o,"inf"),$o.forEach(e),ir=n(cs," o "),We=t(cs,"CODE",{});var No=u(We);jr=n(No,"nan"),No.forEach(e),Mr=n(cs," para "),ge=t(cs,"CODE",{});var Wo=u(ge);br=n(Wo,"forwarded_states"),Wo.forEach(e),wr=n(cs,` fue detectado
en alg\xFAn punto intermedio.`),cs.forEach(e),Ra=d(s),ls=t(s,"P",{});var ol=u(ls);fr=n(ol,"De hecho, el detector ya informa de esto porque cada una de las llamadas en el ejemplo anterior es un "),Xe=t(ol,"CODE",{});var go=u(Xe);hr=n(go,"nn.Module"),go.forEach(e),Jr=n(ol,`, pero
digamos que si tuvieras algunos c\xE1lculos directos locales, as\xED es como lo har\xEDas.`),ol.forEach(e),$a=d(s),gs=t(s,"P",{});var Xo=u(gs);Tr=n(Xo,`Adem\xE1s, si est\xE1s instanciando el debugger en tu propio c\xF3digo, puedes ajustar el n\xFAmero de frames impresos de
su valor por defecto, por ejemplo:`),Xo.forEach(e),Na=d(s),M(Us.$$.fragment,s),Wa=d(s),L=t(s,"H3",{class:!0});var tl=u(L);ns=t(tl,"A",{id:!0,class:!0,href:!0});var Lo=u(ns);Le=t(Lo,"SPAN",{});var Qo=u(Le);M(Cs.$$.fragment,Qo),Qo.forEach(e),Lo.forEach(e),yr=d(tl),Qe=t(tl,"SPAN",{});var So=u(Qe);Ir=n(So,"Rastreo de valores m\xEDnimos y m\xE1ximos absolutos de batches espec\xEDficos"),So.forEach(e),tl.forEach(e),ga=d(s),Xs=t(s,"P",{});var zo=u(Xs);Ur=n(zo,"La misma clase de debugging se puede utilizar para el rastreo por batches con la funci\xF3n de detecci\xF3n de underflow/overflow desactivada."),zo.forEach(e),Xa=d(s),rs=t(s,"P",{});var pl=u(rs);Cr=n(pl,"Digamos que quieres ver los valores m\xEDnimos y m\xE1ximos absolutos de todos los ingredientes de cada call "),Se=t(pl,"CODE",{});var Yo=u(Se);vr=n(Yo,"forward"),Yo.forEach(e),Er=n(pl,` de un determinado
batch, y s\xF3lo hacerlo para los batches 1 y 3. Entonces instancias esta clase como:`),pl.forEach(e),La=d(s),M(vs.$$.fragment,s),Qa=d(s),Ls=t(s,"P",{});var qo=u(Ls);Zr=n(qo,"Y ahora los batches 1 y 3 completos ser\xE1n rastreados usando el mismo formato que el detector de underflow/overflow."),qo.forEach(e),Sa=d(s),Qs=t(s,"P",{});var xo=u(Qs);Ar=n(xo,"Los batches son 0-index."),xo.forEach(e),za=d(s),Ss=t(s,"P",{});var Po=u(Ss);Gr=n(Po,`Esto es muy \xFAtil si sabes que el programa empieza a comportarse mal despu\xE9s de un determinado n\xFAmero de batch, para que puedas avanzar r\xE1pidamente
hasta esa \xE1rea. Aqu\xED hay un ejemplo de output recortado para tal configuraci\xF3n:`),Po.forEach(e),Ya=d(s),M(Es.$$.fragment,s),qa=d(s),zs=t(s,"P",{});var Fo=u(zs);_r=n(Fo,`Aqu\xED obtendr\xE1s un gran n\xFAmero de frames mostrados - tantos como forward calls haya en tu modelo, por lo que puede o no ser lo que quieras, pero a veces puede ser m\xE1s f\xE1cil de usar para debug que un debugger normal.
Por ejemplo, si un problema comienza a ocurrir en el batch 150. Entonces puedes mostrar las trazas de los batches 149 y 150 y comparar d\xF3nde
los n\xFAmeros empezaron a divergir.`),Fo.forEach(e),xa=d(s),Ys=t(s,"P",{});var Ho=u(Ys);Vr=n(Ho,"Tambi\xE9n puedes especificar el n\xFAmero de batch despu\xE9s del cual se debe detener el entrenamiento, con:"),Ho.forEach(e),Pa=d(s),M(Zs.$$.fragment,s),this.h()},h(){I(m,"name","hf:doc:metadata"),I(m,"content",JSON.stringify(tt)),I(J,"id","debugging"),I(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"),I(J,"href","#debugging"),I(i,"class","relative group"),I(z,"id","debug-de-problemas-de-network-multigpu"),I(z,"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"),I(z,"href","#debug-de-problemas-de-network-multigpu"),I(g,"class","relative group"),I(x,"id","deteccin-de-underflow-y-overflow"),I(x,"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"),I(x,"href","#deteccin-de-underflow-y-overflow"),I(X,"class","relative group"),I(ns,"id","rastreo-de-valores-mnimos-y-mximos-absolutos-de-batches-especficos"),I(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"),I(ns,"href","#rastreo-de-valores-mnimos-y-mximos-absolutos-de-batches-especficos"),I(L,"class","relative group")},m(s,r){a(document.head,m),p(s,C,r),p(s,i,r),a(i,J),a(J,A),b(y,A,null),a(i,U),a(i,$),a($,cl),p(s,qe,r),p(s,g,r),a(g,z),a(z,Ps),b(ds,Ps,null),a(g,dl),a(g,Fs),a(Fs,ml),p(s,xe,r),p(s,Y,r),a(Y,il),a(Y,Hs),a(Hs,jl),a(Y,Ml),p(s,Pe,r),b(ms,s,r),p(s,Fe,r),p(s,Gs,r),a(Gs,bl),p(s,He,r),b(is,s,r),p(s,Oe,r),p(s,_s,r),a(_s,wl),p(s,Ke,r),p(s,Vs,r),a(Vs,fl),p(s,sa,r),p(s,Bs,r),a(Bs,hl),p(s,ea,r),p(s,q,r),a(q,Jl),a(q,Os),a(Os,Tl),a(q,yl),p(s,aa,r),b(js,s,r),p(s,la,r),p(s,ks,r),a(ks,Il),p(s,na,r),p(s,X,r),a(X,x),a(x,Ks),b(Ms,Ks,null),a(X,Ul),a(X,se),a(se,Cl),p(s,ra,r),b(P,s,r),p(s,oa,r),b(F,s,r),p(s,ta,r),b(H,s,r),p(s,pa,r),p(s,_,r),a(_,vl),a(_,ee),a(ee,El),a(_,Zl),a(_,ae),a(ae,Al),a(_,Gl),a(_,le),a(le,_l),a(_,Vl),p(s,ua,r),p(s,O,r),a(O,Bl),a(O,ne),a(ne,kl),a(O,Dl),p(s,ca,r),b(bs,s,r),p(s,da,r),p(s,N,r),a(N,Rl),a(N,re),a(re,$l),a(N,Nl),a(N,oe),a(oe,Wl),a(N,gl),p(s,ma,r),p(s,Ds,r),a(Ds,Xl),p(s,ia,r),b(ws,s,r),p(s,ja,r),p(s,G,r),a(G,te),a(te,Ll),a(G,Ql),a(G,pe),a(pe,Sl),a(G,zl),a(G,ue),a(ue,Yl),a(G,ql),a(G,ce),a(ce,xl),a(G,Pl),p(s,Ma,r),b(fs,s,r),p(s,ba,r),p(s,Rs,r),a(Rs,Fl),p(s,wa,r),p(s,T,r),a(T,Hl),a(T,de),a(de,Ol),a(T,Kl),a(T,me),a(me,sn),a(T,en),a(T,ie),a(ie,an),a(T,ln),a(T,je),a(je,nn),a(T,rn),a(T,Me),a(Me,on),a(T,tn),a(T,be),a(be,pn),a(T,un),a(T,we),a(we,cn),a(T,dn),p(s,fa,r),p(s,K,r),a(K,mn),a(K,fe),a(fe,jn),a(K,Mn),p(s,ha,r),p(s,$s,r),a($s,bn),p(s,Ja,r),b(hs,s,r),p(s,Ta,r),p(s,V,r),a(V,wn),a(V,he),a(he,fn),a(V,hn),a(V,Je),a(Je,Jn),a(V,Tn),a(V,Te),a(Te,yn),a(V,In),p(s,ya,r),p(s,Ns,r),a(Ns,Un),p(s,Ia,r),b(Js,s,r),p(s,Ua,r),p(s,v,r),a(v,Cn),a(v,ye),a(ye,vn),a(v,En),a(v,Ie),a(Ie,Zn),a(v,An),a(v,Ue),a(Ue,Gn),a(v,_n),a(v,Ce),a(Ce,Vn),a(v,Bn),a(v,ve),a(ve,kn),a(v,Dn),p(s,Ca,r),p(s,B,r),a(B,Rn),a(B,Ee),a(Ee,$n),a(B,Nn),a(B,Ze),a(Ze,Wn),a(B,gn),a(B,Ae),a(Ae,Xn),a(B,Ln),p(s,va,r),p(s,Ws,r),a(Ws,Qn),p(s,Ea,r),p(s,ss,r),a(ss,Sn),a(ss,Ge),a(Ge,zn),a(ss,Yn),p(s,Za,r),b(Ts,s,r),p(s,Aa,r),p(s,es,r),a(es,qn),a(es,_e),a(_e,xn),a(es,Pn),p(s,Ga,r),p(s,as,r),a(as,Fn),a(as,Ve),a(Ve,Hn),a(as,On),p(s,_a,r),p(s,k,r),a(k,Kn),a(k,Be),a(Be,sr),a(k,er),a(k,ke),a(ke,ar),a(k,lr),a(k,De),a(De,nr),a(k,rr),p(s,Va,r),b(ys,s,r),p(s,Ba,r),p(s,W,r),a(W,or),a(W,Re),a(Re,tr),a(W,pr),a(W,$e),a($e,ur),a(W,cr),p(s,ka,r),b(Is,s,r),p(s,Da,r),p(s,D,r),a(D,dr),a(D,Ne),a(Ne,mr),a(D,ir),a(D,We),a(We,jr),a(D,Mr),a(D,ge),a(ge,br),a(D,wr),p(s,Ra,r),p(s,ls,r),a(ls,fr),a(ls,Xe),a(Xe,hr),a(ls,Jr),p(s,$a,r),p(s,gs,r),a(gs,Tr),p(s,Na,r),b(Us,s,r),p(s,Wa,r),p(s,L,r),a(L,ns),a(ns,Le),b(Cs,Le,null),a(L,yr),a(L,Qe),a(Qe,Ir),p(s,ga,r),p(s,Xs,r),a(Xs,Ur),p(s,Xa,r),p(s,rs,r),a(rs,Cr),a(rs,Se),a(Se,vr),a(rs,Er),p(s,La,r),b(vs,s,r),p(s,Qa,r),p(s,Ls,r),a(Ls,Zr),p(s,Sa,r),p(s,Qs,r),a(Qs,Ar),p(s,za,r),p(s,Ss,r),a(Ss,Gr),p(s,Ya,r),b(Es,s,r),p(s,qa,r),p(s,zs,r),a(zs,_r),p(s,xa,r),p(s,Ys,r),a(Ys,Vr),p(s,Pa,r),b(Zs,s,r),Fa=!0},p(s,[r]){const As={};r&2&&(As.$$scope={dirty:r,ctx:s}),P.$set(As);const ze={};r&2&&(ze.$$scope={dirty:r,ctx:s}),F.$set(ze);const Ye={};r&2&&(Ye.$$scope={dirty:r,ctx:s}),H.$set(Ye)},i(s){Fa||(w(y.$$.fragment,s),w(ds.$$.fragment,s),w(ms.$$.fragment,s),w(is.$$.fragment,s),w(js.$$.fragment,s),w(Ms.$$.fragment,s),w(P.$$.fragment,s),w(F.$$.fragment,s),w(H.$$.fragment,s),w(bs.$$.fragment,s),w(ws.$$.fragment,s),w(fs.$$.fragment,s),w(hs.$$.fragment,s),w(Js.$$.fragment,s),w(Ts.$$.fragment,s),w(ys.$$.fragment,s),w(Is.$$.fragment,s),w(Us.$$.fragment,s),w(Cs.$$.fragment,s),w(vs.$$.fragment,s),w(Es.$$.fragment,s),w(Zs.$$.fragment,s),Fa=!0)},o(s){f(y.$$.fragment,s),f(ds.$$.fragment,s),f(ms.$$.fragment,s),f(is.$$.fragment,s),f(js.$$.fragment,s),f(Ms.$$.fragment,s),f(P.$$.fragment,s),f(F.$$.fragment,s),f(H.$$.fragment,s),f(bs.$$.fragment,s),f(ws.$$.fragment,s),f(fs.$$.fragment,s),f(hs.$$.fragment,s),f(Js.$$.fragment,s),f(Ts.$$.fragment,s),f(ys.$$.fragment,s),f(Is.$$.fragment,s),f(Us.$$.fragment,s),f(Cs.$$.fragment,s),f(vs.$$.fragment,s),f(Es.$$.fragment,s),f(Zs.$$.fragment,s),Fa=!1},d(s){e(m),s&&e(C),s&&e(i),h(y),s&&e(qe),s&&e(g),h(ds),s&&e(xe),s&&e(Y),s&&e(Pe),h(ms,s),s&&e(Fe),s&&e(Gs),s&&e(He),h(is,s),s&&e(Oe),s&&e(_s),s&&e(Ke),s&&e(Vs),s&&e(sa),s&&e(Bs),s&&e(ea),s&&e(q),s&&e(aa),h(js,s),s&&e(la),s&&e(ks),s&&e(na),s&&e(X),h(Ms),s&&e(ra),h(P,s),s&&e(oa),h(F,s),s&&e(ta),h(H,s),s&&e(pa),s&&e(_),s&&e(ua),s&&e(O),s&&e(ca),h(bs,s),s&&e(da),s&&e(N),s&&e(ma),s&&e(Ds),s&&e(ia),h(ws,s),s&&e(ja),s&&e(G),s&&e(Ma),h(fs,s),s&&e(ba),s&&e(Rs),s&&e(wa),s&&e(T),s&&e(fa),s&&e(K),s&&e(ha),s&&e($s),s&&e(Ja),h(hs,s),s&&e(Ta),s&&e(V),s&&e(ya),s&&e(Ns),s&&e(Ia),h(Js,s),s&&e(Ua),s&&e(v),s&&e(Ca),s&&e(B),s&&e(va),s&&e(Ws),s&&e(Ea),s&&e(ss),s&&e(Za),h(Ts,s),s&&e(Aa),s&&e(es),s&&e(Ga),s&&e(as),s&&e(_a),s&&e(k),s&&e(Va),h(ys,s),s&&e(Ba),s&&e(W),s&&e(ka),h(Is,s),s&&e(Da),s&&e(D),s&&e(Ra),s&&e(ls),s&&e($a),s&&e(gs),s&&e(Na),h(Us,s),s&&e(Wa),s&&e(L),h(Cs),s&&e(ga),s&&e(Xs),s&&e(Xa),s&&e(rs),s&&e(La),h(vs,s),s&&e(Qa),s&&e(Ls),s&&e(Sa),s&&e(Qs),s&&e(za),s&&e(Ss),s&&e(Ya),h(Es,s),s&&e(qa),s&&e(zs),s&&e(xa),s&&e(Ys),s&&e(Pa),h(Zs,s)}}}const tt={local:"debugging",sections:[{local:"debug-de-problemas-de-network-multigpu",title:"Debug de problemas de Network multi-GPU"},{local:"deteccin-de-underflow-y-overflow",sections:[{local:"rastreo-de-valores-mnimos-y-mximos-absolutos-de-batches-especficos",title:"Rastreo de valores m\xEDnimos y m\xE1ximos absolutos de batches espec\xEDficos"}],title:"Detecci\xF3n de Underflow y Overflow"}],title:"Debugging"};function pt(S){return at(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class it extends Oo{constructor(m){super();Ko(this,m,pt,ot,st,{})}}export{it as default,tt as metadata};
