๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

Can LLMs Write Fast Multi-GPU Kernels? โ€” Simran Arora, Together AI

AI Engineer ยท 2026-08-28 02:00 ยท 30:00

ํ•œ ์ค„ ํ•ต์‹ฌ

๋ฉ€ํ‹ฐ GPU ์ปค๋„์˜ ๋ณ‘๋ชฉ์ด ๊ณ„์‚ฐ์—์„œ ๋„คํŠธ์›Œํฌ๋กœ ์˜ฎ๊ฒจ๊ฐ„ ์ง€๊ธˆ, ํ•ต์‹ฌ ์ „์†กยท์Šค์ผ€์ค„๋ง ์›๋ฆฌ๋ฅผ ์ž˜ ์ •๋ฆฌํ•˜๋ฉด ์„ฑ๋Šฅ์€ ํฌ๊ฒŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ frontier ๋ชจ๋ธ์€ ์•„์ง ๊ทธ trade-off๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ถ”๋ก ํ•ด ๊ณ ์„ฑ๋Šฅ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•œ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ๋‹จ์ผ GPU ์ปค๋„์—์„œ GPU ๊ฐ„ ๋„คํŠธ์›Œํฌ๋กœ ์ด์ œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์€ ๋‹จ์ผ GPU ๋‚ด๋ถ€์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ๋ณด๋‹ค ์—ฌ๋Ÿฌ GPU ์‚ฌ์ด์˜ ํ†ต์‹ ์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค. ๋” ๋น ๋ฅธ ์ปค๋„๊ณผ ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ณดํŽธํ™”๋˜๋ฉด์„œ, ๋ฉ€ํ‹ฐ GPU ์ปค๋„์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ต์‹ฌ ๊ณผ์ œ๋กœ ๋– ์˜ฌ๋ž๋‹ค.
  2. 1:29
    H100 ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ฑฐ๋ฆฌ์˜ ์ค‘์š”์„ฑ H100์˜ ์—ฐ์‚ฐ ์œ ๋‹›, L2 cache, HBM, register๋Š” ์†๋„์™€ ์šฉ๋Ÿ‰์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ธต์„ ์ด๋ฃฌ๋‹ค. ๊ณ„์‚ฐ์— ๊ฐ€๊นŒ์šด ๋ฉ”๋ชจ๋ฆฌ์ผ์ˆ˜๋ก ๋น ๋ฅด์ง€๋งŒ ์ž‘๊ณ , ๋ฉ€์ˆ˜๋ก ํฌ์ง€๋งŒ ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์— ์žˆ๋А๋ƒ๊ฐ€ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•œ๋‹ค.
  3. 4:44
    ์ƒํ˜ธ์—ฐ๊ฒฐ ๊ณ„์ธต: PCIe, NVLink, NVSwitch GPU ์‹œ์Šคํ…œ์—๋Š” CPU-GPU์šฉ PCIe, ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์šฉ InfiniBandยทTCP, GPU-GPU์šฉ NVLink์™€ NVSwitch ๊ฐ™์€ ๊ณ„์ธต์ด ์žˆ๋‹ค. ํŠนํžˆ NVSwitch๋Š” ๋น„์ฐจ๋‹จ ํŒจ๋ธŒ๋ฆญ๊ณผ multicast, reductions ๊ฐ™์€ in-network ์—ฐ์‚ฐ์„ ์ง€์›ํ•ด ๋ฉ€ํ‹ฐ GPU ํ†ต์‹ ์˜ ๊ธฐ๋ฐ˜์ด ๋œ๋‹ค.
  4. 5:46
    ์™œ ์ง€๊ธˆ GPU ๋„คํŠธ์›Œํ‚น์ธ๊ฐ€ ๋ชจ๋ธ์€ ๋” ํฌ๊ณ  ๋ณต์žกํ•ด์กŒ์ง€๋งŒ ํ•˜๋“œ์›จ์–ด ์Šคํƒ์€ ๋ฒค๋”๋งˆ๋‹ค ๋‹ฌ๋ผ ๋„คํŠธ์›Œํ‚น์ด ์„ฑ๋Šฅ์˜ ๊ฒฐ์ • ๋ณ€์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค. ๋ถ„์‚ฐ ํ•™์Šต๊ณผ ์ถ”๋ก ์—์„œ๋Š” ํ†ต์‹ ์ด ๋Ÿฐํƒ€์ž„ ๋Œ€๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„, ๋„คํŠธ์›Œํฌ ํšจ์œจ์ด ๊ณง AI ํšจ์œจ์ด ๋œ๋‹ค.
  5. 8:27
    ๋ถ„์‚ฐ๋œ ์›Œํฌ๋กœ๋“œ์™€ 576 GPU ์‹œ์Šคํ…œ ํ˜„๋Œ€ ์ถ”๋ก  ์‹œ์Šคํ…œ์€ KV cache๋ฅผ GPU, CPU, disk, ์›๊ฒฉ ๋จธ์‹ ์— ๋‚˜๋ˆ  ๋‹ค๋ฃจ๊ณ , speculative decodingยทprefillยทdecode๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๋™์‹œ์— 72 GPU๊ธ‰ scaleup domain๊ณผ 576 GPU ์‹œ์Šคํ…œ ๊ฐ™์€ ๊ฑฐ๋Œ€ ๊ตฌ์„ฑ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ, device-side ๋น„๋™๊ธฐ ์ „์†ก๊ณผ ๊ฐ™์€ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ์ค‘์š”ํ•ด์กŒ๋‹ค.
  6. 10:24
    ์—ฐ์‚ฐ์€ 7.2๋ฐฐ, ๋„คํŠธ์›Œํฌ๋Š” 3๋ฐฐ A100์—์„œ B200์œผ๋กœ ์˜ค๋ฉด์„œ BF16 tensor core ์„ฑ๋Šฅ์€ 7.2x ํ–ฅ์ƒ๋์ง€๋งŒ, intra-node ํ†ต์‹ ์€ 3x, inter-node ํ†ต์‹ ์€ 2x์— ๊ทธ์ณค๋‹ค. ์—ฐ์‚ฐ ๋ฐœ์ „ ์†๋„์— ๋น„ํ•ด ๋„คํŠธ์›Œํฌ๊ฐ€ ๋’ค์ฒ˜์ง€๋ฉด์„œ, ๋ฉ€ํ‹ฐ GPU ์ปค๋„์—์„œ ํ†ต์‹  ์ตœ์ ํ™”์˜ ๋น„์ค‘์ด ์ปค์กŒ๋‹ค.
  7. 11:14
    NCCL์˜ ํ•œ๊ณ„์™€ roofline ๊ฒฉ์ฐจ NCCL ๊ณ„์—ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํฐ ์—ฐ์† ๋ฐ์ดํ„ฐ ์ „์†ก์—๋Š” ๊ฐ•ํ•˜์ง€๋งŒ, ์„ธ๋ฐ€ํ•œ ํ†ต์‹ ์ด๋‚˜ ๋ณตํ•ฉ collective๋ฅผ fuseํ•ด์•ผ ํ•  ๋•Œ๋Š” ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๋‹จ์ˆœํ•œ PyTorch+NCCL ๊ธฐ์ค€์„ ์€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ์—์„œ communication-aware roofline์˜ ์ ˆ๋ฐ˜๋„ ๋ชป ๋ฏธ์ณ, ์ปค์Šคํ…€ ํ†ต์‹  ์ปค๋„์˜ ์—ฌ์ง€๊ฐ€ ํฌ๋‹ค.
  8. 13:04
    ์ปดํŒŒ์ผ๋Ÿฌ, DSL, ๊ทธ๋ฆฌ๊ณ  ์†์œผ๋กœ ํŠœ๋‹ํ•œ ์—ฐ์‚ฐ์ž Triton distributed๋‚˜ tilelang ๊ฐ™์€ DSL์€ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ•˜๋Š” ๋„คํŠธ์›Œํ‚น ํ•˜๋“œ์›จ์–ด๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์–ด๋ ต๋‹ค. ๋ฐ˜๋Œ€๋กœ hand-tuned operator๋Š” ์ตœ๊ณ  ์„ฑ๋Šฅ์„ ๋‚ด์ง€๋งŒ, precision์ด๋‚˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ฐ”๋€” ๋•Œ ์ด์‹์„ฑ์ด ๋‚ฎ๊ณ  ์žฌ์ž‘์„ฑ ๋น„์šฉ์ด ํฌ๋‹ค.
  9. 14:10
    ์—ฐ๊ตฌ ์งˆ๋ฌธ๊ณผ ParallelKittens ํ•ต์‹ฌ ์งˆ๋ฌธ์€ ๋ฉ€ํ‹ฐ GPU ์ปค๋„์„ ์ง€๋ฐฐํ•˜๋Š” ์ž‘์€ ์›๋ฆฌ ์ง‘ํ•ฉ์ด ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์˜€๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ParallelKittens๋ผ๋Š” ์ตœ์†Œ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒยทํŒจํ„ด ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์œ„์—์„œ trade-off๋ฅผ ์ •๋ฆฌํ•œ ๋’ค ๋ชจ๋ธ์˜ ์ผ๋ฐ˜ํ™” ๊ฐ€๋Šฅ์„ฑ๋„ ์‹œํ—˜ํ–ˆ๋‹ค.
  10. 16:06
    ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜: copy engine, TMA, register ์ˆ˜์ค€ copy engine์€ host ๋˜๋Š” CPU ์ฃผ๋„๋กœ ํฐ ๋ฉ”์‹œ์ง€ ์ „์†ก์— ์œ ๋ฆฌํ•˜๊ณ , TMA์™€ register level instruction์€ GPU ์ฃผ๋„๋กœ ๋” ์ž‘์€ ๋ฉ”์‹œ์ง€์—์„œ NVLink๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฑ„์šด๋‹ค. TMA๋Š” register ์†Œ๋ชจ๊ฐ€ ์ ๊ณ  fine-grain overlap์— ์ข‹์ง€๋งŒ, NVSwitch๊ฐ€ ์ œ๊ณตํ•˜๋Š” in-network computation๊นŒ์ง€๋Š” ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  11. 18:28
    SM ๊ฐ„ ๊ณ„์‚ฐ๊ณผ ํ†ต์‹ ์˜ ๊ฒน์น˜๊ธฐ intraSM ์Šค์ผ€์ค„์€ ํ•œ SM ๋‚ด๋ถ€์—์„œ warp๋ฅผ ๋ถ„๋ฆฌํ•ด ๊ณ„์‚ฐ๊ณผ ํ†ต์‹ ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ , interSM ์Šค์ผ€์ค„์€ ๋‹ค๋ฅธ SM๋“ค์— ์—ญํ• ์„ ๋‚˜๋ˆ  ๋” ํฐ ๋ฒ”์œ„์˜ overlap์„ ๋งŒ๋“ ๋‹ค. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ์ž˜ ๋งž์œผ๋ฉด intraSM์ด ์œ ๋ฆฌํ•˜๊ณ , NVSwitch์˜ in-network reductions๋ฅผ ์“ฐ๋Š” ํŒจํ„ด์—์„œ๋Š” interSM์ด ๋” ํšจ๊ณผ์ ์ด๋‹ค.
  12. 20:52
    Together AI์™€ Cursor์˜ ์‹ค์ „ ์ ์šฉ ParallelKittens๋Š” Together AI์™€ Cursor ๊ฐ™์€ ์‹ค์ œ ์ œํ’ˆ ํ™˜๊ฒฝ์—์„œ ์“ฐ์ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹จ์ผ GPU ์ปค๋„์— ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ๋งŒ ๋”ํ•ด ๋ฉ€ํ‹ฐ GPU ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. data, sequence, expert parallelism์—์„œ ๊ฐ•ํ•œ ๊ธฐ์ค€์„ ๋ณด๋‹ค ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๋ฉฐ ์ƒ์‚ฐ์„ฑ ์žˆ๋Š” ํŒจํ„ด์œผ๋กœ ๊ฒ€์ฆ๋๋‹ค.
  13. 22:10
    ParallelKernelBench์˜ 87๊ฐœ ๋ฌธ์ œ ParallelKernelBench๋Š” PyTorch+torch distributed+NCCL ๊ธฐ์ค€ ๊ตฌํ˜„๊ณผ ์‹œ์Šคํ…œ ํ† ํด๋กœ์ง€๋ฅผ ์ฃผ๊ณ , ์ด๋ฅผ unified virtual addressing์„ ์‚ฌ์šฉํ•˜๋Š” CUDA ์ปค๋„๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค. data, sequence, tensor, context, layer, pipeline, expert ๋“ฑ ์‹ค์ œ ์›Œํฌ๋กœ๋“œ์˜ ๋ณ‘๋ ฌํ™” ์ถ•์„ ํฌ๊ด„ํ•˜๋„๋ก 87๊ฐœ ๋ฌธ์ œ๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค.
  14. 24:32
    ์ œ๋กœ์ƒท ๊ฒฐ๊ณผ์™€ ์Šค์ผ€์ผ๋ง ํ•œ๊ณ„ frontier ๋ชจ๋ธ์€ ์ œ๋กœ์ƒท์—์„œ 87๊ฐœ ์ค‘ 28๊ฐœ๋ฅผ ํ’€๊ณ , ๋‹ค์ค‘ ์ƒ˜ํ”Œ๋ง์œผ๋กœ๋„ ์ •๋‹ต ์ˆ˜๋Š” ๋Š˜์ง€๋งŒ ์†๋„ ํ–ฅ์ƒ์€ ์•ฝ 31% ๋ถ€๊ทผ์—์„œ ์ •์ฒด๋๋‹ค. ์„ฑ๊ณต ํŒจํ„ด์€ ์ฃผ๋กœ ์ธํ„ฐ๋„ท์— ๋งŽ์ด ๋…ธ์ถœ๋œ collective primitive๋‚˜ tensor parallel gem ๊ฐ™์€ ์ต์ˆ™ํ•œ ํ˜•ํƒœ์— ์ง‘์ค‘๋๋‹ค.
  15. 26:28
    ์‹คํŒจ ์›์ธ์€ CUDA ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ํ•˜๋ฉด ์ปดํŒŒ์ผ ์ž์ฒด๋Š” ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, ๋ชจ๋ธ์€ collective ordering, data partitioning, intra/interSM ์Šค์ผ€์ค„ ์„ ํƒ, ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์„ ํƒ ๊ฐ™์€ ๋ณธ์งˆ์  trade-off๋ฅผ ์ž˜ ๋ชป ๋‹ค๋ฃฌ๋‹ค. ํŠนํžˆ register transfer instruction์ด๋‚˜ TMA๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์“ฐ์ง€ ๋ชปํ•˜๋Š” ์ ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.
  16. 27:07
    ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค์™€ ์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ mini_sui_agent multi-turn harness์™€ Gemini 3 Pro, ๋กœ์ปฌ bash ํ™˜๊ฒฝ์„ ๋ฌถ์€ ๊ฐ„๋‹จํ•œ coding agent ๊ตฌ์„ฑ์€ 87๊ฐœ ์ค‘ 24๊ฐœ์—์„œ 35๊ฐœ๋กœ ์„ฑ๋Šฅ์„ ๋Œ์–ด์˜ฌ๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ๋” ์ฃผ์–ด์ ธ๋„ ์„ฑ๋Šฅ์€ ๊ณง ์ •์ฒด๋๊ณ , ๋” ๋‚˜์€ ์ถ”๋ก ยท์‹คํ—˜ยท๊ฒ€์ฆ ์ฒด๊ณ„๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์ด ํ™•์ธ๋๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ๋ฉ€ํ‹ฐ GPU ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ด์ œ ์—ฐ์‚ฐ๋Ÿ‰๋ณด๋‹ค ํ†ต์‹  ํŒจํ„ด๊ณผ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์„ ํƒ์ด ๋” ์ค‘์š”ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ ์ƒ์„ฑ๋ณด๋‹ค ๋จผ์ € ๋ฐ์ดํ„ฐ ์ด๋™ ๊ฒฝ๋กœ๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋ธ์—๊ฒŒ ์ปค๋„์„ ๋งก๊ธธ ๋•Œ๋Š” CUDA ๋ฌธ๋ฒ•๋ณด๋‹ค collective ์ˆœ์„œ, partitioning, overlap ์ „๋žต ๊ฐ™์€ ์„ค๊ณ„ ์›๋ฆฌ๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ์ฃผ๋Š” ํŽธ์ด ํšจ๊ณผ์ ์ด๋‹ค.
  • ์‹ค๋ฌด์—์„œ๋Š” NCCL ๊ฐ™์€ ๋ฒ”์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‹œ์ž‘ํ•˜๋˜, ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„๋งŒ TMA๋‚˜ register-level ์ „์†ก์œผ๋กœ ๊ตญ์†Œ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ํ˜„์‹ค์ ์ด๋‹ค.