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