Path Index Reuse 35 KO - teamswyg/laya-tools GitHub Wiki

์ธ๋ฑ์Šค ํ•œ ์Œ ์žฌ์‚ฌ์šฉ โ€” ์‹คํ—˜ 35

์ „์ฒด 2,400๊ฐœ ํ‰๊ฐ€์—์„œ๋Š” ๋นจ๋ผ์ง€์ง€ ์•Š์•˜๊ณ  ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ–ˆ๋‹ค. ๊ธฐ๋ณธ ํ™œ์„ฑํ™”๋ฅผ ๋ณด๋ฅ˜ํ•˜๊ณ  ๋ช…์‹œ์ ์ธ ์‹คํ—˜ ์˜ต์…˜์œผ๋กœ๋งŒ ์ œ๊ณตํ•œ๋‹ค. ๊ฐ™์€ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ฐ€์„ค๊ณผ, ์—ฌ๋Ÿฌ ์ €์žฅ์†Œยท๊ณผ๊ฑฐ ์‹œ์ ์ด ์„ž์ธ ์ด๋ฒˆ ํ‰๊ฐ€๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์‚ฌ์ „ ๊ณ„ํš์€ ๊ตฌํ˜„ยท์ธก์ • ์ „์— ๊ณ ์ •ํ–ˆ๋‹ค. ๊ธฐ์ค€ ์†Œ์Šค๋Š” ์‹คํ—˜ 34 ๋ณ‘ํ•ฉ๋ณธ์ด๋‹ค. ์›๋ž˜ ์ „์ฒด ์š”์ฒญยทํŒŒ์ผ ๋ชฉ๋กยท๊ฒ€์ƒ‰ ์ •์ฑ…ยทํ‰๊ฐ€ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ–ˆ๋‹ค. ํ•™์Šต์ด๋‚˜ ์ •๋‹ต ๊ธฐ๋ฐ˜ ํŠœ๋‹์€ ์—†๋‹ค.

fileeval.Ranker๋Š” ์ง์ „ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์ด ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ผ์น˜ํ•  ๋•Œ๋งŒ ์›๋ž˜ BM25์™€ ์‹๋ณ„์ž ๋ถ„๋ฆฌ BM25 ์ธ๋ฑ์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ํ•ด์‹œ๋งŒ ๋ฏฟ๊ฑฐ๋‚˜ ์ €์žฅ์†Œ ์ด๋ฆ„๋งŒ ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๋ชฉ๋ก๋งŒ ๋ณด๊ด€ํ•˜๋ฉฐ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ต์ฒดํ•œ๋‹ค. ์งˆ๋ฌธยท๊ฒ€์ƒ‰ ๊ฒฐ๊ณผยท์ •๋‹ต์€ ์บ์‹œ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜ํ™˜ ์ˆœ์œ„๋Š” ํ˜ธ์ถœ๋ณ„ ์†Œ์œ ์ด๋ฉฐ ๊ธฐ์กด ๊ฒฐ๊ณผ๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์ž‘์—…์ž๋ณ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ž ๊ธˆ์€ ์—†๊ณ , ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์‹œ์— ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์ž…๋ ฅ ํ•œ๋„์™€ fallback์€ ์œ ์ง€ํ•œ๋‹ค.

์‹คํ–‰ ์ˆœ์„œ ๋ฐฉ์‹ ์ „์ฒด ์ดˆ user / system ์ดˆ ์ตœ๋Œ€ RSS ๋ฐ”์ดํŠธ
1 ๊ธฐ์กด 52.59 53.88 / 2.06 108,150,784
2 ์žฌ์‚ฌ์šฉ 52.94 55.09 / 1.83 122,044,416
3 ์žฌ์‚ฌ์šฉ 52.72 55.33 / 1.88 128,991,232
4 ๊ธฐ์กด 52.65 55.25 / 1.94 109,920,256

Apple M4 Pro CPU์—์„œ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์‹คํ–‰ํ–ˆ๋‹ค. ๋ฐฉ์‹๋ณ„ ๋‘ ๊ด€์ธก์˜ ์‹œ๊ฐ„ ์ค‘์•™๊ฐ’์€ 52.62 โ†’ 52.83์ดˆ์ด๋ฉฐ, ์ตœ๋Œ€ ๊ด€์ธก RSS๋Š” ์•ฝ 104.8 โ†’ 123.0MiB๋‹ค. ์ธก์ • ํšŸ์ˆ˜๊ฐ€ ์ ์–ด ์ž‘์€ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ํ†ต๊ณ„์ ์œผ๋กœ ํ™•์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์žฌ์‚ฌ์šฉ์€ ๋งค๋ฒˆ 3ํšŒ๋ฟ์ด๊ณ  2,397๊ฐœ ๋ชฉ๋ก์„ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋Š” ์ž…๋ ฅยท์บ์‹œ ๊ฒ€์ฆยทํŒŒ์ผ ์ฝ๊ธฐยท๊ฒ€์ƒ‰ยท์ฑ„์ ยท์ถœ๋ ฅ์„ ํฌํ•จํ•˜๋ฏ€๋กœ ์ˆœ์ˆ˜ ์ถ”๋ก  ์‹œ๊ฐ„์ด ์•„๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ด€์ธก๊ฐ’.

๋ชจ๋“  ์‹คํ–‰์€ ์‹คํ—˜ 34 ์ง‘๊ณ„์™€ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ™์œผ๋ฉฐ, 2,400๊ฐœ ์ž‘์—…์˜ ์„ธ ์ •์ฑ… ์ „์ฒด ์ˆœ์œ„ ์ง€๋ฌธ๋„ ์ผ์น˜ํ–ˆ๋‹ค. ์ž‘์—… ID ๊ธธ์ดยท์ •์ฑ… ๋ฒˆํ˜ธยทํ›„๋ณด ์ˆ˜ยท๋ชจ๋“  ํ›„๋ณด ์œ„์น˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ SHA-256์— ๊ธฐ๋กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์œ„ ์ •๋‹ต ์ˆ˜๋งŒ ๊ฐ™์€ ๋น„๊ต๊ฐ€ ์•„๋‹ˆ๋‹ค. ์›๋ฌธ์ด๋‚˜ ์ž‘์—…๋ณ„ ์ˆœ์œ„๋Š” ๊ณต๊ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ์ „ ์Šน์ธ ์กฐ๊ฑด์€ ์ „์ฒด ์ˆœ์œ„ยท์ง‘๊ณ„ ์ผ์น˜์™€ ์‹œ๊ฐ„ ์ค‘์•™๊ฐ’ ๊ฐ์†Œ, ์ตœ๋Œ€ ๊ด€์ธก RSS ๋น„์ฆ๊ฐ€๋‹ค. ์†๋„ยท๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์‚ฌํ›„์— ์ž‘์—…์„ ์žฌ์ •๋ ฌํ•˜๊ฑฐ๋‚˜ ์บ์‹œ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค ๊ฐ™์€ ์‹คํ—˜์˜ ์„ฑ๊ณต์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ํ–ฅํ›„ ๋ฐฐ์น˜ ์ˆœ์„œ ๋ณ€๊ฒฝ์€ ๋ณ„๋„ ์‹คํ—˜์ด๋‹ค.

# ๊ธฐ๋ณธ: ์ง์ „ ์ธ๋ฑ์Šค๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ
go run ./cmd/riido-fileeval --out .cache/file-eval-new
# ๋ช…์‹œ์  ์‹คํ—˜ ์˜ต์…˜: ์ง์ „ ํŒŒ์ผ ๋ชฉ๋ก ํ•˜๋‚˜๋งŒ ์œ ์ง€
go run ./cmd/riido-fileeval --reuse-path-indexes --out .cache/file-eval-reuse-new

์‹คํ—˜ 34์˜ ๊ณ ์ •๋œ ๋กœ์ปฌ ์š”์ฒญยท์ •๋‹ต projection๊ณผ ์ „์ฒด ์บ์‹œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ธฐ๋ณธ ์‹คํ–‰๋„ ์ „์ฒด ์ˆœ์œ„ ์ง€๋ฌธ์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋ฌดํšจยท๋ณ€๊ฒฝ ์ž…๋ ฅ, ํ˜ธ์ถœ์ž ๋ฐฐ์—ด ๋ณ€๊ฒฝ, ๊ธด ์ •๊ทœํ™” ์งˆ๋ฌธ์˜ fallback, ๊ธฐ์กด ๋ฐ˜ํ™˜๊ฐ’ ๋ณด์กด, ๋…๋ฆฝ ์ž‘์—…์ž ๋™์‹œ ์‚ฌ์šฉ์„ ๊ฒ€์ฆํ•œ๋‹ค. ๊ธฐ์กด standalone Rank๋Š” ํ˜ธ์ถœ ์‚ฌ์ด ์บ์‹œ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

์ด ์‹คํ—˜์€ ๊ฒ€์ƒ‰ ์‹คํ–‰ ๋น„์šฉ๋งŒ ๋‹ค๋ฃฌ๋‹ค. Layaยท3์ง„ ๋ชจ๋ธ ์ถ”๋ก /ํ•™์Šต, GPU, ์‹ค์ œ ์—์ด์ „ํŠธ ํ† ํฐ ์ ˆ๊ฐ ๋˜๋Š” ์ƒˆ ํ’ˆ์งˆ ์ฆ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ธฐ์กด ์ตœ์ข… ์˜ˆ๋น„ ํ‰๊ฐ€์…‹๊ณผ ๋ชจ๋ธ ํŒŒ์ผ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ Hugging Face ๋ฐฐํฌ๋„ ์—†๋‹ค. ๊ณต๊ฐœ ์ž๋ฃŒ๋Š” ์›๋ณธ ํ•ฉ์„ฑ fixtureยท์ฝ”๋“œยท์ง‘๊ณ„์ด๊ณ  ์›๋ฌธยท๊ฒฝ๋กœ ๋ชฉ๋กยท์ •๋‹ตยทpprof ํŒŒ์ผ์€ ๋น„๊ณต๊ฐœ ๋กœ์ปฌ์— ๋‘”๋‹ค.

๋ณ„๋„์˜ ์›๋ณธ ํ•ฉ์„ฑ fixture๋Š” ๊ฐ™์€ 10,000๊ฐœ ๊ฒฝ๋กœ์™€ ์งˆ๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. pprof๋ฅผ ์ผ  3ํšŒ benchmark์—์„œ ๊ธฐ์กด ๋ฐฉ์‹์€ 18.90โ€“19.77ms/op, ์•ฝ 29.16MB ํ• ๋‹น/op, 80,249ํšŒ ํ• ๋‹น/op์˜€๊ณ  ์žฌ์‚ฌ์šฉ์€ 0.1127โ€“0.1130ms/op, ์•ฝ 0.423MB ํ• ๋‹น/op, 21ํšŒ ํ• ๋‹น/op์˜€๋‹ค. ์ดˆ๊ธฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ์€ ๊ฐ benchmark์— ํ•œ ๋ฒˆ ํฌํ•จ๋˜์–ด ๋ฐ˜๋ณต ํšŸ์ˆ˜์— ๋ถ„์‚ฐ๋œ๋‹ค. ์ด ์œ ๋ฆฌํ•œ ๋ฐ˜๋ณต ์กฐ๊ฑด์„ ์‹ค์ œ 2,400๊ฐœ ๊ฒฐ๊ณผ์— ์ผ๋ฐ˜ํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐํ•ฉ pprof์˜ ๋ˆ„์  ํ• ๋‹น์€ ์ˆœ์œ„ ๋ฐฐ์—ด ์ƒ์„ฑ๊ณผ ๋ณ‘ํ•ฉ์—๋„ ์ง‘์ค‘๋๋‹ค. ๋ฐฉ์‹๋ณ„ ์‹คํ–‰ ํšŸ์ˆ˜๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฅด๋ฏ€๋กœ ์ „์ฒด ๋ˆ„์  ๋ฐ”์ดํŠธ ๋น„์œจ์€ ๋ฐฉ์‹ ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ๋น„๊ต๊ฐ€ ์•„๋‹ˆ๋‹ค. CPU ํ‘œ๋ณธ์—๋Š” ๋Ÿฐํƒ€์ž„ ๋Œ€๊ธฐยท๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜ ๋น„์šฉ์ด ํฌ๊ฒŒ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ, SIMD๋‚˜ ์ถ”๊ฐ€ ์ž ๊ธˆ์ด ํ•ด๊ฒฐ์ฑ…์ด๋ผ๋Š” ๊ทผ๊ฑฐ๋Š” ์—†๋‹ค. pprof ๋ˆ„์  ํ• ๋‹น๋Ÿ‰์€ ์ƒ์ฃผ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ GPU ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ „์ฒด raceยทvetยทํ˜•์‹ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค.