import{s as Ye,n as ge,o as Fe}from"../chunks/scheduler.9bc65507.js";import{S as De,i as ze,g as p,s,r as U,A as Oe,h as a,f as l,c as i,j as We,u as w,x as M,k as He,y as qe,a as n,v as C,d as y,t as m,w as T}from"../chunks/index.707bf1b6.js";import{C as wt}from"../chunks/CodeBlock.54a9f38d.js";import{H as Ct}from"../chunks/Heading.342b1fa6.js";function Ke(ae){let J,yt,Mt,mt,d,Tt,o,Me='モデルのトレーニングおよび推論に使用するハードウェアは、パフォーマンスに大きな影響を与えることがあります。GPUについて詳しく知りたい場合は、Tim Dettmerの優れた<a href="https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/" rel="nofollow">ブログ記事</a>をチェックしてみてください。',Jt,I,Ue="GPUセットアップの実用的なアドバイスをいくつか見てみましょう。",dt,f,ot,r,we="より大きなモデルをトレーニングする場合、基本的には以下の3つのオプションがあります：",It,c,Ce='<li>より大きなGPU</li> <li>より多くのGPU</li> <li>より多くのCPUおよびNVMe（<a href="main_classes/deepspeed#nvme-support">DeepSpeed-Infinity</a>によるオフロード）</li>',ft,j,ye="まず、単一のGPUを使用する場合から始めましょう。",rt,u,ct,x,me="高価なハイエンドGPUを購入した場合、正しい電力供給と十分な冷却を提供することが重要です。",jt,h,Te="<strong>電力</strong>：",ut,v,Je="一部の高級コンシューマGPUカードには、2つまたは3つのPCI-E 8ピン電源ソケットがあります。カードにあるソケットの数だけ、独立した12V PCI-E 8ピンケーブルが接続されていることを確認してください。同じケーブルの一端にある2つの分岐（またはピッグテールケーブルとしても知られています）を使用しないでください。つまり、GPUに2つのソケットがある場合、PSUからカードに向けて2つのPCI-E 8ピンケーブルを使用し、1つのケーブルの端に2つのPCI-E 8ピンコネクタがあるものは使用しないでください！そうしないと、カードからのパフォーマンスを十分に引き出すことができません。",xt,b,de="各PCI-E 8ピン電源ケーブルは、PSU側の12Vレールに接続する必要があり、最大で150Wの電力を供給できます。",ht,P,oe="一部のカードはPCI-E 12ピンコネクタを使用することがあり、これらは最大で500-600Wの電力を供給できます。",vt,B,Ie="低価格帯のカードは6ピンコネクタを使用することがあり、最大で75Wの電力を供給します。",bt,_,fe="さらに、カードが必要とする安定した電圧を提供する高品質な電源ユニット（PSU）を使用する必要があります。",Pt,N,re="もちろん、PSUにはカードを駆動するために十分な未使用の電力が必要です。",Bt,k,ce="<strong>冷却</strong>：",_t,V,je="GPUが過熱すると、スロットリングが開始され、フルパフォーマンスを提供しなくなり、過熱しすぎるとシャットダウンすることさえあります。",Nt,G,ue="GPUが重要な負荷の下でどのような温度を目指すべきかを正確に示すことは難しいですが、おそらく+80℃未満であれば良いでしょうが、それより低い方が良いです - おそらく70-75℃が優れた範囲でしょう。スロットリングの開始温度はおそらく84-90℃のあたりからでしょう。スロットリングによるパフォーマンスの低下以外にも、長時間にわたる非常に高い温度はGPUの寿命を短縮する可能性があります。",kt,A,xe="次に、複数のGPUを持つ際に最も重要な側面の一つである接続について詳しく見てみましょう。",Vt,$,Gt,E,he="複数のGPUを使用する場合、カードの相互接続方法はトータルのトレーニング時間に大きな影響を与える可能性があります。GPUが同じ物理ノードにある場合、次のように実行できます：",At,Z,$t,S,ve="もちろん、GPUがどのように相互接続されているかについて説明します。デュアルGPUを搭載し、NVLinkで接続されているマシンでは、おそらく以下のような情報が表示されるでしょう：",Et,L,Zt,X,be="別のNVLinkなしのマシンでは、以下のような状況が発生するかもしれません：",St,R,Lt,Q,Pe="こちらが伝説です：",Xt,W,Rt,H,Be="最初のレポートである <code>NV2</code> では、GPUは2つのNVLinkで接続されており、2番目のレポートである <code>PHB</code> では、典型的な消費者向けのPCIe+Bridgeセットアップが行われています。",Qt,Y,_e="あなたのセットアップでどの種類の接続性があるかを確認してください。これらの接続方法のいくつかはカード間の通信を速くすることができます（例：NVLink）、他のものは遅くすることができます（例：PHB）。",Wt,g,Ne="使用されるスケーラビリティソリューションの種類に応じて、接続速度は大きな影響を与えることも、小さな影響を与えることもあります。GPUがあまり頻繁に同期する必要がない場合、DDPのように、遅い接続の影響はそれほど重要ではありません。しかし、GPUが頻繁にメッセージを送信する必要がある場合、ZeRO-DPのように、高速の接続がより高速なトレーニングを実現するために非常に重要になります。",Ht,F,Yt,D,ke='<a href="https://en.wikipedia.org/wiki/NVLink" rel="nofollow">NVLink</a> は、Nvidiaによって開発された有線のシリアルマルチレーンの近距離通信リンクです。',gt,z,Ve='各新世代では、より高速な帯域幅が提供されます。たとえば、<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> からの引用です。',Ft,O,Ge=`<p>Third-Generation NVLink®
GA102 GPUs utilize NVIDIA’s third-generation NVLink interface, which includes four x4 links,
with each link providing 14.0625 GB/sec bandwidth in each direction between two GPUs. Four
links provide 56.25 GB/sec bandwidth in each direction, and 112.5 GB/sec total bandwidth
between two GPUs. Two RTX 3090 GPUs can be connected together for SLI using NVLink.
(Note that 3-Way and 4-Way SLI configurations are not supported.)</p>`,Dt,q,Ae="したがって、<code>nvidia-smi topo -m</code> の出力の <code>NVX</code> レポートで取得する <code>X</code> が高いほど良いです。世代はあなたのGPUアーキテクチャに依存します。",zt,K,$e="小さなサンプルのwikitextを使用したgpt2言語モデルのトレーニングの実行を比較しましょう。",Ot,tt,Ee="結果は次のとおりです：",qt,et,Ze="（ここに結果を挿入）",Kt,lt,Se="上記のテキストの日本語訳を提供しました。Markdownコードとしてフォーマットしました。どんな他の質問があれば、お気軽にお知らせください！",te,nt,Le='<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>',ee,st,Xe="NVLinkを使用すると、トレーニングが約23％速く完了することがわかります。2番目のベンチマークでは、<code>NCCL_P2P_DISABLE=1</code>を使用して、GPUがNVLinkを使用しないように指示しています。",le,it,Re="以下は、完全なベンチマークコードと出力です：",ne,pt,se,at,Qe=`Hardware: 2x TITAN RTX 24GB each + NVlink with 2 NVLinks (<code>NV2</code> in <code>nvidia-smi topo -m</code>)
Software: <code>pytorch-1.8-to-be</code> + <code>cuda-11.0</code> / <code>transformers==4.3.0.dev0</code>`,ie,Ut,pe;return d=new Ct({props:{title:"Custom hardware for training",local:"custom-hardware-for-training",headingTag:"h1"}}),f=new Ct({props:{title:"GPU",local:"gpu",headingTag:"h2"}}),u=new Ct({props:{title:"Power and Cooling",local:"power-and-cooling",headingTag:"h3"}}),$=new Ct({props:{title:"Multi-GPU Connectivity",local:"multi-gpu-connectivity",headingTag:"h3"}}),Z=new wt({props:{code:"bnZpZGlhLXNtaSUyMHRvcG8lMjAtbQ==",highlighted:'<span class="hljs-symbol">nvidia</span>-<span class="hljs-keyword">smi</span> topo -m',wrap:!1}}),L=new wt({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 wt({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 wt({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 Ct({props:{title:"NVlink",local:"nvlink",headingTag:"h4"}}),pt=new wt({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(){J=p("meta"),yt=s(),Mt=p("p"),mt=s(),U(d.$$.fragment),Tt=s(),o=p("p"),o.innerHTML=Me,Jt=s(),I=p("p"),I.textContent=Ue,dt=s(),U(f.$$.fragment),ot=s(),r=p("p"),r.textContent=we,It=s(),c=p("ul"),c.innerHTML=Ce,ft=s(),j=p("p"),j.textContent=ye,rt=s(),U(u.$$.fragment),ct=s(),x=p("p"),x.textContent=me,jt=s(),h=p("p"),h.innerHTML=Te,ut=s(),v=p("p"),v.textContent=Je,xt=s(),b=p("p"),b.textContent=de,ht=s(),P=p("p"),P.textContent=oe,vt=s(),B=p("p"),B.textContent=Ie,bt=s(),_=p("p"),_.textContent=fe,Pt=s(),N=p("p"),N.textContent=re,Bt=s(),k=p("p"),k.innerHTML=ce,_t=s(),V=p("p"),V.textContent=je,Nt=s(),G=p("p"),G.textContent=ue,kt=s(),A=p("p"),A.textContent=xe,Vt=s(),U($.$$.fragment),Gt=s(),E=p("p"),E.textContent=he,At=s(),U(Z.$$.fragment),$t=s(),S=p("p"),S.textContent=ve,Et=s(),U(L.$$.fragment),Zt=s(),X=p("p"),X.textContent=be,St=s(),U(R.$$.fragment),Lt=s(),Q=p("p"),Q.textContent=Pe,Xt=s(),U(W.$$.fragment),Rt=s(),H=p("p"),H.innerHTML=Be,Qt=s(),Y=p("p"),Y.textContent=_e,Wt=s(),g=p("p"),g.textContent=Ne,Ht=s(),U(F.$$.fragment),Yt=s(),D=p("p"),D.innerHTML=ke,gt=s(),z=p("p"),z.innerHTML=Ve,Ft=s(),O=p("blockquote"),O.innerHTML=Ge,Dt=s(),q=p("p"),q.innerHTML=Ae,zt=s(),K=p("p"),K.textContent=$e,Ot=s(),tt=p("p"),tt.textContent=Ee,qt=s(),et=p("p"),et.textContent=Ze,Kt=s(),lt=p("p"),lt.textContent=Se,te=s(),nt=p("table"),nt.innerHTML=Le,ee=s(),st=p("p"),st.innerHTML=Xe,le=s(),it=p("p"),it.textContent=Re,ne=s(),U(pt.$$.fragment),se=s(),at=p("p"),at.innerHTML=Qe,ie=s(),Ut=p("p"),this.h()},l(t){const e=Oe("svelte-u9bgzb",document.head);J=a(e,"META",{name:!0,content:!0}),e.forEach(l),yt=i(t),Mt=a(t,"P",{}),We(Mt).forEach(l),mt=i(t),w(d.$$.fragment,t),Tt=i(t),o=a(t,"P",{"data-svelte-h":!0}),M(o)!=="svelte-4rp2i7"&&(o.innerHTML=Me),Jt=i(t),I=a(t,"P",{"data-svelte-h":!0}),M(I)!=="svelte-1rf6q21"&&(I.textContent=Ue),dt=i(t),w(f.$$.fragment,t),ot=i(t),r=a(t,"P",{"data-svelte-h":!0}),M(r)!=="svelte-sw48j5"&&(r.textContent=we),It=i(t),c=a(t,"UL",{"data-svelte-h":!0}),M(c)!=="svelte-18ibhbu"&&(c.innerHTML=Ce),ft=i(t),j=a(t,"P",{"data-svelte-h":!0}),M(j)!=="svelte-v8xypo"&&(j.textContent=ye),rt=i(t),w(u.$$.fragment,t),ct=i(t),x=a(t,"P",{"data-svelte-h":!0}),M(x)!=="svelte-1fgvesf"&&(x.textContent=me),jt=i(t),h=a(t,"P",{"data-svelte-h":!0}),M(h)!=="svelte-1ickil9"&&(h.innerHTML=Te),ut=i(t),v=a(t,"P",{"data-svelte-h":!0}),M(v)!=="svelte-7jv407"&&(v.textContent=Je),xt=i(t),b=a(t,"P",{"data-svelte-h":!0}),M(b)!=="svelte-t19b0k"&&(b.textContent=de),ht=i(t),P=a(t,"P",{"data-svelte-h":!0}),M(P)!=="svelte-1l60rxq"&&(P.textContent=oe),vt=i(t),B=a(t,"P",{"data-svelte-h":!0}),M(B)!=="svelte-d83w8p"&&(B.textContent=Ie),bt=i(t),_=a(t,"P",{"data-svelte-h":!0}),M(_)!=="svelte-qhi575"&&(_.textContent=fe),Pt=i(t),N=a(t,"P",{"data-svelte-h":!0}),M(N)!=="svelte-1hrg78"&&(N.textContent=re),Bt=i(t),k=a(t,"P",{"data-svelte-h":!0}),M(k)!=="svelte-umzsoy"&&(k.innerHTML=ce),_t=i(t),V=a(t,"P",{"data-svelte-h":!0}),M(V)!=="svelte-1i6shx4"&&(V.textContent=je),Nt=i(t),G=a(t,"P",{"data-svelte-h":!0}),M(G)!=="svelte-10vbjq8"&&(G.textContent=ue),kt=i(t),A=a(t,"P",{"data-svelte-h":!0}),M(A)!=="svelte-p4f5wa"&&(A.textContent=xe),Vt=i(t),w($.$$.fragment,t),Gt=i(t),E=a(t,"P",{"data-svelte-h":!0}),M(E)!=="svelte-168wuut"&&(E.textContent=he),At=i(t),w(Z.$$.fragment,t),$t=i(t),S=a(t,"P",{"data-svelte-h":!0}),M(S)!=="svelte-17tt0lp"&&(S.textContent=ve),Et=i(t),w(L.$$.fragment,t),Zt=i(t),X=a(t,"P",{"data-svelte-h":!0}),M(X)!=="svelte-1ml9iad"&&(X.textContent=be),St=i(t),w(R.$$.fragment,t),Lt=i(t),Q=a(t,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-edd85a"&&(Q.textContent=Pe),Xt=i(t),w(W.$$.fragment,t),Rt=i(t),H=a(t,"P",{"data-svelte-h":!0}),M(H)!=="svelte-2v7b6i"&&(H.innerHTML=Be),Qt=i(t),Y=a(t,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-zjp9ph"&&(Y.textContent=_e),Wt=i(t),g=a(t,"P",{"data-svelte-h":!0}),M(g)!=="svelte-1lwfmge"&&(g.textContent=Ne),Ht=i(t),w(F.$$.fragment,t),Yt=i(t),D=a(t,"P",{"data-svelte-h":!0}),M(D)!=="svelte-wrowsz"&&(D.innerHTML=ke),gt=i(t),z=a(t,"P",{"data-svelte-h":!0}),M(z)!=="svelte-13p6p4b"&&(z.innerHTML=Ve),Ft=i(t),O=a(t,"BLOCKQUOTE",{"data-svelte-h":!0}),M(O)!=="svelte-14khom1"&&(O.innerHTML=Ge),Dt=i(t),q=a(t,"P",{"data-svelte-h":!0}),M(q)!=="svelte-1fpr61m"&&(q.innerHTML=Ae),zt=i(t),K=a(t,"P",{"data-svelte-h":!0}),M(K)!=="svelte-fvsf9s"&&(K.textContent=$e),Ot=i(t),tt=a(t,"P",{"data-svelte-h":!0}),M(tt)!=="svelte-1lbnhaw"&&(tt.textContent=Ee),qt=i(t),et=a(t,"P",{"data-svelte-h":!0}),M(et)!=="svelte-16gw8ke"&&(et.textContent=Ze),Kt=i(t),lt=a(t,"P",{"data-svelte-h":!0}),M(lt)!=="svelte-1syf6lt"&&(lt.textContent=Se),te=i(t),nt=a(t,"TABLE",{"data-svelte-h":!0}),M(nt)!=="svelte-1hvmx1i"&&(nt.innerHTML=Le),ee=i(t),st=a(t,"P",{"data-svelte-h":!0}),M(st)!=="svelte-10gsjxh"&&(st.innerHTML=Xe),le=i(t),it=a(t,"P",{"data-svelte-h":!0}),M(it)!=="svelte-kf5bi3"&&(it.textContent=Re),ne=i(t),w(pt.$$.fragment,t),se=i(t),at=a(t,"P",{"data-svelte-h":!0}),M(at)!=="svelte-pittpg"&&(at.innerHTML=Qe),ie=i(t),Ut=a(t,"P",{}),We(Ut).forEach(l),this.h()},h(){He(J,"name","hf:doc:metadata"),He(J,"content",tl)},m(t,e){qe(document.head,J),n(t,yt,e),n(t,Mt,e),n(t,mt,e),C(d,t,e),n(t,Tt,e),n(t,o,e),n(t,Jt,e),n(t,I,e),n(t,dt,e),C(f,t,e),n(t,ot,e),n(t,r,e),n(t,It,e),n(t,c,e),n(t,ft,e),n(t,j,e),n(t,rt,e),C(u,t,e),n(t,ct,e),n(t,x,e),n(t,jt,e),n(t,h,e),n(t,ut,e),n(t,v,e),n(t,xt,e),n(t,b,e),n(t,ht,e),n(t,P,e),n(t,vt,e),n(t,B,e),n(t,bt,e),n(t,_,e),n(t,Pt,e),n(t,N,e),n(t,Bt,e),n(t,k,e),n(t,_t,e),n(t,V,e),n(t,Nt,e),n(t,G,e),n(t,kt,e),n(t,A,e),n(t,Vt,e),C($,t,e),n(t,Gt,e),n(t,E,e),n(t,At,e),C(Z,t,e),n(t,$t,e),n(t,S,e),n(t,Et,e),C(L,t,e),n(t,Zt,e),n(t,X,e),n(t,St,e),C(R,t,e),n(t,Lt,e),n(t,Q,e),n(t,Xt,e),C(W,t,e),n(t,Rt,e),n(t,H,e),n(t,Qt,e),n(t,Y,e),n(t,Wt,e),n(t,g,e),n(t,Ht,e),C(F,t,e),n(t,Yt,e),n(t,D,e),n(t,gt,e),n(t,z,e),n(t,Ft,e),n(t,O,e),n(t,Dt,e),n(t,q,e),n(t,zt,e),n(t,K,e),n(t,Ot,e),n(t,tt,e),n(t,qt,e),n(t,et,e),n(t,Kt,e),n(t,lt,e),n(t,te,e),n(t,nt,e),n(t,ee,e),n(t,st,e),n(t,le,e),n(t,it,e),n(t,ne,e),C(pt,t,e),n(t,se,e),n(t,at,e),n(t,ie,e),n(t,Ut,e),pe=!0},p:ge,i(t){pe||(y(d.$$.fragment,t),y(f.$$.fragment,t),y(u.$$.fragment,t),y($.$$.fragment,t),y(Z.$$.fragment,t),y(L.$$.fragment,t),y(R.$$.fragment,t),y(W.$$.fragment,t),y(F.$$.fragment,t),y(pt.$$.fragment,t),pe=!0)},o(t){m(d.$$.fragment,t),m(f.$$.fragment,t),m(u.$$.fragment,t),m($.$$.fragment,t),m(Z.$$.fragment,t),m(L.$$.fragment,t),m(R.$$.fragment,t),m(W.$$.fragment,t),m(F.$$.fragment,t),m(pt.$$.fragment,t),pe=!1},d(t){t&&(l(yt),l(Mt),l(mt),l(Tt),l(o),l(Jt),l(I),l(dt),l(ot),l(r),l(It),l(c),l(ft),l(j),l(rt),l(ct),l(x),l(jt),l(h),l(ut),l(v),l(xt),l(b),l(ht),l(P),l(vt),l(B),l(bt),l(_),l(Pt),l(N),l(Bt),l(k),l(_t),l(V),l(Nt),l(G),l(kt),l(A),l(Vt),l(Gt),l(E),l(At),l($t),l(S),l(Et),l(Zt),l(X),l(St),l(Lt),l(Q),l(Xt),l(Rt),l(H),l(Qt),l(Y),l(Wt),l(g),l(Ht),l(Yt),l(D),l(gt),l(z),l(Ft),l(O),l(Dt),l(q),l(zt),l(K),l(Ot),l(tt),l(qt),l(et),l(Kt),l(lt),l(te),l(nt),l(ee),l(st),l(le),l(it),l(ne),l(se),l(at),l(ie),l(Ut)),l(J),T(d,t),T(f,t),T(u,t),T($,t),T(Z,t),T(L,t),T(R,t),T(W,t),T(F,t),T(pt,t)}}}const tl='{"title":"Custom hardware for training","local":"custom-hardware-for-training","sections":[{"title":"GPU","local":"gpu","sections":[{"title":"Power and Cooling","local":"power-and-cooling","sections":[],"depth":3},{"title":"Multi-GPU Connectivity","local":"multi-gpu-connectivity","sections":[{"title":"NVlink","local":"nvlink","sections":[],"depth":4}],"depth":3}],"depth":2}],"depth":1}';function el(ae){return Fe(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class pl extends De{constructor(J){super(),ze(this,J,el,Ke,Ye,{})}}export{pl as component};
