openfree commited on
Commit
95ab29d
ยท
verified ยท
1 Parent(s): e933a58

home: expand NPU section (peak 417, 3.8x, training deep-dive)

Browse files
Files changed (1) hide show
  1. index.html +1 -1
index.html CHANGED
@@ -1146,7 +1146,7 @@ document.addEventListener('keydown', function(e){ if(e.key==='Escape') closeSpot
1146
 
1147
 
1148
  <!-- โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• NPU TECH (2026-10-25, ์‹ค์ธก์น˜๋งŒ) โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -->
1149
- <div class="section" id="npu-tech"><div class="container"><h2 class="st"><span class="ko-only">NPU: <span>์ถ”๋ก  ๊ฐ€์† + ํ•™์Šต(LoRAยท์‚ฌ์ „ํ•™์Šต)</span></span><span class="en-only">NPU: <span>inference acceleration + training (LoRA, pretraining)</span></span></h2><p class="ss"><span class="ko-only">์ถ”๋ก  ์ „์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ์ƒ์šฉ NPU์—์„œ, ์ถ”๋ก ์„ ๋„˜์–ด ํ•™์Šต๊นŒ์ง€ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ˆ˜์น˜๋Š” ๋ชจ๋‘ ์ž์ฒด ์‹ค์ธก์ด๋ฉฐ ์ธก์ • ์กฐ๊ฑด์„ ํ•จ๊ป˜ ๋ฐํž™๋‹ˆ๋‹ค.</span><span class="en-only">On a commercial NPU designed for inference only, we went past inference into training. Every number below is self-measured, with its measurement conditions stated.</span></p><div class="grid g3"><div class="card" style="border-top:4px solid #0f6e56"><div style="font-size:1.6rem">โšก</div><h4 style="margin:6px 0 4px"><span class="ko-only">์ถ”๋ก  ๊ฐ€์†</span><span class="en-only">Inference acceleration</span></h4><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">53.9 tok/s</div><div style="font-size:.78rem;color:var(--muted);margin-bottom:8px"><span class="ko-only">Gemma-4-26B ยท 8์นฉ ยท ๋‹จ์ผ ์ŠคํŠธ๋ฆผ</span><span class="en-only">Gemma-4-26B ยท 8 chips ยท single stream</span></div><p style="font-size:.86rem;line-height:1.65;margin:0"><span class="ko-only">๋‹จ์ผ ์ŠคํŠธ๋ฆผ ๊ธฐ์ค€ B200 ํ‘œ์ค€ vLLM ๊ตฌ์„ฑ(30.2 tok/s)๋ณด๋‹ค ๋น ๋ฅธ ์‘๋‹ต ์†๋„. ๋ฐฐ์น˜ ์ตœ๋Œ€ ์•ฝ 417 tok/s, ์†Œ๋น„์ „๋ ฅ ์•ฝ 1/5. 35B MoE(A3B)๋Š” ๋ฐฐ์น˜ 8์—์„œ 197 tok/s.</span><span class="en-only">Faster single-stream response than a standard B200 vLLM setup (30.2 tok/s). Batched peak about 417 tok/s at roughly one fifth the power. A 35B MoE (A3B) reaches 197 tok/s at batch 8.</span></p></div><div class="card" style="border-top:4px solid #0f6e56"><div style="font-size:1.6rem">๐Ÿ”ง</div><h4 style="margin:6px 0 4px"><span class="ko-only">LoRA ํ•™์Šต</span><span class="en-only">LoRA training</span></h4><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">4๊ฐœ ๋ชจ๋ธ</div><div style="font-size:.78rem;color:var(--muted);margin-bottom:8px"><span class="ko-only">SmolLM2-135Mยท1.7B ยท Qwen3-0.6Bยท1.7B</span><span class="en-only">SmolLM2-135M/1.7B ยท Qwen3-0.6B/1.7B</span></div><p style="font-size:.86rem;line-height:1.65;margin:0"><span class="ko-only">์ถ”๋ก  ์ „์šฉ NPU์—์„œ ์ธต ๋‚ด๋ถ€ LoRA ์—ญ์ „ํŒŒ๋ฅผ ์ง์ ‘ ์‹คํ–‰. ๊ธฐ์šธ๊ธฐ๋ฅผ PyTorch autograd์™€ ๋Œ€์กฐํ•ด ์ƒ๋Œ€์˜ค์ฐจ 1.4ร—10โปโด. ๋Œ€ํ˜• ๋ชจ๋ธ์€ ๋ณธ์ฒด๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ํŒ์ • ๋จธ๋ฆฌ๋งŒ ํ•™์Šตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.</span><span class="en-only">Layer-internal LoRA backpropagation runs directly on the inference NPU. Gradients match PyTorch autograd within 1.4ร—10โปโด relative error. Larger models extend by freezing the backbone and training a decision head.</span></p></div><div class="card" style="border-top:4px solid #0f6e56"><div style="font-size:1.6rem">๐Ÿง </div><h4 style="margin:6px 0 4px"><span class="ko-only">0๋ถ€ํ„ฐ ์‚ฌ์ „ํ•™์Šต</span><span class="en-only">Pretraining from scratch</span></h4><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">์ƒ๊ด€ 0.99</div><div style="font-size:.78rem;color:var(--muted);margin-bottom:8px"><span class="ko-only">46M ยท 137M ยท 365M ๊ทœ๋ชจ ์‹ค์ธก</span><span class="en-only">Measured at 46M ยท 137M ยท 365M</span></div><p style="font-size:.86rem;line-height:1.65;margin:0"><span class="ko-only">์—”๋น„๋””์•„ GPU ์—†์ด ์ถ”๋ก  ์ „์šฉ NPU์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์ „ํ•™์Šต. ๊ฐ™์€ ๋ฐ์ดํ„ฐยท์„ค์ •์˜ GPU ํ•™์Šต๊ณผ ์†์‹ค ๊ถค์  ์ƒ๊ด€ 0.99. ๊ณต๊ฐœ ๋ชจ๋ธ: <a href="https://huggingface.co/FINAL-Bench/VKORE-46M-NPU" target="_blank" rel="noopener noreferrer">VKORE-46M-NPU</a>.</span><span class="en-only">Pretraining from scratch on an inference-only NPU, no Nvidia GPU. Loss trajectory correlates 0.99 with GPU training on the same data and settings. Open model: <a href="https://huggingface.co/FINAL-Bench/VKORE-46M-NPU" target="_blank" rel="noopener noreferrer">VKORE-46M-NPU</a>.</span></p></div></div><p style="color:var(--muted);font-size:.8rem;margin-top:10px"><span class="ko-only">์ธก์ • ์กฐ๊ฑด: ์ถ”๋ก ์€ 8์นฉ ํ…์„œ ๋ณ‘๋ ฌยท์ƒ์„ฑ 128ํ† ํฐ ๋””์ฝ”๋”ฉ ๊ธฐ์ค€. ๋น„๊ต ์ถ•์€ ๋‹จ์ผ ์ŠคํŠธ๋ฆผ ์†๋„ยท์ „๋ ฅยทํ•™์Šต ๊ฐ€๋Šฅ์„ฑ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ˆ˜์น˜๋Š” ์ž์ฒด ์‹ค์ธก์ด๋ฉฐ ์™ธ๋ถ€ ์ธ์ฆ์ด ์•„๋‹™๋‹ˆ๋‹ค.</span><span class="en-only">Conditions: inference with 8-chip tensor parallelism, 128-token decode. Comparison axes are single-stream speed, power and trainability. All figures are self-measured, not an external certification.</span></p></div></div>
1150
 
1151
  <!-- โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• AI-NATIVE (minimal) โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -->
1152
 
 
1146
 
1147
 
1148
  <!-- โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• NPU TECH (2026-10-25, ์‹ค์ธก์น˜๋งŒ) โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -->
1149
+ <div class="section" id="npu-tech"><div class="container"><div style="font-size:.74rem;font-weight:800;letter-spacing:.08em;color:#0f6e56;margin-bottom:6px">VKORE ยท NPU TRAINING &amp; INFERENCE</div><h2 class="st"><span class="ko-only">์ถ”๋ก  ์ „์šฉ NPU์—์„œ <span>ํ•™์Šต๊นŒ์ง€</span>: ์ถ”๋ก  ๊ฐ€์† + LoRA + ์‚ฌ์ „ํ•™์Šต</span><span class="en-only">Training on an <span>inference-only NPU</span>: acceleration + LoRA + pretraining</span></h2><p class="ss"><span class="ko-only">NPU๋Š” ์ถ”๋ก ๋งŒ ํ•˜๋„๋ก ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค. ํ•™์Šต์— ํ•„์š”ํ•œ ์—ญ์ „ํŒŒ, ์˜ตํ‹ฐ๋งˆ์ด์ €, ๋Œ€ํ˜• ํ•™์Šต ๊ทธ๋ž˜ํ”„๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋น„๋“œ๋ž˜ํ”„ํŠธ๋Š” ์ƒ์šฉ ์ถ”๋ก  ์ „์šฉ NPU์—์„œ ์ถ”๋ก  ๊ฐ€์†์— ๊ทธ์น˜์ง€ ์•Š๊ณ  LoRA ๋ฏธ์„ธ์กฐ์ •๊ณผ 0๋ถ€ํ„ฐ์˜ ์‚ฌ์ „ํ•™์Šต๊นŒ์ง€ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ˆ˜์น˜๋Š” ๋ชจ๋‘ ์ž์ฒด ์‹ค์ธก์ด๋ฉฐ ์ธก์ • ์กฐ๊ฑด์„ ํ•จ๊ป˜ ๋ฐํž™๋‹ˆ๋‹ค.</span><span class="en-only">NPUs are built for inference only. Backpropagation, optimizer state and large training graphs are not part of their design. VIDRAFT went beyond accelerating inference on a commercial inference-only NPU and ran LoRA fine-tuning and pretraining from scratch on it. Every figure below is self-measured, with conditions stated.</span></p><div class="grid" style="grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:14px 0 18px"><div class="card" style="text-align:center;padding:14px"><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">417 tok/s</div><div style="font-size:.76rem;color:var(--muted);margin-top:4px"><span class="ko-only">์ถ”๋ก  ์ตœ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰ (26B, 8์นฉ)</span><span class="en-only">Peak inference throughput (26B, 8 chips)</span></div></div><div class="card" style="text-align:center;padding:14px"><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">3.8ร—</div><div style="font-size:.76rem;color:var(--muted);margin-top:4px"><span class="ko-only">๋‹จ์ผ ์ŠคํŠธ๋ฆผ ๊ฐ€์† (14.1 โ†’ 53.9)</span><span class="en-only">Single-stream speedup (14.1 to 53.9)</span></div></div><div class="card" style="text-align:center;padding:14px"><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">0.9999</div><div style="font-size:.76rem;color:var(--muted);margin-top:4px"><span class="ko-only">ํ•™์Šต ๊ธฐ์šธ๊ธฐ ์ผ์น˜๋„ (ํ‘œ์ค€ ๋Œ€๋น„ ์ฝ”์‚ฌ์ธ)</span><span class="en-only">Gradient agreement vs standard (cosine)</span></div></div><div class="card" style="text-align:center;padding:14px"><div style="font-size:1.7rem;font-weight:900;color:#0f6e56;line-height:1.1">17.2๋งŒ</div><div style="font-size:.76rem;color:var(--muted);margin-top:4px"><span class="ko-only">์นด๋“œ 1์žฅ ํ•™์Šต ์ฒ˜๋ฆฌ๋Ÿ‰ tok/s (4์นฉ)</span><span class="en-only">Training tok/s per card (4 chips, about 172K)</span></div></div></div><h3 style="font-size:1.05rem;margin:6px 0 8px"><span class="ko-only">์™œ ์–ด๋ ค์› ๋‚˜: ์ถ”๋ก  ์ „์šฉ NPU๊ฐ€ ํ•™์Šต์„ ๋ง‰๋Š” ์„ธ ๊ฐ€์ง€ ๋ฒฝ</span><span class="en-only">Why it was hard: three walls that block training on an inference NPU</span></h3><div class="grid g3"><div class="card"><h4><span class="ko-only">โ‘  ๊ฐ€์งœ ํ•™์Šต</span><span class="en-only">โ‘  Silent fake training</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ž๋™๋ฏธ๋ถ„์€ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ณ ์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์šธ๊ธฐ๋ฅผ 0์œผ๋กœ ๊ตณํ˜€ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์†์‹ค๊ฐ’๋งŒ ๋ณด๋ฉด ํ•™์Šต๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ ๊ฐ€์ค‘์น˜๋Š” ๊ฑฐ์˜ ์›€์ง์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์†์‹ค์ด 25์Šคํ… ๋™์•ˆ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์ ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.</span><span class="en-only">Compiler autodiff froze gradients to zero while fixing the graph. Loss curves looked like training, but the weights barely moved. We caught it when loss stayed flat for 25 steps.</span></p></div><div class="card"><h4><span class="ko-only">โ‘ก ์—ญ์ „ํŒŒ ๊ทธ๋ž˜ํ”„์˜ ํ•œ๊ณ„</span><span class="en-only">โ‘ก Backward graph limits</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">์ถ”๋ก ์šฉ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ˆœ์ „ํŒŒ์— ๋งž์ถฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธต ๋‚ด๋ถ€ ์—ญ์ „ํŒŒ๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ฌ๋ฆฌ๋ฉด ์ปดํŒŒ์ผ์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜, ๊ฑฐ๋“ญ์ œ๊ณฑ์ด๋‚˜ ์Šค์นผ๋ผ ๋‚˜๋ˆ—์…ˆ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ์žฅ์น˜ ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</span><span class="en-only">Inference compilers are tuned for the forward pass. Pushing layer-internal backward through them fails to compile, and ops such as powers or scalar division do not convert into device graphs.</span></p></div><div class="card"><h4><span class="ko-only">โ‘ข ์žฅ๊ธฐ ํ•™์Šต์˜ ๋ฐœ์‚ฐ</span><span class="en-only">โ‘ข Divergence in long runs</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">1์Šคํ… ๊ธฐ์šธ๊ธฐ๊ฐ€ GPU์™€ 0.9999 ์ด์ƒ ์ผ์น˜ํ•ด๋„, ์ˆ˜๋งŒ ์Šคํ…์„ ๋„˜๊ธฐ๋ฉด ์ž‘์€ ํŽธํ–ฅ์ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์Œ“์—ฌ ํ•™์Šต์ด ๋ฌด๋„ˆ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ฒ€์ฆ๋งŒ์œผ๋กœ๋Š” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.</span><span class="en-only">Even with one-step gradients matching GPU above 0.9999, small biases can build up in one direction over tens of thousands of steps and break training. Early checks alone do not reveal it.</span></p></div></div><h3 style="font-size:1.05rem;margin:16px 0 8px"><span class="ko-only">์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜</span><span class="en-only">How we solved it</span></h3><div class="grid g3"><div class="card" style="border-top:4px solid #0f6e56"><h4><span class="ko-only">์—ญ์ „ํŒŒ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„</span><span class="en-only">Hand-written backward</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">์ž๋™๋ฏธ๋ถ„์— ๋งก๊ธฐ์ง€ ์•Š๊ณ , ์—ญ์ „ํŒŒ๋ฅผ NPU๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆœ์ „ํŒŒ ์—ฐ์‚ฐ์œผ๋กœ ์ง์ ‘ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ๊ฐ€์ค‘์น˜๋Š” ๊ทธ๋ž˜ํ”„ ์ƒ์ˆ˜๋กœ ๊ณ ์ •ํ•˜๊ณ  ํ•™์Šต ๋Œ€์ƒ(LoRA)๋งŒ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด ์ƒ์ˆ˜ ๊ฒฝ๋กœ 20.6ms ๋Œ€ ์ž…๋ ฅ ๊ฒฝ๋กœ 266ms, 13๋ฐฐ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์–ดํ…์…˜ ์ •๊ทœํ™”(q_norm, k_norm)๊นŒ์ง€ ์ˆ˜๋™์œผ๋กœ ์—ญ์ „ํŒŒํ•ด PyTorch autograd์™€ ์ƒ๋Œ€์˜ค์ฐจ 1.4ร—10โปโด๋กœ ๋งž์ท„์Šต๋‹ˆ๋‹ค.</span><span class="en-only">Instead of autodiff, backward is written as forward ops the NPU can run. Base weights become graph constants and only the trainable LoRA tensors are inputs: 20.6 ms vs 266 ms, 13x faster. Attention norms (q_norm, k_norm) are back-propagated by hand, matching PyTorch autograd within 1.4ร—10โปโด.</span></p></div><div class="card" style="border-top:4px solid #0f6e56"><h4><span class="ko-only">NPU ๊ธฐ์šธ๊ธฐ + ๊ณ ์ •๋ฐ€ ์˜ตํ‹ฐ๋งˆ์ด์ €</span><span class="en-only">NPU gradients + high-precision optimizer</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">์‹ค์ œ LLM ๋ธ”๋ก(์–ดํ…์…˜ + SwiGLU)์˜ LoRA์—์„œ ๊ธฐ์šธ๊ธฐ๋Š” NPU๊ฐ€ ๊ณ„์‚ฐํ•˜๊ณ  ์˜ตํ‹ฐ๋งˆ์ด์ € ์ƒํƒœ๋Š” fp32๋กœ ๊ด€๋ฆฌํ•ด, ํ‘œ์ค€ ํ•™์Šต ๋Œ€๋น„ ๊ธฐ์šธ๊ธฐ ์ฝ”์‚ฌ์ธ 0.9999๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์นฉ 1๊ฐœ 4.4๋งŒ tok/s(์•ฝ 11 TFLOPS), ์นด๋“œ 1์žฅ(4์นฉ) ๋™์‹œ ์•ฝ 17.2๋งŒ tok/s, ์นด๋“œ ์ „๋ ฅ ์•ฝ 278W. ์„œ๋ฒ„ CPU(64์ฝ”์–ดร—2) ๋Œ€๋น„ 7.6~17.7๋ฐฐ์ž…๋‹ˆ๋‹ค.</span><span class="en-only">On real LLM blocks (attention + SwiGLU) with LoRA, the NPU computes gradients while optimizer state stays in fp32, giving 0.9999 gradient cosine vs standard training. 44K tok/s per chip (about 11 TFLOPS), about 172K tok/s per 4-chip card at roughly 278 W, 7.6 to 17.7x a dual 64-core server CPU.</span></p></div><div class="card" style="border-top:4px solid #0f6e56"><h4><span class="ko-only">์ฒญํฌ ์ปดํŒŒ์ผ + ๋‹ค์นฉ ๋ณ‘๋ ฌ + ์žฅ๊ธฐ ์•ˆ์ •ํ™”</span><span class="en-only">Chunked compile + multi-chip + long-run stability</span></h4><p style="font-size:.86rem;line-height:1.65"><span class="ko-only">๋ชจ๋ธ์„ N๋‹จ ์ฒญํฌ๋กœ ๋‚˜๋ˆ  ์ปดํŒŒ์ผํ•˜๊ณ  ๋Œ€ํ˜• ์–ดํœ˜ ํ—ค๋“œ๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ์ฒ˜๋ฆฌํ•ด, 0.3B๊ธ‰ ์‚ฌ์ „ํ•™์Šต์„ ์นฉ๋‹น 2,550 tok/s๋กœ ๋Œ๋ ธ์Šต๋‹ˆ๋‹ค. 32์นฉ ๋ณ‘๋ ฌ๋กœ ์•ฝ 1.4๋งŒ tok/s์ž…๋‹ˆ๋‹ค. ์žฅ๊ธฐ ํ•™์Šต ๋ฐœ์‚ฐ์€ ์ž์ฒด ์•ˆ์ •ํ™” ๊ธฐ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•ด GPU์™€ ๊ฐ™์€ ์†์‹ค ๊ถค์ (์ƒ๊ด€ 0.99)์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํŠนํ—ˆ ์ถœ์› ์ค€๋น„ ์ค‘์ด๋ผ ์„ธ๋ถ€๋Š” ๊ณต๊ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</span><span class="en-only">The model is compiled in N chunks with the large vocab head on the host, running 0.3B-class pretraining at 2,550 tok/s per chip and about 14K tok/s across 32 chips. Long-run divergence is solved with an in-house stabilization method that keeps the loss trajectory in line with GPU (correlation 0.99). Patent pending, details withheld.</span></p></div></div><h3 style="font-size:1.05rem;margin:16px 0 8px"><span class="ko-only">์‹ค์ธก ์š”์•ฝ</span><span class="en-only">Measured results</span></h3><div style="overflow-x:auto"><table style="width:100%;border-collapse:collapse;font-size:.85rem;min-width:560px"><thead><tr><th style="padding:8px;border-bottom:2px solid var(--border);text-align:left"><span class="ko-only">๊ตฌ๋ถ„</span><span class="en-only">Area</span></th><th style="padding:8px;border-bottom:2px solid var(--border);text-align:left"><span class="ko-only">๋Œ€์ƒยท์กฐ๊ฑด</span><span class="en-only">Target, conditions</span></th><th style="padding:8px;border-bottom:2px solid var(--border);text-align:left;text-align:right"><span class="ko-only">์‹ค์ธก</span><span class="en-only">Measured</span></th><th style="padding:8px;border-bottom:2px solid var(--border);text-align:left"><span class="ko-only">๋น„๊ณ </span><span class="en-only">Note</span></th></tr></thead><tbody><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์ถ”๋ก </span><span class="en-only">Inference</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">Gemma-4-26B ยท 8์นฉ ยท ๋ฐฐ์น˜</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">~417 tok/s</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">์ตœ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰</span><span class="en-only">peak throughput</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์ถ”๋ก </span><span class="en-only">Inference</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">Gemma-4-26B ยท ๋‹จ์ผ ์ŠคํŠธ๋ฆผ</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">53.9 tok/s</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">์ ์šฉ ์ „ 14.1์—์„œ 3.8๋ฐฐ</span><span class="en-only">from 14.1, 3.8x</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์ถ”๋ก </span><span class="en-only">Inference</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">35B MoE (A3B) ยท ๋ฐฐ์น˜ 8</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">197 tok/s</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">๋ฏธ์ง€์› ๊ตฌ์กฐ๋ฅผ ์ž์ฒด ๋ชจ๋ธ ํด๋ž˜์Šค๋กœ ๊ตฌ๋™</span><span class="en-only">unsupported arch via custom model class</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700">LoRA</td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">SmolLM2-135Mยท1.7B ยท Qwen3-0.6Bยท1.7B</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56"><span class="ko-only">4๊ฐœ ์„ฑ๊ณต</span><span class="en-only">4 models</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">autograd ๋Œ€์กฐ ์˜ค์ฐจ 1.4ร—10โปโด</span><span class="en-only">1.4ร—10โปโด vs autograd</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700">LoRA</td><td style="padding:7px 8px;border-bottom:1px solid var(--border)"><span class="ko-only">LLM ๋ธ”๋ก(์–ดํ…์…˜ + SwiGLU)</span><span class="en-only">LLM block (attention + SwiGLU)</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">cos 0.9999</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">ํ‘œ์ค€ ํ•™์Šต ๋Œ€๋น„</span><span class="en-only">vs standard training</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">ํ•™์Šต ์ฒ˜๋ฆฌ๋Ÿ‰</span><span class="en-only">Training speed</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)"><span class="ko-only">์นด๋“œ 1์žฅ = 4์นฉ</span><span class="en-only">one card = 4 chips</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">~172,000 tok/s</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">์ „๋ ฅ ์•ฝ 278W</span><span class="en-only">about 278 W</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์‚ฌ์ „ํ•™์Šต</span><span class="en-only">Pretraining</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">137M / 365M ยท ๋‹จ์ผ์นฉ</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">4,880 / 1,015 tok/s</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">0๋ถ€ํ„ฐ ํ•™์Šต</span><span class="en-only">from scratch</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์‚ฌ์ „ํ•™์Šต</span><span class="en-only">Pretraining</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)"><span class="ko-only">0.3B๊ธ‰ ยท ์ฒญํฌ ์ปดํŒŒ์ผ</span><span class="en-only">0.3B class, chunked</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56"><span class="ko-only">์นฉ๋‹น 2,550 tok/s</span><span class="en-only">2,550 tok/s per chip</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">32์นฉ ๋ณ‘๋ ฌ ์•ฝ 1.4๋งŒ tok/s</span><span class="en-only">about 14K tok/s on 32 chips</span></td></tr><tr><td style="padding:7px 8px;border-bottom:1px solid var(--border);font-weight:700"><span class="ko-only">์‚ฌ์ „ํ•™์Šต</span><span class="en-only">Pretraining</span></td><td style="padding:7px 8px;border-bottom:1px solid var(--border)">46M ยท 137M ยท 365M</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);text-align:right;font-weight:700;color:#0f6e56">corr 0.99</td><td style="padding:7px 8px;border-bottom:1px solid var(--border);color:var(--muted);font-size:.8rem"><span class="ko-only">GPU ํ•™์Šต๊ณผ ์†์‹ค ๊ถค์  ์ƒ๊ด€</span><span class="en-only">loss trajectory vs GPU</span></td></tr></tbody></table></div><p style="font-size:.86rem;margin-top:10px"><span class="ko-only">๊ณต๊ฐœ ๋ชจ๋ธ: <a href="https://huggingface.co/FINAL-Bench/VKORE-46M-NPU" target="_blank" rel="noopener noreferrer">VKORE-46M-NPU</a> (์ถ”๋ก  ์ „์šฉ NPU์—์„œ 0๋ถ€ํ„ฐ ์‚ฌ์ „ํ•™์Šต)</span><span class="en-only">Open model: <a href="https://huggingface.co/FINAL-Bench/VKORE-46M-NPU" target="_blank" rel="noopener noreferrer">VKORE-46M-NPU</a> (pretrained from scratch on an inference-only NPU)</span></p><p style="color:var(--muted);font-size:.78rem;margin-top:6px"><span class="ko-only">์ธก์ • ์กฐ๊ฑด: ์ถ”๋ก ์€ 8์นฉ ํ…์„œ ๏ฟฝ๏ฟฝ๏ฟฝ๋ ฌ, ์ƒ์„ฑ 128ํ† ํฐ ๋””์ฝ”๋”ฉ. ํ•™์Šต ์ฒ˜๋ฆฌ๋Ÿ‰์€ LoRA ๋ธ”๋ก ๊ธฐ์ค€. ๋ชจ๋“  ์ˆ˜์น˜๋Š” ์ž์ฒด ์‹ค์ธก์ด๋ฉฐ ์™ธ๋ถ€ ์ธ์ฆ์ด ์•„๋‹™๋‹ˆ๋‹ค.</span><span class="en-only">Conditions: inference with 8-chip tensor parallelism, 128-token decode. Training throughput measured on LoRA blocks. All figures self-measured, not an external certification.</span></p></div></div>
1150
 
1151
  <!-- โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• AI-NATIVE (minimal) โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• -->
1152