์ด ๊ณ์ฐ๊ธฐ๋ก ๋ฌด์์ ์ ์ ์๋์
LLM VRAM ์๊ตฌ๋ ๊ณ์ฐ๊ธฐ๋ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ์ ๋ก๋ฉํ๊ณ ์คํํ๋ ๋ฐ GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ๋ง๋ ํ์ํ์ง ์ถ์ ํด ์ค๋๋ค. ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ ์(10์ต ๋จ์)์ ์ ํํ ์ ๋ฐ๋์์ ํ๋ผ๋ฏธํฐ ํ๋๊ฐ ์ฐจ์งํ๋ ๋ฐ์ดํธ ์๋ฅผ ๊ณฑํ ๋ค, ํ์ฑํ ๊ฐ(activation), KV ์บ์, ํ๋ ์์ํฌ ๋ฒํผ ๋ฑ์ ๊ฐ์ํ ์ค๋ฒํค๋ ๊ณ์๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ 10์ต ํ๋ผ๋ฏธํฐ ๋จ์๋ก ์ ๋ ฅํ์ธ์(์: 7B ๋ชจ๋ธ์ด๋ฉด 7, 70B ๋ชจ๋ธ์ด๋ฉด 70). ๊ทธ๋ค์ ์์ํ ๋ฐฉ์์ ๊ณ ๋ฆ ๋๋ค. FP16/BF16์ ๊ฐ์ค์น๋น 2๋ฐ์ดํธ, INT8์ 1๋ฐ์ดํธ, 4๋นํธ๋ 0.5๋ฐ์ดํธ, 2๋นํธ๋ 0.25๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ ์ค๋ฒํค๋ ๊ฐ์ธ 1.2(20% ์ฌ์ ๋ถ)๋ ์ถ๋ก (inference)์ฉ์ผ๋ก ๋ฌด๋ํ ์ถ๋ฐ์ ์ ๋๋ค. ๊ธด ์ปจํ ์คํธ๋ ๋ฐฐ์น ์ฒ๋ฆฌ ์์ ์ด๋ผ๋ฉด ์ด ๊ฐ์ ๋ ๋์ฌ ์ฃผ์ธ์.
๊ณ์ฐ์ ์ค๋ช
$$\text{VRAM (GB)} = \text{Params (B)} \times \text{Bytes/Param} \times \text{Overhead}$$ ์์ ๋ ํญ์ ๋ชจ๋ธ ๊ฐ์ค์น์ ์์ ํฌ๊ธฐ(GB)๋ฅผ ๋ํ๋ ๋๋ค. ์ค๋ฒํค๋ ๊ณ์๋ PyTorch, CUDA, ์ดํ ์ KV ์บ์๊ฐ ์คํ ์ค์ ์ถ๊ฐ๋ก ์๋นํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด ์ฃผ๋๋ฐ, ์ด๋ ๊ฐ์ค์น ํฌ๊ธฐ๋ง์ผ๋ก๋ ๊ณ์ฐ๋์ง ์๋ ๋ถ๋ถ์ ๋๋ค.
์์๋ก ์ดํด๋ณด๊ธฐ
7B ๋ชจ๋ธ์ 4๋นํธ ์ ๋ฐ๋๋ก ๋๋ฆฐ๋ค๋ฉด: \(7 \times 0.5 = 3.5\,\text{GB}\) ๊ฐ์ค์น. ์ฌ๊ธฐ์ ์ค๋ฒํค๋ ๊ณ์ 1.2๋ฅผ ์ ์ฉํ๋ฉด $$3.5 \times 1.2 = 4.2\,\text{GB}$$ ๊ฐ ๋ฉ๋๋ค. 8GB ๋ณด๊ธํ GPU์๋ ์ฌ์ ์๊ฒ ๋ค์ด๊ฐ๋ ์์ค์ด์ฃ . ๊ฐ์ ๋ชจ๋ธ์ FP16์ผ๋ก ๋๋ฆฌ๋ฉด \(7 \times 2 \times 1.2 = 16.8\,\text{GB}\)๊ฐ ํ์ํด, 24GB์ง๋ฆฌ ์นด๋๊ฐ ์์ด์ผ ํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ด ์์น๊ฐ ์ ํํ๊ฐ์? ์๋๋๋ค. ์ด๋๊น์ง๋ ์ถ๋ก ์ฉ ์ถ์ ์น์ ๋๋ค. ์ค์ ์ฌ์ฉ๋์ ์ปจํ ์คํธ ๊ธธ์ด, ๋ฐฐ์น ํฌ๊ธฐ, ์๋น ํ๋ ์์ํฌ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ฉ๊ฐ๋ฐ์ดํธ ๋จ์๊น์ง ๋ฐ์ง๊ธฐ๋ณด๋ค๋ ๊ณํ์ ์ธ์ฐ๋ ์ฉ๋๋ก ํ์ฉํ์ธ์.
ํ์ต(training)์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ ํฌํจ๋๋์? ์๋๋๋ค. ํ์ต์๋ ์ตํฐ๋ง์ด์ ์ํ, ๊ทธ๋๋์ธํธ ๋ฑ ๋๋ฌธ์ ํจ์ฌ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, ์ถ๋ก ์์น์ 4๋ฐฐ ์ด์์ด ๋๋ ๊ฒฝ์ฐ๋ ํํฉ๋๋ค.
์ค๋ฒํค๋๋ ์ผ๋ง๋ก ์ก์์ผ ํ๋์? ์งง์ ์ปจํ ์คํธ ์ถ๋ก ์๋ 1.2๋ฉด ์ถฉ๋ถํฉ๋๋ค. ๊ธด ์ปจํ ์คํธ๋ ๋์ ์์ฒญ ์ฒ๋ฆฌ์๋ 1.3~1.5๋ฅผ ์ฌ์ฉํ์ธ์.