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

Weight Folding, CUDA Streams, and the Bug That Made My Model Speak Backwards โ€” Filip Makraduli

AI Engineer ยท 2026-09-20 04:00 ยท 17:18

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

RMS norm์„ ๋ช‡ ๊ฐ€์ง€ ๋Œ€์ˆ˜์  ๋ณ€ํ˜•์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค๊ณ  CUDA ์ŠคํŠธ๋ฆผ์„ ๋ณ‘๋ ฌํ™”ํ•ด ๋ชจ๋ธ ์†๋„๋ฅผ ๋†’์ด๋˜, ์ปค๋„ ์ˆ˜์ค€์˜ ๋™๊ธฐํ™” ์‹ค์ˆ˜๋ฅผ ์žก์•„์•ผ ์‹ค์ œ๋กœ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์„ ๋ณด์—ฌ์ค€๋‹ค.

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

  1. 0:00
    RMS norm์„ ์œ„ํ•œ ๋‘ ์ค„์˜ ๋Œ€์ˆ˜ RMS norm์„ ๋” ์‹ธ๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ„๋‹จํ•œ ๋Œ€์ˆ˜์  ๋ณ€ํ˜•์ด ํ•ต์‹ฌ์ด๋ฉฐ, ์ด๋Š” Layer Norm์ด RMS norm์œผ๋กœ ๋Œ€์ฒด๋œ ํ๋ฆ„์ฒ˜๋Ÿผ ํŠธ๋žœ์Šคํฌ๋จธ ๋‚ด๋ถ€์˜ ํ‘œ์ค€์„ ๋‹ค์‹œ ๊ฐœ์„ ํ•˜๋ ค๋Š” ์‹œ๋„๋‹ค. FlashAttention์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ์™•๋ณต๊ณผ ํ†ต์‹ ์„ ์ค„์ด๋Š” ์‚ฌ๊ณ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.
  2. 2:07
    ์—ฐ์‚ฐ์ด ๊ฑฐ์˜ ์—†์–ด๋„ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“œ๋Š” ์ด์œ  RMS norm์€ ์‹ค์ œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ๋Ÿ‰์€ ์ ์ง€๋งŒ ๋””์ฝ”๋“œ ๋‹จ๊ณ„์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋ฉฐ, ์‹œ์ž‘ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ด๋™ ๋•Œ๋ฌธ์— wall time์ด ํฌ๊ฒŒ ๋Š˜์–ด๋‚œ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๊ทœํ™”์™€ matmul์„ ๋” ์ด˜์ด˜ํ•˜๊ฒŒ ๋ฌถ๊ณ , ์‹คํ–‰ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์ด ์ค‘์š”ํ•˜๋‹ค.
  3. 3:44
    ๊ฐ€์ค‘์น˜ ์ ‘๊ธฐ, ์ง€์—ฐ๋œ ๋‚˜๋ˆ—์…ˆ, ์ œ๊ฑฐ๋œ ์‚ฌ์ „ ์ •๊ทœํ™” ๊ฐ€์ค‘์น˜ ์ ‘๊ธฐ(weight folding), ๋‚˜๋ˆ—์…ˆ ์ง€์—ฐ(deferred division), ์‚ฌ์ „ ์ •๊ทœํ™” ์ œ๊ฑฐ(pre norm dropped)๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ๋Œ€์ˆ˜์  ํŠธ๋ฆญ์œผ๋กœ RMS norm ๋น„์šฉ์„ ์ค„์ธ๋‹ค. ํŠนํžˆ ์ผ๋ถ€ ์—ฐ์‚ฐ์€ ์˜คํ”„๋ผ์ธ์—์„œ ๋ฏธ๋ฆฌ ํ•ฉ์น˜๊ณ , ์ผ๋ถ€๋Š” ๋ณ‘๋ ฌํ™”ํ•˜๋ฉฐ, ์ตœ์‹  ๊ตฌ์กฐ์ฒ˜๋Ÿผ RMS๊ฐ€ ๋‘ ๋ฒˆ ๋“ฑ์žฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. 6:33
    ๊ณผ๊ฑฐ์—์„œ ๋‚˜์˜จ ์ถœ๋ ฅ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ์‹คํ—˜์—์„œ ์ถœ๋ ฅ์ด ํ•œ ๋‹จ๊ณ„ ๋Šฆ๊ฒŒ ๋‚˜์˜ค๊ณ  ๊ฐ™์€ ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ์ด์ƒ ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚˜๋ฉด์„œ GPU ์ŠคํŠธ๋ฆผ ๋ฌธ์ œ๋ฅผ ์˜์‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ํ˜„์ƒ์€ ๋‹จ์ˆœํ•œ ํ’ˆ์งˆ ์ €ํ•˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฐ’์ด ์„ž์—ฌ ๋“ค์–ด์˜ค๋Š” ๋™๊ธฐํ™” ์˜ค๋ฅ˜์˜ ์ง•ํ›„๋‹ค.
  5. 7:25
    Tensor cores์™€ CUDA cores์˜ ๋ณ‘๋ ฌ ์‹คํ–‰ Tensor cores๋Š” matmul์„, CUDA cores๋Š” ์›์†Œ๋ณ„ ์—ฐ์‚ฐ๊ณผ reductions, sqrt ๊ฐ™์€ ๋ณด์กฐ ๊ณ„์‚ฐ์„ ๋งก๊ฒจ ๋™์‹œ์— ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์ฐจ ์‹คํ–‰์œผ๋กœ ์ƒ๊ธฐ๋Š” ์œ ํœด ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด Python์ด ์•„๋‹ˆ๋ผ CUDA ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ๋ณ‘๋ ฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์งœ์•ผ ํ•œ๋‹ค.
  6. 8:45
    ์•”๋ฌต์  ์กฐ์ธ๊ณผ ๋ ˆ์ด์Šค ์ปจ๋””์…˜ ๋‘ ์ŠคํŠธ๋ฆผ์˜ ์ข…๋ฃŒ๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ํƒ“์— ํ•œ์ชฝ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์— ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋Š” race condition์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ์งง์€ ์ƒ์„ฑ์—์„œ๋Š” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜์ง€๋งŒ, ๊ธด ์ƒ์„ฑ์—์„œ ๊ณผ๊ฑฐ ๊ฐ’์„ ์ฝ๋Š” ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ๋ช…์‹œ์  join์ด ํ•„์š”ํ•จ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.
  7. 9:58
    ์–‘์ชฝ ์ŠคํŠธ๋ฆผ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋งŒ๋“ค๊ธฐ matmul๊ณผ RMS ์ž‘์—…์˜ ๋์„ ๊ฐ๊ฐ ํ‘œ์‹œํ•œ ๋’ค, post scale์ด ๋‘ ์ŠคํŠธ๋ฆผ ๋ชจ๋‘๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ๋ฐ”๊พธ๋ฉด ์˜ค๋ž˜๋œ ๋ฒ„ํผ ๊ฐ’์„ ์ฝ์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ์ด ์ˆ˜์ •์œผ๋กœ ๋ชจ๋ธ์ด ๊ฑฐ๊พธ๋กœ ๋งํ•˜๋˜ ๋ฒ„๊ทธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ , ์ œ์•ˆํ•œ ๋ณ‘๋ ฌํ™”๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
  8. 10:42
    ์˜คํ”ˆ ๋ชจ๋ธ์—์„œ์˜ ๊ฒฐ๊ณผ์™€ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ llama ๊ณ„์—ด์„ ์ค‘์‹ฌ์œผ๋กœ ์—ฌ๋Ÿฌ ์‹คํ—˜์„ ํ–ˆ๊ณ , weight folding ๊ฐ™์€ ๋‹จ์ˆœํ•œ ๋ณ€ํ˜•๋งŒ์œผ๋กœ๋„ ๊ฐœ์„ ์ด ๋ณด์˜€๋‹ค. ์ผ๋ถ€๋Š” Transformer Tricks์˜ ์ฝ”๋“œ๋‚˜ flashify๋กœ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , torch compile์ด๋‚˜ quantized models์—๋„ ๋งž๋ฌผ๋ฆฌ๋ฉฐ, Hugging Face ๋ชจ๋ธ๊ณผ ๋ฐฐํฌ์šฉ ํด๋Ÿฌ์Šคํ„ฐ๊นŒ์ง€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  9. 13:54
    ์ž„๋Œ€ ์—”๋“œํฌ์ธํŠธ์—์„œ ์ปค๋„ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ  kernel manipulation์ด๋‚˜ flash norm ๊ฐ™์€ ์ž‘์—…์€ inference๋ฅผ ์†Œ์œ ํ•˜์ง€ ๋ชปํ•œ rented endpoint์—์„œ๋Š” ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋ชจ๋ธ ์„œ๋น™์„ ํ•จ๊ป˜ ์†Œ์œ ํ•ด์•ผ ์ž‘์€ ๋ชจ๋ธ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ”๊พธ๊ณ , ํ์ž‰ยทAPI ์ œ์–ดยท์ƒ์‚ฐ ๋ฐฐํฌ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  10. 16:00
    ๋…ผ๋ฌธ, ์ €์žฅ์†Œ, ๊ทธ๋ฆฌ๊ณ  ์—ฐ๋ฝ์ฒ˜ ์ด ์ž‘์—…์€ ๋…ผ๋ฌธ๊ณผ repo, Hugging Face ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ PR๋กœ ์ด์–ด์ง„ ์—ฐ๊ตฌยท๊ตฌํ˜„ ์—ฌ์ •์˜ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋ธ ๊ฐœ์„ ๊ณผ ๋ฐฐํฌ์— ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฉด LinkedIn๊ณผ ๊ด€๋ จ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด๋‚˜ ๊ธฐ์—ฌ๋ฅผ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

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

  • ํŠธ๋žœ์Šคํฌ๋จธ ์ตœ์ ํ™”๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๋ณด๋‹ค๋„ ๋ฉ”๋ชจ๋ฆฌ ์ด๋™, ์‹œ์ž‘ ์˜ค๋ฒ„ํ—ค๋“œ, ์ŠคํŠธ๋ฆผ ๋™๊ธฐํ™” ๊ฐ™์€ ์‹œ์Šคํ…œ ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฐ์„œ ์ฒด๊ฐ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋‚œ๋‹ค.
  • CUDA ์ˆ˜์ค€์˜ ๋ณ‘๋ ฌํ™”๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด๋„ ์žฅ๊ธฐ ์‹คํ–‰์—์„œ ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์งง์€ ๊ฒ€์ฆ ์™ธ์— ๊ธด ์ƒ์„ฑ๊ณผ race condition ์ ๊ฒ€์ด ํ•„์ˆ˜๋‹ค.
  • ์—ฐ๊ตฌ์šฉ ์ตœ์ ํ™”๋ผ๋„ ์˜คํ”ˆ ์†Œ์Šค ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋ฐฐํฌ ๊ฒฝ๋กœ๋ฅผ ํ•จ๊ป˜ ๊ฐ–์ถ”๋ฉด, ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ œํ’ˆ ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.