Buckets:

rtrm's picture
download
raw
36.4 kB
import{s as Ql,n as Vl,o as zl}from"../chunks/scheduler.23542ac5.js";import{S as Sl,i as Rl,e as n,s as a,c as i,h as Nl,a as m,d as l,b as p,f as Fl,g as M,j as w,k as Yl,l as Ll,m as s,n as f,t as o,o as y,p as r}from"../chunks/index.9b1f405b.js";import{C as Al,H as J,E as Pl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.99afe1ab.js";import{C as b}from"../chunks/CodeBlock.1c9c6858.js";import{D as El}from"../chunks/DocNotebookDropdown.68a629d2.js";function ql(sl){let u,He,We,Fe,$,Ye,j,Qe,T,Ve,d,al='πŸ€— Hugging Face [Diffusers] (<a href="https://github.com/huggingface/diffusers" rel="nofollow">https://github.com/huggingface/diffusers</a>) λŠ” 버전 0.5.1λΆ€ν„° Flaxλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€! 이λ₯Ό 톡해 Colab, Kaggle, Google Cloud Platformμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ Google TPUμ—μ„œ μ΄ˆκ³ μ† 좔둠이 κ°€λŠ₯ν•©λ‹ˆλ‹€.',ze,c,pl='이 λ…ΈνŠΈλΆμ€ JAX / Flaxλ₯Ό μ‚¬μš©ν•΄ 좔둠을 μ‹€ν–‰ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. Stable Diffusion의 μž‘λ™ 방식에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ„ μ›ν•˜κ±°λ‚˜ GPUμ—μ„œ μ‹€ν–‰ν•˜λ €λ©΄ 이 [λ…ΈνŠΈλΆ] ](<a href="https://huggingface.co/docs/diffusers/stable_diffusion)%EC%9D%84" rel="nofollow">https://huggingface.co/docs/diffusers/stable_diffusion)을</a> μ°Έμ‘°ν•˜μ„Έμš”.',Se,h,nl="λ¨Όμ €, TPU λ°±μ—”λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. Colabμ—μ„œ 이 λ…ΈνŠΈλΆμ„ μ‹€ν–‰ν•˜λŠ” 경우, λ©”λ‰΄μ—μ„œ λŸ°νƒ€μž„μ„ μ„ νƒν•œ λ‹€μŒ β€œλŸ°νƒ€μž„ μœ ν˜• 변경” μ˜΅μ…˜μ„ μ„ νƒν•œ λ‹€μŒ ν•˜λ“œμ›¨μ–΄ 가속기 μ„€μ •μ—μ„œ TPUλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.",Re,g,il="JAXλŠ” TPU μ „μš©μ€ μ•„λ‹ˆμ§€λ§Œ 각 TPU μ„œλ²„μ—λŠ” 8개의 TPU 가속기가 λ³‘λ ¬λ‘œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή ν•˜λ“œμ›¨μ–΄μ—μ„œ 더 빛을 λ°œν•œλ‹€λŠ” 점은 μ•Œμ•„λ‘μ„Έμš”.",Ne,U,Le,B,ml="λ¨Όμ € diffusersκ°€ μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.",Ae,C,Pe,_,Ee,I,qe,k,De,x,Ml="그런 λ‹€μŒ λͺ¨λ“  dependenciesλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.",Ke,v,Oe,G,et,Z,fl="TPU μž₯μΉ˜λŠ” 효율적인 half-float μœ ν˜•μΈ bfloat16을 μ§€μ›ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈμ—λŠ” 이 μœ ν˜•μ„ μ‚¬μš©ν•˜μ§€λ§Œ λŒ€μ‹  float32λ₯Ό μ‚¬μš©ν•˜μ—¬ 전체 정밀도(full precision)λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.",tt,W,lt,X,ol="FlaxλŠ” ν•¨μˆ˜ν˜• ν”„λ ˆμž„μ›Œν¬μ΄λ―€λ‘œ λͺ¨λΈμ€ λ¬΄μƒνƒœ(stateless)ν˜•μ΄λ©° λ§€κ°œλ³€μˆ˜λŠ” λͺ¨λΈ 외뢀에 μ €μž₯λ©λ‹ˆλ‹€. μ‚¬μ „ν•™μŠ΅λœ Flax νŒŒμ΄ν”„λΌμΈμ„ 뢈러였면 νŒŒμ΄ν”„λΌμΈ μžμ²΄μ™€ λͺ¨λΈ κ°€μ€‘μΉ˜(λ˜λŠ” λ§€κ°œλ³€μˆ˜)κ°€ λͺ¨λ‘ λ°˜ν™˜λ©λ‹ˆλ‹€. μ €ν¬λŠ” bf16 λ²„μ „μ˜ κ°€μ€‘μΉ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμœΌλ―€λ‘œ μœ ν˜• κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€λ§Œ λ¬΄μ‹œν•΄λ„ λ©λ‹ˆλ‹€.",st,H,at,F,pt,Y,yl="TPUμ—λŠ” 일반적으둜 8개의 λ””λ°”μ΄μŠ€κ°€ λ³‘λ ¬λ‘œ μž‘λ™ν•˜λ―€λ‘œ λ³΄μœ ν•œ λ””λ°”μ΄μŠ€ 수만큼 ν”„λ‘¬ν”„νŠΈλ₯Ό λ³΅μ œν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 각각 ν•˜λ‚˜μ˜ 이미지 생성을 λ‹΄λ‹Ήν•˜λŠ” 8개의 λ””λ°”μ΄μŠ€μ—μ„œ ν•œ λ²ˆμ— 좔둠을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν•˜λ‚˜μ˜ 칩이 ν•˜λ‚˜μ˜ 이미지λ₯Ό μƒμ„±ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„κ³Ό λ™μΌν•œ μ‹œκ°„μ— 8개의 이미지λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.",nt,Q,rl="ν”„λ‘¬ν”„νŠΈλ₯Ό λ³΅μ œν•˜κ³  λ‚˜λ©΄ νŒŒμ΄ν”„λΌμΈμ˜ <code>prepare_inputs</code> ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν† ν°ν™”λœ ν…μŠ€νŠΈ IDλ₯Ό μ–»μŠ΅λ‹ˆλ‹€. ν† ν°ν™”λœ ν…μŠ€νŠΈμ˜ κΈΈμ΄λŠ” κΈ°λ³Έ CLIP ν…μŠ€νŠΈ λͺ¨λΈμ˜ ꡬ성에 따라 77ν† ν°μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.",it,V,mt,z,Mt,S,ft,R,wl="λͺ¨λΈ λ§€κ°œλ³€μˆ˜μ™€ μž…λ ₯값은 μš°λ¦¬κ°€ λ³΄μœ ν•œ 8개의 병렬 μž₯μΉ˜μ— 볡사(Replication)λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ§€κ°œλ³€μˆ˜ λ”•μ…”λ„ˆλ¦¬λŠ” <code>flax.jax_utils.replicate</code>(λ”•μ…”λ„ˆλ¦¬λ₯Ό μˆœνšŒν•˜λ©° κ°€μ€‘μΉ˜μ˜ λͺ¨μ–‘을 λ³€κ²½ν•˜μ—¬ 8번 λ°˜λ³΅ν•˜λŠ” ν•¨μˆ˜)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μ‚¬λ©λ‹ˆλ‹€. 배열은 <code>shard</code>λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μ œλ©λ‹ˆλ‹€.",ot,N,yt,L,rt,A,wt,P,bl="이 shape은 8개의 λ””λ°”μ΄μŠ€ 각각이 shape <code>(1, 77)</code>의 jnp 배열을 μž…λ ₯κ°’μœΌλ‘œ λ°›λŠ”λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 즉 1은 λ””λ°”μ΄μŠ€λ‹Ή batch(배치) ν¬κΈ°μž…λ‹ˆλ‹€. λ©”λͺ¨λ¦¬κ°€ μΆ©λΆ„ν•œ TPUμ—μ„œλŠ” ν•œ λ²ˆμ— μ—¬λŸ¬ 이미지(μΉ©λ‹Ή)λ₯Ό μƒμ„±ν•˜λ €λŠ” 경우 1보닀 클 수 μžˆμŠ΅λ‹ˆλ‹€.",bt,E,ul="이미지λ₯Ό 생성할 μ€€λΉ„κ°€ 거의 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€! 이제 생성 ν•¨μˆ˜μ— 전달할 λ‚œμˆ˜ μƒμ„±κΈ°λ§Œ λ§Œλ“€λ©΄ λ©λ‹ˆλ‹€. 이것은 λ‚œμˆ˜λ₯Ό λ‹€λ£¨λŠ” λͺ¨λ“  ν•¨μˆ˜μ— λ‚œμˆ˜ 생성기가 μžˆμ–΄μ•Ό ν•œλ‹€λŠ”, λ‚œμˆ˜μ— λŒ€ν•΄ 맀우 μ§„μ§€ν•˜κ³  독단적인 Flax의 ν‘œμ€€ μ ˆμ°¨μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ—¬λŸ¬ λΆ„μ‚°λœ κΈ°κΈ°μ—μ„œ ν›ˆλ ¨ν•  λ•Œμ—λ„ μž¬ν˜„μ„±μ΄ 보μž₯λ©λ‹ˆλ‹€.",ut,q,Jl="μ•„λž˜ 헬퍼 ν•¨μˆ˜λŠ” μ‹œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚œμˆ˜ 생성기λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. λ™μΌν•œ μ‹œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” ν•œ μ •ν™•νžˆ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜μ€‘μ— λ…ΈνŠΈλΆμ—μ„œ κ²°κ³Όλ₯Ό 탐색할 λ•Œμ—” λ‹€λ₯Έ μ‹œλ“œλ₯Ό 자유둭게 μ‚¬μš©ν•˜μ„Έμš”.",Jt,D,$t,K,$l="rngλ₯Ό 얻은 λ‹€μŒ 8번 β€˜λΆ„ν• β€™ν•˜μ—¬ 각 λ””λ°”μ΄μŠ€κ°€ λ‹€λ₯Έ μ œλ„ˆλ ˆμ΄ν„°λ₯Ό μˆ˜μ‹ ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 각 λ””λ°”μ΄μŠ€λ§ˆλ‹€ λ‹€λ₯Έ 이미지가 μƒμ„±λ˜λ©° 전체 ν”„λ‘œμ„ΈμŠ€λ₯Ό μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.",jt,O,Tt,ee,jl="JAX μ½”λ“œλŠ” 맀우 λΉ λ₯΄κ²Œ μ‹€ν–‰λ˜λŠ” 효율적인 ν‘œν˜„μœΌλ‘œ μ»΄νŒŒμΌν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 후속 ν˜ΈμΆœμ—μ„œ λͺ¨λ“  μž…λ ₯이 λ™μΌν•œ λͺ¨μ–‘을 갖도둝 ν•΄μ•Ό ν•˜λ©°, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ JAXκ°€ μ½”λ“œλ₯Ό λ‹€μ‹œ μ»΄νŒŒμΌν•΄μ•Ό ν•˜λ―€λ‘œ μ΅œμ ν™”λœ 속도λ₯Ό ν™œμš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.",dt,te,Tl="<code>jit = True</code>λ₯Ό 인수둜 μ „λ‹¬ν•˜λ©΄ Flax νŒŒμ΄ν”„λΌμΈμ΄ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λͺ¨λΈμ΄ μ‚¬μš© κ°€λŠ₯ν•œ 8개의 λ””λ°”μ΄μŠ€μ—μ„œ λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.",ct,le,dl="λ‹€μŒ 셀을 처음 μ‹€ν–‰ν•˜λ©΄ μ»΄νŒŒμΌν•˜λŠ” 데 μ‹œκ°„μ΄ 였래 κ±Έλ¦¬μ§€λ§Œ 이후 호좜(μž…λ ₯이 λ‹€λ₯Έ κ²½μš°μ—λ„)은 훨씬 λΉ¨λΌμ§‘λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν…ŒμŠ€νŠΈν–ˆμ„ λ•Œ TPU v2-8μ—μ„œ μ»΄νŒŒμΌν•˜λŠ” 데 1λΆ„ 이상 κ±Έλ¦¬μ§€λ§Œ 이후 μΆ”λ‘  μ‹€ν–‰μ—λŠ” μ•½ 7μ΄ˆκ°€ κ±Έλ¦½λ‹ˆλ‹€.",ht,se,gt,ae,Ut,pe,cl="λ°˜ν™˜λœ λ°°μ—΄μ˜ shape은 <code>(8, 1, 512, 512, 3)</code>μž…λ‹ˆλ‹€. 이λ₯Ό μž¬κ΅¬μ„±ν•˜μ—¬ 두 번째 차원을 μ œκ±°ν•˜κ³  512 Γ— 512 Γ— 3의 이미지 8개λ₯Ό 얻은 λ‹€μŒ PIL둜 λ³€ν™˜ν•©λ‹ˆλ‹€.",Bt,ne,Ct,ie,_t,me,hl="이미지λ₯Ό κ·Έλ¦¬λ“œμ— ν‘œμ‹œν•˜λŠ” λ„μš°λ―Έ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.",It,Me,kt,fe,xt,oe,gl='<img src="https://huggingface.co/datasets/YiYiXu/test-doc-assets/resolve/main/stable_diffusion_jax_how_to_cell_38_output_0.jpeg" alt="img"/>',vt,ye,Gt,re,Ul="λͺ¨λ“  λ””λ°”μ΄μŠ€μ—μ„œ λ™μΌν•œ ν”„λ‘¬ν”„νŠΈλ₯Ό λ³΅μ œν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈ 2개λ₯Ό 각각 4λ²ˆμ”© μƒμ„±ν•˜κ±°λ‚˜ ν•œ λ²ˆμ— 8개의 μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•˜λŠ” λ“± μ›ν•˜λŠ” 것은 무엇이든 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•œλ²ˆ ν•΄λ³΄μ„Έμš”!",Zt,we,Bl="λ¨Όμ € μž…λ ₯ μ€€λΉ„ μ½”λ“œλ₯Ό νŽΈλ¦¬ν•œ ν•¨μˆ˜λ‘œ λ¦¬νŒ©ν„°λ§ν•˜κ² μŠ΅λ‹ˆλ‹€:",Wt,be,Xt,ue,Ht,Je,Cl='<img src="https://huggingface.co/datasets/YiYiXu/test-doc-assets/resolve/main/stable_diffusion_jax_how_to_cell_43_output_0.jpeg" alt="img"/>',Ft,$e,Yt,je,_l="μ•žμ„œ <code>diffusers</code> Flax νŒŒμ΄ν”„λΌμΈμ΄ λͺ¨λΈμ„ μžλ™μœΌλ‘œ μ»΄νŒŒμΌν•˜κ³  μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  κΈ°κΈ°μ—μ„œ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•œλ‹€κ³  λ§μ”€λ“œλ ΈμŠ΅λ‹ˆλ‹€. 이제 κ·Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°„λž΅ν•˜κ²Œ μ‚΄νŽ΄λ³΄κ³  μž‘λ™ 방식을 λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.",Qt,Te,Il='JAX λ³‘λ ¬ν™”λŠ” μ—¬λŸ¬ κ°€μ§€ λ°©λ²•μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ μ‰¬μš΄ 방법은 jax.pmap ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 단일 ν”„λ‘œκ·Έλž¨, 닀쀑 데이터(SPMD) 병렬화λ₯Ό λ‹¬μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 즉, λ™μΌν•œ μ½”λ“œμ˜ 볡사본을 각각 λ‹€λ₯Έ 데이터 μž…λ ₯에 λŒ€ν•΄ μ—¬λŸ¬ 개 μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 더 μ •κ΅ν•œ μ ‘κ·Ό 방식도 κ°€λŠ₯ν•˜λ―€λ‘œ 관심이 μžˆμœΌμ‹œλ‹€λ©΄ <a href="https://jax.readthedocs.io/en/latest/index.html" rel="nofollow">JAX λ¬Έμ„œ</a>와 <a href="https://jax.readthedocs.io/en/latest/jax-101/08-pjit.html?highlight=pjit" rel="nofollow"><code>pjit</code> νŽ˜μ΄μ§€</a>μ—μ„œ 이 주제λ₯Ό μ‚΄νŽ΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€!',Vt,de,kl="<code>jax.pmap</code>은 두 κ°€μ§€ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€:",zt,ce,xl="<li><code>jax.jit()</code>λ₯Ό ν˜ΈμΆœν•œ κ²ƒμ²˜λŸΌ μ½”λ“œλ₯Ό 컴파일(λ˜λŠ” <code>jit</code>)ν•©λ‹ˆλ‹€. 이 μž‘μ—…μ€ <code>pmap</code>을 ν˜ΈμΆœν•  λ•Œκ°€ μ•„λ‹ˆλΌ pmapped ν•¨μˆ˜κ°€ 처음 호좜될 λ•Œ μˆ˜ν–‰λ©λ‹ˆλ‹€.</li> <li>컴파일된 μ½”λ“œκ°€ μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  κΈ°κΈ°μ—μ„œ λ³‘λ ¬λ‘œ μ‹€ν–‰λ˜λ„λ‘ ν•©λ‹ˆλ‹€.</li>",St,he,vl="μž‘λ™ 방식을 λ³΄μ—¬λ“œλ¦¬κΈ° μœ„ν•΄ 이미지 생성을 μ‹€ν–‰ν•˜λŠ” λΉ„κ³΅κ°œ λ©”μ„œλ“œμΈ νŒŒμ΄ν”„λΌμΈμ˜ <code>_generate</code> λ©”μ„œλ“œλ₯Ό <code>pmap</code>ν•©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” ν–₯ν›„ <code>Diffusers</code> λ¦΄λ¦¬μŠ€μ—μ„œ 이름이 λ³€κ²½λ˜κ±°λ‚˜ 제거될 수 μžˆλ‹€λŠ” 점에 μœ μ˜ν•˜μ„Έμš”.",Rt,ge,Nt,Ue,Gl="<code>pmap</code>을 μ‚¬μš©ν•œ ν›„ μ€€λΉ„λœ ν•¨μˆ˜ <code>p_generate</code>λŠ” κ°œλ…μ μœΌλ‘œ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:",Lt,Be,Zl="<li>각 μž₯μΉ˜μ—μ„œ κΈ°λ³Έ ν•¨μˆ˜ <code>pipeline._generate</code>의 볡사본을 ν˜ΈμΆœν•©λ‹ˆλ‹€.</li> <li>각 μž₯μΉ˜μ— μž…λ ₯ 인수의 λ‹€λ₯Έ 뢀뢄을 λ³΄λƒ…λ‹ˆλ‹€. 이것이 λ°”λ‘œ 샀딩이 μ‚¬μš©λ˜λŠ” μ΄μœ μž…λ‹ˆλ‹€. 이 경우 <code>prompt_ids</code>의 shape은 <code>(8, 1, 77, 768)</code>μž…λ‹ˆλ‹€. 이 배열은 8개둜 λΆ„ν• λ˜κ³  <code>_generate</code>의 각 볡사본은 <code>(1, 77, 768)</code>의 shape을 κ°€μ§„ μž…λ ₯을 λ°›κ²Œ λ©λ‹ˆλ‹€.</li>",At,Ce,Wl="λ³‘λ ¬λ‘œ ν˜ΈμΆœλœλ‹€λŠ” 사싀을 μ™„μ „νžˆ λ¬΄μ‹œν•˜κ³  <code>_generate</code>λ₯Ό μ½”λ”©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. batch(배치) 크기(이 μ˜ˆμ œμ—μ„œλŠ” <code>1</code>)와 μ½”λ“œμ— μ ν•©ν•œ μ°¨μ›λ§Œ μ‹ κ²½ μ“°λ©΄ 되며, λ³‘λ ¬λ‘œ μž‘λ™ν•˜κΈ° μœ„ν•΄ 아무것도 λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.",Pt,_e,Xl="νŒŒμ΄ν”„λΌμΈ ν˜ΈμΆœμ„ μ‚¬μš©ν•  λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, λ‹€μŒ 셀을 처음 μ‹€ν–‰ν•  λ•ŒλŠ” μ‹œκ°„μ΄ κ±Έλ¦¬μ§€λ§Œ κ·Έ μ΄ν›„μ—λŠ” 훨씬 λΉ¨λΌμ§‘λ‹ˆλ‹€.",Et,Ie,qt,ke,Dt,xe,Kt,ve,Ot,Ge,Hl="JAXλŠ” 비동기 λ””μŠ€νŒ¨μΉ˜λ₯Ό μ‚¬μš©ν•˜κ³  κ°€λŠ₯ν•œ ν•œ 빨리 μ œμ–΄κΆŒμ„ Python 루프에 λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μΆ”λ‘  μ‹œκ°„μ„ μ •ν™•ν•˜κ²Œ μΈ‘μ •ν•˜κΈ° μœ„ν•΄ <code>block_until_ready()</code>λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 아직 κ΅¬μ²΄ν™”λ˜μ§€ μ•Šμ€ 계산 κ²°κ³Όλ₯Ό μ‚¬μš©ν•˜λ €λŠ” 경우 μžλ™μœΌλ‘œ 차단이 μˆ˜ν–‰λ˜λ―€λ‘œ μ½”λ“œμ—μ„œ 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.",el,Ze,tl,Xe,ll;return $=new Al({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),j=new El({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;",options:[{label:"Mixed",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/ko/stable_diffusion_jax_how_to.ipynb"},{label:"PyTorch",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/ko/pytorch/stable_diffusion_jax_how_to.ipynb"},{label:"TensorFlow",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/ko/tensorflow/stable_diffusion_jax_how_to.ipynb"},{label:"Mixed",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/ko/stable_diffusion_jax_how_to.ipynb"},{label:"PyTorch",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/ko/pytorch/stable_diffusion_jax_how_to.ipynb"},{label:"TensorFlow",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/ko/tensorflow/stable_diffusion_jax_how_to.ipynb"}]}}),T=new J({props:{title:"JAX / Flaxμ—μ„œμ˜ 🧨 Stable Diffusion!",local:"jax--flaxμ—μ„œμ˜--stable-diffusion",headingTag:"h1"}}),U=new J({props:{title:"Setup",local:"setup",headingTag:"h2"}}),C=new b({props:{code:"IXBpcCUyMGluc3RhbGwlMjBqYXglM0QlM0QwLjMuMjUlMjBqYXhsaWIlM0QlM0QwLjMuMjUlMjBmbGF4JTIwdHJhbnNmb3JtZXJzJTIwZnRmeSUwQSFwaXAlMjBpbnN0YWxsJTIwZGlmZnVzZXJz",highlighted:`!pip install jax==0.3.25 jaxlib==0.3.25 flax transformers ftfy
!pip install diffusers`,wrap:!1}}),_=new b({props:{code:"aW1wb3J0JTIwamF4LnRvb2xzLmNvbGFiX3RwdSUwQSUwQWpheC50b29scy5jb2xhYl90cHUuc2V0dXBfdHB1KCklMEFpbXBvcnQlMjBqYXg=",highlighted:`<span class="hljs-keyword">import</span> jax.tools.colab_tpu
jax.tools.colab_tpu.setup_tpu()
<span class="hljs-keyword">import</span> jax`,wrap:!1}}),I=new b({props:{code:"bnVtX2RldmljZXMlMjAlM0QlMjBqYXguZGV2aWNlX2NvdW50KCklMEFkZXZpY2VfdHlwZSUyMCUzRCUyMGpheC5kZXZpY2VzKCklNUIwJTVELmRldmljZV9raW5kJTBBJTBBcHJpbnQoZiUyMkZvdW5kJTIwJTdCbnVtX2RldmljZXMlN0QlMjBKQVglMjBkZXZpY2VzJTIwb2YlMjB0eXBlJTIwJTdCZGV2aWNlX3R5cGUlN0QuJTIyKSUwQWFzc2VydCUyMCglMEElMjAlMjAlMjAlMjAlMjJUUFUlMjIlMjBpbiUyMGRldmljZV90eXBlJTBBKSUyQyUyMCUyMkF2YWlsYWJsZSUyMGRldmljZSUyMGlzJTIwbm90JTIwYSUyMFRQVSUyQyUyMHBsZWFzZSUyMHNlbGVjdCUyMFRQVSUyMGZyb20lMjBFZGl0JTIwJTNFJTIwTm90ZWJvb2slMjBzZXR0aW5ncyUyMCUzRSUyMEhhcmR3YXJlJTIwYWNjZWxlcmF0b3IlMjI=",highlighted:`num_devices = jax.device_count()
device_type = jax.devices()[<span class="hljs-number">0</span>].device_kind
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Found <span class="hljs-subst">{num_devices}</span> JAX devices of type <span class="hljs-subst">{device_type}</span>.&quot;</span>)
<span class="hljs-keyword">assert</span> (
<span class="hljs-string">&quot;TPU&quot;</span> <span class="hljs-keyword">in</span> device_type
), <span class="hljs-string">&quot;Available device is not a TPU, please select TPU from Edit &gt; Notebook settings &gt; Hardware accelerator&quot;</span>`,wrap:!1}}),k=new b({props:{code:"Rm91bmQlMjA4JTIwSkFYJTIwZGV2aWNlcyUyMG9mJTIwdHlwZSUyMENsb3VkJTIwVFBVLg==",highlighted:'Found <span class="hljs-number">8</span> JAX devices of <span class="hljs-built_in">type</span> Cloud TPU.',wrap:!1}}),v=new b({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwamF4JTBBaW1wb3J0JTIwamF4Lm51bXB5JTIwYXMlMjBqbnAlMEElMEFmcm9tJTIwcGF0aGxpYiUyMGltcG9ydCUyMFBhdGglMEFmcm9tJTIwamF4JTIwaW1wb3J0JTIwcG1hcCUwQWZyb20lMjBmbGF4LmpheF91dGlscyUyMGltcG9ydCUyMHJlcGxpY2F0ZSUwQWZyb20lMjBmbGF4LnRyYWluaW5nLmNvbW1vbl91dGlscyUyMGltcG9ydCUyMHNoYXJkJTBBZnJvbSUyMFBJTCUyMGltcG9ydCUyMEltYWdlJTBBJTBBZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEZsYXhTdGFibGVEaWZmdXNpb25QaXBlbGluZQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> jax
<span class="hljs-keyword">import</span> jax.numpy <span class="hljs-keyword">as</span> jnp
<span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path
<span class="hljs-keyword">from</span> jax <span class="hljs-keyword">import</span> pmap
<span class="hljs-keyword">from</span> flax.jax_utils <span class="hljs-keyword">import</span> replicate
<span class="hljs-keyword">from</span> flax.training.common_utils <span class="hljs-keyword">import</span> shard
<span class="hljs-keyword">from</span> PIL <span class="hljs-keyword">import</span> Image
<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> FlaxStableDiffusionPipeline`,wrap:!1}}),G=new J({props:{title:"λͺ¨λΈ 뢈러였기",local:"λͺ¨λΈ-뢈러였기",headingTag:"h2"}}),W=new b({props:{code:"ZHR5cGUlMjAlM0QlMjBqbnAuYmZsb2F0MTY=",highlighted:"dtype = jnp.bfloat16",wrap:!1}}),H=new b({props:{code:"cGlwZWxpbmUlMkMlMjBwYXJhbXMlMjAlM0QlMjBGbGF4U3RhYmxlRGlmZnVzaW9uUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMkNvbXBWaXMlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTQlMjIlMkMlMEElMjAlMjAlMjAlMjB2YXJpYW50JTNEJTIyYmYxNiUyMiUyQyUwQSUyMCUyMCUyMCUyMGR0eXBlJTNEZHR5cGUlMkMlMEEp",highlighted:`pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
<span class="hljs-string">&quot;CompVis/stable-diffusion-v1-4&quot;</span>,
variant=<span class="hljs-string">&quot;bf16&quot;</span>,
dtype=dtype,
)`,wrap:!1}}),F=new J({props:{title:"μΆ”λ‘ ",local:"μΆ”λ‘ ",headingTag:"h2"}}),V=new b({props:{code:"cHJvbXB0JTIwJTNEJTIwJTIyQSUyMGNpbmVtYXRpYyUyMGZpbG0lMjBzdGlsbCUyMG9mJTIwTW9yZ2FuJTIwRnJlZW1hbiUyMHN0YXJyaW5nJTIwYXMlMjBKaW1pJTIwSGVuZHJpeCUyQyUyMHBvcnRyYWl0JTJDJTIwNDBtbSUyMGxlbnMlMkMlMjBzaGFsbG93JTIwZGVwdGglMjBvZiUyMGZpZWxkJTJDJTIwY2xvc2UlMjB1cCUyQyUyMHNwbGl0JTIwbGlnaHRpbmclMkMlMjBjaW5lbWF0aWMlMjIlMEFwcm9tcHQlMjAlM0QlMjAlNUJwcm9tcHQlNUQlMjAqJTIwamF4LmRldmljZV9jb3VudCgpJTBBcHJvbXB0X2lkcyUyMCUzRCUyMHBpcGVsaW5lLnByZXBhcmVfaW5wdXRzKHByb21wdCklMEFwcm9tcHRfaWRzLnNoYXBl",highlighted:`prompt = <span class="hljs-string">&quot;A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of field, close up, split lighting, cinematic&quot;</span>
prompt = [prompt] * jax.device_count()
prompt_ids = pipeline.prepare_inputs(prompt)
prompt_ids.shape`,wrap:!1}}),z=new b({props:{code:"KDglMkMlMjA3Nyk=",highlighted:'(<span class="hljs-number">8</span>, <span class="hljs-number">77</span>)',wrap:!1}}),S=new J({props:{title:"볡사(Replication) 및 μ •λ ¬ν™”",local:"볡사replication-및-μ •λ ¬ν™”",headingTag:"h3"}}),N=new b({props:{code:"cF9wYXJhbXMlMjAlM0QlMjByZXBsaWNhdGUocGFyYW1zKQ==",highlighted:"p_params = replicate(params)",wrap:!1}}),L=new b({props:{code:"cHJvbXB0X2lkcyUyMCUzRCUyMHNoYXJkKHByb21wdF9pZHMpJTBBcHJvbXB0X2lkcy5zaGFwZQ==",highlighted:`prompt_ids = shard(prompt_ids)
prompt_ids.shape`,wrap:!1}}),A=new b({props:{code:"KDglMkMlMjAxJTJDJTIwNzcp",highlighted:'(<span class="hljs-number">8</span>, <span class="hljs-number">1</span>, <span class="hljs-number">77</span>)',wrap:!1}}),D=new b({props:{code:"ZGVmJTIwY3JlYXRlX2tleShzZWVkJTNEMCklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjBqYXgucmFuZG9tLlBSTkdLZXkoc2VlZCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">create_key</span>(<span class="hljs-params">seed=<span class="hljs-number">0</span></span>):
<span class="hljs-keyword">return</span> jax.random.PRNGKey(seed)`,wrap:!1}}),O=new b({props:{code:"cm5nJTIwJTNEJTIwY3JlYXRlX2tleSgwKSUwQXJuZyUyMCUzRCUyMGpheC5yYW5kb20uc3BsaXQocm5nJTJDJTIwamF4LmRldmljZV9jb3VudCgpKQ==",highlighted:`rng = create_key(<span class="hljs-number">0</span>)
rng = jax.random.split(rng, jax.device_count())`,wrap:!1}}),se=new b({props:{code:"JTI1JTI1dGltZSUwQWltYWdlcyUyMCUzRCUyMHBpcGVsaW5lKHByb21wdF9pZHMlMkMlMjBwX3BhcmFtcyUyQyUyMHJuZyUyQyUyMGppdCUzRFRydWUpJTVCMCU1RA==",highlighted:`%%time
images = pipeline(prompt_ids, p_params, rng, <span class="hljs-attribute">jit</span>=<span class="hljs-literal">True</span>)[0]`,wrap:!1}}),ae=new b({props:{code:"Q1BVJTIwdGltZXMlM0ElMjB1c2VyJTIwNTYuMiUyMHMlMkMlMjBzeXMlM0ElMjA0Mi41JTIwcyUyQyUyMHRvdGFsJTNBJTIwMW1pbiUyMDM4cyUwQVdhbGwlMjB0aW1lJTNBJTIwMW1pbiUyMDI5cw==",highlighted:`CPU times: user <span class="hljs-number">56.2</span> s, sys: <span class="hljs-number">42.5</span> s, total: 1<span class="hljs-built_in">min</span> 38s
Wall time: 1<span class="hljs-built_in">min</span> 29s`,wrap:!1}}),ne=new b({props:{code:"aW1hZ2VzJTIwJTNEJTIwaW1hZ2VzLnJlc2hhcGUoKGltYWdlcy5zaGFwZSU1QjAlNUQlMjAqJTIwaW1hZ2VzLnNoYXBlJTVCMSU1RCUyQyklMjAlMkIlMjBpbWFnZXMuc2hhcGUlNUItMyUzQSU1RCklMEFpbWFnZXMlMjAlM0QlMjBwaXBlbGluZS5udW1weV90b19waWwoaW1hZ2VzKQ==",highlighted:`images = images.reshape((images.shape[<span class="hljs-number">0</span>] * images.shape[<span class="hljs-number">1</span>],) + images.shape[-<span class="hljs-number">3</span>:])
images = pipeline.numpy_to_pil(images)`,wrap:!1}}),ie=new J({props:{title:"μ‹œκ°ν™”",local:"μ‹œκ°ν™”",headingTag:"h3"}}),Me=new b({props:{code:"ZGVmJTIwaW1hZ2VfZ3JpZChpbWdzJTJDJTIwcm93cyUyQyUyMGNvbHMpJTNBJTBBJTIwJTIwJTIwJTIwdyUyQyUyMGglMjAlM0QlMjBpbWdzJTVCMCU1RC5zaXplJTBBJTIwJTIwJTIwJTIwZ3JpZCUyMCUzRCUyMEltYWdlLm5ldyglMjJSR0IlMjIlMkMlMjBzaXplJTNEKGNvbHMlMjAqJTIwdyUyQyUyMHJvd3MlMjAqJTIwaCkpJTBBJTIwJTIwJTIwJTIwZm9yJTIwaSUyQyUyMGltZyUyMGluJTIwZW51bWVyYXRlKGltZ3MpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZ3JpZC5wYXN0ZShpbWclMkMlMjBib3glM0QoaSUyMCUyNSUyMGNvbHMlMjAqJTIwdyUyQyUyMGklMjAlMkYlMkYlMjBjb2xzJTIwKiUyMGgpKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGdyaWQ=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">image_grid</span>(<span class="hljs-params">imgs, rows, cols</span>):
w, h = imgs[<span class="hljs-number">0</span>].size
grid = Image.new(<span class="hljs-string">&quot;RGB&quot;</span>, size=(cols * w, rows * h))
<span class="hljs-keyword">for</span> i, img <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(imgs):
grid.paste(img, box=(i % cols * w, i // cols * h))
<span class="hljs-keyword">return</span> grid`,wrap:!1}}),fe=new b({props:{code:"aW1hZ2VfZ3JpZChpbWFnZXMlMkMlMjAyJTJDJTIwNCk=",highlighted:'image_grid(images, <span class="hljs-number">2</span>, <span class="hljs-number">4</span>)',wrap:!1}}),ye=new J({props:{title:"λ‹€λ₯Έ ν”„λ‘¬ν”„νŠΈ μ‚¬μš©",local:"λ‹€λ₯Έ-ν”„λ‘¬ν”„νŠΈ-μ‚¬μš©",headingTag:"h2"}}),be=new b({props:{code:"cHJvbXB0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkxhYnJhZG9yJTIwaW4lMjB0aGUlMjBzdHlsZSUyMG9mJTIwSG9rdXNhaSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlBhaW50aW5nJTIwb2YlMjBhJTIwc3F1aXJyZWwlMjBza2F0aW5nJTIwaW4lMjBOZXclMjBZb3JrJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIySEFMLTkwMDAlMjBpbiUyMHRoZSUyMHN0eWxlJTIwb2YlMjBWYW4lMjBHb2doJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGltZXMlMjBTcXVhcmUlMjB1bmRlciUyMHdhdGVyJTJDJTIwd2l0aCUyMGZpc2glMjBhbmQlMjBhJTIwZG9scGhpbiUyMHN3aW1taW5nJTIwYXJvdW5kJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyQW5jaWVudCUyMFJvbWFuJTIwZnJlc2NvJTIwc2hvd2luZyUyMGElMjBtYW4lMjB3b3JraW5nJTIwb24lMjBoaXMlMjBsYXB0b3AlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJDbG9zZS11cCUyMHBob3RvZ3JhcGglMjBvZiUyMHlvdW5nJTIwYmxhY2slMjB3b21hbiUyMGFnYWluc3QlMjB1cmJhbiUyMGJhY2tncm91bmQlMkMlMjBoaWdoJTIwcXVhbGl0eSUyQyUyMGJva2VoJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyQXJtY2hhaXIlMjBpbiUyMHRoZSUyMHNoYXBlJTIwb2YlMjBhbiUyMGF2b2NhZG8lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJDbG93biUyMGFzdHJvbmF1dCUyMGluJTIwc3BhY2UlMkMlMjB3aXRoJTIwRWFydGglMjBpbiUyMHRoZSUyMGJhY2tncm91bmQlMjIlMkMlMEElNUQ=",highlighted:`prompts = [
<span class="hljs-string">&quot;Labrador in the style of Hokusai&quot;</span>,
<span class="hljs-string">&quot;Painting of a squirrel skating in New York&quot;</span>,
<span class="hljs-string">&quot;HAL-9000 in the style of Van Gogh&quot;</span>,
<span class="hljs-string">&quot;Times Square under water, with fish and a dolphin swimming around&quot;</span>,
<span class="hljs-string">&quot;Ancient Roman fresco showing a man working on his laptop&quot;</span>,
<span class="hljs-string">&quot;Close-up photograph of young black woman against urban background, high quality, bokeh&quot;</span>,
<span class="hljs-string">&quot;Armchair in the shape of an avocado&quot;</span>,
<span class="hljs-string">&quot;Clown astronaut in space, with Earth in the background&quot;</span>,
]`,wrap:!1}}),ue=new b({props:{code:"cHJvbXB0X2lkcyUyMCUzRCUyMHBpcGVsaW5lLnByZXBhcmVfaW5wdXRzKHByb21wdHMpJTBBcHJvbXB0X2lkcyUyMCUzRCUyMHNoYXJkKHByb21wdF9pZHMpJTBBJTBBaW1hZ2VzJTIwJTNEJTIwcGlwZWxpbmUocHJvbXB0X2lkcyUyQyUyMHBfcGFyYW1zJTJDJTIwcm5nJTJDJTIwaml0JTNEVHJ1ZSkuaW1hZ2VzJTBBaW1hZ2VzJTIwJTNEJTIwaW1hZ2VzLnJlc2hhcGUoKGltYWdlcy5zaGFwZSU1QjAlNUQlMjAqJTIwaW1hZ2VzLnNoYXBlJTVCMSU1RCUyQyklMjAlMkIlMjBpbWFnZXMuc2hhcGUlNUItMyUzQSU1RCklMEFpbWFnZXMlMjAlM0QlMjBwaXBlbGluZS5udW1weV90b19waWwoaW1hZ2VzKSUwQSUwQWltYWdlX2dyaWQoaW1hZ2VzJTJDJTIwMiUyQyUyMDQp",highlighted:`prompt_ids = pipeline.prepare_inputs(prompts)
prompt_ids = shard(prompt_ids)
images = pipeline(prompt_ids, p_params, rng, jit=<span class="hljs-literal">True</span>).images
images = images.reshape((images.shape[<span class="hljs-number">0</span>] * images.shape[<span class="hljs-number">1</span>],) + images.shape[-<span class="hljs-number">3</span>:])
images = pipeline.numpy_to_pil(images)
image_grid(images, <span class="hljs-number">2</span>, <span class="hljs-number">4</span>)`,wrap:!1}}),$e=new J({props:{title:"병렬화(parallelization)λŠ” μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”κ°€?",local:"병렬화parallelizationλŠ”-μ–΄λ–»κ²Œ-μž‘λ™ν•˜λŠ”κ°€",headingTag:"h2"}}),ge=new b({props:{code:"cF9nZW5lcmF0ZSUyMCUzRCUyMHBtYXAocGlwZWxpbmUuX2dlbmVyYXRlKQ==",highlighted:"p_generate = pmap(pipeline._generate)",wrap:!1}}),Ie=new b({props:{code:"JTI1JTI1dGltZSUwQWltYWdlcyUyMCUzRCUyMHBfZ2VuZXJhdGUocHJvbXB0X2lkcyUyQyUyMHBfcGFyYW1zJTJDJTIwcm5nKSUwQWltYWdlcyUyMCUzRCUyMGltYWdlcy5ibG9ja191bnRpbF9yZWFkeSgpJTBBaW1hZ2VzLnNoYXBl",highlighted:`%%time
images = p<span class="hljs-constructor">_generate(<span class="hljs-params">prompt_ids</span>, <span class="hljs-params">p_params</span>, <span class="hljs-params">rng</span>)</span>
images = images.block<span class="hljs-constructor">_until_ready()</span>
images.shape`,wrap:!1}}),ke=new b({props:{code:"Q1BVJTIwdGltZXMlM0ElMjB1c2VyJTIwMW1pbiUyMDE1cyUyQyUyMHN5cyUzQSUyMDE4LjIlMjBzJTJDJTIwdG90YWwlM0ElMjAxbWluJTIwMzRzJTBBV2FsbCUyMHRpbWUlM0ElMjAxbWluJTIwMTVz",highlighted:`CPU times: user 1<span class="hljs-built_in">min</span> 15s, sys: <span class="hljs-number">18.2</span> s, total: 1<span class="hljs-built_in">min</span> 34s
Wall time: 1<span class="hljs-built_in">min</span> 15s`,wrap:!1}}),xe=new b({props:{code:"aW1hZ2VzLnNoYXBl",highlighted:"images.shape",wrap:!1}}),ve=new b({props:{code:"KDglMkMlMjAxJTJDJTIwNTEyJTJDJTIwNTEyJTJDJTIwMyk=",highlighted:'(<span class="hljs-number">8</span>, <span class="hljs-number">1</span>, <span class="hljs-number">512</span>, <span class="hljs-number">512</span>, <span class="hljs-number">3</span>)',wrap:!1}}),Ze=new Pl({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/ko/using-diffusers/stable_diffusion_jax_how_to.md"}}),{c(){u=n("meta"),He=a(),We=n("p"),Fe=a(),i($.$$.fragment),Ye=a(),i(j.$$.fragment),Qe=a(),i(T.$$.fragment),Ve=a(),d=n("p"),d.innerHTML=al,ze=a(),c=n("p"),c.innerHTML=pl,Se=a(),h=n("p"),h.textContent=nl,Re=a(),g=n("p"),g.textContent=il,Ne=a(),i(U.$$.fragment),Le=a(),B=n("p"),B.textContent=ml,Ae=a(),i(C.$$.fragment),Pe=a(),i(_.$$.fragment),Ee=a(),i(I.$$.fragment),qe=a(),i(k.$$.fragment),De=a(),x=n("p"),x.textContent=Ml,Ke=a(),i(v.$$.fragment),Oe=a(),i(G.$$.fragment),et=a(),Z=n("p"),Z.textContent=fl,tt=a(),i(W.$$.fragment),lt=a(),X=n("p"),X.textContent=ol,st=a(),i(H.$$.fragment),at=a(),i(F.$$.fragment),pt=a(),Y=n("p"),Y.textContent=yl,nt=a(),Q=n("p"),Q.innerHTML=rl,it=a(),i(V.$$.fragment),mt=a(),i(z.$$.fragment),Mt=a(),i(S.$$.fragment),ft=a(),R=n("p"),R.innerHTML=wl,ot=a(),i(N.$$.fragment),yt=a(),i(L.$$.fragment),rt=a(),i(A.$$.fragment),wt=a(),P=n("p"),P.innerHTML=bl,bt=a(),E=n("p"),E.textContent=ul,ut=a(),q=n("p"),q.textContent=Jl,Jt=a(),i(D.$$.fragment),$t=a(),K=n("p"),K.textContent=$l,jt=a(),i(O.$$.fragment),Tt=a(),ee=n("p"),ee.textContent=jl,dt=a(),te=n("p"),te.innerHTML=Tl,ct=a(),le=n("p"),le.textContent=dl,ht=a(),i(se.$$.fragment),gt=a(),i(ae.$$.fragment),Ut=a(),pe=n("p"),pe.innerHTML=cl,Bt=a(),i(ne.$$.fragment),Ct=a(),i(ie.$$.fragment),_t=a(),me=n("p"),me.textContent=hl,It=a(),i(Me.$$.fragment),kt=a(),i(fe.$$.fragment),xt=a(),oe=n("p"),oe.innerHTML=gl,vt=a(),i(ye.$$.fragment),Gt=a(),re=n("p"),re.textContent=Ul,Zt=a(),we=n("p"),we.textContent=Bl,Wt=a(),i(be.$$.fragment),Xt=a(),i(ue.$$.fragment),Ht=a(),Je=n("p"),Je.innerHTML=Cl,Ft=a(),i($e.$$.fragment),Yt=a(),je=n("p"),je.innerHTML=_l,Qt=a(),Te=n("p"),Te.innerHTML=Il,Vt=a(),de=n("p"),de.innerHTML=kl,zt=a(),ce=n("ul"),ce.innerHTML=xl,St=a(),he=n("p"),he.innerHTML=vl,Rt=a(),i(ge.$$.fragment),Nt=a(),Ue=n("p"),Ue.innerHTML=Gl,Lt=a(),Be=n("ul"),Be.innerHTML=Zl,At=a(),Ce=n("p"),Ce.innerHTML=Wl,Pt=a(),_e=n("p"),_e.textContent=Xl,Et=a(),i(Ie.$$.fragment),qt=a(),i(ke.$$.fragment),Dt=a(),i(xe.$$.fragment),Kt=a(),i(ve.$$.fragment),Ot=a(),Ge=n("p"),Ge.innerHTML=Hl,el=a(),i(Ze.$$.fragment),tl=a(),Xe=n("p"),this.h()},l(e){const t=Nl("svelte-u9bgzb",document.head);u=m(t,"META",{name:!0,content:!0}),t.forEach(l),He=p(e),We=m(e,"P",{}),Fl(We).forEach(l),Fe=p(e),M($.$$.fragment,e),Ye=p(e),M(j.$$.fragment,e),Qe=p(e),M(T.$$.fragment,e),Ve=p(e),d=m(e,"P",{"data-svelte-h":!0}),w(d)!=="svelte-1gxtaje"&&(d.innerHTML=al),ze=p(e),c=m(e,"P",{"data-svelte-h":!0}),w(c)!=="svelte-1bumom2"&&(c.innerHTML=pl),Se=p(e),h=m(e,"P",{"data-svelte-h":!0}),w(h)!=="svelte-17mi6da"&&(h.textContent=nl),Re=p(e),g=m(e,"P",{"data-svelte-h":!0}),w(g)!=="svelte-hjgegg"&&(g.textContent=il),Ne=p(e),M(U.$$.fragment,e),Le=p(e),B=m(e,"P",{"data-svelte-h":!0}),w(B)!=="svelte-17ncbx5"&&(B.textContent=ml),Ae=p(e),M(C.$$.fragment,e),Pe=p(e),M(_.$$.fragment,e),Ee=p(e),M(I.$$.fragment,e),qe=p(e),M(k.$$.fragment,e),De=p(e),x=m(e,"P",{"data-svelte-h":!0}),w(x)!=="svelte-95k7v6"&&(x.textContent=Ml),Ke=p(e),M(v.$$.fragment,e),Oe=p(e),M(G.$$.fragment,e),et=p(e),Z=m(e,"P",{"data-svelte-h":!0}),w(Z)!=="svelte-71fx65"&&(Z.textContent=fl),tt=p(e),M(W.$$.fragment,e),lt=p(e),X=m(e,"P",{"data-svelte-h":!0}),w(X)!=="svelte-1uvv4fp"&&(X.textContent=ol),st=p(e),M(H.$$.fragment,e),at=p(e),M(F.$$.fragment,e),pt=p(e),Y=m(e,"P",{"data-svelte-h":!0}),w(Y)!=="svelte-7wabl0"&&(Y.textContent=yl),nt=p(e),Q=m(e,"P",{"data-svelte-h":!0}),w(Q)!=="svelte-13u2ylm"&&(Q.innerHTML=rl),it=p(e),M(V.$$.fragment,e),mt=p(e),M(z.$$.fragment,e),Mt=p(e),M(S.$$.fragment,e),ft=p(e),R=m(e,"P",{"data-svelte-h":!0}),w(R)!=="svelte-qzdgm1"&&(R.innerHTML=wl),ot=p(e),M(N.$$.fragment,e),yt=p(e),M(L.$$.fragment,e),rt=p(e),M(A.$$.fragment,e),wt=p(e),P=m(e,"P",{"data-svelte-h":!0}),w(P)!=="svelte-i4vbvw"&&(P.innerHTML=bl),bt=p(e),E=m(e,"P",{"data-svelte-h":!0}),w(E)!=="svelte-1ghn5le"&&(E.textContent=ul),ut=p(e),q=m(e,"P",{"data-svelte-h":!0}),w(q)!=="svelte-1lcan7m"&&(q.textContent=Jl),Jt=p(e),M(D.$$.fragment,e),$t=p(e),K=m(e,"P",{"data-svelte-h":!0}),w(K)!=="svelte-1ngdgb0"&&(K.textContent=$l),jt=p(e),M(O.$$.fragment,e),Tt=p(e),ee=m(e,"P",{"data-svelte-h":!0}),w(ee)!=="svelte-103e30a"&&(ee.textContent=jl),dt=p(e),te=m(e,"P",{"data-svelte-h":!0}),w(te)!=="svelte-1sbamam"&&(te.innerHTML=Tl),ct=p(e),le=m(e,"P",{"data-svelte-h":!0}),w(le)!=="svelte-15bwfw"&&(le.textContent=dl),ht=p(e),M(se.$$.fragment,e),gt=p(e),M(ae.$$.fragment,e),Ut=p(e),pe=m(e,"P",{"data-svelte-h":!0}),w(pe)!=="svelte-1egnab9"&&(pe.innerHTML=cl),Bt=p(e),M(ne.$$.fragment,e),Ct=p(e),M(ie.$$.fragment,e),_t=p(e),me=m(e,"P",{"data-svelte-h":!0}),w(me)!=="svelte-1e76x5r"&&(me.textContent=hl),It=p(e),M(Me.$$.fragment,e),kt=p(e),M(fe.$$.fragment,e),xt=p(e),oe=m(e,"P",{"data-svelte-h":!0}),w(oe)!=="svelte-e1s2k"&&(oe.innerHTML=gl),vt=p(e),M(ye.$$.fragment,e),Gt=p(e),re=m(e,"P",{"data-svelte-h":!0}),w(re)!=="svelte-1buolzv"&&(re.textContent=Ul),Zt=p(e),we=m(e,"P",{"data-svelte-h":!0}),w(we)!=="svelte-1fscvnd"&&(we.textContent=Bl),Wt=p(e),M(be.$$.fragment,e),Xt=p(e),M(ue.$$.fragment,e),Ht=p(e),Je=m(e,"P",{"data-svelte-h":!0}),w(Je)!=="svelte-1nea4f2"&&(Je.innerHTML=Cl),Ft=p(e),M($e.$$.fragment,e),Yt=p(e),je=m(e,"P",{"data-svelte-h":!0}),w(je)!=="svelte-1780g9f"&&(je.innerHTML=_l),Qt=p(e),Te=m(e,"P",{"data-svelte-h":!0}),w(Te)!=="svelte-d62kvx"&&(Te.innerHTML=Il),Vt=p(e),de=m(e,"P",{"data-svelte-h":!0}),w(de)!=="svelte-1ykkmgr"&&(de.innerHTML=kl),zt=p(e),ce=m(e,"UL",{"data-svelte-h":!0}),w(ce)!=="svelte-2aqcsn"&&(ce.innerHTML=xl),St=p(e),he=m(e,"P",{"data-svelte-h":!0}),w(he)!=="svelte-mu1la1"&&(he.innerHTML=vl),Rt=p(e),M(ge.$$.fragment,e),Nt=p(e),Ue=m(e,"P",{"data-svelte-h":!0}),w(Ue)!=="svelte-52cpde"&&(Ue.innerHTML=Gl),Lt=p(e),Be=m(e,"UL",{"data-svelte-h":!0}),w(Be)!=="svelte-11847k7"&&(Be.innerHTML=Zl),At=p(e),Ce=m(e,"P",{"data-svelte-h":!0}),w(Ce)!=="svelte-1x822d1"&&(Ce.innerHTML=Wl),Pt=p(e),_e=m(e,"P",{"data-svelte-h":!0}),w(_e)!=="svelte-1ukvcj9"&&(_e.textContent=Xl),Et=p(e),M(Ie.$$.fragment,e),qt=p(e),M(ke.$$.fragment,e),Dt=p(e),M(xe.$$.fragment,e),Kt=p(e),M(ve.$$.fragment,e),Ot=p(e),Ge=m(e,"P",{"data-svelte-h":!0}),w(Ge)!=="svelte-1s6my01"&&(Ge.innerHTML=Hl),el=p(e),M(Ze.$$.fragment,e),tl=p(e),Xe=m(e,"P",{}),Fl(Xe).forEach(l),this.h()},h(){Yl(u,"name","hf:doc:metadata"),Yl(u,"content",Dl)},m(e,t){Ll(document.head,u),s(e,He,t),s(e,We,t),s(e,Fe,t),f($,e,t),s(e,Ye,t),f(j,e,t),s(e,Qe,t),f(T,e,t),s(e,Ve,t),s(e,d,t),s(e,ze,t),s(e,c,t),s(e,Se,t),s(e,h,t),s(e,Re,t),s(e,g,t),s(e,Ne,t),f(U,e,t),s(e,Le,t),s(e,B,t),s(e,Ae,t),f(C,e,t),s(e,Pe,t),f(_,e,t),s(e,Ee,t),f(I,e,t),s(e,qe,t),f(k,e,t),s(e,De,t),s(e,x,t),s(e,Ke,t),f(v,e,t),s(e,Oe,t),f(G,e,t),s(e,et,t),s(e,Z,t),s(e,tt,t),f(W,e,t),s(e,lt,t),s(e,X,t),s(e,st,t),f(H,e,t),s(e,at,t),f(F,e,t),s(e,pt,t),s(e,Y,t),s(e,nt,t),s(e,Q,t),s(e,it,t),f(V,e,t),s(e,mt,t),f(z,e,t),s(e,Mt,t),f(S,e,t),s(e,ft,t),s(e,R,t),s(e,ot,t),f(N,e,t),s(e,yt,t),f(L,e,t),s(e,rt,t),f(A,e,t),s(e,wt,t),s(e,P,t),s(e,bt,t),s(e,E,t),s(e,ut,t),s(e,q,t),s(e,Jt,t),f(D,e,t),s(e,$t,t),s(e,K,t),s(e,jt,t),f(O,e,t),s(e,Tt,t),s(e,ee,t),s(e,dt,t),s(e,te,t),s(e,ct,t),s(e,le,t),s(e,ht,t),f(se,e,t),s(e,gt,t),f(ae,e,t),s(e,Ut,t),s(e,pe,t),s(e,Bt,t),f(ne,e,t),s(e,Ct,t),f(ie,e,t),s(e,_t,t),s(e,me,t),s(e,It,t),f(Me,e,t),s(e,kt,t),f(fe,e,t),s(e,xt,t),s(e,oe,t),s(e,vt,t),f(ye,e,t),s(e,Gt,t),s(e,re,t),s(e,Zt,t),s(e,we,t),s(e,Wt,t),f(be,e,t),s(e,Xt,t),f(ue,e,t),s(e,Ht,t),s(e,Je,t),s(e,Ft,t),f($e,e,t),s(e,Yt,t),s(e,je,t),s(e,Qt,t),s(e,Te,t),s(e,Vt,t),s(e,de,t),s(e,zt,t),s(e,ce,t),s(e,St,t),s(e,he,t),s(e,Rt,t),f(ge,e,t),s(e,Nt,t),s(e,Ue,t),s(e,Lt,t),s(e,Be,t),s(e,At,t),s(e,Ce,t),s(e,Pt,t),s(e,_e,t),s(e,Et,t),f(Ie,e,t),s(e,qt,t),f(ke,e,t),s(e,Dt,t),f(xe,e,t),s(e,Kt,t),f(ve,e,t),s(e,Ot,t),s(e,Ge,t),s(e,el,t),f(Ze,e,t),s(e,tl,t),s(e,Xe,t),ll=!0},p:Vl,i(e){ll||(o($.$$.fragment,e),o(j.$$.fragment,e),o(T.$$.fragment,e),o(U.$$.fragment,e),o(C.$$.fragment,e),o(_.$$.fragment,e),o(I.$$.fragment,e),o(k.$$.fragment,e),o(v.$$.fragment,e),o(G.$$.fragment,e),o(W.$$.fragment,e),o(H.$$.fragment,e),o(F.$$.fragment,e),o(V.$$.fragment,e),o(z.$$.fragment,e),o(S.$$.fragment,e),o(N.$$.fragment,e),o(L.$$.fragment,e),o(A.$$.fragment,e),o(D.$$.fragment,e),o(O.$$.fragment,e),o(se.$$.fragment,e),o(ae.$$.fragment,e),o(ne.$$.fragment,e),o(ie.$$.fragment,e),o(Me.$$.fragment,e),o(fe.$$.fragment,e),o(ye.$$.fragment,e),o(be.$$.fragment,e),o(ue.$$.fragment,e),o($e.$$.fragment,e),o(ge.$$.fragment,e),o(Ie.$$.fragment,e),o(ke.$$.fragment,e),o(xe.$$.fragment,e),o(ve.$$.fragment,e),o(Ze.$$.fragment,e),ll=!0)},o(e){y($.$$.fragment,e),y(j.$$.fragment,e),y(T.$$.fragment,e),y(U.$$.fragment,e),y(C.$$.fragment,e),y(_.$$.fragment,e),y(I.$$.fragment,e),y(k.$$.fragment,e),y(v.$$.fragment,e),y(G.$$.fragment,e),y(W.$$.fragment,e),y(H.$$.fragment,e),y(F.$$.fragment,e),y(V.$$.fragment,e),y(z.$$.fragment,e),y(S.$$.fragment,e),y(N.$$.fragment,e),y(L.$$.fragment,e),y(A.$$.fragment,e),y(D.$$.fragment,e),y(O.$$.fragment,e),y(se.$$.fragment,e),y(ae.$$.fragment,e),y(ne.$$.fragment,e),y(ie.$$.fragment,e),y(Me.$$.fragment,e),y(fe.$$.fragment,e),y(ye.$$.fragment,e),y(be.$$.fragment,e),y(ue.$$.fragment,e),y($e.$$.fragment,e),y(ge.$$.fragment,e),y(Ie.$$.fragment,e),y(ke.$$.fragment,e),y(xe.$$.fragment,e),y(ve.$$.fragment,e),y(Ze.$$.fragment,e),ll=!1},d(e){e&&(l(He),l(We),l(Fe),l(Ye),l(Qe),l(Ve),l(d),l(ze),l(c),l(Se),l(h),l(Re),l(g),l(Ne),l(Le),l(B),l(Ae),l(Pe),l(Ee),l(qe),l(De),l(x),l(Ke),l(Oe),l(et),l(Z),l(tt),l(lt),l(X),l(st),l(at),l(pt),l(Y),l(nt),l(Q),l(it),l(mt),l(Mt),l(ft),l(R),l(ot),l(yt),l(rt),l(wt),l(P),l(bt),l(E),l(ut),l(q),l(Jt),l($t),l(K),l(jt),l(Tt),l(ee),l(dt),l(te),l(ct),l(le),l(ht),l(gt),l(Ut),l(pe),l(Bt),l(Ct),l(_t),l(me),l(It),l(kt),l(xt),l(oe),l(vt),l(Gt),l(re),l(Zt),l(we),l(Wt),l(Xt),l(Ht),l(Je),l(Ft),l(Yt),l(je),l(Qt),l(Te),l(Vt),l(de),l(zt),l(ce),l(St),l(he),l(Rt),l(Nt),l(Ue),l(Lt),l(Be),l(At),l(Ce),l(Pt),l(_e),l(Et),l(qt),l(Dt),l(Kt),l(Ot),l(Ge),l(el),l(tl),l(Xe)),l(u),r($,e),r(j,e),r(T,e),r(U,e),r(C,e),r(_,e),r(I,e),r(k,e),r(v,e),r(G,e),r(W,e),r(H,e),r(F,e),r(V,e),r(z,e),r(S,e),r(N,e),r(L,e),r(A,e),r(D,e),r(O,e),r(se,e),r(ae,e),r(ne,e),r(ie,e),r(Me,e),r(fe,e),r(ye,e),r(be,e),r(ue,e),r($e,e),r(ge,e),r(Ie,e),r(ke,e),r(xe,e),r(ve,e),r(Ze,e)}}}const Dl='{"title":"JAX / Flaxμ—μ„œμ˜ 🧨 Stable Diffusion!","local":"jax--flaxμ—μ„œμ˜--stable-diffusion","sections":[{"title":"Setup","local":"setup","sections":[],"depth":2},{"title":"λͺ¨λΈ 뢈러였기","local":"λͺ¨λΈ-뢈러였기","sections":[],"depth":2},{"title":"μΆ”λ‘ ","local":"μΆ”λ‘ ","sections":[{"title":"볡사(Replication) 및 μ •λ ¬ν™”","local":"볡사replication-및-μ •λ ¬ν™”","sections":[],"depth":3},{"title":"μ‹œκ°ν™”","local":"μ‹œκ°ν™”","sections":[],"depth":3}],"depth":2},{"title":"λ‹€λ₯Έ ν”„λ‘¬ν”„νŠΈ μ‚¬μš©","local":"λ‹€λ₯Έ-ν”„λ‘¬ν”„νŠΈ-μ‚¬μš©","sections":[],"depth":2},{"title":"병렬화(parallelization)λŠ” μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”κ°€?","local":"병렬화parallelizationλŠ”-μ–΄λ–»κ²Œ-μž‘λ™ν•˜λŠ”κ°€","sections":[],"depth":2}],"depth":1}';function Kl(sl){return zl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class as extends Sl{constructor(u){super(),Rl(this,u,Kl,ql,Ql,{})}}export{as as component};

Xet Storage Details

Size:
36.4 kB
Β·
Xet hash:
1d4d3900a686a21052eea21f83c17403f43645298f7c798107425bc25e85a4b9

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