LLVM์ ์ฐฝ๋ฆฝ์์ด์ ์์ ์ค๊ณ์์ด์ Swift ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฐฝ์์์ธ Chris Lattner์ Tensorflow ๋ฐ JAX์ ๊ฐ์ Google AI ํ๋ก์ ํธ์ ์ ์ฑ ์์์๋ Tim Davis๋ R&D์ ๋ํ ์ฌ์ฉ ํธ์์ฑ๊ณผ ์ ์ํ ํ๋กํ ํ์ดํ์ ๊ฒฐํฉํ ์๋ก์ด Mojo ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์๊ฐํ์ต๋๋ค. ๊ณ ์ฑ๋ฅ ์ต์ข ์ ํ์ ๋ํ ์ ํฉ์ฑ. ์ฒซ ๋ฒ์งธ๋ Python ์ธ์ด์ ์น์ํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋๊ณ , ๋ ๋ฒ์งธ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ์ปดํ์ผํ๋ ๊ธฐ๋ฅ, ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ, ํ๋์จ์ด ๊ณ์ฐ ๊ฐ์์ ์ํ ๋๊ตฌ ์ฌ์ฉ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ๊ธฐ๊ณ ํ์ต ๊ฐ๋ฐ์ ์ํ ์ฌ์ฉ์ ์ค์ ์ ๋๊ณ ์์ง๋ง ์์คํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก Python ์ธ์ด์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ๊ด๋ฒ์ํ ์์ ์ ์ ํฉํ ๋ฒ์ฉ ์ธ์ด๋ก ์ ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ์ธ์ด๋ ๊ณ ์ฑ๋ฅ ์ปดํจํ , ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ณํ๊ณผ ๊ฐ์ ์์ญ์ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. Mojo์ ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ์ ํ ์คํธ ํ์ฅ์ ".mojo" ์ธ์ ์ฝ๋ ํ์ผ์ ํ์ฅ์(์: "helloworld.๐ฅ")๋ก ์ด๋ชจํฐ์ฝ ๊ธฐํธ "๐ฅ"๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
ํ์ฌ ์ด ์ธ์ด๋ ์ง์ค์ ์ผ๋ก ๊ฐ๋ฐ ์ค์ด๋ฉฐ ํ ์คํธ๋ฅผ ์ํด ์จ๋ผ์ธ ์ธํฐํ์ด์ค๋ง ์ ๊ณต๋ฉ๋๋ค. ๋ก์ปฌ ์์คํ ์์ ์คํ๋๋ ๋ณ๋์ ์ด์ ๋ธ๋ฆฌ๋ ๋ํํ ์น ํ๊ฒฝ ์์ ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์ ํ ๋์ค์ ๊ฒ์๋ ์์ ์ ๋๋ค. ํ๋ก์ ํธ์ ๊ด๋ จ๋ ์ปดํ์ผ๋ฌ, JIT ๋ฐ ๊ธฐํ ๊ฐ๋ฐ์ ์์ค ์ฝ๋๋ ๋ด๋ถ ์ํคํ ์ฒ ์ค๊ณ๊ฐ ์๋ฃ๋ ํ ๊ณต๊ฐ๋ ์์ ์ ๋๋ค. (๋ฐํ๋ ์์ ํ๋กํ ํ์ ์ ๊ฐ๋ฐ ๋ชจ๋ธ์ LLVM, Clang ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์ ์ ์ฌํฉ๋๋ค.) ๊ทธ๋ฆฌ๊ณ ์ค์ํํธ). Mojo์ ๊ตฌ๋ฌธ์ Python์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์ ํ ์์คํ ์ C/C++์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ์์ผ๋ก C/C++ ๋ฐ Python์ผ๋ก ์์ฑ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ Mojo๋ก ์ฝ๊ฒ ๋ฒ์ญํ ์ ์๋ ํดํท์ ๊ฐ๋ฐํ ๊ณํ์ ๋๋ค. Python ์ฝ๋์ Mojo๋ฅผ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ํ๋ก์ ํธ์ ๋๋ค.
์ด ํ๋ก์ ํธ๋ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๊ธฐ์ข ์์คํ ์ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ณ์ฐ์ ํฌํจํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด GPU, ํน์ ๊ธฐ๊ณ ํ์ต ๊ฐ์๊ธฐ ๋ฐ SIMD(๋ฒกํฐ ์ฒ๋ฆฌ ๋ช ๋ น)๋ฅผ ์ฌ์ฉํ์ฌ Mojo ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ๊ณ์ฐ์ ๋ณ๋ ฌํํ ์ ์์ต๋๋ค. ๊ธฐ์กด CPython์ ์ต์ ํ ์์ ์ ํฉ๋ฅํ์ง ์๊ณ Python ์ธ์ด์ ๋ณ๋ ํ์ ์งํฉ์ ๊ฐ๋ฐํ๋ ์ด์ ๋ ์ปดํ์ผ ์ด์ , ์์คํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ ํตํฉ, ์ฝ๋๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ด๋ถ ์ํคํ ์ฒ ์ฌ์ฉ ๋ฑ์ผ๋ก ๊ผฝํ๋๋ค. GPU ๋ฐ ๋ค์ํ ํ๋์จ์ด ๊ฐ์๊ธฐ์์ ์คํ๋ฉ๋๋ค. ๋์์ Mojo ๊ฐ๋ฐ์๋ CPython๊ณผ์ ํธํ์ฑ์ ์ต๋ํ ๊ณ ์ํ ๊ณํ์ ๋๋ค.
Mojo๋ JIT ํด์ ๋ชจ๋์ ์คํ ํ์ผ(AOT, ์ฌ์ )๋ก ์ปดํ์ผํ๋ ๋ฐ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ์๋ ์๋ ์ต์ ํ, ์บ์ฑ ๋ฐ ๋ถ์ฐ ์ปดํ์ผ์ ์ํ ์ต์ ๊ธฐ์ ์ด ๋ด์ฅ๋์ด ์์ต๋๋ค. Mojo ์ธ์ด์ ์์ค ํ ์คํธ๋ LLVM ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ๊ณ ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ ์์ค ์ค๊ฐ ์ฝ๋ MLIR(Multi-Level Intermediate Representation)๋ก ๋ณํ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด MLIR์ ์ง์ํ๋ ๋ค์ํ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ณ์ฐ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ถ๊ฐ ํ๋์จ์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ์ง์ฝ์ ์ธ ๊ณ์ฐ์ ํตํด C/C++ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฅ๊ฐํ๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Mandelbrot ์ธํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ ๋ ์ปดํ์ผ๋ Mojo ์ ํ๋ฆฌ์ผ์ด์ ์ AWS ํด๋ผ์ฐ๋(r7iz.metal-16xl)์์ ์คํ๋ ๋ C ++ ๊ตฌํ๋ณด๋ค 6๋ฐฐ ๋น ๋ฆ ๋๋ค(0.03์ด ๋ 0.20์ด). .) ๋ฟ๋ง ์๋๋ผ ์์ CPython 35(3.10.9์ด ๋ 0.03์ด)๋ฅผ ์ฌ์ฉํ๋ Python ์ ํ๋ฆฌ์ผ์ด์ ๋ณด๋ค 1027๋ฐฐ ๋น ๋ฅด๊ณ PYPY๋ฅผ ์ฌ์ฉํ๋ฉด 1500๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค(0.03์ด ๋ 46.1์ด).
๋จธ์ ๋ฌ๋ ๋ฌธ์ ํด๊ฒฐ ์์ญ์์ ์ฑ๋ฅ์ ํ๊ฐํ ๊ฒฐ๊ณผ, Mojo ์ธ์ด๋ก ์์ฑ๋ Modular Inference Engine AI ์คํ์ TensorFlow ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ์๋ฃจ์ ๊ณผ ๋น๊ตํ์ฌ Intel์ด ํ์ฌ๋ ์์คํ ์์ 3๋ฐฐ ๋น ๋ฅธ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ธ์ด ๋ชจ๋ธ ์ฒ๋ฆฌ ์ ํ๋ก์ธ์๊ฐ ์ถ์ฒ ์์ฑ ๋ชจ๋ธ ์คํ ์ 6.4๋ฐฐ, ์๊ฐ์ ์ ๋ณด ์ฒ๋ฆฌ ๋ชจ๋ธ ์์ ์ 2.1๋ฐฐ ๋ ๋นจ๋ผ์ก์ต๋๋ค. AMD ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ ๋ Mojo๋ฅผ ์ฌ์ฉํ ๋์ ์ด๋์ 3.2, 5, 2.2๋ฐฐ, ARM ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ ๋์ ์ด๋์ ๊ฐ๊ฐ 5.3, 7.5, 1.7๋ฐฐ์์ต๋๋ค. PyTorch ๊ธฐ๋ฐ ์๋ฃจ์ ์ Mojo์ ๋นํด Intel CPU์์๋ 1.4๋ฐฐ, 1.1๋ฐฐ, 1.5๋ฐฐ, AMD CPU์์๋ 2.1๋ฐฐ, 1.2๋ฐฐ, 1.5๋ฐฐ, ARM CPU์์๋ 4๋ฐฐ, 4.3๋ฐฐ, 1.3๋ฐฐ ๋ค์ฒ์ก์ต๋๋ค.
์ด ์ธ์ด๋ ์ฐธ์กฐ ์๋ช ์ถ์ ๋ฐ ๋ณ์ ์ฐจ์ฉ ๊ฒ์ฌ๊ธฐ(borrow checker)์ ๊ฐ์ Rust ๊ธฐ๋ฅ์ ์ฐ์์ํค๋ ์ ์ ํ์ดํ ๋ฐ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์์ ํ ์์ ์๋จ ์ธ์๋ ์ธ์ด๋ ๋ฎ์ ์์ค ์์ ์ ์ํ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํฌ์ธํฐ ์ ํ์ ์ฌ์ฉํ์ฌ ์์ ํ์ง ์์ ๋ชจ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ก์ธ์คํ๊ฑฐ๋ ๊ฐ๋ณ SIMD ๋ช ๋ น์ด๋ฅผ ํธ์ถํ๊ฑฐ๋ ํ๋์จ์ด ํ์ฅ์ ์ก์ธ์คํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. TensorCores ๋ฐ AMX๋ก.
๋ชจ๋ ๋ณ์์ ๋ํ ๋ช
์์ ์ธ ์ ํ ์ ์๊ฐ ์๋ ํจ์์ ๋ํ ๊ธฐ์กด Python ์ฝ๋์ ์ต์ ํ๋ Python ์ฝ๋์ ๋ถ๋ฆฌ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด "def" ๋์ ๋ณ๋์ ํค์๋ "fn"์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์๋ฉ๋๋ค. ํด๋์ค์ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก C์์์ ๊ฐ์ด ์ปดํ์ผ ํ์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ผ๋ก ์์ถํด์ผ ํ๋ ๊ฒฝ์ฐ "class" ๋์ "struct" ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จ์ํ C/C++ ์ธ์ด๋ก ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ cos ํจ์๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด "from "math.h" import cos"๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru