LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

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๋ฐฐ ๋’ค์ฒ˜์กŒ์Šต๋‹ˆ๋‹ค.

LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

์ด ์–ธ์–ด๋Š” ์ฐธ์กฐ ์ˆ˜๋ช… ์ถ”์  ๋ฐ ๋ณ€์ˆ˜ ์ฐจ์šฉ ๊ฒ€์‚ฌ๊ธฐ(borrow checker)์™€ ๊ฐ™์€ Rust ๊ธฐ๋Šฅ์„ ์—ฐ์ƒ์‹œํ‚ค๋Š” ์ •์  ํƒ€์ดํ•‘ ๋ฐ ์ €์ˆ˜์ค€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์•ˆ์ „ํ•œ ์ž‘์—… ์ˆ˜๋‹จ ์™ธ์—๋„ ์–ธ์–ด๋Š” ๋‚ฎ์€ ์ˆ˜์ค€ ์ž‘์—…์„ ์œ„ํ•œ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ์ธํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ชจ๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ๊ฐœ๋ณ„ SIMD ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ•˜๋“œ์›จ์–ด ํ™•์žฅ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. TensorCores ๋ฐ AMX๋กœ.

LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

๋ชจ๋“  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ช…์‹œ์ ์ธ ์œ ํ˜• ์ •์˜๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ์กด Python ์ฝ”๋“œ์™€ ์ตœ์ ํ™”๋œ Python ์ฝ”๋“œ์˜ ๋ถ„๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด "def" ๋Œ€์‹  ๋ณ„๋„์˜ ํ‚ค์›Œ๋“œ "fn"์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ C์—์„œ์™€ ๊ฐ™์ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ ์œผ๋กœ ์••์ถ•ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ "class" ๋Œ€์‹  "struct" ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ C/C++ ์–ธ์–ด๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ cos ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด "from "math.h" import cos"๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€