๐Ÿงช Unity Performance Alchemist

์„ค์ •-๋ ˆ๋ฒจ AutoResearch: ๊ธฐ๊ธฐ ํ‹ฐ์–ด๋ณ„ ์ตœ์ ํ™” ์„ธํŒ…์„ ํ†ต๊ณ„ ๊ฒŒ์ดํŠธ๋กœ ๋„์ถœํ•˜๋Š” Unity ์—๋””ํ„ฐ ํˆด

License: MIT Local AI Support Core CI

Unity Performance Alchemist๋Š” ์•ˆ๋“œ๋ ˆ ์นดํŒŒ์‹œ(Andrej Karpathy)์˜ autoresearch ๊ฐœ๋…์„ ์œ ๋‹ˆํ‹ฐ์— ์ด์‹ํ•œ ํ์‡„ ๋ฃจํ”„(closed-loop) ์ž์œจ ์ตœ์ ํ™” ์—”์ง„์ž…๋‹ˆ๋‹ค. v0.2๋ถ€ํ„ฐ ๋ฃจํ”„์˜ ์•ก์…˜ ์ŠคํŽ˜์ด์Šค๋Š” ํ’ˆ์งˆ ์„ธํŒ…/์ตœ์ ํ™” ํ† ๊ธ€์ž…๋‹ˆ๋‹ค:

LLM์ด "๋‹ค์Œ์— ๋’ค์ง‘์„ ์„ธํŒ…"์„ ๊ฐ€์„ค๋กœ ์ œ์•ˆ โ†’ ํ”Œ๋ ˆ์ด๋ชจ๋“œ์—์„œ NํšŒ ๋…๋ฆฝ ์ธก์ • โ†’ ๋น„๋ชจ์ˆ˜ ํ†ต๊ณ„ ๊ฒŒ์ดํŠธ(Mann-Whitney U + Cliff's delta)๋กœ ์ฑ„ํƒ/๋กค๋ฐฑ โ†’ ๋ฐ˜๋ณต โ†’ ์ฑ”ํ”ผ์–ธ ์ตœ์ข… ํ™•์ธ ๋Ÿฐ(fresh ABAB ์žฌ์ธก์ •) โ†’ ๊ธฐ๊ธฐ ํ‹ฐ์–ด๋ณ„ ์ตœ์  ์„ธํŒ… ๋„์ถœ.

์ฝ”๋“œ ์ „์ฒด๋ฅผ ์žฌ์ž‘์„ฑํ•˜๋Š” ์ด์ „ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ์„ธํŒ… ๋ณ€๊ฒฝ์€ ์ปดํŒŒ์ผ์ด ํ•„์š” ์—†์–ด ๋ฃจํ”„๊ฐ€ ํ•œ ์„ธ์…˜ ์•ˆ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๋Œ๊ณ , ๋กค๋ฐฑ์€ ๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.


๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

์˜๊ฐ์„ ๋ฐ›์€ ๊ฒƒ

์ด ํ”„๋กœ์ ํŠธ๋Š” ์•ˆ๋“œ๋ ˆ ์นดํŒŒ์‹œ(Andrej Karpathy)์˜ autoresearch์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ์”ฉ ์ˆ˜์ •ํ•˜๊ณ  ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ์ž‘์—…์„, ๊ฐ€์„ค์„ ์„ธ์šฐ๊ณ  ์ธก์ •ํ•œ ๋’ค ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋‹ค์Œ ํ–‰๋™์„ ๊ฒฐ์ •ํ•˜๋Š” ์‹คํ—˜ ๋ฃจํ”„๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ Unity ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” "์ด ์˜ต์…˜์„ ๋„๋ฉด ๋นจ๋ผ์งˆ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ๊ฒฝํ—˜์— ์˜์กดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋ ˆ์ž„ํƒ€์ž„์€ GC ์ŠคํŒŒ์ดํฌ, ์—ด ์Šค๋กœํ‹€๋ง, ์‹คํ–‰ ์ˆœ์„œ์™€ ๊ฐ™์€ ์š”์ธ์˜ ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฏ€๋กœ ๋‹จ ํ•œ ๋ฒˆ์˜ ์‹คํ–‰๋งŒ์œผ๋กœ ๊ฐœ์„ ์„ ๋‹จ์ •ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ํ”„๋กœ์ ํŠธ๋Š” LLM์„ ์ตœ์ ํ™”์˜ ์ตœ์ข… ํŒ๋‹จ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ์‹คํ—˜์˜ ๊ฐ€์„ค์„ ์ œ์•ˆํ•˜๋Š” ์—ญํ• ๋กœ ์ œํ•œํ•˜๊ณ , ์‹ค์ œ ์ฑ„ํƒ ์—ฌ๋ถ€๋Š” ๋ฐ˜๋ณต ์ธก์ •๊ณผ ํ†ต๊ณ„ ๊ฒŒ์ดํŠธ๊ฐ€ ๊ฒฐ์ •ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ ๋ฐฐ์šด ๊ฒƒ

  1. ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ฝ”๋“œ๋ณด๋‹ค ์ธก์ • ์„ค๊ณ„๊ฐ€ ๋จผ์ €๋‹ค. ํ”„๋ ˆ์ž„์„ ๊ทธ๋Œ€๋กœ ํ‘œ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์† ํ”„๋ ˆ์ž„ ์‚ฌ์ด์˜ ์ž๊ธฐ์ƒ๊ด€ ๋•Œ๋ฌธ์— ํ‘œ๋ณธ ์ˆ˜๊ฐ€ ๋ถ€ํ’€๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์›Œ๋ฐ์—… ํ”„๋ ˆ์ž„์„ ๋ฒ„๋ฆฌ๊ณ  ๊ฐ ๋…๋ฆฝ ๋Ÿฐ์˜ ์ค‘์•™๊ฐ’ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ด ์กฐ๊ฑด์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ํ›„๋ณด๋ฅผ ์ฑ„ํƒํ•˜๋ ค๋ฉด ๋‹ค์Œ ์กฐ๊ฑด์„ ๋™์‹œ์— ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[ p < \alpha = 0.05 \quad\land\quad |d| \ge 0.147 \quad\land\quad \tilde{x}{\mathrm{candidate}} < \tilde{x}{\mathrm{current}} ]

์—ฌ๊ธฐ์„œ (p)๋Š” Mannโ€“Whitney U ๊ฒ€์ •์˜ ์œ ์˜ํ™•๋ฅ , (d)๋Š” Cliff's delta, (\tilde{x})๋Š” ๋Ÿฐ ์ค‘์•™๊ฐ’์ž…๋‹ˆ๋‹ค. ํ†ต๊ณ„์  ์œ ์˜์„ฑ๊ณผ ์‹ค์งˆ์ ์ธ ํšจ๊ณผ ํฌ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์š”๊ตฌํ•˜๋ฉด์„œ, ์šฐ์—ฐํ•œ ๋ฏธ์„ธ ๊ฐœ์„ ์„ ์ตœ์ ํ™” ๊ฒฐ๊ณผ๋กœ ์˜ค์ธํ•˜๋Š” ์ผ์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

  1. ์ž๋™ํ™”์—๋Š” ๋…๋ฆฝ์ ์ธ ์•ˆ์ „์žฅ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. LLM์ด ์ œ์•ˆํ•œ ๋ณ€๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์‹ ๋ขฐํ•˜๋Š” ๋Œ€์‹ , ์„ค์ • ์ˆ˜์ค€ ๋ฃจํ”„์—์„œ๋Š” QualitySettings ํ† ๊ธ€๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ๋งค ๋Ÿฐ ํ›„ ์›๋ž˜ ๊ฐ’์„ ๋ณต์›ยท๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์žฌ์ž‘์„ฑ ๋ฐฉ์‹์€ ์‹คํ—˜ ๋ชจ๋“œ๋กœ ๊ฒฉ๋ฆฌํ•˜๊ณ , ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋กค๋ฐฑยท์›Œ์น˜๋…ยท๋Œ€์ƒ ํ•ด์‹œ ๊ฐ€๋“œ๋ฅผ ๋‘ฌ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์™€ ์œ„ํ—˜๋„๋ฅผ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

  2. ๊ธฐ๊ธฐ๋ณ„ ์ตœ์ ํ™”๋Š” ํ•˜๋‚˜์˜ ์ •๋‹ต์„ ์ฐพ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋ชฉํ‘œ ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ (F)์— ๋”ฐ๋ฅธ ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

[ T_{\mathrm{frame}} = \frac{1000\ \mathrm{ms}}{F\ \mathrm{fps}} ]

๋”ฐ๋ผ์„œ (30\ \mathrm{fps})๋Š” ์•ฝ (33.33\ \mathrm{ms}), (60\ \mathrm{fps})๋Š” ์•ฝ (16.67\ \mathrm{ms})์˜ ์˜ˆ์‚ฐ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” low/mid/high ํ‹ฐ์–ด๋ณ„๋กœ ์˜ˆ์‚ฐ๊ณผ ํ’ˆ์งˆ ํ”„๋ก์‹œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ์— ๋นŒ๋“œ ๋ฒ„์ „ยทํŒจ์น˜ ID๋ฅผ derivedAgainst๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์ตœ์ ๊ฐ’์€ ์ ˆ๋Œ€์ ์ธ ์ƒ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํŠน์ • ๋นŒ๋“œ์™€ ํŠน์ • ํ‹ฐ์–ด์—์„œ ๋„์ถœ๋œ ์„ค์ •์ด๋ผ๋Š” ์ ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

  1. ์ธก์ •ํ•˜์ง€ ์•Š์€ ์ˆ˜์น˜๋Š” ์ฃผ์žฅํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ํ˜„์žฌ v0.2์˜ ์ธก์ • ๊ฒฝ๋กœ๋Š” editor-proxy์ด๋ฉฐ, ์‹ค๊ธฐ๊ธฐ์˜ ์ ˆ๋Œ€ ํ”„๋ ˆ์ž„ํƒ€์ž„์ด๋‚˜ SoC๋ณ„ ์—ด ํŠน์„ฑ์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์„œ์—์„œ๋Š” ์‹ค์ œ Artifacts์— ๊ธฐ๋ก๋œ ์ˆ˜์น˜๋งŒ Measured๋กœ ๋‹ค๋ฃจ๊ณ , ๋ฌธํ—Œ ๊ธฐ๋ฐ˜ ์˜ˆ์ƒ์€ Projected, ์•„์ง ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์€ ๋ฏธ์ธก์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋„๊ตฌ์—์„œ ์‹ ๋ขฐ๋„๋Š” ํ™”๋ คํ•œ ๊ฐœ์„  ์ˆ˜์น˜๋ณด๋‹ค ์ด๋Ÿฐ ๊ฒฝ๊ณ„ ํ‘œ์‹œ์—์„œ ์‹œ์ž‘๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•œ ๊ณผ์ •

  1. ๋ฌธ์ œ ์ •์˜: Unity์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ/GC, UI ๋ฆฌ๋นŒ๋“œ, GPU ์˜ค๋ฒ„๋“œ๋กœ ๋ณ‘๋ชฉ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค๊ณ , ์ตœ์ ํ™” ํ›„๋ณด๋ฅผ ํ’ˆ์งˆ ์„ค์ •๊ณผ ํ† ๊ธ€์˜ ์กฐํ•ฉ์œผ๋กœ ๋ชจ๋ธ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์•ˆ์ „ํ•œ ์‹คํ–‰ ํ‘œ๋ฉด์œผ๋กœ ์ „ํ™˜: ์ดˆ๊ธฐ์˜ ํŒŒ์ผ ์žฌ์ž‘์„ฑ ์ค‘์‹ฌ ์ ‘๊ทผ์„ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , ์ปดํŒŒ์ผ ์—†์ด ์ ์šฉยท๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ • ์ˆ˜์ค€ SettingsResearchRunner๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์žฌ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ํ•ต์‹ฌ ๋กœ์ง ๋ถ„๋ฆฌ: ํ†ต๊ณ„, ์‹คํ—˜ ๊ณ„ํš, ๊ฒŒ์ดํŠธ, ์„ค์ • ๋„์ถœ์„ UnityEngine์— ์˜์กดํ•˜์ง€ ์•Š๋Š” UPA.Core๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. UPA.Runtime์€ ์ถœํ•˜ ์„ค์ •๊ณผ ๊ธฐ๊ธฐ ํ‹ฐ์–ด ์ ์šฉ์„ ๋‹ด๋‹นํ•˜๊ณ , UPA.Editor๋Š” ๋ฒค์น˜๋งˆํฌยทLLMยท๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  4. ํƒ์ƒ‰ ๋ฃจํ”„ ๊ตฌํ˜„: LLM์ด ๊ฐ€์„ค์„ ์ œ์•ˆํ•˜๋Š” ๋ชจ๋“œ์™€ LLM ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” DOE ๋ชจ๋“œ๋ฅผ ํ•จ๊ป˜ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. DOE๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ OFAT์˜ (1+k)๊ฐœ ๋Ÿฐ ๋˜๋Š” Full Factorial์˜ (2^k)๊ฐœ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  5. ํŒ์ •๊ณผ ์žฌํ˜„์„ฑ ๊ฐ•ํ™”: Mannโ€“Whitney U์™€ Cliff's delta ๊ธฐ๋ฐ˜ AdoptionGate, ํ‹ฐ์–ด ์˜ˆ์‚ฐ์„ ํ™•์ธํ•˜๋Š” ShippingGate, ์ข…๋ฃŒ ์‹œ์ ์˜ fresh ABAB ์ฑ”ํ”ผ์–ธ ํ™•์ธ ๋Ÿฐ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋Š” JSON ์•„ํ‹ฐํŒฉํŠธ์™€ HTML ๋ฆฌํฌํŠธ๋กœ ๋‚จ๊ธฐ๊ณ , NUnitยทdotnet CIยท์ •์  ๊ฒ€์ฆ์œผ๋กœ ํ•ต์‹ฌ ๊ณ„์•ฝ์„ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง๋ฉดํ–ˆ๋˜ ์–ด๋ ค์›€๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ์„ฑ๋Šฅ ์ธก์ •๊ฐ’์˜ ๋…ธ์ด์ฆˆ: ํ•œ๋‘ ๋ฒˆ์˜ ์ธก์ •์œผ๋กœ๋Š” ์ž‘์€ ์ฐจ์ด๋ฅผ ์‹ ๋ขฐํ•˜๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋…๋ฆฝ ๋Ÿฐ๋ณ„ ์ค‘์•™๊ฐ’, ์‹คํ–‰ ์ˆœ์„œ ๋žœ๋คํ™”, ์›Œ๋ฐ์—… ํ๊ธฐ, baseline๊ณผ champion์„ ๊ต์ฐจ ์ธก์ •ํ•˜๋Š” fresh ABAB ํ™•์ธ ๋Ÿฐ์„ ๋„์ž…ํ•ด ์—ด ๋“œ๋ฆฌํ”„ํŠธ์™€ ์šฐ์—ฐํ•œ ๋ณ€๋™์˜ ์˜ํ–ฅ์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
  • LLM ๋ณ€๊ฒฝ์˜ ์•ˆ์ „์„ฑ: ์ปดํŒŒ์ผ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ๋ฉฐ, ํŒŒ์ผ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์“ฐ๋Š” ๋ฐฉ์‹์€ ๋„๋ฉ”์ธ ๋ฆฌ๋กœ๋“œ์™€ ๋กค๋ฐฑ์ด ๋ณต์žกํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฃจํ”„๋ฅผ ์„ค์ • ๋ณ€๊ฒฝ์œผ๋กœ ์ œํ•œํ•˜๊ณ , ํŒŒ์ผ ์žฌ์ž‘์„ฑ์€ ๋ช…์‹œ์  opt-in ์‹คํ—˜ ๋ชจ๋“œ๋กœ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค. LLM์€ ์ œ์•ˆ์ž์ด๊ณ  ํ†ต๊ณ„ ๊ฒŒ์ดํŠธ๊ฐ€ ์Šน์ธ์ž๋ผ๋Š” ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • Unity์™€ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ๊ณ„: ์—๋””ํ„ฐ์™€ ๋Ÿฐํƒ€์ž„ API๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜๋ฉด ํ•ต์‹ฌ ๋กœ์ง์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ UPA.Core๋ฅผ ์ˆœ์ˆ˜ C#์œผ๋กœ ์œ ์ง€ํ•ด ์ผ๋ฐ˜ .NET ํ…Œ์ŠคํŠธ์—์„œ ํ†ต๊ณ„ยท๊ฒŒ์ดํŠธยท์‹คํ—˜ ๊ณ„ํš์„ ๊ฒ€์ฆํ•˜๊ณ , Unity ์˜์กด ์ฝ”๋“œ๋Š” Editor/Runtime ๊ณ„์ธต์— ๋ชจ์•˜์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๊ธฐ ์ฐจ์ด๋ฅผ ์—๋””ํ„ฐ์—์„œ ์™„์ „ํžˆ ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›€: ์—๋””ํ„ฐ ํ”„๋ก์‹œ๋Š” ์ƒ๋Œ€์ ์ธ ๋น„์šฉ ์ˆœ์œ„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ๋Š” ์œ ์šฉํ•˜์ง€๋งŒ ์‹ค์ œ ๊ธฐ๊ธฐ์˜ ์—ดยท๋“œ๋ผ์ด๋ฒ„ยทSoC ํŠน์„ฑ๊นŒ์ง€ ๋Œ€์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ•œ๊ณ„๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ์— measurementSource: "editor-proxy"๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ, ์‹ค๊ธฐ๊ธฐ ์ธก์ •์€ ๋ณ„๋„์˜ ํ›„์† ๊ฒ€์ฆ ๋‹จ๊ณ„๋กœ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด Unity Performance Alchemist๋Š” ๋‹จ์ˆœํžˆ "๋” ๋น ๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“œ๋Š” ๋„๊ตฌ"๊ฐ€ ์•„๋‹ˆ๋ผ, ์„ฑ๋Šฅ ๊ฐ€์„ค์„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ ์‹คํ—˜ํ•˜๊ณ  ๊ทผ๊ฑฐ์™€ ํ•œ๊ณ„๋ฅผ ํ•จ๊ป˜ ๊ธฐ๋กํ•˜๋Š” ์—ฐ๊ตฌ ๋„๊ตฌ๋กœ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽฏ ์™œ ์ด ๋„๊ตฌ์ธ๊ฐ€

๋ฌธ์ œ ์ด ๋„๊ตฌ์˜ ์ ‘๊ทผ
๋‹จ์ผ ์‹คํ–‰ ๋ฒค์น˜๋งˆํฌ๋Š” ๋…ธ์ด์ฆˆ์— ์†๋Š”๋‹ค ์กฐ๊ฑด๋‹น NํšŒ(๊ธฐ๋ณธ 10) ๋…๋ฆฝ ๋Ÿฐ, ๋Ÿฐ๋‹น ์ค‘์•™๊ฐ’๋งŒ ํ†ต๊ณ„์— ํˆฌ์ž… (์ž๊ธฐ์ƒ๊ด€ ๋ฐฐ์ œ)
๋ฏธ์„ธํ•œ ์ƒ์Šน๋งŒ ๋ณด๊ณ  ์ฑ„ํƒํ•˜๋Š” ํŒ์ • MWU ์œ ์˜์„ฑ(ฮฑ=0.05) + Cliff's delta ํšจ๊ณผ ํฌ๊ธฐ(\
๊ธด ๋ฃจํ”„๋Š” ๋…ธ์ด์ฆˆ๋กœ๋„ ๋“ฑ๋ฐ˜ํ•œ๋‹ค ์ข…๋ฃŒ ์‹œ ์ฑ”ํ”ผ์–ธยท๋ฒ ์ด์Šค๋ผ์ธ์„ ๋‘˜ ๋‹ค fresh๋กœ ABAB ์ธํ„ฐ๋ฆฌ๋ธŒ ์žฌ์ธก์ •ํ•ด ์ตœ์ข… ํ™•์ธ
๊ธฐ๊ธฐ๋งˆ๋‹ค ์ตœ์  ์„ธํŒ…์ด ๋‹ค๋ฅด๋‹ค ํ‹ฐ์–ด(low/mid/high)๋ณ„ ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์„ ์–ธ โ†’ ํ‹ฐ์–ด๋ณ„ config ๋„์ถœ
ํŒจ์น˜๋งˆ๋‹ค ์ตœ์ ๊ฐ’์ด ๋ณ€ํ•œ๋‹ค ๋ชจ๋“  ๋„์ถœ ๊ฒฐ๊ณผ์— derivedAgainst(๋นŒ๋“œ ๋ฒ„์ „ยทํŒจ์น˜ ID) ํƒœ๊น… โ†’ ํŒจ์น˜ ๊ฐ„ diff ๋ฆฌํฌํŠธ

์ธก์ •ยทํŒ์ •ยท๋„์ถœ์˜ ๋ฐฉ๋ฒ•๋ก  ์ „์ฒด๋Š” QA_METHODOLOGY.md ์™€ DEVICE_TIER_OPTIMIZATION.md ์— ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Š ๋ณ‘๋ชฉ ์‹œ๋‚˜๋ฆฌ์˜ค ์นดํƒˆ๋กœ๊ทธ (Case Studies)

์•„๋ž˜ 4๊ฐœ ์ƒ˜ํ”Œ ์”ฌ์€ ์œ ๋‹ˆํ‹ฐ์˜ 4๋Œ€ ๋ณ‘๋ชฉ์„ ์˜๋„์ ์œผ๋กœ ์žฌํ˜„ํ•˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‹คํ—˜ ํ”ฝ์Šค์ฒ˜์ž…๋‹ˆ๋‹ค. ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๋ณ‘๋ชฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ตœ์ ํ™” ์ด๋ก ์€ RESEARCH_REPORT.md์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์น˜ ์ •์ง์„ฑ ์›์น™: ์ด ๋ฆฌํฌ์˜ ๋ชจ๋“  ์„ฑ๋Šฅ ์ˆ˜์น˜๋Š” ๋„๊ตฌ๊ฐ€ ์ง์ ‘ ๊ธฐ๋กํ•œ Artifacts/research_run_*.json์—์„œ๋งŒ ์ธ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„์ง ์‹ค์ธก๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์€ "๋ฏธ์ธก์ •"์œผ๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ, ๋ฌธํ—Œ ๊ธฐ๋ฐ˜ ์ถ”์ •์€ "projected"๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ธก์ • ์‹คํ–‰ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ Getting Started๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

# ์‹œ๋‚˜๋ฆฌ์˜ค ๋ณ‘๋ชฉ ์ถ• ์ธก์ • ์ƒํƒœ
1 RTS Swarm (1,500 ์œ ๋‹› O(nยฒ) ํšŒํ”ผ) CPU ๋ฏธ์ธก์ • โ€” ์‹คํ–‰ ์‹œ Artifacts/์— ์ž๋™ ๊ธฐ๋ก
2 ๋ฆฌ๋“ฌ๊ฒŒ์ž„ ๋…ธํŠธ ํญ์ฃผ (Instantiate/Destroyยทํด๋กœ์ €) ๋ฉ”๋ชจ๋ฆฌ/GC ๋ฏธ์ธก์ • โ€” ์‹คํ–‰ ์‹œ Artifacts/์— ์ž๋™ ๊ธฐ๋ก
3 UGUI 500์…€ ๊ทธ๋ฆฌ๋“œ ์—ฐ์‡„ ๋ฆฌ๋นŒ๋“œ UI/๋ Œ๋”๋ง ๋ฏธ์ธก์ • โ€” ์‹คํ–‰ ์‹œ Artifacts/์— ์ž๋™ ๊ธฐ๋ก
4 ํŒŒํ‹ฐํด 50์‹œ์Šคํ…œ ๊ณ ์œ  ๋จธํ‹ฐ๋ฆฌ์–ผ ์˜ค๋ฒ„๋“œ๋กœ GPU ๋ฏธ์ธก์ • โ€” ์‹คํ–‰ ์‹œ Artifacts/์— ์ž๋™ ๊ธฐ๋ก

๐Ÿ› ๏ธ Getting Started

1. ํ…Œ์ŠคํŠธ ์”ฌ ์…‹์—…

์œ ๋‹ˆํ‹ฐ ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ ๋ณ‘๋ชฉ ์”ฌ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

  • Window > Alchemist > 1. Setup Swarm Test Scene
  • Window > Alchemist > 2. Setup Osu GC Spike Scene
  • Window > Alchemist > 3. Setup UGUI Rebuild Spike Scene
  • Window > Alchemist > 4. Setup Particle Overdraw Scene

2. ๋กœ์ปฌ AI ์‹คํ–‰ (์„ ํƒ)

ollama run llama3.2:1b

LLM ์—†์ด๋„ DOE ๋ชจ๋“œ(OFAT / Full Factorial)๋กœ ์ˆœ์ˆ˜ ์‹คํ—˜ ๊ณ„ํš ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

3. ์—ฐ๊ตฌ ์‹คํ–‰

Window > Alchemist > Performance Researcher ๋Œ€์‹œ๋ณด๋“œ์—์„œ:

  • ํ‹ฐ์–ด ์„ ํƒ (low 33.33ms / midยทhigh 16.67ms ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ โ€” ์„ ์–ธ๊ฐ’, ๊ทผ๊ฑฐ๋Š” QA_METHODOLOGY.md ๋ฌธํ—Œ ์ ˆ ์ฐธ์กฐ)
  • START SETTINGS RESEARCH: LLM ๊ฐ€์„ค ๋ฃจํ”„
  • RUN DOE EXPERIMENT: OFAT(1+k๋Ÿฐ) ๋˜๋Š” Factorial(2^k๋Ÿฐ) ์ž๋™ ํƒ์ƒ‰

4. ๊ฒฐ๊ณผ ํ™•์ธ

  • Artifacts/research_run_<ํƒ€์ž„์Šคํƒฌํ”„>.json โ€” ์›์‹œ ์ƒ˜ํ”Œยทํ†ต๊ณ„ยท๊ฒŒ์ดํŠธ ํŒ์ •ยท๋„์ถœ config ์ „์ฒด ๊ธฐ๋ก
  • Artifacts/report.html โ€” ์ •์  HTML ๋ฆฌํฌํŠธ (ํžˆ์Šคํ† ๋ฆฌ, p95/p99 ๋ธํƒ€, ํŒจ์น˜ ๊ฐ„ diff)

๐Ÿ”ฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•œ ์žฅ์น˜

  • ์ด์ค‘ ๊ฒŒ์ดํŠธ: ์Šคํ… ์ฑ„ํƒ(ํ˜„์žฌ ์ตœ๊ณ  ๋Œ€๋น„ ์œ ์˜๋ฏธํ•œ ๊ฐœ์„ ์ธ๊ฐ€)๊ณผ ์ถœํ•˜ ํŒ์ •(ํ‹ฐ์–ด ์˜ˆ์‚ฐ์„ ๋งŒ์กฑํ•˜๋Š”๊ฐ€)์„ ๋ถ„๋ฆฌ โ€” ์˜ˆ์‚ฐ ์œ„์—์„œ ์‹œ์ž‘ํ•ด๋„ ๋ฃจํ”„๊ฐ€ ๊ฐœ์„ ์„ ๋ˆ„์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฑ”ํ”ผ์–ธ ์ตœ์ข… ํ™•์ธ ๋Ÿฐ: ๋ฃจํ”„๊ฐ€ ๋…ธ์ด์ฆˆ๋กœ ๋“ฑ๋ฐ˜ํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์„ ์ข…๋ฃŒ ์‹œ์  fresh ์žฌ์ธก์ •์œผ๋กœ ๊ฒ€์ฆ. ์‹คํŒจ ์‹œ confirmationFailed๋กœ ๊ธฐ๋ก๋˜๊ณ  ํ•ด๋‹น ๊ฒฐ๊ณผ๋Š” ์ถœํ•˜ยท๋ฌธ์„œ ์ธ์šฉ์ด ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.
  • A/A ๋„ ํ…Œ์ŠคํŠธ: ๋™์ผ ์กฐ๊ฑด ๋‘ ์ธก์ •์—์„œ ๊ฒŒ์ดํŠธ๊ฐ€ ์ฑ„ํƒ์„ ๋‚ด์ง€ ์•Š๋Š”์ง€๊ฐ€ CI ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•Œ๋ ค์ง„ ํ•œ๊ณ„(์ •์ง ๊ณ ์ง€): ๊ฒŒ์ดํŠธ๋Š” p50 ๋‹จ์ผ ์ง€ํ‘œ(๊ผฌ๋ฆฌ ์•…ํ™”๋Š” ๊ธฐ๋ก๋งŒ), ํ™•์ธ ๋Ÿฐ๋„ ๋‹จ์ผ ๋น„๊ต โ‰คฮฑ ์ž”์—ฌ ํ•œ๋„ ์กด์žฌ, ์—๋””ํ„ฐ ์ธก์ •์€ editor-proxy์ด๋ฉฐ ์‹ค๊ธฐ๊ธฐ ๊ฒ€์ฆ ์ „ "validated"๋ฅผ ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ ์•„ํ‚คํ…์ฒ˜

Core/        ์ˆœ์ˆ˜ C# (UnityEngine ์˜์กด 0) โ€” ํ†ต๊ณ„ยท๊ฒŒ์ดํŠธยท์‹คํ—˜ ๊ณ„ํšยทconfig ๋„์ถœ = dotnet CI์—์„œ ์ปดํŒŒ์ผ+ํ…Œ์ŠคํŠธ
Runtime/     ์ถœํ•˜ ํ‘œ๋ฉด โ€” DeviceTierConfig(SO), ๋Ÿฐํƒ€์ž„ ํ‹ฐ์–ด ๊ฐ์ง€, ์„ธํŒ… ์ ์šฉ
Editor/      ๊ธ€๋ฃจ โ€” NํšŒ ๋ฒค์น˜๋งˆํฌ ๋Ÿฌ๋„ˆ, ํ‹ฐ์–ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ, LLM ํ”„๋กœ๋ฐ”์ด๋”(Ollama/Gemini), ๋Œ€์‹œ๋ณด๋“œ
Samples/     ๋ณ‘๋ชฉ ์‹œ๋‚˜๋ฆฌ์˜ค 4์ข… (์‹คํ—˜ ํ”ฝ์Šค์ฒ˜)
Tests/       NUnit โ€” ๋™์ผ ์†Œ์Šค๊ฐ€ Unity Test Runner์™€ dotnet ์–‘์ชฝ์—์„œ ์‹คํ–‰

โš  Experimental โ€” File Rewrite Mode: ์ด์ „ ๋ฒ„์ „์˜ "LLM์ด ์†Œ์Šค ํŒŒ์ผ ์ „์ฒด๋ฅผ ์žฌ์ž‘์„ฑ"ํ•˜๋Š” ๋ฃจํ”„๋Š” ์‹คํ—˜ ๋ชจ๋“œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ๊ธฐ๋ณธ ๋น„ํ™œ์„ฑ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๋กค๋ฐฑยท๋„๋ฉ”์ธ ๋ฆฌ๋กœ๋“œ ๋ณต๊ตฌยท๋Œ€์ƒ ํ•ด์‹œ ๊ฐ€๋“œ๊ฐ€ ์žˆ์ง€๋งŒ, ์ด ๋ชจ๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ํ—ค๋“œ๋ผ์ธ ์ˆ˜์น˜๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


Developed by mmporong ๐ŸŒ  | Research Report ยท QA Methodology ยท Device Tier Optimization

Built With

  • ai
  • autoresearch
  • optimization
  • unity
Share this project:

Updates