๋„ค์ดํ‹ฐ๋ธŒ Python์šฉ JIT ์ปดํŒŒ์ผ๋Ÿฌ์ธ Pyston-lite ์ถœ์‹œ

์ตœ์‹  JIT ์ปดํŒŒ์ผ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ Python ์–ธ์–ด์˜ ๊ณ ์„ฑ๋Šฅ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” Pyston ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž๋Š” CPython์šฉ JIT ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌํ˜„์„ ํ†ตํ•ด Pyston-lite ํ™•์žฅ์„ ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. Pyston์€ CPython ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ถ„๊ธฐ์ด๋ฉฐ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœ๋˜๋Š” ๋ฐ˜๋ฉด, Pyston-lite๋Š” ํ‘œ์ค€ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ(CPython)์— ์—ฐ๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฒ”์šฉ ํ™•์žฅ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Pyston-lite๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด PIP ๋˜๋Š” Conda ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์žฅ์„ ์„ค์น˜ํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๊ธฐ๋ณธ Pyston ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Pyston-lite๋Š” ์ด๋ฏธ PyPI ๋ฐ Conda ์ €์žฅ์†Œ์— ํ˜ธ์ŠคํŒ…๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด "pip install pyston_lite_autoload" ๋˜๋Š” "conda install pyston_lite_autoload -c pyston" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. pyston_lite(์ง์ ‘ JIT) ๋ฐ pyston_lite_autoload(Python ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ž๋™ JIT ๋Œ€์ฒด ์ˆ˜ํ–‰)์˜ ๋‘ ๊ฐ€์ง€ ํŒจํ‚ค์ง€๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. pyston_lite.enable() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ๋กœ๋“œ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ JIT ํฌํ•จ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Pyston-lite๋Š” Pyston์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ตœ์ ํ™”๋ฅผ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์ง€๋งŒ ์ผ๋ฐ˜ Python 10์— ๋น„ํ•ด ์•ฝ 25-3.8% ์ •๋„ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” Pyston์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์ ํ™”๋ฅผ Pyston-lite๋กœ ์ด์ „ํ•˜๊ณ  ์ง€์›๋˜๋Š” CPython ๋ฒ„์ „์„ ํ™•์žฅํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๋Š” Python 3.8๋งŒ ์ง€์›ํ•จ). ๋” ๋งŽ์€ ๊ธ€๋กœ๋ฒŒ ๊ณ„ํš์—๋Š” JIT์šฉ ์ƒˆ API๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ CPython ํŒ€๊ณผ์˜ ํ˜‘๋ ฅ์ด ํฌํ•จ๋˜์–ด Python ์ž‘์—…์„ ๋ณด๋‹ค ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python 3.12 ๋ถ„๊ธฐ์— ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋…ผ์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” Pyston์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ™•์žฅ์œผ๋กœ ์ด๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ณ ๋ ค๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž์ฒด CPython ํฌํฌ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Pyston-lite ์™ธ์—๋„ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ƒˆ๋กœ์šด ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ์™„์ „ํ•œ Pyston 2.3.4 ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. pyperformance ํ…Œ์ŠคํŠธ์—์„œ ๋ฒ„์ „ 2.3.4๋Š” ๋ฆด๋ฆฌ์Šค 2.3.3๋ณด๋‹ค ์•ฝ 6% ๋น ๋ฆ…๋‹ˆ๋‹ค. CPython์— ๋น„ํ•ด ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ 66%๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์˜ CPython 3.11 ๊ฐœ๋ฐœ ์ฃผ๊ธฐ ๋‚ด์—์„œ ๊ฐœ๋ฐœ๋œ ์ตœ์ ํ™”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์„ฑ๋Šฅ์„ 25% ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, CPython 3.11์—์„œ๋Š” ๊ธฐ๋ณธ ๋ชจ๋“ˆ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒํƒœ ์บ์‹ฑ ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋˜์–ด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์†๋„๊ฐ€ 10-15% ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํฌ๊ฒŒ ๊ฐ€์†ํ™”๋˜์—ˆ์œผ๋ฉฐ ํ‘œ์ค€ ์ž‘์—…์— ๋Œ€ํ•œ ํŠนํ™”๋œ ๋น ๋ฅธ ํ•ด์„๊ธฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Cinder ๋ฐ HotPy ํ”„๋กœ์ ํŠธ์—์„œ ์ค€๋น„ํ•œ ์ผ๋ถ€ ์ตœ์ ํ™”๋ฅผ ์ด์‹ํ•˜๋Š” ์ž‘์—…๋„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ nogil ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ๋Š” ์ „์—ญ ํ•ด์„๊ธฐ ์ž ๊ธˆ(GIL, Global Interpreter Lock) ์—†์ด CPython์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ—˜ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๊ณต์œ  ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„ ๋‹ค์ค‘ ์ž‘์—…์˜ ๋ณ‘๋ ฌํ™”๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. -ํ•ต์‹ฌ ์‹œ์Šคํ…œ. GIL ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋ณ„๋„์˜ GIL์„ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์—ฌ๋Ÿฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณ‘๋ ฌ ์‹คํ–‰์˜ ํšจ์œจ์„ฑ์€ GIL์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).

์ถœ์ฒ˜ : opennet.ru

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