What Is an Inference Engine, Anyway? โ Charles Frye, Modal
ํ ์ค ํต์ฌ
์ด ์์์ ์ถ๋ก ์์ง์ด ์์ฒญ์ ๋ฐ์ ํ ํฐ์ ์์ฑํ๊ธฐ๊น์ง์ ๊ตฌ์กฐ์ ๋ณ๋ชฉ์ ํด๋ถํ๋ฉฐ, ์ค์ ์ฑ๋ฅ์ GPU๋ณด๋ค ์ค์ผ์ค๋ฌยท์บ์ยทํธ์คํธ ์ค๋ฒํค๋ ๊ด๋ฆฌ์์ ๊ฐ๋ฆฐ๋ค๋ ์ ์ ์ค๋ช ํ๋ค.
์๊ฐ๋ณ ์์ฝ
-
0:00
์ถ๋ก ์์ง์ด๋ ๋ฌด์์ธ๊ฐ ํ ํฐ์ ๋ฃ๊ณ ํ ํฐ์ ๋ด๋ ๋จ์ํ ๊ฒ๋ชจ์ต ๋ค์, ๊ณ ์ฑ๋ฅ๊ณผ ์ข์ ๋น์ฉ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ณต์กํ ์์ง ์ค๊ณ๊ฐ ์จ์ด ์๋ค. ์ด ์์์ API ๋ค์์ ์ค์ ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ค์ฌ๋ค๋ณด๋ฉฐ ์ถ๋ก ์์ง์ ํต์ฌ์ ํ์ด๋ธ๋ค.
-
2:15
์ํคํ ์ฒ์ ๊ฐ์ ์ถ๋ก ์์คํ ์ ๋ณดํต HTTP/RPC๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฒ, ํ ํฌ๋์ด์ ยท๋ํ ํฌ๋์ด์ , ๊ทธ๋ฆฌ๊ณ GPU์ ์ผ์ ๋ฐฐ๋ถํ๋ ์ค์ผ์ค๋ฌ์ ๋ชจ๋ธ ์คํ๋ถ๋ก ๋๋๋ค. ์ฑ๋ฅ ๋ฏผ๊ฐํ ํต์ฌ์ ์๋์ชฝ์ ์ค์ผ์ค๋ง๊ณผ GPU ์คํ ๊ณ์ธต์ ์ง์ค๋๋ค.
-
3:27
์ถ๋ก ์์ง๋์ด๋ง์ด ์ค์ํ ์ด์ ํ์ต์ ๋น์ฉ ์ค์ฌ์ด์ง๋ง ์ถ๋ก ์ ์์ต์ ๋ง๋๋ ์ค์ฌ์ด๋ฏ๋ก, ์ถ๋ก ์ต์ ํ๋ ๊ณง ์ฌ์ ์ฑ๊ณผ ์ง๊ฒฐ๋๋ค. ๋๋ถ์ด ์ถ๋ก ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํฐ ์ํ, ํ๋์จ์ด๊น์ง ์ ์คํ์ ๋ค๋ฃจ๋ ์ค์ ํ ์์ง๋์ด๋ง ์์ญ์ด๋ค.
-
6:34
๋ฐ๋ฌผ๊ด ์ค๋ช ๋ฌธ ์ ํ๋ฆฌ์ผ์ด์ Vision language model๊ณผ SGA๋ฅผ ์ด์ฉํด ์ ๋ ฅ ์ฅ๋ฉด์ ๋ฐ๋ฌผ๊ด ์ค๋ช ๋ฌธ์ฒ๋ผ ์์ ํ๋ ์์๋ฅผ ํตํด, ์ถ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ง์ฐ ๋ํํ๊ณผ ๊ณ ์ฒ๋ฆฌ๋ ๋ฐฐ์นํ ์ฌ์ด์ ์ค๊ฐ ์ง์ ์ ๋์ผ ์ ์์์ ๋ณด์ฌ์ค๋ค. ์ด ์ฌ๋ก๋ ์ค์ ๋ฐฐํฌ์ ์ต์ ํ์ ๋งฅ๋ฝ์ ์ค๋ช ํ๋ ์ถ๋ฐ์ ์ด ๋๋ค.
-
8:11
์ธ ๊ฐ์ง ์์ ๋ถ๋ฅ ์ฑ๋ดยท์์ด์ ํธยท๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ์ ์ธ ๋ถ๋ฅ๋ก ๋๋๋ฉด ๊ฐ๊ธฐ ์ํธ์์ฉ์ฑ, ์ถ๋ ฅ ๊ธธ์ด, ์ง์ฐ ํ์ฉ์น๊ฐ ๋ค๋ฅด๋ค. ๊ฐ์ ์ถ๋ก ์์ง์ด๋ผ๋ ์์ ์ ํ์ ๋ฐ๋ผ ๋ฐฐ์น ์ ๋ต๊ณผ ๋ณ๋ชฉ์ด ์์ ํ ๋ฌ๋ผ์ง๋ค.
-
10:16
Prefill, Decode, ๊ทธ๋ฆฌ๊ณ ์ง์ฐ ์งํ ์ ๋ ฅ ํ ํฐ์ ์ฒ๋ฆฌํ๋ prefill๊ณผ ์ถ๋ ฅ์ ์์ฑํ๋ decode๋ ์๋ก ๋ค๋ฅธ ์ฑ๊ฒฉ์ ํ์ ์์ ์ด๋ฉฐ, ๊ฐ๊ฐ time to first token๊ณผ inter-token latency ๊ฐ์ ์งํ๋ก ์ธก์ ํด์ผ ํ๋ค. ์ ๋ ฅ ๊ธธ์ด, ์ถ๋ ฅ ๊ธธ์ด, KV cache ์ฌ์ฌ์ฉ๋ฅ , ํ์ฉ ์ง์ฐ ์์ฐ์ด ์์ง ์ค๊ณ์ ํต์ฌ ๋ณ์๋ค.
-
15:36
์์ฒญ์ด ์์ง์ ํต๊ณผํ๋ ๊ฒฝ๋ก ์ธ๋ถ ์์ฒญ์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํํ์์ ํ ํฐ์ผ๋ก, ๋ค์ GPU ํ ์๋ก ๋ณํ๋ ๋ค ๋ชจ๋ธ์ ๊ฑฐ์ณ ์๋ต์ผ๋ก ๋์๊ฐ๋ค. ์ถ๋ก ์๋ฒ๋ ์ด ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๊ฐ์ธ๋ ๋ฐ๊นฅ์ธต์ด๊ณ , ์ค์ ์ค์ํ ๊ณ์ฐ์ ๊ทธ ์์ชฝ์ ์์ง์ด ๋ด๋นํ๋ค.
-
18:31
์๋ฒ, ์์ง, ์ธ์ , ์ํ ์๋ฒ๋ ์ ์ถ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ๋ปํ๊ณ , ์์ง์ ์์ฒญ์ ๊ณ์ฐ์ผ๋ก ๋ฐ๊พธ๋ ํต์ฌ ์คํ๋ถ๋ฅผ ๋ปํ๋ค. ์ฑ๋ฅ์ ์ ๊ฒฝ ์ฐ๋ ์๊ฐ ์ถ๋ก ์ ์ฌ์ค์ ์ํfulํด์ง๋ฉฐ, ์ธ์ ๊ณผ KV cache ๊ด๋ฆฌ๋ ๋ณดํต ๋ฐ๊นฅ ๋ํผ ๊ณ์ธต์ด ๋งก๋๋ค.
-
20:53
์ค์ผ์ค๋ฌ์ GPU ๋ณ๋ชฉ GPU๊ฐ ์ง์ง ์ผ์ ํ์ง๋ง, ์ด๋ค ์ผ์ ์ธ์ ๋ณด๋ผ์ง ์ ํ๋ ์ค์ผ์ค๋ฌ๊ฐ ์คํ๋ ค ๋ณ๋ชฉ์ด ๋๊ธฐ ์ฝ๋ค. ์ด ๊ณ์ธต์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋จ์ผํ ์ ์ด ์ง์ ์ด์ด์, ๋ณ๋ ฌํ๋ณด๋ค ๋น ๋ฅธ ํธ์คํธ ์ธก ์กฐ์ ์ด ๋ ์ค์ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
-
24:59
์์ฒญ ์์ ์ฃผ๊ธฐ์ ๋ฐฐ์นญ ์์ฒญ์ ํ ํฌ๋์ด์ฆ๋ ๋ค ์ค์ผ์ค๋ฌ์์ ๋ฐฐ์น๋ก ๋ฌถ์ฌ ๋ชจ๋ธ ๋ฌ๋๋ก ๋ค์ด๊ฐ๊ณ , ์์ฑ๋ ํ ํฐ์ ๋ค์ ๋ํ ํฌ๋์ด์ ๋ฅผ ๊ฑฐ์ณ ์๋ต์ผ๋ก ๋์๊ฐ๋ค. ๋ฐฐ์นญ์ GPU ํจ์จ์ ๋์ด๋ ํต์ฌ์ด๋ฉฐ, ํ ํฌ๋์ด์ ์ ๋ํ ํฌ๋์ด์ ๋ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๊ฐ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ํํ๋ค.
-
29:12
ํ ํฐํ์ ์ง์ฐ์ ๋ํ ์ง๋ฌธ ์ ๋ ฅ์ด ๊ธธ์ด์ง์๋ก time to first token์ด ๊ธธ์ด์ง๋ ์ด์ ๋ ํ ํฐํ ๋๋ฌธ๋ง์ด ์๋๋ผ, ๊ฒฐ๊ตญ ๋ ํฐ prefill ๊ณ์ฐ๊ณผ ํ์ ์ง์ฐ์ด ๋์ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ ํฌ๋์ด์ ๋ ๋ณ๋ชฉ์ด ๋ ์๋ ์์ง๋ง, ๋์ฒด๋ก prefill๊ณผ decode๊ฐ ์ง์ฐ์ ์ฃผ๋ ์์ธ์ด๋ค.
-
32:56
ํ๋ก์ธ์ค, Python, ๊ทธ๋ฆฌ๊ณ ํธ์คํธ ์ค๋ฒํค๋ ์๋ฒ IO, ํ ํฐํ, ๋ํ ํฐํ, ๋ชจ๋ธ ๋ฌ๋๋ฅผ ๋ถ๋ฆฌํ ๋ฉํฐํ๋ก์ธ์ค ๊ตฌ์กฐ๋ ๊ฐ ๊ตฌ์ฑ์์์ ๋ ๋ฆฝ์ฑ๊ณผ ์ง์ฐ ์ต์ ํ๋ฅผ ๋๋๋ค. Python์ GIL ์ ์ฝ์ด ์์ง๋ง GPU/C++ ์ฐ๋์ด ๋ฐ์ด๋๊ณ , ๋ ์ค์ํ ๋ณ๋ชฉ์ธ ์ค์ผ์ค๋ฌ๋ Rust ์ฌ์์ฑ์ ์ ๋ ฅํ ๋์์ด ๋ ์ ์๋ค.
-
36:36
๋ชจ๋ธ ์คํ๊ณผ ์ปค๋ ๋ฐฑ์๋ ์์ง์ ๋ชจ๋ ์ปค๋์ ์ง์ ๊ตฌํํ๊ธฐ๋ณด๋ค, ์ธ๋ถ ์ปค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฑ์๋๋ฅผ ์กฐํฉํด ๋ชจ๋ธ ์คํ์ ๊ตฌ์ฑํ๋ค. attention, MLP, MoE routing ๊ฐ์ ํต์ฌ ์ฐ์ฐ์ ๋ฐฑ์๋ ์ ํ๊ณผ ์ปค๋ ์กฐํฉ์ด ์ฑ๋ฅ์ ์ข์ฐํ๋ค.
-
44:41
๋์์ฑ ์ ์ด์ ์บ์ ์๋ ฅ ๋๋ ๋์ ์์ฒญ์์๋ KV cache๋ฅผ ์ฐ์ ๋ณด์กดํ๊ณ , ํ์ํ ๋๋ง ๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ CPU ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ๋ก ๋ฐ์ด๋ด๋ ์์ผ๋ก ์์์ ๊ด๋ฆฌํ๋ค. ์บ์ thrashing์ด๋ ๋์คํฌ ์ค์์ด ๋ฐ์ํ๋ฉด ์์ง์ด ์ฌ์ค์ ์๋ชป ๋ฐฐ์น๋ ์ํ๋ผ๊ณ ๋ด์ผ ํ๋ค.
-
46:43
KV ์บ์์ prefix ์ฌ์ฌ์ฉ attention์ ๊ทผ๋ณธ์ ๋น์ฉ์ ์ค์ด๋ ค๋ฉด ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ์ฌ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํนํ ๊ณตํต prefix๊ฐ ๋ง์ ์์ฒญ์์ ํฐ ์ด๋์ด ๋๋ค. ํ์ด์ง ๊ธฐ๋ฐ KV cache์ attention ์ปค๋์ ๊ฒฐํฉ์ ๊ธด ํ๋กฌํํธ์ ํฐ ์์คํ ํ๋กฌํํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ํด์ค๋ค.
-
49:02
ํธ์คํธ ์ค๋ฒํค๋์ CUDA ๊ทธ๋ํ GPU๊ฐ ์ฌ์ง ์๊ณ ์ผํ๋๋ก ๋ง๋ค๋ ค๋ฉด CPU ์ธก์์ ๋ถํ์ํ ๋๊ธฐํ๋ฅผ ์ค์ฌ์ผ ํ๋ค. CUDA graphs๋ ์ฌ๋ฌ ์ปค๋ ๋ฐ์น๋ฅผ ํ๋์ DAG๋ก ๋ฌถ์ด ํธ์คํธ ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ๋ฎ์ถ๋ค.
-
50:50
Speculative decoding ๋ณ๋ speculator๊ฐ ๋ค์ ํ ํฐ ํ๋ณด๋ฅผ ๋จผ์ ์์ธกํ๊ณ , target model์ด ์ด๋ฅผ ํ ๋ฒ์ ๊ฒ์ฆํ๋ ๋ฐฉ์์ผ๋ก decode๋ฅผ ๋ณ๋ ฌํํ ์ ์๋ค. speculator๊ฐ ์ข์์ง์๋ก decode throughput์ด ๊ฑฐ์ ์ ํ์ผ๋ก ์ฆ๊ฐํด, ๋ํ ๋ชจ๋ธ์์๋ ๋งค์ฐ ํฐ ์๋ ํฅ์์ ๋ง๋ ๋ค.
-
53:53
์ ํ์ฑ๊ณผ ์ฑ๋ฅ ๊ด์ธก์ฑ ์ถ๋ก ์ด์์์๋ ๋ชจ๋ธ ํ์ง ๋ฌธ์ , tokenizer ๋ฒ๊ทธ, ์ฑ๋ฅ ํ๊ท, ๋ฉ์ฒ๋ณ ํธ์ฐจ๋ฅผ ๋ชจ๋ ๊ตฌ๋ถํด์ ๋ด์ผ ํ๋ค. ์ถฉ๋ถํ ๋ก๊ทธ, eval, trace, ํ ํฐ ID ๊ธฐ๋ก์ด ์์ด์ผ ์์ฐ ํ๊ฒฝ์์ ๋ฌธ์ ๋ฅผ ์ฌํํ๊ณ ์ง๋จํ ์ ์๋ค.
-
56:20
๋ถํ ์ํ์์ ๋์๋ณด๋ ์ฝ๊ธฐ ๋ถํ๊ฐ ์ฆ๊ฐํ๋ฉด first token ์ง์ฐ๊ณผ inter-token latency๊ฐ ํจ๊ป ์ ํ๋๊ณ , ์ด๋ ํ์๊ณผ GPU ๊ฒฝ์์ ์ ํธ๋ก ์ฝ์ด์ผ ํ๋ค. ํด๊ฒฐ์ฑ ์ ๋ณดํต ์ replica๋ฅผ ๋์ ์์๋ฅผ ๋ถ์ฐํ๋ ๊ฒ์ด๋ฉฐ, ๋ ๊น์ ๋ถ์์๋ ์์คํ ํ๋กํ์ผ๋ฌ๊ฐ ํ์ํ๋ค.
-
58:16
์ฐธ์กฐ ์์ง๊ณผ ์ถ๊ฐ ์๋ฃ mini SGA์ Nano VLM ๊ฐ์ ๋จ์ ๊ตฌํ์ ์์ง ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ฐ๊ธฐ์ ์ข์ ์ถ๋ฐ์ ์ด๋ค. ์ค๋ฌด์์๋ ๋ฌธ์, ๋ธ๋ก๊ทธ, ๋ ธํธ๋ถ, ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํจ๊ป ์ฝ๊ณ , ์ฝ๋ฉ ์์ด์ ํธ๋ก ๊ตฌ์กฐ๋ฅผ ํ์ํ๋ ๋ฐฉ์์ด ํนํ ์ ์ฉํ๋ค.
์ค๋ฌด ์ธ์ฌ์ดํธ
- ์ถ๋ก ์ต์ ํ์ ํต์ฌ์ ๋ชจ๋ธ ์์ฒด๋ณด๋ค๋ ์ค์ผ์ค๋ง, ์บ์ ๊ด๋ฆฌ, ํธ์คํธ ์ค๋ฒํค๋ ์ ๊ฑฐ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก, ์ฑ๋ฅ ๊ฐ์ ์ฐ์ ์์๋ฅผ GPU ์ปค๋๋ง ๋ณด์ง ๋ง๊ณ ์์คํ ์ ์ฒด๋ก ์ก์์ผ ํ๋ค.
- ์์ ์ ํ๋ณ๋ก prefill ์ค์ฌ์ธ์ง decode ์ค์ฌ์ธ์ง, prefix reuse๊ฐ ๋์์ง ๋ฎ์์ง๋ถํฐ ๋ถ๋ฅํ๋ฉด ๋ฐฐ์น ์ ๋ต๊ณผ SLO ์ค์ ์ด ํจ์ฌ ๋ช ํํด์ง๋ค.
- ์ด์ ๋จ๊ณ์์๋ ์ง์ฐ ๋ฌธ์ ๋ฅผ โ๋๋ฆฌ๋คโ๋ก ๋ญ๋ฑ๊ทธ๋ฆฌ์ง ๋ง๊ณ first token, inter-token, ํ์, KV cache ์๋ ฅ, replica ๊ฐ ํธ์ฐจ๋ก ์ชผ๊ฐ์ ๊ด์ธกํด์ผ ์์ธ์ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ค.