Weight Folding, CUDA Streams, and the Bug That Made My Model Speak Backwards โ Filip Makraduli
ํ ์ค ํต์ฌ
RMS norm์ ๋ช ๊ฐ์ง ๋์์ ๋ณํ์ผ๋ก ๊ฐ๋ณ๊ฒ ๋ง๋ค๊ณ CUDA ์คํธ๋ฆผ์ ๋ณ๋ ฌํํด ๋ชจ๋ธ ์๋๋ฅผ ๋์ด๋, ์ปค๋ ์์ค์ ๋๊ธฐํ ์ค์๋ฅผ ์ก์์ผ ์ค์ ๋ก ์ ์ ๋์ํ๋ค๋ ์ ์ ๋ณด์ฌ์ค๋ค.
์๊ฐ๋ณ ์์ฝ
-
0:00
RMS norm์ ์ํ ๋ ์ค์ ๋์ RMS norm์ ๋ ์ธ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฐ๋จํ ๋์์ ๋ณํ์ด ํต์ฌ์ด๋ฉฐ, ์ด๋ Layer Norm์ด RMS norm์ผ๋ก ๋์ฒด๋ ํ๋ฆ์ฒ๋ผ ํธ๋์คํฌ๋จธ ๋ด๋ถ์ ํ์ค์ ๋ค์ ๊ฐ์ ํ๋ ค๋ ์๋๋ค. FlashAttention์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ์๋ณต๊ณผ ํต์ ์ ์ค์ด๋ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ค.
-
2:07
์ฐ์ฐ์ด ๊ฑฐ์ ์์ด๋ ์๊ฐ์ด ๋ง์ด ๋๋ ์ด์ RMS norm์ ์ค์ ์ํ ์ฐ์ฐ๋์ ์ ์ง๋ง ๋์ฝ๋ ๋จ๊ณ์์ ์ฌ๋ฌ ๋ฒ ์คํ๋๋ฉฐ, ์์ ์ค๋ฒํค๋์ ๋ฉ๋ชจ๋ฆฌ ์ด๋ ๋๋ฌธ์ wall time์ด ํฌ๊ฒ ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ ๊ทํ์ matmul์ ๋ ์ด์ดํ๊ฒ ๋ฌถ๊ณ , ์คํ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๋ฐฉํฅ์ด ์ค์ํ๋ค.
-
3:44
๊ฐ์ค์น ์ ๊ธฐ, ์ง์ฐ๋ ๋๋์ , ์ ๊ฑฐ๋ ์ฌ์ ์ ๊ทํ ๊ฐ์ค์น ์ ๊ธฐ(weight folding), ๋๋์ ์ง์ฐ(deferred division), ์ฌ์ ์ ๊ทํ ์ ๊ฑฐ(pre norm dropped)๋ผ๋ ์ธ ๊ฐ์ง ๋์์ ํธ๋ฆญ์ผ๋ก RMS norm ๋น์ฉ์ ์ค์ธ๋ค. ํนํ ์ผ๋ถ ์ฐ์ฐ์ ์คํ๋ผ์ธ์์ ๋ฏธ๋ฆฌ ํฉ์น๊ณ , ์ผ๋ถ๋ ๋ณ๋ ฌํํ๋ฉฐ, ์ต์ ๊ตฌ์กฐ์ฒ๋ผ RMS๊ฐ ๋ ๋ฒ ๋ฑ์ฅํ๋ ๊ฒฝ์ฐ์๋ ํ๋๋ฅผ ์๋ตํ ์ ์๋ค.
-
6:33
๊ณผ๊ฑฐ์์ ๋์จ ์ถ๋ ฅ ์ง์ ๊ตฌํํ ์คํ์์ ์ถ๋ ฅ์ด ํ ๋จ๊ณ ๋ฆ๊ฒ ๋์ค๊ณ ๊ฐ์ ๋จ์ด๊ฐ ๋ฐ๋ณต๋๋ ์ด์ ํ์์ด ๋ํ๋๋ฉด์ GPU ์คํธ๋ฆผ ๋ฌธ์ ๋ฅผ ์์ฌํ๊ฒ ๋๋ค. ์ด ํ์์ ๋จ์ํ ํ์ง ์ ํ๊ฐ ์๋๋ผ ์ด์ ๋จ๊ณ์ ๊ฐ์ด ์์ฌ ๋ค์ด์ค๋ ๋๊ธฐํ ์ค๋ฅ์ ์งํ๋ค.
-
7:25
Tensor cores์ CUDA cores์ ๋ณ๋ ฌ ์คํ Tensor cores๋ matmul์, CUDA cores๋ ์์๋ณ ์ฐ์ฐ๊ณผ reductions, sqrt ๊ฐ์ ๋ณด์กฐ ๊ณ์ฐ์ ๋งก๊ฒจ ๋์์ ๋๋ฆด ์ ์๋ค. ์์ฐจ ์คํ์ผ๋ก ์๊ธฐ๋ ์ ํด ์๊ฐ์ ์ค์ด๋ ค๋ฉด Python์ด ์๋๋ผ CUDA ์ฝ๋ ์์ค์์ ๋ณ๋ ฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ์ง์ผ ํ๋ค.
-
8:45
์๋ฌต์ ์กฐ์ธ๊ณผ ๋ ์ด์ค ์ปจ๋์ ๋ ์คํธ๋ฆผ์ ์ข ๋ฃ๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฒ๋ฆฌํ ํ์ ํ์ชฝ ์์ ์ด ๋๋๊ธฐ ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ race condition์ด ๋ฐ์ํ๋ค. ๋จ์ ํ ์คํธ์ ์งง์ ์์ฑ์์๋ ๋๋ฌ๋์ง ์์์ง๋ง, ๊ธด ์์ฑ์์ ๊ณผ๊ฑฐ ๊ฐ์ ์ฝ๋ ๋ฌธ์ ๊ฐ ๋ํ๋๋ฉด์ ๋ช ์์ join์ด ํ์ํจ์ด ๋๋ฌ๋๋ค.
-
9:58
์์ชฝ ์คํธ๋ฆผ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ค๊ธฐ matmul๊ณผ RMS ์์ ์ ๋์ ๊ฐ๊ฐ ํ์ํ ๋ค, post scale์ด ๋ ์คํธ๋ฆผ ๋ชจ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ก ๋ฐ๊พธ๋ฉด ์ค๋๋ ๋ฒํผ ๊ฐ์ ์ฝ์ง ์๊ฒ ๋๋ค. ์ด ์์ ์ผ๋ก ๋ชจ๋ธ์ด ๊ฑฐ๊พธ๋ก ๋งํ๋ ๋ฒ๊ทธ๊ฐ ์ฌ๋ผ์ง๊ณ , ์ ์ํ ๋ณ๋ ฌํ๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ค.
-
10:42
์คํ ๋ชจ๋ธ์์์ ๊ฒฐ๊ณผ์ ๋ฐ๋ก ์ธ ์ ์๋ ๊ฒ llama ๊ณ์ด์ ์ค์ฌ์ผ๋ก ์ฌ๋ฌ ์คํ์ ํ๊ณ , weight folding ๊ฐ์ ๋จ์ํ ๋ณํ๋ง์ผ๋ก๋ ๊ฐ์ ์ด ๋ณด์๋ค. ์ผ๋ถ๋ Transformer Tricks์ ์ฝ๋๋ flashify๋ก ๋ฐ๋ก ์ ์ฉํ ์ ์๊ณ , torch compile์ด๋ quantized models์๋ ๋ง๋ฌผ๋ฆฌ๋ฉฐ, Hugging Face ๋ชจ๋ธ๊ณผ ๋ฐฐํฌ์ฉ ํด๋ฌ์คํฐ๊น์ง ์ฐ๊ฒฐํ ์ ์๋ค.
-
13:54
์๋ ์๋ํฌ์ธํธ์์ ์ปค๋ ์์ ์ ํ ์ ์๋ ์ด์ kernel manipulation์ด๋ flash norm ๊ฐ์ ์์ ์ inference๋ฅผ ์์ ํ์ง ๋ชปํ rented endpoint์์๋ ๋ค๋ฃจ๊ธฐ ์ด๋ ต๋ค. ์คํ ์์ค ํด๋ฌ์คํฐ์ ๋ชจ๋ธ ์๋น์ ํจ๊ป ์์ ํด์ผ ์์ ๋ชจ๋ธ์ ์ ์ฐํ๊ฒ ๋ฐ๊พธ๊ณ , ํ์ยทAPI ์ ์ดยท์์ฐ ๋ฐฐํฌ๊น์ง ํ ๋ฒ์ ์คํํ ์ ์๋ค.
-
16:00
๋ ผ๋ฌธ, ์ ์ฅ์, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฝ์ฒ ์ด ์์ ์ ๋ ผ๋ฌธ๊ณผ repo, Hugging Face ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ PR๋ก ์ด์ด์ง ์ฐ๊ตฌยท๊ตฌํ ์ฌ์ ์ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค. ์คํ ์์ค ๋ชจ๋ธ ๊ฐ์ ๊ณผ ๋ฐฐํฌ์ ๊ด์ฌ์ด ์์ผ๋ฉด LinkedIn๊ณผ ๊ด๋ จ ์ ์ฅ์๋ฅผ ํตํด ์ถ๊ฐ ์ง๋ฌธ์ด๋ ๊ธฐ์ฌ๋ฅผ ์ด์ด๊ฐ ์ ์๋ค.
์ค๋ฌด ์ธ์ฌ์ดํธ
- ํธ๋์คํฌ๋จธ ์ต์ ํ๋ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ณด๋ค๋ ๋ฉ๋ชจ๋ฆฌ ์ด๋, ์์ ์ค๋ฒํค๋, ์คํธ๋ฆผ ๋๊ธฐํ ๊ฐ์ ์์คํ ๋น์ฉ์ ์ค์ด๋ ๋ฐ์ ์ฒด๊ฐ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋๋ค.
- CUDA ์์ค์ ๋ณ๋ ฌํ๋ ๋จ์ ํ ์คํธ๋ฅผ ํต๊ณผํด๋ ์ฅ๊ธฐ ์คํ์์ ๊นจ์ง ์ ์์ผ๋ฏ๋ก, ์งง์ ๊ฒ์ฆ ์ธ์ ๊ธด ์์ฑ๊ณผ race condition ์ ๊ฒ์ด ํ์๋ค.
- ์ฐ๊ตฌ์ฉ ์ต์ ํ๋ผ๋ ์คํ ์์ค ํด๋ฌ์คํฐ์ ๋ฐฐํฌ ๊ฒฝ๋ก๋ฅผ ํจ๊ป ๊ฐ์ถ๋ฉด, ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ์ ํ ์์ค์ผ๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ ์ฌ์์ง๋ค.