Path Scaling 33 KO - teamswyg/laya-tools GitHub Wiki
์ค์ ํ์ผ ํ๋ณด ์๋ฅผ ์ ์งํ๋ ๊ฒ์ ๊ฒฝ๋ก
์์ง ์ค ์ฝ์ ์ ์๋ 264๊ฐ ๋ชฉ๋ก ์ค 102๊ฐ๊ฐ ๊ธฐ์กด 4,096๊ฐ ํ๋ณด ํ๋๋ฅผ ๋์๋ค. ๊ฐ์ฅ ํฐ ๋ชฉ๋ก์ 6,924๊ฐ ํ์ผ์ด์๋ค. ์ด๋ ์ค๊ฐ ๊ด์ธก์ด๋ฉฐ ์ ์ฒด 2,400๊ฐ ๊ฒฐ๊ณผ๊ฐ ์๋๋ค. ์์ ์ ์ฅ์๋ง ๊ณจ๋ผ ํ๊ฐํ๊ฑฐ๋ ํ์ผ์ ์๋ผ๋ด์ง ์๋๋ก ํ์ฅ ๊ณํ์ ๋จผ์ ๊ณ ์ ํ๋ค.
์ ํ์ Go API
hintsearch.NewPathIndex(paths)๋ ๊ณ ์ ํ ์๋ ํ์ผ ๊ฒฝ๋ก ์ต๋ 100,000๊ฐ, ๊ฒฝ๋ก๋น 4,096๋ฐ์ดํธ, ํฉ๊ณ 16MiB๋ฅผ ๋ฐ๋๋ค. ์์ง๊ธฐ์ ์ํ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉฐ, ๋น ๊ฒฝ๋กยท์ค๋ณตยท์๋ชป๋ UTF-8ยท๊ฒฝ๋ก ์ ๊ทํ ๋ฌธ์ ๋ ์ค๋ฅ๋ก ๋๋ ค์ค๋ค. ์
๋ ฅ ์์๋ฅผ ์ ์งํ๊ณ ํ์ผ์ด๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ด์ง ์๋๋ค. ์ ๊ทผ ๊ถํ๊ณผ ์์ฒ ๋ชฉ๋ก์ ์์ ์ฑ์ ํธ์ถ์๊ฐ ๋ณด์ฅํด์ผ ํ๋ค.
idx, err := hintsearch.NewPathIndex(paths)
if err != nil { return err }
ranking, err := idx.RankLongInto(completeRequest, hintsearch.Ranking{})
if err != nil { return err }
order, err := hintsearch.InterleavePathBaselineFirst(ranking.Order, hintIDs)
if err != nil { return err }
// order๋ ์๋ paths์ ์์น์ด๋ฉฐ ๋ชจ๋ ํ๋ณด๋ฅผ ํฌํจํ๋ค.
์ ์ฒด ๋ชฉ๋ก์์ ๊ณตํต BM25 ํต๊ณ๋ฅผ ๋ง๋ ๋ค. ์กฐ๊ฐ๋ณ๋ก ์๋ก ๋ค๋ฅธ ์ ์๋ฅผ ๊ณ์ฐํด ์ต์ง๋ก ํฉ์น์ง ์๋๋ค. ์ธ๋ฑ์ค๋ ๋ถ๋ณ์ด๋ฉฐ ์ดํยทpostingยท์ ์ยท์์๋ ๋ฐฐ์ด๋ก ๋ค๋ฃฌ๋ค. ๊ฒฐ๊ณผ ๋ฒํผ๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ๋์ ํธ์ถ์์๋ ๊ฐ๊ฐ ์์ ํ๋ค. ํฐ ํ๋ณด์ฉ ๋ณํฉ๋ ๊ธฐ์กด๊ณผ ๊ฐ์ baseline-first ์์์ด๋ฉฐ, ํํธ๊ฐ ํ๋ ค๋ ํ๋ณด๋ฅผ ์์ ์ง ์๋๋ค. ์ ํํ๊ณ ๋น์ฉ์ด ๊ฐ์ ํ์ธ์ ๊ฐ์ ํ ๋ ๊ธฐ์กด ์์ r์ ํ๋ณด๋ min(n, 2rโ1)๋ฒ ์์ ๋์จ๋ค. ์๊ฐยทํ ํฐยท๋ณต์ ์ฆ๊ฑฐ ์์ฑ์ ๋ณด์ฅ์ ์๋๋ค.
๊ธฐ์กด New์ ๋ณํฉ API์ ์์ ํ๋๋ ์ ์งํ๋ค. ๋ชจ๋ธยทํน์งยทCLIยท์ธ์
ยท์ง์ฐ ํํธ์ ๊ณ์ฝ์ ๋ฐ๊พธ์ง ์์๋ค. ์ด API๋ ์ค์ ํ์ผ ๊ฒฝ๋ก ๊ธฐ์ค์ ๊ณผ ํ๋ณด ์์ ์ ์์ ์ํ ๊ฒ์ด๋ฉฐ ์ฝ๋ ๋ณธ๋ฌธ ์๋ฏธ๋ ์์
ํด๊ฒฐ ๋ฅ๋ ฅ์ ์
์ฆํ์ง ์๋๋ค.
๊ฒ์ฆ๊ณผ ํ๋กํ์ผ
6,000๊ฐ ํ๋ณด์ ๋์ ์๋ ๊ฒ์์ด๋ฅผ ์ฐพ๊ณ ์ ์ฒด ๋ชฉ๋ก ๊ธฐ์ค IDF๋ฅผ ๋ ๋ฆฝ ๊ณ์ฐํด ๋น๊ตํ๋ค. ์ต๋ 100,000๊ฐ ์ ๋ ฅ์์๋ ๋ง์ง๋ง ํ๋ณด ๊ฒ์์ ํ์ธํ๋ค. ์์ ๋ชฉ๋ก์ ๊ธฐ์กด ์ ์ยท์์์ ์ ํํ ์ผ์นํ๋ค. ์ญ์ ํํธ๋ก๋ ๋ชจ๋ ํ๋ณด์ baseline ์์ ์ํ์ด ์ ์ง๋๋์ง, ์๋ชป๋ ๊ฒฝ๋กยท์ค๋ณตยทํฌ๊ธฐ ์ด๊ณผ๋ฅผ ๊ฑฐ๋ถํ๋์ง ๊ฒ์ฌํ๋ค.
M4 Pro CPU, ์์ฒด ํฉ์ฑ ํ์ผ ๊ฒฝ๋ก 10,000๊ฐ, ๋จ์ด ํ๋๋ฅผ ๋ฐ๋ณต ๊ฒ์ํ๋ benchmark๋ฅผ ๊ฐ 3ํ ์คํํ๋ค. CPU/ํ ๋น ํ๋กํ์ผ์ ๋ก์ปฌ์๋ง ๋ณด๊ดํ๋ค. ํ๋กํ์ผ์์ ์ ๋ ฌ ๋น๊ตยท๊ตํ ๋น์ฉ์ ํ์ธํ๊ณ ๊ฒฐ๊ณผ ์์ ์ ๋ ฌ์ sort.Slice์์ slices.SortFunc๋ก ๋ฐ๊ฟจ๋ค. ์ ์ ๊ณ์ฐ์ ๊ทธ๋๋ก๋ค.
| ์ธก์ | ๋ณ๊ฒฝ ์ | ๋ณ๊ฒฝ ํ |
|---|---|---|
| ์ฌ์ฌ์ฉ ๊ฒ์ ns/op ๋ฒ์ | 43,054โ43,559 | 35,039โ35,084 |
| ์ฌ์ฌ์ฉ ๊ฒ์ ํ ๋น B/op | 72 | 16 |
| ์ฌ์ฌ์ฉ ๊ฒ์ ํ ๋น ํ์ | 3 | 1 |
์ด ์กฐ๊ฑด์์ ๊ฒ์ ์๊ฐ์ด ์ฝ 19% ์ค์๋ค. ๋ ์ธก์ ๋ชจ๋ ๋์ผํ profiling ์ต์ ์ ์ฌ์ฉํ์ง๋ง ์ ์ฒด ์์คํ ๋ถํ์ ์คํ ์์ ํจ๊ณผ๋ฅผ ๋ฐฐ์ ํ ์ธ๊ณผ ์คํ์ ์๋๋ค. ํฉ์ฑ ๋จ์ด ํ ๊ฐ ๊ฒ์์ ์ค์ ์ฅ๋ฌธยท์ ์ฅ์ยทLLM ์ฑ๋ฅ์ผ๋ก ํ๋ํ์ง ์๋๋ค.
์ธ๋ฑ์ค ์์ฑ์ ๋ณ๊ฒฝ ์ ์ฝ 5.33โ5.84ms, ๋ณ๊ฒฝ ํ ์ฝ 5.01โ5.08ms์์ผ๋ฉฐ ์ฝ 9.47MB ๋์ ํ ๋น๊ณผ 10,113ํ ํ ๋น์ด ์ ์ง๋๋ค. ์์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ ฌ ๋ณ๊ฒฝ์ ๋์์ด ์๋๋ฏ๋ก ์์ฑ ์๊ฐ ์ฐจ์ด๋ฅผ ๊ฐ์ ํจ๊ณผ๋ผ๊ณ ์ฃผ์ฅํ์ง ์๋๋ค. ๋์ ํ ๋น์ ์์ฃผ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅด๋ค. SIMD๋ GPU ๊ฐ์ ์ฃผ์ฅ์ ์๋ค. ์ ์ฒด ์๋ฃ ์์ง์ ์๋ฃํ์ผ๋ฉฐ ์ค์ ํ์ผ ์ ๋ต ๋น๊ต๋ ํ์ ํ๊ฐ์์ ์ํํ๋ค.