import{s as _l,n as kl,o as Nl}from"../chunks/scheduler.56730f09.js";import{S as Bl,i as Al,g as s,s as i,u as w,m as Gl,A as Vl,h as a,f as e,c as p,j as U,v as y,y as M,n as El,k as r,o,a as n,w as C,d as h,t as c,x as m}from"../chunks/index.ba464511.js";import{I as kt}from"../chunks/IconCopyLink.89bde88e.js";import{C as Nt}from"../chunks/CodeBlock.2302fd0d.js";function Sl(Ge){let T,Bt,Jt,At,u,I,It,_,_e,Tt,Ve="훈련용 사용자 맞춤형 하드웨어",Gt,k,Ee='모델 훈련과 추론에 사용하는 하드웨어는 성능에 큰 영향을 미칠 수 있습니다. GPU에 대해 자세히 알아보려면, Tim Dettmer의 훌륭한 블로그 포스트를 확인해보세요. <a href="https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/" rel="nofollow">블로그 포스트 링크</a> (영어로 작성됨).',Vt,N,Se="GPU 설정에 대한 실용적인 조언을 살펴보겠습니다.",Et,v,j,jt,B,ke,ut,$e="GPU",St,A,Le='<li>더 큰 GPU</li> <li>더 많은 GPU</li> <li>더 많은 CPU 및 NVMe (<a href="../en/main_classes/deepspeed#nvme-support">DeepSpeed-Infinity</a>를 통한 오프로드(offload))</li>',$t,G,Ze="우선, 하나의 GPU만 사용하는 경우부터 시작해봅시다.",Lt,d,x,xt,V,Ne,vt,Xe="전원 공급과 냉각",Zt,E,Re="비싼 고성능 GPU를 구매한 경우, 올바른 전원 공급과 충분한 냉각을 제공해야 합니다.",Xt,S,He="<strong>전원 공급</strong>:",Rt,$,Qe="일부 고성능 소비자용 GPU는 2개 혹은 가끔가다 3개의 PCI-E 8핀 전원 소켓이 있습니다. 카드에 있는 소켓 수만큼 독립적인 12V PCI-E 8핀 케이블이 연결되어 있는지 확인하세요. 같은 케이블의 한쪽 끝에 있는 2개의 스플릿(또는 피그테일(pigtail) 케이블)을 사용하지 마세요. 즉, GPU에 2개의 소켓이 있다면, PSU(전원 공급 장치)에서 카드로 연결되는 2개의 PCI-E 8핀 케이블이 필요하며, 끝에 2개의 PCI-E 8핀 커넥터가 있는 케이블이 필요하지 않습니다! 그렇지 않으면 카드의 전체 성능을 제대로 발휘하지 못할 수 있습니다.",Ht,L,We="각각의 PCI-E 8핀 전원 케이블은 PSU 쪽의 12V 레일에 연결되어야 하며 최대 150W의 전력을 공급할 수 있습니다.",Qt,Z,ge="일부 다른 GPU는 PCI-E 12핀 커넥터를 사용하며, 이러한 커넥터는 최대 500W-600W의 전력을 공급할 수 있습니다.",Wt,X,Ye="저가형 GPU는 6핀 커넥터를 사용하며, 최대 75W의 전력을 공급합니다.",gt,R,Fe="또한 GPU가 안정적인 전압을 받을 수 있도록 고급 PSU를 선택해야 합니다. 일부 저품질의 PSU는 GPU가 최고 성능으로 동작하기 위해 필요한 전압을 안정적으로 공급하지 못할 수 있습니다.",Yt,H,De="물론, PSU는 GPU에 전원을 공급하기에 충분한 여분의 전력 용량을 가져야 합니다.",Ft,Q,ze="<strong>냉각</strong>:",Dt,W,qe="GPU가 과열되면 성능이 저하되고 최대 성능을 발휘하지 못할 수 있으며, 너무 뜨거워지면 중지될 수 있습니다.",zt,g,Oe="GPU가 과열될 때 정확한 적정 온도를 알기 어려우나, 아마도 +80℃ 미만이면 좋지만 더 낮을수록 좋습니다. 70℃-75℃ 정도가 훌륭한 온도 범위입니다. 성능 저하가 발생하기 시작하는 온도는 대략 84℃-90℃ 정도일 것입니다. 하지만 성능 저하 이외에도 지속적으로 매우 높은 온도는 GPU 수명을 단축시킬 수 있습니다.",qt,Y,Ke="이어서, 여러 개의 GPU를 사용할 때 가장 중요한 측면 중 하나인 GPU 간 연결 방식을 살펴보겠습니다.",Ot,f,P,Pt,F,Be,dt,tl="다중 GPU 연결 방식",Kt,D,el="다중 GPU를 사용하는 경우 GPU 간의 연결 방식은 전체 훈련 시간에 큰 영향을 미칠 수 있습니다. 만약 GPU가 동일한 물리적 노드에 있을 경우, 다음과 같이 확인할 수 있습니다:",te,z,ee,q,ll="만약 NVLink로 연결된 듀얼 GPU 환경이라면, 다음과 같은 결과를 확인할 수 있습니다:",le,O,ne,K,nl="NVLink를 지원하지 않는 다른 환경의 경우에는 다음과 같은 결과를 확인할 수 있습니다:",se,tt,ae,et,sl="이 결과에는 다음과 같은 범례가 포함되어 있습니다:",ie,lt,pe,nt,al="따라서 첫 번째 결과의 <code>NV2</code>는 GPU가 2개의 NVLink로 연결되어 있다는 것을 나타내고, 두 번째 결과의 <code>PHB</code>는 일반적인 소비자용 PCIe+브릿지 설정을 가지고 있다는 것을 나타냅니다.",Me,st,il="설정에서 어떤 유형의 연결 방식을 가지고 있는지 확인하세요. 일부 연결 방식은 GPU 간 통신을 더 빠르게 만들 수 있으며(NVLink와 같이), 어떤 연결 방식은 더 느리게 만들 수 있습니다(PHB와 같이).",re,at,pl="사용하는 확장성 솔루션의 종류에 따라 연결 속도가 주요한 영향을 미칠 수도 있고 미미한 영향을 미칠 수도 있습니다. DDP와 같이 GPU가 거의 동기화하지 않아도 되는 경우, 연결 속도가 느려도 큰 영향을 받지 않습니다. 반면 ZeRO-DP와 같이 GPU간 통신이 많이 필요한 경우, 더 빠른 훈련을 위해서는 더 빠른 연결 속도가 중요합니다.",oe,J,b,bt,it,Ae,ft,Ml="NVLink",Ue,pt,rl='<a href="https://en.wikipedia.org/wiki/NVLink" rel="nofollow">NVLink</a>는 Nvidia에서 개발한 유선 기반의 직렬 다중 레인 근거리 통신 링크입니다.',we,Mt,ol='새로운 세대의 NVLink는 더 빠른 대역폭을 제공합니다. <a href="https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/ampere/pdf/NVIDIA-ampere-GA102-GPU-Architecture-Whitepaper-V1.pdf" rel="nofollow">Nvidia Ampere GA102 GPU Architecture</a>에서 아래와 같은 정보를 확인하실 수 있습니다:',ye,rt,Ul=`<p>3세대 NVLink®
GA102 GPU는 4개의 x4 링크를 포함하는 NVIDIA의 3세대 NVLink 인터페이스를 활용하며,
각 링크는 두 개의 GPU 간에 각 방향으로 초당 14.0625GB의 대역폭을 제공합니다.
4개의 링크는 각 방향에 초당 56.25GB의 대역폭을 제공하며, 두 개의 GPU 간에는 초당 112.5GB의 총 대역폭을 제공합니다.
두 개의 RTX 3090 GPU를 NVLink를 사용해 SLI로 연결할 수 있습니다.
(3-Way 및 4-Way SLI 구성은 지원되지 않음에 유의하세요.)</p>`,Ce,ot,wl="따라서 <code>nvidia-smi topo -m</code>의 결과에서 <code>NVX</code>의 값이 높을수록 더 좋습니다. 세대는 GPU 아키텍처에 따라 다를 수 있습니다.",he,Ut,yl="그렇다면, gpt2를 작은 wikitext 샘플로 학습시키는 예제를 통해, NVLink가 훈련에 어떤 영향을 미치는지 살펴보겠습니다.",ce,wt,Cl="결과는 다음과 같습니다:",me,yt,hl='<thead><tr><th>NVlink</th> <th align="right">Time</th></tr></thead> <tbody><tr><td>Y</td> <td align="right">101s</td></tr> <tr><td>N</td> <td align="right">131s</td></tr></tbody>',Te,Ct,cl="NVLink 사용 시 훈련이 약 23% 더 빠르게 완료됨을 확인할 수 있습니다. 두 번째 벤치마크에서는 <code>NCCL_P2P_DISABLE=1</code>을 사용하여 NVLink를 사용하지 않도록 설정했습니다.",ue,ht,ml="전체 벤치마크 코드와 결과는 다음과 같습니다:",ve,ct,de,mt,Tl=`하드웨어: 각각 2개의 TITAN RTX 24GB + 2개의 NVLink (<code>NV2</code> in <code>nvidia-smi topo -m</code>)
소프트웨어: <code>pytorch-1.8-to-be</code> + <code>cuda-11.0</code> / <code>transformers==4.3.0.dev0</code>`,fe,_t,Je;return _=new kt({}),B=new kt({}),V=new kt({}),F=new kt({}),z=new Nt({props:{code:"bnZpZGlhLXNtaSUyMHRvcG8lMjAtbQ==",highlighted:'<span class="hljs-symbol">nvidia</span>-<span class="hljs-keyword">smi</span> topo -m',wrap:!1}}),O=new Nt({props:{code:"JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwR1BVMCUyMCUyMCUyMCUyMEdQVTElMjAlMjAlMjAlMjBDUFUlMjBBZmZpbml0eSUyMCUyMCUyMCUyME5VTUElMjBBZmZpbml0eSUwQUdQVTAlMjAlMjAlMjAlMjAlMjBYJTIwJTIwJTIwJTIwJTIwJTIwTlYyJTIwJTIwJTIwJTIwJTIwMC0yMyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME4lMkZBJTBBR1BVMSUyMCUyMCUyMCUyME5WMiUyMCUyMCUyMCUyMCUyMCUyMFglMjAlMjAlMjAlMjAlMjAlMjAwLTIzJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTiUyRkE=",highlighted:`        <span class="hljs-attribute">GPU0</span>    GPU1    CPU Affinity    NUMA Affinity
<span class="hljs-attribute">GPU0</span>     X      NV2     <span class="hljs-number">0</span>-<span class="hljs-number">23</span>            N/A
<span class="hljs-attribute">GPU1</span>    NV2      X      <span class="hljs-number">0</span>-<span class="hljs-number">23</span>            N/A`,wrap:!1}}),tt=new Nt({props:{code:"JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwR1BVMCUyMCUyMCUyMCUyMEdQVTElMjAlMjAlMjAlMjBDUFUlMjBBZmZpbml0eSUyMCUyMCUyMCUyME5VTUElMjBBZmZpbml0eSUwQUdQVTAlMjAlMjAlMjAlMjAlMjBYJTIwJTIwJTIwJTIwJTIwJTIwUEhCJTIwJTIwJTIwJTIwJTIwMC0xMSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME4lMkZBJTBBR1BVMSUyMCUyMCUyMCUyMFBIQiUyMCUyMCUyMCUyMCUyMCUyMFglMjAlMjAlMjAlMjAlMjAlMjAwLTExJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTiUyRkE=",highlighted:`        <span class="hljs-attribute">GPU0</span>    GPU1    CPU Affinity    NUMA Affinity
<span class="hljs-attribute">GPU0</span>     X      PHB     <span class="hljs-number">0</span>-<span class="hljs-number">11</span>            N/A
<span class="hljs-attribute">GPU1</span>    PHB      X      <span class="hljs-number">0</span>-<span class="hljs-number">11</span>            N/A`,wrap:!1}}),lt=new Nt({props:{code:"JTIwJTIwWCUyMCUyMCUyMCUyMCUzRCUyMFNlbGYlMEElMjAlMjBTWVMlMjAlMjAlM0QlMjBDb25uZWN0aW9uJTIwdHJhdmVyc2luZyUyMFBDSWUlMjBhcyUyMHdlbGwlMjBhcyUyMHRoZSUyMFNNUCUyMGludGVyY29ubmVjdCUyMGJldHdlZW4lMjBOVU1BJTIwbm9kZXMlMjAoZS5nLiUyQyUyMFFQSSUyRlVQSSklMEElMjAlMjBOT0RFJTIwJTNEJTIwQ29ubmVjdGlvbiUyMHRyYXZlcnNpbmclMjBQQ0llJTIwYXMlMjB3ZWxsJTIwYXMlMjB0aGUlMjBpbnRlcmNvbm5lY3QlMjBiZXR3ZWVuJTIwUENJZSUyMEhvc3QlMjBCcmlkZ2VzJTIwd2l0aGluJTIwYSUyME5VTUElMjBub2RlJTBBJTIwJTIwUEhCJTIwJTIwJTNEJTIwQ29ubmVjdGlvbiUyMHRyYXZlcnNpbmclMjBQQ0llJTIwYXMlMjB3ZWxsJTIwYXMlMjBhJTIwUENJZSUyMEhvc3QlMjBCcmlkZ2UlMjAodHlwaWNhbGx5JTIwdGhlJTIwQ1BVKSUwQSUyMCUyMFBYQiUyMCUyMCUzRCUyMENvbm5lY3Rpb24lMjB0cmF2ZXJzaW5nJTIwbXVsdGlwbGUlMjBQQ0llJTIwYnJpZGdlcyUyMCh3aXRob3V0JTIwdHJhdmVyc2luZyUyMHRoZSUyMFBDSWUlMjBIb3N0JTIwQnJpZGdlKSUwQSUyMCUyMFBJWCUyMCUyMCUzRCUyMENvbm5lY3Rpb24lMjB0cmF2ZXJzaW5nJTIwYXQlMjBtb3N0JTIwYSUyMHNpbmdsZSUyMFBDSWUlMjBicmlkZ2UlMEElMjAlMjBOViUyMyUyMCUyMCUzRCUyMENvbm5lY3Rpb24lMjB0cmF2ZXJzaW5nJTIwYSUyMGJvbmRlZCUyMHNldCUyMG9mJTIwJTIzJTIwTlZMaW5rcw==",highlighted:`  X    = Self
  SYS  = Connection traversing PCIe <span class="hljs-keyword">as</span> well <span class="hljs-keyword">as</span> <span class="hljs-keyword">the</span> SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe <span class="hljs-keyword">as</span> well <span class="hljs-keyword">as</span> <span class="hljs-keyword">the</span> interconnect between PCIe Host Bridges <span class="hljs-keyword">within</span> <span class="hljs-keyword">a</span> NUMA node
  PHB  = Connection traversing PCIe <span class="hljs-keyword">as</span> well <span class="hljs-keyword">as</span> <span class="hljs-keyword">a</span> PCIe Host Bridge (typically <span class="hljs-keyword">the</span> CPU)
  PXB  = Connection traversing multiple PCIe bridges (<span class="hljs-keyword">without</span> traversing <span class="hljs-keyword">the</span> PCIe Host Bridge)
  PIX  = Connection traversing <span class="hljs-keyword">at</span> most <span class="hljs-keyword">a</span> single PCIe bridge
  NV<span class="hljs-comment">#  = Connection traversing a bonded set of # NVLinks</span>`,wrap:!1}}),it=new kt({}),ct=new Nt({props:{code:"JTIzJTIwRERQJTIwdyUyRiUyME5WTGluayUwQSUwQXJtJTIwLXIlMjAlMkZ0bXAlMkZ0ZXN0LWNsbSUzQiUyMENVREFfVklTSUJMRV9ERVZJQ0VTJTNEMCUyQzElMjBweXRob24lMjAtbSUyMHRvcmNoLmRpc3RyaWJ1dGVkLmxhdW5jaCUyMCU1QyUwQS0tbnByb2NfcGVyX25vZGUlMjAyJTIwZXhhbXBsZXMlMkZweXRvcmNoJTJGbGFuZ3VhZ2UtbW9kZWxpbmclMkZydW5fY2xtLnB5JTIwLS1tb2RlbF9uYW1lX29yX3BhdGglMjBncHQyJTIwJTVDJTBBLS1kYXRhc2V0X25hbWUlMjB3aWtpdGV4dCUyMC0tZGF0YXNldF9jb25maWdfbmFtZSUyMHdpa2l0ZXh0LTItcmF3LXYxJTIwLS1kb190cmFpbiUyMCU1QyUwQS0tb3V0cHV0X2RpciUyMCUyRnRtcCUyRnRlc3QtY2xtJTIwLS1wZXJfZGV2aWNlX3RyYWluX2JhdGNoX3NpemUlMjA0JTIwLS1tYXhfc3RlcHMlMjAyMDAlMEElMEElN0IndHJhaW5fcnVudGltZSclM0ElMjAxMDEuOTAwMyUyQyUyMCd0cmFpbl9zYW1wbGVzX3Blcl9zZWNvbmQnJTNBJTIwMS45NjMlMkMlMjAnZXBvY2gnJTNBJTIwMC42OSU3RCUwQSUwQSUyMyUyMEREUCUyMHclMkZvJTIwTlZMaW5rJTBBJTBBcm0lMjAtciUyMCUyRnRtcCUyRnRlc3QtY2xtJTNCJTIwQ1VEQV9WSVNJQkxFX0RFVklDRVMlM0QwJTJDMSUyME5DQ0xfUDJQX0RJU0FCTEUlM0QxJTIwcHl0aG9uJTIwLW0lMjB0b3JjaC5kaXN0cmlidXRlZC5sYXVuY2glMjAlNUMlMEEtLW5wcm9jX3Blcl9ub2RlJTIwMiUyMGV4YW1wbGVzJTJGcHl0b3JjaCUyRmxhbmd1YWdlLW1vZGVsaW5nJTJGcnVuX2NsbS5weSUyMC0tbW9kZWxfbmFtZV9vcl9wYXRoJTIwZ3B0MiUyMCU1QyUwQS0tZGF0YXNldF9uYW1lJTIwd2lraXRleHQlMjAtLWRhdGFzZXRfY29uZmlnX25hbWUlMjB3aWtpdGV4dC0yLXJhdy12MSUyMC0tZG9fdHJhaW4lMEEtLW91dHB1dF9kaXIlMjAlMkZ0bXAlMkZ0ZXN0LWNsbSUyMC0tcGVyX2RldmljZV90cmFpbl9iYXRjaF9zaXplJTIwNCUyMC0tbWF4X3N0ZXBzJTIwMjAwJTBBJTBBJTdCJ3RyYWluX3J1bnRpbWUnJTNBJTIwMTMxLjQzNjclMkMlMjAndHJhaW5fc2FtcGxlc19wZXJfc2Vjb25kJyUzQSUyMDEuNTIyJTJDJTIwJ2Vwb2NoJyUzQSUyMDAuNjklN0Q=",highlighted:`<span class="hljs-comment"># DDP w/ NVLink</span>

<span class="hljs-built_in">rm</span> -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 python -m torch.distributed.launch \\
--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2 \\
--dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train \\
--output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200

{<span class="hljs-string">&#x27;train_runtime&#x27;</span>: 101.9003, <span class="hljs-string">&#x27;train_samples_per_second&#x27;</span>: 1.963, <span class="hljs-string">&#x27;epoch&#x27;</span>: 0.69}

<span class="hljs-comment"># DDP w/o NVLink</span>

<span class="hljs-built_in">rm</span> -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 NCCL_P2P_DISABLE=1 python -m torch.distributed.launch \\
--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path gpt2 \\
--dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train
--output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200

{<span class="hljs-string">&#x27;train_runtime&#x27;</span>: 131.4367, <span class="hljs-string">&#x27;train_samples_per_second&#x27;</span>: 1.522, <span class="hljs-string">&#x27;epoch&#x27;</span>: 0.69}`,wrap:!1}}),{c(){T=s("meta"),Bt=i(),Jt=s("p"),At=i(),u=s("h1"),I=s("a"),It=s("span"),w(_.$$.fragment),_e=i(),Tt=s("span"),Tt.textContent=Ve,Gt=i(),k=s("p"),k.innerHTML=Ee,Vt=i(),N=s("p"),N.textContent=Se,Et=i(),v=s("h2"),j=s("a"),jt=s("span"),w(B.$$.fragment),ke=i(),ut=s("span"),ut.textContent=$e,St=Gl(`


더 큰 모델을 훈련시킬 때는 기본적으로 세 가지 옵션이 있습니다:
`),A=s("ul"),A.innerHTML=Le,$t=i(),G=s("p"),G.textContent=Ze,Lt=i(),d=s("h3"),x=s("a"),xt=s("span"),w(V.$$.fragment),Ne=i(),vt=s("span"),vt.textContent=Xe,Zt=i(),E=s("p"),E.textContent=Re,Xt=i(),S=s("p"),S.innerHTML=He,Rt=i(),$=s("p"),$.textContent=Qe,Ht=i(),L=s("p"),L.textContent=We,Qt=i(),Z=s("p"),Z.textContent=ge,Wt=i(),X=s("p"),X.textContent=Ye,gt=i(),R=s("p"),R.textContent=Fe,Yt=i(),H=s("p"),H.textContent=De,Ft=i(),Q=s("p"),Q.innerHTML=ze,Dt=i(),W=s("p"),W.textContent=qe,zt=i(),g=s("p"),g.textContent=Oe,qt=i(),Y=s("p"),Y.textContent=Ke,Ot=i(),f=s("h3"),P=s("a"),Pt=s("span"),w(F.$$.fragment),Be=i(),dt=s("span"),dt.textContent=tl,Kt=i(),D=s("p"),D.textContent=el,te=i(),w(z.$$.fragment),ee=i(),q=s("p"),q.textContent=ll,le=i(),w(O.$$.fragment),ne=i(),K=s("p"),K.textContent=nl,se=i(),w(tt.$$.fragment),ae=i(),et=s("p"),et.textContent=sl,ie=i(),w(lt.$$.fragment),pe=i(),nt=s("p"),nt.innerHTML=al,Me=i(),st=s("p"),st.textContent=il,re=i(),at=s("p"),at.textContent=pl,oe=i(),J=s("h4"),b=s("a"),bt=s("span"),w(it.$$.fragment),Ae=i(),ft=s("span"),ft.textContent=Ml,Ue=i(),pt=s("p"),pt.innerHTML=rl,we=i(),Mt=s("p"),Mt.innerHTML=ol,ye=i(),rt=s("blockquote"),rt.innerHTML=Ul,Ce=i(),ot=s("p"),ot.innerHTML=wl,he=i(),Ut=s("p"),Ut.textContent=yl,ce=i(),wt=s("p"),wt.textContent=Cl,me=i(),yt=s("table"),yt.innerHTML=hl,Te=i(),Ct=s("p"),Ct.innerHTML=cl,ue=i(),ht=s("p"),ht.textContent=ml,ve=i(),w(ct.$$.fragment),de=i(),mt=s("p"),mt.innerHTML=Tl,fe=i(),_t=s("p"),this.h()},l(t){const l=Vl("svelte-1phssyn",document.head);T=a(l,"META",{name:!0,content:!0}),l.forEach(e),Bt=p(t),Jt=a(t,"P",{}),U(Jt).forEach(e),At=p(t),u=a(t,"H1",{class:!0});var Ie=U(u);I=a(Ie,"A",{id:!0,class:!0,href:!0});var ul=U(I);It=a(ul,"SPAN",{});var vl=U(It);y(_.$$.fragment,vl),vl.forEach(e),ul.forEach(e),_e=p(Ie),Tt=a(Ie,"SPAN",{"data-svelte-h":!0}),M(Tt)!=="svelte-9jinj0"&&(Tt.textContent=Ve),Ie.forEach(e),Gt=p(t),k=a(t,"P",{"data-svelte-h":!0}),M(k)!=="svelte-17y49u0"&&(k.innerHTML=Ee),Vt=p(t),N=a(t,"P",{"data-svelte-h":!0}),M(N)!=="svelte-1lotr1s"&&(N.textContent=Se),Et=p(t),v=a(t,"H2",{class:!0});var je=U(v);j=a(je,"A",{id:!0,class:!0,href:!0});var dl=U(j);jt=a(dl,"SPAN",{});var fl=U(jt);y(B.$$.fragment,fl),fl.forEach(e),dl.forEach(e),ke=p(je),ut=a(je,"SPAN",{"data-svelte-h":!0}),M(ut)!=="svelte-1uraicv"&&(ut.textContent=$e),je.forEach(e),St=El(t,`


더 큰 모델을 훈련시킬 때는 기본적으로 세 가지 옵션이 있습니다:
`),A=a(t,"UL",{"data-svelte-h":!0}),M(A)!=="svelte-1vpar0j"&&(A.innerHTML=Le),$t=p(t),G=a(t,"P",{"data-svelte-h":!0}),M(G)!=="svelte-r8sih8"&&(G.textContent=Ze),Lt=p(t),d=a(t,"H3",{class:!0});var xe=U(d);x=a(xe,"A",{id:!0,class:!0,href:!0});var Jl=U(x);xt=a(Jl,"SPAN",{});var Il=U(xt);y(V.$$.fragment,Il),Il.forEach(e),Jl.forEach(e),Ne=p(xe),vt=a(xe,"SPAN",{"data-svelte-h":!0}),M(vt)!=="svelte-q6sfc9"&&(vt.textContent=Xe),xe.forEach(e),Zt=p(t),E=a(t,"P",{"data-svelte-h":!0}),M(E)!=="svelte-iop98o"&&(E.textContent=Re),Xt=p(t),S=a(t,"P",{"data-svelte-h":!0}),M(S)!=="svelte-41c8ap"&&(S.innerHTML=He),Rt=p(t),$=a(t,"P",{"data-svelte-h":!0}),M($)!=="svelte-1c5epq9"&&($.textContent=Qe),Ht=p(t),L=a(t,"P",{"data-svelte-h":!0}),M(L)!=="svelte-1qgi927"&&(L.textContent=We),Qt=p(t),Z=a(t,"P",{"data-svelte-h":!0}),M(Z)!=="svelte-18mm2rg"&&(Z.textContent=ge),Wt=p(t),X=a(t,"P",{"data-svelte-h":!0}),M(X)!=="svelte-1xfkrva"&&(X.textContent=Ye),gt=p(t),R=a(t,"P",{"data-svelte-h":!0}),M(R)!=="svelte-z6l5a3"&&(R.textContent=Fe),Yt=p(t),H=a(t,"P",{"data-svelte-h":!0}),M(H)!=="svelte-1nn1xen"&&(H.textContent=De),Ft=p(t),Q=a(t,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-1k2ygyt"&&(Q.innerHTML=ze),Dt=p(t),W=a(t,"P",{"data-svelte-h":!0}),M(W)!=="svelte-1wbvsjh"&&(W.textContent=qe),zt=p(t),g=a(t,"P",{"data-svelte-h":!0}),M(g)!=="svelte-3d08mu"&&(g.textContent=Oe),qt=p(t),Y=a(t,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-177u5qa"&&(Y.textContent=Ke),Ot=p(t),f=a(t,"H3",{class:!0});var Pe=U(f);P=a(Pe,"A",{id:!0,class:!0,href:!0});var jl=U(P);Pt=a(jl,"SPAN",{});var xl=U(Pt);y(F.$$.fragment,xl),xl.forEach(e),jl.forEach(e),Be=p(Pe),dt=a(Pe,"SPAN",{"data-svelte-h":!0}),M(dt)!=="svelte-19v9inm"&&(dt.textContent=tl),Pe.forEach(e),Kt=p(t),D=a(t,"P",{"data-svelte-h":!0}),M(D)!=="svelte-kpnkx9"&&(D.textContent=el),te=p(t),y(z.$$.fragment,t),ee=p(t),q=a(t,"P",{"data-svelte-h":!0}),M(q)!=="svelte-1glc7b"&&(q.textContent=ll),le=p(t),y(O.$$.fragment,t),ne=p(t),K=a(t,"P",{"data-svelte-h":!0}),M(K)!=="svelte-1t90u6b"&&(K.textContent=nl),se=p(t),y(tt.$$.fragment,t),ae=p(t),et=a(t,"P",{"data-svelte-h":!0}),M(et)!=="svelte-f3zl6s"&&(et.textContent=sl),ie=p(t),y(lt.$$.fragment,t),pe=p(t),nt=a(t,"P",{"data-svelte-h":!0}),M(nt)!=="svelte-1kj8h9y"&&(nt.innerHTML=al),Me=p(t),st=a(t,"P",{"data-svelte-h":!0}),M(st)!=="svelte-1lemivv"&&(st.textContent=il),re=p(t),at=a(t,"P",{"data-svelte-h":!0}),M(at)!=="svelte-1vhu8c6"&&(at.textContent=pl),oe=p(t),J=a(t,"H4",{class:!0});var be=U(J);b=a(be,"A",{id:!0,class:!0,href:!0});var Pl=U(b);bt=a(Pl,"SPAN",{});var bl=U(bt);y(it.$$.fragment,bl),bl.forEach(e),Pl.forEach(e),Ae=p(be),ft=a(be,"SPAN",{"data-svelte-h":!0}),M(ft)!=="svelte-6ecjr"&&(ft.textContent=Ml),be.forEach(e),Ue=p(t),pt=a(t,"P",{"data-svelte-h":!0}),M(pt)!=="svelte-1mz66a4"&&(pt.innerHTML=rl),we=p(t),Mt=a(t,"P",{"data-svelte-h":!0}),M(Mt)!=="svelte-bxqzrl"&&(Mt.innerHTML=ol),ye=p(t),rt=a(t,"BLOCKQUOTE",{"data-svelte-h":!0}),M(rt)!=="svelte-15cj62d"&&(rt.innerHTML=Ul),Ce=p(t),ot=a(t,"P",{"data-svelte-h":!0}),M(ot)!=="svelte-17xvce"&&(ot.innerHTML=wl),he=p(t),Ut=a(t,"P",{"data-svelte-h":!0}),M(Ut)!=="svelte-2waai2"&&(Ut.textContent=yl),ce=p(t),wt=a(t,"P",{"data-svelte-h":!0}),M(wt)!=="svelte-1agqenc"&&(wt.textContent=Cl),me=p(t),yt=a(t,"TABLE",{"data-svelte-h":!0}),M(yt)!=="svelte-1hvmx1i"&&(yt.innerHTML=hl),Te=p(t),Ct=a(t,"P",{"data-svelte-h":!0}),M(Ct)!=="svelte-1sq2tb4"&&(Ct.innerHTML=cl),ue=p(t),ht=a(t,"P",{"data-svelte-h":!0}),M(ht)!=="svelte-1282ofc"&&(ht.textContent=ml),ve=p(t),y(ct.$$.fragment,t),de=p(t),mt=a(t,"P",{"data-svelte-h":!0}),M(mt)!=="svelte-w7ygsp"&&(mt.innerHTML=Tl),fe=p(t),_t=a(t,"P",{}),U(_t).forEach(e),this.h()},h(){r(T,"name","hf:doc:metadata"),r(T,"content",JSON.stringify($l)),r(I,"id","custom-hardware-for-training"),r(I,"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"),r(I,"href","#custom-hardware-for-training"),r(u,"class","relative group"),r(j,"id","gpu"),r(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"),r(j,"href","#gpu"),r(v,"class","relative group"),r(x,"id","power-and-cooling"),r(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"),r(x,"href","#power-and-cooling"),r(d,"class","relative group"),r(P,"id","multigpu-connectivity"),r(P,"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"),r(P,"href","#multigpu-connectivity"),r(f,"class","relative group"),r(b,"id","nvlink"),r(b,"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"),r(b,"href","#nvlink"),r(J,"class","relative group")},m(t,l){o(document.head,T),n(t,Bt,l),n(t,Jt,l),n(t,At,l),n(t,u,l),o(u,I),o(I,It),C(_,It,null),o(u,_e),o(u,Tt),n(t,Gt,l),n(t,k,l),n(t,Vt,l),n(t,N,l),n(t,Et,l),n(t,v,l),o(v,j),o(j,jt),C(B,jt,null),o(v,ke),o(v,ut),n(t,St,l),n(t,A,l),n(t,$t,l),n(t,G,l),n(t,Lt,l),n(t,d,l),o(d,x),o(x,xt),C(V,xt,null),o(d,Ne),o(d,vt),n(t,Zt,l),n(t,E,l),n(t,Xt,l),n(t,S,l),n(t,Rt,l),n(t,$,l),n(t,Ht,l),n(t,L,l),n(t,Qt,l),n(t,Z,l),n(t,Wt,l),n(t,X,l),n(t,gt,l),n(t,R,l),n(t,Yt,l),n(t,H,l),n(t,Ft,l),n(t,Q,l),n(t,Dt,l),n(t,W,l),n(t,zt,l),n(t,g,l),n(t,qt,l),n(t,Y,l),n(t,Ot,l),n(t,f,l),o(f,P),o(P,Pt),C(F,Pt,null),o(f,Be),o(f,dt),n(t,Kt,l),n(t,D,l),n(t,te,l),C(z,t,l),n(t,ee,l),n(t,q,l),n(t,le,l),C(O,t,l),n(t,ne,l),n(t,K,l),n(t,se,l),C(tt,t,l),n(t,ae,l),n(t,et,l),n(t,ie,l),C(lt,t,l),n(t,pe,l),n(t,nt,l),n(t,Me,l),n(t,st,l),n(t,re,l),n(t,at,l),n(t,oe,l),n(t,J,l),o(J,b),o(b,bt),C(it,bt,null),o(J,Ae),o(J,ft),n(t,Ue,l),n(t,pt,l),n(t,we,l),n(t,Mt,l),n(t,ye,l),n(t,rt,l),n(t,Ce,l),n(t,ot,l),n(t,he,l),n(t,Ut,l),n(t,ce,l),n(t,wt,l),n(t,me,l),n(t,yt,l),n(t,Te,l),n(t,Ct,l),n(t,ue,l),n(t,ht,l),n(t,ve,l),C(ct,t,l),n(t,de,l),n(t,mt,l),n(t,fe,l),n(t,_t,l),Je=!0},p:kl,i(t){Je||(h(_.$$.fragment,t),h(B.$$.fragment,t),h(V.$$.fragment,t),h(F.$$.fragment,t),h(z.$$.fragment,t),h(O.$$.fragment,t),h(tt.$$.fragment,t),h(lt.$$.fragment,t),h(it.$$.fragment,t),h(ct.$$.fragment,t),Je=!0)},o(t){c(_.$$.fragment,t),c(B.$$.fragment,t),c(V.$$.fragment,t),c(F.$$.fragment,t),c(z.$$.fragment,t),c(O.$$.fragment,t),c(tt.$$.fragment,t),c(lt.$$.fragment,t),c(it.$$.fragment,t),c(ct.$$.fragment,t),Je=!1},d(t){t&&(e(Bt),e(Jt),e(At),e(u),e(Gt),e(k),e(Vt),e(N),e(Et),e(v),e(St),e(A),e($t),e(G),e(Lt),e(d),e(Zt),e(E),e(Xt),e(S),e(Rt),e($),e(Ht),e(L),e(Qt),e(Z),e(Wt),e(X),e(gt),e(R),e(Yt),e(H),e(Ft),e(Q),e(Dt),e(W),e(zt),e(g),e(qt),e(Y),e(Ot),e(f),e(Kt),e(D),e(te),e(ee),e(q),e(le),e(ne),e(K),e(se),e(ae),e(et),e(ie),e(pe),e(nt),e(Me),e(st),e(re),e(at),e(oe),e(J),e(Ue),e(pt),e(we),e(Mt),e(ye),e(rt),e(Ce),e(ot),e(he),e(Ut),e(ce),e(wt),e(me),e(yt),e(Te),e(Ct),e(ue),e(ht),e(ve),e(de),e(mt),e(fe),e(_t)),e(T),m(_),m(B),m(V),m(F),m(z,t),m(O,t),m(tt,t),m(lt,t),m(it),m(ct,t)}}}const $l={local:"custom-hardware-for-training",sections:[{local:"gpu",sections:[{local:"power-and-cooling",title:"전원 공급과 냉각 "},{local:"multigpu-connectivity",sections:[{local:"nvlink",title:"NVLink "}],title:"다중 GPU 연결 방식 "}],title:"GPU "}],title:"훈련용 사용자 맞춤형 하드웨어 "};function Ll(Ge){return Nl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ql extends Bl{constructor(T){super(),Al(this,T,Ll,Sl,_l,{})}}export{Ql as component};
