Long Query 32 KO - teamswyg/laya-tools GitHub Wiki

๊ธด ์š”์ฒญ์„ ๋ฒ„๋ฆฌ์ง€ ์•Š๋Š” ๊ฒ€์ƒ‰ ์ž…๋ ฅ โ€” ์‹คํ—˜ 32

๊ณ ์ •ํ•œ ์‹ค์ œ ์š”์ฒญ 2,400๊ฐœ๋ฅผ ์ž˜๋ผ๋‚ด์ง€ ์•Š๊ณ  ๋ชจ๋‘ ๊ฒ€์ƒ‰ ํ•จ์ˆ˜์— ํ†ต๊ณผ์‹œ์ผฐ๋‹ค. ๊ธฐ์กด 8,192๋ฐ”์ดํŠธ ํ•œ๋„๋ฅผ ๋„˜๋Š” 53๊ฐœ๋„ ํฌํ•จํ•œ๋‹ค. ๊ฒ€์ƒ‰ ๋Œ€์ƒ์€ ๋น„์šฉ ํ™•์ธ์šฉ ํ•ฉ์„ฑ ๋ฌธ์„œ์ด๋ฏ€๋กœ ์‹ค์ œ ์ž‘์—…์˜ ์ •๋‹ต ๊ฒ€์ƒ‰๋ฅ ์„ ์ธก์ •ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

Go pkg/hintsearch์— ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Index.RankLongInto(query, dst)๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. UTF-8 ์›๋ฌธ์„ ์ตœ๋Œ€ 128KiB๊นŒ์ง€ ๋ฐ›์•„ ํ•œ ๋ฒˆ ํ† ํฐํ™”ํ•˜๊ณ , ๊ธฐ์กด๊ณผ ๊ฐ™์€ ๊ณ ์œ  ๊ฒ€์ƒ‰์–ด BM25 ๋ฐ ๋™์  ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์š”์•ฝยท๋ถ„ํ• ยท์ž˜๋ฆผ์€ ์—†๋‹ค. ์ƒํ•œ ์ดˆ๊ณผ๋‚˜ ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ๋ฒ„ํผ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „์— ์˜ค๋ฅ˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

index, err := hintsearch.New(documents)
if err != nil { return err }
ranking, err := index.RankLongInto(completeRequest, hintsearch.Ranking{})
if err != nil { return err }
// ranking.Order๋Š” ์›๋ž˜ ๋ฌธ์„œ ์œ„์น˜๋‹ค. ๋‹ค์Œ ์š”์ฒญ์—์„œ ranking ๋ฒ„ํผ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด Rank/RankInto์˜ 8KiB ํ•œ๋„๋Š” ๊ทธ๋Œ€๋กœ๋‹ค. ์ธ๋ฑ์Šค๋Š” ๋ถˆ๋ณ€์ด๊ณ  ๊ฒฐ๊ณผ ๋ฒ„ํผ๋Š” ํ˜ธ์ถœ์ž ์†Œ์œ ๋‹ค. ๋™์‹œ์— ํ˜ธ์ถœํ•  ๋•Œ ๋ฒ„ํผ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋ธยทํŠน์ง• ์ถ”์ถœยทCLIยท์„ธ์…˜์˜ ์ž…๋ ฅ ํ•œ๋„๋ฅผ ํ™•๋Œ€ํ•˜๊ฑฐ๋‚˜ ๊ธด ์ž…๋ ฅ์„ ํ•™์Šต ๋ชจ๋ธ์— ์—ฐ๊ฒฐํ•œ ๋ณ€๊ฒฝ์€ ์•„๋‹ˆ๋‹ค. ํ›„์† ํ‰๊ฐ€ ๋ฐ Go ํ˜ธ์ถœ์ž๊ฐ€ ์›๋ฌธ ์ „์ฒด์˜ lexical ๊ธฐ์ค€์„ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ๊ฒƒ์ด๋‹ค.

์‹ค์ œ ์‹คํ–‰ ๊ฒฐ๊ณผ

์‚ฌ์ „ ๊ณ„ํš์„ ๊ณ ์ •ํ•œ ๋‹ค์Œ ๊ธฐ์กด projection์—์„œ ๊ฐ™์€ ์„ ํƒ ํ•ด์‹œ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ–ˆ๋‹ค. ๋ฌธ์„œ๋Š” document 0000 source code ... ํ˜•์‹์˜ ์ž์ฒด ํ•ฉ์„ฑ ์ž๋ฃŒ 4,096๊ฐœ๋‹ค. ๋ฌธ์„œ ๋ฒˆํ˜ธ ์™ธ์˜ ๋‹จ์–ด๊ฐ€ ๋Œ€๋ถ€๋ถ„ ๊ฐ™์•„ ์‹ค์ œ ์ €์žฅ์†Œ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๋‹ค. ์ •๋‹ต์ด๋‚˜ ํŒจ์น˜๋ฅผ ์ฝ์ง€ ์•Š์•˜๋‹ค.

ํ•ญ๋ชฉ ๊ฒฐ๊ณผ
์ „์ฒด ์š”์ฒญ / ์„ฑ๊ณต / ์‹คํŒจ 2,400 / 2,400 / 0
8KiB ์ดˆ๊ณผ ์š”์ฒญ 53
์›๋ฌธ ํ•ฉ๊ณ„ / ์ตœ๋Œ€ ๊ธธ์ด 4,363,135 / 71,136๋ฐ”์ดํŠธ
์ž˜๋ฆฐ ์š”์ฒญ 0
์งง์€ ์ž…๋ ฅ ๊ธฐ์กด ๊ฒฐ๊ณผ ๋น„๊ต / ๋ถˆ์ผ์น˜ 2,347 / 0

์ ์ˆ˜ ๋ฐฐ์—ด๊ณผ ์ „์ฒด ๋ฌธ์„œ ์ˆœ์„œ๋ฅผ ์ •ํ™•ํžˆ ๋น„๊ตํ–ˆ๋‹ค. ์ง‘๊ณ„๋Š” ์žฌ์‹คํ–‰์—์„œ ๋ฐ”์ดํŠธ ์ผ์น˜ํ–ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๊ฒ€์ƒ‰์–ด๊ฐ€ 8KiB ๋’ค์— ์žˆ๋Š” ์‚ฌ๋ก€์˜ ์ ์ˆ˜๋ฅผ ๋…๋ฆฝ์ ์ธ BM25 ๊ณ„์‚ฐ์œผ๋กœ ํ™•์ธํ–ˆ๊ณ , Unicode ๊ฒฝ๊ณ„ยท์ƒํ•œยท์˜ค๋ฅ˜ ์‹œ ๋ฒ„ํผ ๋ณด์กดยท๋™์‹œ ํ˜ธ์ถœ๋„ ํ…Œ์ŠคํŠธํ–ˆ๋‹ค. ์ „์ฒด Go race/vet, ํ˜•์‹ ๋ฐ redacted ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋น„์šฉ๊ณผ ํ•œ๊ณ„

M4 Pro CPU์—์„œ ๋งˆ์ง€๋ง‰ ์‹คํ–‰์˜ ๊ฒ€์ƒ‰ ๋ฃจํ”„ 2,400ํšŒ๋Š” 109,067,791ns(์•ฝ 0.109์ดˆ), ๋ˆ„์  Go ํ• ๋‹น 43,429,152๋ฐ”์ดํŠธ, ํ• ๋‹น 16,741ํšŒ์˜€๋‹ค. ํ˜ธ์ถœ์ž ๊ฒฐ๊ณผ ๋ฒ„ํผ๋Š” ์ž์ฒด fixture๋กœ ๋จผ์ € ์ค€๋น„ํ–ˆ๋‹ค. ์ด ์ธก์ •์—๋Š” ๊ฒ€์ƒ‰ ๋ฃจํ”„๋งŒ ํฌํ•จ๋˜๋ฉฐ ์›์ฒœ ์ฝ๊ธฐยท์„ ํƒยท์ธ๋ฑ์Šค ์ƒ์„ฑยท์งง์€ ์ž…๋ ฅ ๋น„๊ต๋Š” ์ œ์™ธํ•œ๋‹ค. ๋ˆ„์  ํ• ๋‹น๋Ÿ‰์€ ์ตœ๋Œ€ ์ƒ์ฃผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ „์ฒด ํ”„๋กœ์„ธ์Šค๋Š” wall 0.92์ดˆ/user 0.56์ดˆ/sys 0.02์ดˆ, ์ตœ๋Œ€ RSS 35,749,888๋ฐ”์ดํŠธ(์•ฝ 34.1MiB)์˜€๋‹ค. ์‹œ๊ฐ„๊ณผ ํ• ๋‹น๊ฐ’์€ ์‹คํ–‰๋ณ„๋กœ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด ๊ฒฐ์ •์ ์ธ ๊ฒฐ๊ณผ JSON๊ณผ ๋ณ„๋„๋กœ ๊ธฐ๋กํ•œ๋‹ค. ํ•ฉ์„ฑ ๋ฌธ์„œ ๋น„์šฉ์„ ์‹ค์ œ ์ €์žฅ์†Œ ๊ฒ€์ƒ‰ยท๋ชจ๋ธยทGPUยทLLM ๋น„์šฉ์œผ๋กœ ํ™•๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

ํ›„์†: ์‹คํ—˜ 33์—์„œ ์ „์ฒด 2,400๊ฐœ ์‹ค์ œ ํŒŒ์ผ ๋ชฉ๋ก๊ณผ ๋ถ„๋ฆฌ๋œ ํŒŒ์ผ ์œ„์น˜ ์ •๋‹ต์„ ํ™•๋ณดํ–ˆ๋‹ค. ์‹ค์ œ ๊ฒ€์ƒ‰ ์ˆœ์œ„ ๋น„๊ต๋Š” ํ›„์† ํ‰๊ฐ€์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.