import{s as Se,n as Xe,o as Re}from"../chunks/scheduler.56730f09.js";import{S as He,i as We,g as M,s,r as U,A as Qe,h as p,f as l,c as i,j as $e,u as y,x as a,k as Le,y as Ye,a as n,v as C,d as w,t as m,w as T}from"../chunks/index.1f144517.js";import{C as at}from"../chunks/CodeBlock.738eeccb.js";import{H as Ut}from"../chunks/Heading.57d46534.js";function Fe(ne){let J,yt,Mt,Ct,I,wt,j,se='모델 훈련과 추론에 사용하는 하드웨어는 성능에 큰 영향을 미칠 수 있습니다. GPU에 대해 자세히 알아보려면, Tim Dettmer의 훌륭한 블로그 포스트를 확인해보세요. <a href="https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/" rel="nofollow">블로그 포스트 링크</a> (영어로 작성됨).',mt,f,ie="GPU 설정에 대한 실용적인 조언을 살펴보겠습니다.",Tt,u,Jt,d,Me="더 큰 모델을 훈련시킬 때는 기본적으로 세 가지 옵션이 있습니다:",It,c,pe='<li>더 큰 GPU</li> <li>더 많은 GPU</li> <li>더 많은 CPU 및 NVMe (<a href="../en/main_classes/deepspeed#nvme-support">DeepSpeed-Infinity</a>를 통한 오프로드(offload))</li>',jt,o,ae="우선, 하나의 GPU만 사용하는 경우부터 시작해봅시다.",ft,r,ut,x,Ue="비싼 고성능 GPU를 구매한 경우, 올바른 전원 공급과 충분한 냉각을 제공해야 합니다.",dt,P,ye="<strong>전원 공급</strong>:",ct,v,Ce="일부 고성능 소비자용 GPU는 2개 혹은 가끔가다 3개의 PCI-E 8핀 전원 소켓이 있습니다. 카드에 있는 소켓 수만큼 독립적인 12V PCI-E 8핀 케이블이 연결되어 있는지 확인하세요. 같은 케이블의 한쪽 끝에 있는 2개의 스플릿(또는 피그테일(pigtail) 케이블)을 사용하지 마세요. 즉, GPU에 2개의 소켓이 있다면, PSU(전원 공급 장치)에서 카드로 연결되는 2개의 PCI-E 8핀 케이블이 필요하며, 끝에 2개의 PCI-E 8핀 커넥터가 있는 케이블이 필요하지 않습니다! 그렇지 않으면 카드의 전체 성능을 제대로 발휘하지 못할 수 있습니다.",ot,b,we="각각의 PCI-E 8핀 전원 케이블은 PSU 쪽의 12V 레일에 연결되어야 하며 최대 150W의 전력을 공급할 수 있습니다.",rt,B,me="일부 다른 GPU는 PCI-E 12핀 커넥터를 사용하며, 이러한 커넥터는 최대 500W-600W의 전력을 공급할 수 있습니다.",xt,h,Te="저가형 GPU는 6핀 커넥터를 사용하며, 최대 75W의 전력을 공급합니다.",Pt,G,Je="또한 GPU가 안정적인 전압을 받을 수 있도록 고급 PSU를 선택해야 합니다. 일부 저품질의 PSU는 GPU가 최고 성능으로 동작하기 위해 필요한 전압을 안정적으로 공급하지 못할 수 있습니다.",vt,_,Ie="물론, PSU는 GPU에 전원을 공급하기에 충분한 여분의 전력 용량을 가져야 합니다.",bt,N,je="<strong>냉각</strong>:",Bt,k,fe="GPU가 과열되면 성능이 저하되고 최대 성능을 발휘하지 못할 수 있으며, 너무 뜨거워지면 중지될 수 있습니다.",ht,V,ue="GPU가 과열될 때 정확한 적정 온도를 알기 어려우나, 아마도 +80℃ 미만이면 좋지만 더 낮을수록 좋습니다. 70℃-75℃ 정도가 훌륭한 온도 범위입니다. 성능 저하가 발생하기 시작하는 온도는 대략 84℃-90℃ 정도일 것입니다. 하지만 성능 저하 이외에도 지속적으로 매우 높은 온도는 GPU 수명을 단축시킬 수 있습니다.",Gt,A,de="이어서, 여러 개의 GPU를 사용할 때 가장 중요한 측면 중 하나인 GPU 간 연결 방식을 살펴보겠습니다.",_t,E,Nt,Z,ce="다중 GPU를 사용하는 경우 GPU 간의 연결 방식은 전체 훈련 시간에 큰 영향을 미칠 수 있습니다. 만약 GPU가 동일한 물리적 노드에 있을 경우, 다음과 같이 확인할 수 있습니다:",kt,$,Vt,L,oe="만약 NVLink로 연결된 듀얼 GPU 환경이라면, 다음과 같은 결과를 확인할 수 있습니다:",At,S,Et,X,re="NVLink를 지원하지 않는 다른 환경의 경우에는 다음과 같은 결과를 확인할 수 있습니다:",Zt,R,$t,H,xe="이 결과에는 다음과 같은 범례가 포함되어 있습니다:",Lt,W,St,Q,Pe="따라서 첫 번째 결과의 <code>NV2</code>는 GPU가 2개의 NVLink로 연결되어 있다는 것을 나타내고, 두 번째 결과의 <code>PHB</code>는 일반적인 소비자용 PCIe+브릿지 설정을 가지고 있다는 것을 나타냅니다.",Xt,Y,ve="설정에서 어떤 유형의 연결 방식을 가지고 있는지 확인하세요. 일부 연결 방식은 GPU 간 통신을 더 빠르게 만들 수 있으며(NVLink와 같이), 어떤 연결 방식은 더 느리게 만들 수 있습니다(PHB와 같이).",Rt,F,be="사용하는 확장성 솔루션의 종류에 따라 연결 속도가 주요한 영향을 미칠 수도 있고 미미한 영향을 미칠 수도 있습니다. DDP와 같이 GPU가 거의 동기화하지 않아도 되는 경우, 연결 속도가 느려도 큰 영향을 받지 않습니다. 반면 ZeRO-DP와 같이 GPU간 통신이 많이 필요한 경우, 더 빠른 훈련을 위해서는 더 빠른 연결 속도가 중요합니다.",Ht,g,Wt,z,Be='<a href="https://en.wikipedia.org/wiki/NVLink" rel="nofollow">NVLink</a>는 Nvidia에서 개발한 유선 기반의 직렬 다중 레인 근거리 통신 링크입니다.',Qt,D,he='새로운 세대의 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>에서 아래와 같은 정보를 확인하실 수 있습니다:',Yt,O,Ge=`<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>`,Ft,q,_e="따라서 <code>nvidia-smi topo -m</code>의 결과에서 <code>NVX</code>의 값이 높을수록 더 좋습니다. 세대는 GPU 아키텍처에 따라 다를 수 있습니다.",gt,K,Ne="그렇다면, openai-community/gpt2를 작은 wikitext 샘플로 학습시키는 예제를 통해, NVLink가 훈련에 어떤 영향을 미치는지 살펴보겠습니다.",zt,tt,ke="결과는 다음과 같습니다:",Dt,et,Ve='<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>',Ot,lt,Ae="NVLink 사용 시 훈련이 약 23% 더 빠르게 완료됨을 확인할 수 있습니다. 두 번째 벤치마크에서는 <code>NCCL_P2P_DISABLE=1</code>을 사용하여 NVLink를 사용하지 않도록 설정했습니다.",qt,nt,Ee="전체 벤치마크 코드와 결과는 다음과 같습니다:",Kt,st,te,it,Ze=`하드웨어: 각각 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>`,ee,pt,le;return I=new Ut({props:{title:"훈련용 사용자 맞춤형 하드웨어",local:"custom-hardware-for-training",headingTag:"h1"}}),u=new Ut({props:{title:"GPU",local:"gpu",headingTag:"h2"}}),r=new Ut({props:{title:"전원 공급과 냉각",local:"power-and-cooling",headingTag:"h3"}}),E=new Ut({props:{title:"다중 GPU 연결 방식",local:"multigpu-connectivity",headingTag:"h3"}}),$=new at({props:{code:"bnZpZGlhLXNtaSUyMHRvcG8lMjAtbQ==",highlighted:"nvidia-smi topo -m",wrap:!1}}),S=new at({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}}),R=new at({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}}),W=new at({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}}),g=new Ut({props:{title:"NVLink",local:"nvlink",headingTag:"h4"}}),st=new at({props:{code:"JTIzJTIwRERQJTIwdyUyRiUyME5WTGluayUwQSUwQXJtJTIwLXIlMjAlMkZ0bXAlMkZ0ZXN0LWNsbSUzQiUyMENVREFfVklTSUJMRV9ERVZJQ0VTJTNEMCUyQzElMjB0b3JjaHJ1biUyMCU1QyUwQS0tbnByb2NfcGVyX25vZGUlMjAyJTIwZXhhbXBsZXMlMkZweXRvcmNoJTJGbGFuZ3VhZ2UtbW9kZWxpbmclMkZydW5fY2xtLnB5JTIwLS1tb2RlbF9uYW1lX29yX3BhdGglMjBvcGVuYWktY29tbXVuaXR5JTJGZ3B0MiUyMCU1QyUwQS0tZGF0YXNldF9uYW1lJTIwd2lraXRleHQlMjAtLWRhdGFzZXRfY29uZmlnX25hbWUlMjB3aWtpdGV4dC0yLXJhdy12MSUyMC0tZG9fdHJhaW4lMjAlNUMlMEEtLW91dHB1dF9kaXIlMjAlMkZ0bXAlMkZ0ZXN0LWNsbSUyMC0tcGVyX2RldmljZV90cmFpbl9iYXRjaF9zaXplJTIwNCUyMC0tbWF4X3N0ZXBzJTIwMjAwJTBBJTBBJTdCJ3RyYWluX3J1bnRpbWUnJTNBJTIwMTAxLjkwMDMlMkMlMjAndHJhaW5fc2FtcGxlc19wZXJfc2Vjb25kJyUzQSUyMDEuOTYzJTJDJTIwJ2Vwb2NoJyUzQSUyMDAuNjklN0QlMEElMEElMjMlMjBERFAlMjB3JTJGbyUyME5WTGluayUwQSUwQXJtJTIwLXIlMjAlMkZ0bXAlMkZ0ZXN0LWNsbSUzQiUyMENVREFfVklTSUJMRV9ERVZJQ0VTJTNEMCUyQzElMjBOQ0NMX1AyUF9ESVNBQkxFJTNEMSUyMHRvcmNocnVuJTIwJTVDJTBBLS1ucHJvY19wZXJfbm9kZSUyMDIlMjBleGFtcGxlcyUyRnB5dG9yY2glMkZsYW5ndWFnZS1tb2RlbGluZyUyRnJ1bl9jbG0ucHklMjAtLW1vZGVsX25hbWVfb3JfcGF0aCUyMG9wZW5haS1jb21tdW5pdHklMkZncHQyJTIwJTVDJTBBLS1kYXRhc2V0X25hbWUlMjB3aWtpdGV4dCUyMC0tZGF0YXNldF9jb25maWdfbmFtZSUyMHdpa2l0ZXh0LTItcmF3LXYxJTIwLS1kb190cmFpbiUwQS0tb3V0cHV0X2RpciUyMCUyRnRtcCUyRnRlc3QtY2xtJTIwLS1wZXJfZGV2aWNlX3RyYWluX2JhdGNoX3NpemUlMjA0JTIwLS1tYXhfc3RlcHMlMjAyMDAlMEElMEElN0IndHJhaW5fcnVudGltZSclM0ElMjAxMzEuNDM2NyUyQyUyMCd0cmFpbl9zYW1wbGVzX3Blcl9zZWNvbmQnJTNBJTIwMS41MjIlMkMlMjAnZXBvY2gnJTNBJTIwMC42OSU3RA==",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 torchrun \\
--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path openai-community/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 torchrun \\
--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path openai-community/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(){J=M("meta"),yt=s(),Mt=M("p"),Ct=s(),U(I.$$.fragment),wt=s(),j=M("p"),j.innerHTML=se,mt=s(),f=M("p"),f.textContent=ie,Tt=s(),U(u.$$.fragment),Jt=s(),d=M("p"),d.textContent=Me,It=s(),c=M("ul"),c.innerHTML=pe,jt=s(),o=M("p"),o.textContent=ae,ft=s(),U(r.$$.fragment),ut=s(),x=M("p"),x.textContent=Ue,dt=s(),P=M("p"),P.innerHTML=ye,ct=s(),v=M("p"),v.textContent=Ce,ot=s(),b=M("p"),b.textContent=we,rt=s(),B=M("p"),B.textContent=me,xt=s(),h=M("p"),h.textContent=Te,Pt=s(),G=M("p"),G.textContent=Je,vt=s(),_=M("p"),_.textContent=Ie,bt=s(),N=M("p"),N.innerHTML=je,Bt=s(),k=M("p"),k.textContent=fe,ht=s(),V=M("p"),V.textContent=ue,Gt=s(),A=M("p"),A.textContent=de,_t=s(),U(E.$$.fragment),Nt=s(),Z=M("p"),Z.textContent=ce,kt=s(),U($.$$.fragment),Vt=s(),L=M("p"),L.textContent=oe,At=s(),U(S.$$.fragment),Et=s(),X=M("p"),X.textContent=re,Zt=s(),U(R.$$.fragment),$t=s(),H=M("p"),H.textContent=xe,Lt=s(),U(W.$$.fragment),St=s(),Q=M("p"),Q.innerHTML=Pe,Xt=s(),Y=M("p"),Y.textContent=ve,Rt=s(),F=M("p"),F.textContent=be,Ht=s(),U(g.$$.fragment),Wt=s(),z=M("p"),z.innerHTML=Be,Qt=s(),D=M("p"),D.innerHTML=he,Yt=s(),O=M("blockquote"),O.innerHTML=Ge,Ft=s(),q=M("p"),q.innerHTML=_e,gt=s(),K=M("p"),K.textContent=Ne,zt=s(),tt=M("p"),tt.textContent=ke,Dt=s(),et=M("table"),et.innerHTML=Ve,Ot=s(),lt=M("p"),lt.innerHTML=Ae,qt=s(),nt=M("p"),nt.textContent=Ee,Kt=s(),U(st.$$.fragment),te=s(),it=M("p"),it.innerHTML=Ze,ee=s(),pt=M("p"),this.h()},l(t){const e=Qe("svelte-u9bgzb",document.head);J=p(e,"META",{name:!0,content:!0}),e.forEach(l),yt=i(t),Mt=p(t,"P",{}),$e(Mt).forEach(l),Ct=i(t),y(I.$$.fragment,t),wt=i(t),j=p(t,"P",{"data-svelte-h":!0}),a(j)!=="svelte-17y49u0"&&(j.innerHTML=se),mt=i(t),f=p(t,"P",{"data-svelte-h":!0}),a(f)!=="svelte-1lotr1s"&&(f.textContent=ie),Tt=i(t),y(u.$$.fragment,t),Jt=i(t),d=p(t,"P",{"data-svelte-h":!0}),a(d)!=="svelte-1yrsfi3"&&(d.textContent=Me),It=i(t),c=p(t,"UL",{"data-svelte-h":!0}),a(c)!=="svelte-1vpar0j"&&(c.innerHTML=pe),jt=i(t),o=p(t,"P",{"data-svelte-h":!0}),a(o)!=="svelte-r8sih8"&&(o.textContent=ae),ft=i(t),y(r.$$.fragment,t),ut=i(t),x=p(t,"P",{"data-svelte-h":!0}),a(x)!=="svelte-iop98o"&&(x.textContent=Ue),dt=i(t),P=p(t,"P",{"data-svelte-h":!0}),a(P)!=="svelte-41c8ap"&&(P.innerHTML=ye),ct=i(t),v=p(t,"P",{"data-svelte-h":!0}),a(v)!=="svelte-1c5epq9"&&(v.textContent=Ce),ot=i(t),b=p(t,"P",{"data-svelte-h":!0}),a(b)!=="svelte-1qgi927"&&(b.textContent=we),rt=i(t),B=p(t,"P",{"data-svelte-h":!0}),a(B)!=="svelte-18mm2rg"&&(B.textContent=me),xt=i(t),h=p(t,"P",{"data-svelte-h":!0}),a(h)!=="svelte-1xfkrva"&&(h.textContent=Te),Pt=i(t),G=p(t,"P",{"data-svelte-h":!0}),a(G)!=="svelte-z6l5a3"&&(G.textContent=Je),vt=i(t),_=p(t,"P",{"data-svelte-h":!0}),a(_)!=="svelte-1nn1xen"&&(_.textContent=Ie),bt=i(t),N=p(t,"P",{"data-svelte-h":!0}),a(N)!=="svelte-1k2ygyt"&&(N.innerHTML=je),Bt=i(t),k=p(t,"P",{"data-svelte-h":!0}),a(k)!=="svelte-1wbvsjh"&&(k.textContent=fe),ht=i(t),V=p(t,"P",{"data-svelte-h":!0}),a(V)!=="svelte-3d08mu"&&(V.textContent=ue),Gt=i(t),A=p(t,"P",{"data-svelte-h":!0}),a(A)!=="svelte-177u5qa"&&(A.textContent=de),_t=i(t),y(E.$$.fragment,t),Nt=i(t),Z=p(t,"P",{"data-svelte-h":!0}),a(Z)!=="svelte-kpnkx9"&&(Z.textContent=ce),kt=i(t),y($.$$.fragment,t),Vt=i(t),L=p(t,"P",{"data-svelte-h":!0}),a(L)!=="svelte-1glc7b"&&(L.textContent=oe),At=i(t),y(S.$$.fragment,t),Et=i(t),X=p(t,"P",{"data-svelte-h":!0}),a(X)!=="svelte-1t90u6b"&&(X.textContent=re),Zt=i(t),y(R.$$.fragment,t),$t=i(t),H=p(t,"P",{"data-svelte-h":!0}),a(H)!=="svelte-f3zl6s"&&(H.textContent=xe),Lt=i(t),y(W.$$.fragment,t),St=i(t),Q=p(t,"P",{"data-svelte-h":!0}),a(Q)!=="svelte-1kj8h9y"&&(Q.innerHTML=Pe),Xt=i(t),Y=p(t,"P",{"data-svelte-h":!0}),a(Y)!=="svelte-1lemivv"&&(Y.textContent=ve),Rt=i(t),F=p(t,"P",{"data-svelte-h":!0}),a(F)!=="svelte-1vhu8c6"&&(F.textContent=be),Ht=i(t),y(g.$$.fragment,t),Wt=i(t),z=p(t,"P",{"data-svelte-h":!0}),a(z)!=="svelte-1mz66a4"&&(z.innerHTML=Be),Qt=i(t),D=p(t,"P",{"data-svelte-h":!0}),a(D)!=="svelte-bxqzrl"&&(D.innerHTML=he),Yt=i(t),O=p(t,"BLOCKQUOTE",{"data-svelte-h":!0}),a(O)!=="svelte-15cj62d"&&(O.innerHTML=Ge),Ft=i(t),q=p(t,"P",{"data-svelte-h":!0}),a(q)!=="svelte-17xvce"&&(q.innerHTML=_e),gt=i(t),K=p(t,"P",{"data-svelte-h":!0}),a(K)!=="svelte-1iwns2r"&&(K.textContent=Ne),zt=i(t),tt=p(t,"P",{"data-svelte-h":!0}),a(tt)!=="svelte-1agqenc"&&(tt.textContent=ke),Dt=i(t),et=p(t,"TABLE",{"data-svelte-h":!0}),a(et)!=="svelte-1hvmx1i"&&(et.innerHTML=Ve),Ot=i(t),lt=p(t,"P",{"data-svelte-h":!0}),a(lt)!=="svelte-1sq2tb4"&&(lt.innerHTML=Ae),qt=i(t),nt=p(t,"P",{"data-svelte-h":!0}),a(nt)!=="svelte-1282ofc"&&(nt.textContent=Ee),Kt=i(t),y(st.$$.fragment,t),te=i(t),it=p(t,"P",{"data-svelte-h":!0}),a(it)!=="svelte-w7ygsp"&&(it.innerHTML=Ze),ee=i(t),pt=p(t,"P",{}),$e(pt).forEach(l),this.h()},h(){Le(J,"name","hf:doc:metadata"),Le(J,"content",ge)},m(t,e){Ye(document.head,J),n(t,yt,e),n(t,Mt,e),n(t,Ct,e),C(I,t,e),n(t,wt,e),n(t,j,e),n(t,mt,e),n(t,f,e),n(t,Tt,e),C(u,t,e),n(t,Jt,e),n(t,d,e),n(t,It,e),n(t,c,e),n(t,jt,e),n(t,o,e),n(t,ft,e),C(r,t,e),n(t,ut,e),n(t,x,e),n(t,dt,e),n(t,P,e),n(t,ct,e),n(t,v,e),n(t,ot,e),n(t,b,e),n(t,rt,e),n(t,B,e),n(t,xt,e),n(t,h,e),n(t,Pt,e),n(t,G,e),n(t,vt,e),n(t,_,e),n(t,bt,e),n(t,N,e),n(t,Bt,e),n(t,k,e),n(t,ht,e),n(t,V,e),n(t,Gt,e),n(t,A,e),n(t,_t,e),C(E,t,e),n(t,Nt,e),n(t,Z,e),n(t,kt,e),C($,t,e),n(t,Vt,e),n(t,L,e),n(t,At,e),C(S,t,e),n(t,Et,e),n(t,X,e),n(t,Zt,e),C(R,t,e),n(t,$t,e),n(t,H,e),n(t,Lt,e),C(W,t,e),n(t,St,e),n(t,Q,e),n(t,Xt,e),n(t,Y,e),n(t,Rt,e),n(t,F,e),n(t,Ht,e),C(g,t,e),n(t,Wt,e),n(t,z,e),n(t,Qt,e),n(t,D,e),n(t,Yt,e),n(t,O,e),n(t,Ft,e),n(t,q,e),n(t,gt,e),n(t,K,e),n(t,zt,e),n(t,tt,e),n(t,Dt,e),n(t,et,e),n(t,Ot,e),n(t,lt,e),n(t,qt,e),n(t,nt,e),n(t,Kt,e),C(st,t,e),n(t,te,e),n(t,it,e),n(t,ee,e),n(t,pt,e),le=!0},p:Xe,i(t){le||(w(I.$$.fragment,t),w(u.$$.fragment,t),w(r.$$.fragment,t),w(E.$$.fragment,t),w($.$$.fragment,t),w(S.$$.fragment,t),w(R.$$.fragment,t),w(W.$$.fragment,t),w(g.$$.fragment,t),w(st.$$.fragment,t),le=!0)},o(t){m(I.$$.fragment,t),m(u.$$.fragment,t),m(r.$$.fragment,t),m(E.$$.fragment,t),m($.$$.fragment,t),m(S.$$.fragment,t),m(R.$$.fragment,t),m(W.$$.fragment,t),m(g.$$.fragment,t),m(st.$$.fragment,t),le=!1},d(t){t&&(l(yt),l(Mt),l(Ct),l(wt),l(j),l(mt),l(f),l(Tt),l(Jt),l(d),l(It),l(c),l(jt),l(o),l(ft),l(ut),l(x),l(dt),l(P),l(ct),l(v),l(ot),l(b),l(rt),l(B),l(xt),l(h),l(Pt),l(G),l(vt),l(_),l(bt),l(N),l(Bt),l(k),l(ht),l(V),l(Gt),l(A),l(_t),l(Nt),l(Z),l(kt),l(Vt),l(L),l(At),l(Et),l(X),l(Zt),l($t),l(H),l(Lt),l(St),l(Q),l(Xt),l(Y),l(Rt),l(F),l(Ht),l(Wt),l(z),l(Qt),l(D),l(Yt),l(O),l(Ft),l(q),l(gt),l(K),l(zt),l(tt),l(Dt),l(et),l(Ot),l(lt),l(qt),l(nt),l(Kt),l(te),l(it),l(ee),l(pt)),l(J),T(I,t),T(u,t),T(r,t),T(E,t),T($,t),T(S,t),T(R,t),T(W,t),T(g,t),T(st,t)}}}const ge='{"title":"훈련용 사용자 맞춤형 하드웨어","local":"custom-hardware-for-training","sections":[{"title":"GPU","local":"gpu","sections":[{"title":"전원 공급과 냉각","local":"power-and-cooling","sections":[],"depth":3},{"title":"다중 GPU 연결 방식","local":"multigpu-connectivity","sections":[{"title":"NVLink","local":"nvlink","sections":[],"depth":4}],"depth":3}],"depth":2}],"depth":1}';function ze(ne){return Re(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class tl extends He{constructor(J){super(),We(this,J,ze,Fe,Se,{})}}export{tl as component};
