์ต๊ทผ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ํ์ตํ๊ฑฐ๋ ๋ฐฐํฌํ ๋, float32
(FP32) ๋์ float16
, bfloat16
, ์ฌ์ง์ด float64
(FP64)๋ฅผ ๊ณ ๋ คํ๋ ์ฌ๋ก๊ฐ ๋๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ด ์ ํ์ ๋จ์ํ ์ ๋ฐ๋์ ๋ฌธ์ ๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ, ํ์ต ์์ ์ฑ, ์ฐ์ฐ ์ฑ๋ฅ๊น์ง ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ๊ฒฐ์ ์
๋๋ค.
์ด๋ฒ ๊ธ์์๋ ํนํ FP32์์ FP64๋ก ๋ณํํ ๊ฒฝ์ฐ ์ด๋ค ๋ณํ๊ฐ ์ผ์ด๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์ ๋๋ถ๋ถ์ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ๊ฐ ์ฌ์ ํ FP32๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฑํํ๋์ง์ ๋ํด ์ค์ ์ ์ธ ๊ด์ ์์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๐ ๋ถ๋์์์ (Floating Point)์ ๊ธฐ๋ณธ: FP16, FP32, FP64
ํ์ | ๋นํธ ์ | ๋ฉ๋ชจ๋ฆฌ | ์ ํจ ์๋ฆฟ์ | ํํ ๋ฒ์ | ์ฃผ ์ฌ์ฉ์ฒ |
---|---|---|---|---|---|
FP16 | 16bit | 2B | ์ฝ 3~4์๋ฆฌ | ยฑ6.5e4 | ๋ชจ๋ฐ์ผ, ๊ทธ๋ํฝ, ์ผ๋ถ CNN |
FP32 | 32bit | 4B | ์ฝ 7์๋ฆฌ | ยฑ3.4e38 | ๋๋ถ๋ถ์ ๋ฅ๋ฌ๋ ์ฐ์ฐ |
FP64 | 64bit | 8B | ์ฝ 16์๋ฆฌ | ยฑ1.8e308 | ๊ณผํ ๊ณ์ฐ, ๊ธ์ต, ์๋ฎฌ๋ ์ด์ |
โ๏ธ FP64๋ก ๋ฐ๊พธ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ์ผ๋ง๋ ๋์ด๋ ๊น?
๋จ์ํฉ๋๋ค:
FP32 โ FP64 ์ ํ ์, ๊ฐ์ค์น ํ๋๋น ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ํํ 2๋ฐฐ ์ฆ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 10M๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ๋ชจ๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด:
- FP32์ผ ๊ฒฝ์ฐ:
10M x 4B = 40MB
- FP64์ผ ๊ฒฝ์ฐ:
10M x 8B = 80MB
์ฌ๊ธฐ์ ์ตํฐ๋ง์ด์ ์ํ(์: Adam์ m
, v
)๊น์ง ๊ณ ๋ คํ๋ฉด ์ค์ ํ์ต ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ 2๋ฐฐ ์ด์ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
๐ซ FP64๊ฐ ์คํ๋ ค ๋ฅ๋ฌ๋ ํ์ต์ ๋ถ๋ฆฌํ ์ด์
- ์ ๋ฐ๋๊ฐ ๋๋ค๊ณ ๊ผญ ์ข์ ๊ฑด ์๋๋ค
- ๋๋ถ๋ถ์ ๋ฅ๋ฌ๋ ์ฐ์ฐ์ ๊ทธ๋ ๊ฒ ๋์ ์ ๋ฐ๋๋ฅผ ์๊ตฌํ์ง ์์.
- ์คํ๋ ค ํ์ต ์ค ๋ฐ์ํ๋ gradient noise๋ dropout ๋ฑ์ regularization์ผ๋ก ์ธํด FP64๋ ๊ณผ๋ํ ์ฐ์ฐ ๋ญ๋น๊ฐ ๋ ์ ์์.
- ํ๋์จ์ด ์ง์์ด ๋จ์ด์ง
- ๋๋ถ๋ถ์ GPU(NVIDIA RTX ์๋ฆฌ์ฆ, A100 ๋ฑ)๋ FP32, FP16์๋ Tensor Core๋ฅผ ์ง์ํ์ง๋ง, FP64๋ ๋๋ฆฐ ์ฐ์ฐ ์ฅ์น์ ๋งคํ๋จ.
- ์: A100์ ๊ฒฝ์ฐ FP32๋ 19.5 TFLOPS, FP64๋ 9.7 TFLOPS (์ ๋ฐ ์์ค)
- ๋ชจ๋ธ ์ ์ฅ ๋ฐ ์ ์ก ๋น์ฉ ์ฆ๊ฐ
- ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ 2๋ฐฐ๊ฐ ๋๋ฉด ์ ์ฅ ๊ณต๊ฐ, ๋คํธ์ํฌ ์ ์ก ๋น์ฉ๋ 2๋ฐฐ
โ FP32๊ฐ ์ฌ์ ํ ํ์ค์ธ ์ด์
- ์ถฉ๋ถํ ์ ๋ฐ๋: ๋๋ถ๋ถ์ CNN, Transformer ๊ณ์ด ๋ชจ๋ธ์์ 32bit ์ ๋ฐ๋๋ฉด ํ์ต ์์ ์ฑ๊ณผ ์ ํ๋ ๋ชจ๋ ํ๋ณด ๊ฐ๋ฅ
- ์ต์ ์ ํธ๋ ์ด๋์คํ: ์ฐ์ฐ ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ, ์ ๋ฐ๋ ์ฌ์ด์์ ๊ท ํ ์กํ ์ ํ
- ํ๋ ์์ํฌ ์ต์ ํ: TensorFlow, PyTorch ๋ชจ๋ FP32์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ pre-trained ๋ชจ๋ธ๋ FP32๋ก ์ ๊ณต
๐ก Mixed Precision์ด ๋ ์ค๋ฅด๋ ์ด์
ํ๋ ๋ฅ๋ฌ๋์์๋ ์คํ๋ ค mixed precision(์: float16
์ฐ์ฐ + float32
์ ์ฅ)์ด ๋ ์ฃผ๋ชฉ๋ฐ๊ณ ์์ต๋๋ค.
- ์ฐ์ฐ์ ๋น ๋ฅธ FP16,
- ๊ฐ์ค์น ์ ์ฅ์ ์์ ์ ์ธ FP32
- ์ด๋ฅผ ํตํด ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋ชจ๋ ํ๋ณดํ ์ ์์ต๋๋ค.
TensorFlow์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค:
pythonCopyEditfrom tensorflow.keras import mixed_precision
mixed_precision.set_global_policy('mixed_float16')
๐งพ ๋ง๋ฌด๋ฆฌ: ์ค๋ฌด์์์ ์ถ์ฒ
์ํฉ | ์ถ์ฒ Precision |
---|---|
์ผ๋ฐ์ ์ธ CNN, Transformer | FP32 ๋๋ Mixed Precision |
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ๋น ๋ฅธ ์คํ ํ์ | Mixed Precision (float16 + float32 ) |
๊ณผํ ๊ณ์ฐ, ์์น ํด์ | FP64 |
ํ๊ท ๋ฌธ์ ์์ ์์์ ์ ๋ฐ๋๊ฐ ํต์ฌ์ผ ๋ | FP32 (ํน์ FP64, ์ํฉ์ ๋ฐ๋ผ) |
๐ ์์ฝ
๋ฅ๋ฌ๋์์ FP64๋ ์ ๋ฐ๋๋ ๋์ง๋ง ์ค์ ์์ ์ด๋์ ํฌ์ง ์๋ค.
์คํ๋ ค ํ์ต ์๋ ์ ํ, ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ, ํ๋์จ์ด ๋นํธํ์ฑ ๊ฐ์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, FP32 ๋๋ mixed precision์ด ํ์ค์ ์ธ ์ ํ์ ๋๋ค.
๋ต๊ธ ๋จ๊ธฐ๊ธฐ