Static Embeddings 04 KO - teamswyg/laya-tools GitHub Wiki
์ ์ ์๋ฏธ ์๋ฒ ๋ฉ 04: Go ์คํยท์์ถ์ ๊ฒ์ฆ, ์ฝ๋ ๊ด๋ จ์ฑ์ ๋ถ์กฑ
English ยท ๊ณ ์ ๊ณํ ยท ์ง๊ณ ๊ฒฐ๊ณผ ยท ์ถ์ฒยทํ์ผ ํด์
๋ฌธ๋งฅ ์ธ์ฝ๋ ์์ด ์์ ๋จ์ด ๋ฒกํฐ ํ๋ฅผ ์ฝ๋ Go ์คํ ๊ฒฝ๋ก๋ฅผ ๊ตฌํํ๋ค. ์๋ณธ๊ณผ ๊ฒฐ๊ณผ๊ฐ ์ผ์นํ๊ณ 3์ง ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ถ ์ํ๋ก ์ ์งํ๋ค. ๊ทธ๋ฌ๋ CoSQA ๊ฒ์ฆ ์ฑ๋ฅ์ ์ดํ ๊ธฐ์ค์ ๋ณด๋ค ๋ฎ์ ์ค์ฌ์ฉ ์น๊ฒฉํ์ง ์๋๋ค. reserve1 2,403๊ฐ/reserve2 2,401๊ฐ๋ ์ด๋ฒ์๋ ์ ์๋ฅผ ๋ด์ง ์์๋ค.
๋ฌด์์ ๋ง๋ค์๋
MinishLab Model2Vec์ potion-base-2M์ ์ผ๋ฐ ์์ด์ฉ ์ ์ ์๋ฒ ๋ฉ์ด๋ฉฐ ๋ชจ๋ธ ์นด๋์ ๋ผ์ด์ ์ค ํ์๋ MIT๋ค. ๋ชจ๋ธ revision 389b9f64be5aa4ae7a6bc6fe95ef20ce485ae5da, ์ฐธ๊ณ ๊ตฌํ commit 38c7bc9c93808ee15602265ba96a9b8fda58783f๋ฅผ ๊ณ ์ ํ๋ค. ์๋ Laya ์ธ์ฝ๋๋ฅผ ํฌํ
/๊ต์ฒดํ ๊ฒ์ด ์๋๋ผ ๋ณ๋ ๋น๊ต๊ตฐ์ด๋ค.
Go๊ฐ WordPiece/BertNormalizer๋ฅผ ๊ตฌํํ๊ณ , ๊ฐ ํ ํฐ์ 64์ฐจ์ ๋ฒกํฐ๋ฅผ ํ๊ท ยท์ ๊ทํํ๋ค. ์๋ CLS/SEP๋ ๋ฃ์ง ์๊ณ unknown ID๋ ์๋ณธ์ฒ๋ผ ์ ์ธํ๋ค. ๋ฌธ์ ๊ทธ๋๋ก ์ ๋ ฅํ ํน์ ํ ํฐ์ ๋ณ๋๋ก ์ฒ๋ฆฌํ๋ค. ๋น ์ ๋ ฅ ๋๋ ๋จ๋ ํ ํฐ์ด ์์ผ๋ฉด ์๋ฒกํฐ์ด๋ฉฐ, ์ด๊ฒ์ ์๋ฏธ ์๋ ๊ด๋ จ์ฑ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค. ํ ์ ๋ ฅ4,096๋ฐ์ดํธ ๋ฐ ์ฌ๋ฐ๋ฅธ UTF-8์ ์๊ตฌํ๊ณ ์ด๊ณผ ์ ๋ ฅ์ ์๋ฅด์ง ์๊ณ ๊ฑฐ๋ถํ๋ค.
๊ธฐ์กด Laya๋ NFC/ByteLevel/BPE์ฌ์ ๊ทธ ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฌ์ฉํ์ง ์์๋ค. ๋ชจ๋ธ/ํ ํฌ๋์ด์ ํด์๊ฐ ๋ค๋ฅด๋ฉด ๋ก๋ํ์ง ์๋๋ค. ์คํ์ฉ ์ดํ๋ ์ ๋ ฌ ๋ฐฐ์ด, ์๋ฒ ๋ฉ์ ์ฐ์ ๋ฐฐ์ด์ด๋ค. JSON ๋ก๋ ์ค ์์ map์ ์ฐ์ง๋ง ์ ์ ์ถ๋ก ์๋ mapยท๊ฐ๋ณ ์บ์ยทlock์ด ์๋ค. ๊ฐ ํธ์ถ์ด ์์ ์ ๊ฒฐ๊ณผยท์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋๋ค.
์๋ณธ ์ผ์น ๊ฒ์ฆ
- ์์ฑ์๊ฐ ๋ง๋ ์ ๊ณต๊ฐ ์ํ ๋ฌธ์ฅ34๊ฐ: ์
์ผํธ, ํ๊ธ/์ค๊ตญ์ด/์ผ๋ณธ์ด, ํน์ ํ ํฐ, ์ ์ด๋ฌธ์, ์ด๋ชจ์ง, ๋น ์
๋ ฅ, ๊ธด ๋จ์ด ๋ฑ์ ํฌํจํ๋ค. ํ ํฐ ID ์ ๋ถ ์ผ์น; FP32 ๋ฒกํฐ ์ต๋ ์ ๋ ์ค์ฐจ
8.94e-8, ํ์ฉ๊ฐ2e-6์ด๋ด. - ์ค์ validation607๊ฐ ์ง๋ฌธยท์ฝ๋ ์ด1,214๊ฐ ํ
์คํธ๋ ์๋ณธ๊ณผ ๋น๊ต: ํ ํฐ ์ ๋ถ ์ผ์น, ์ต๋ ๋ฒกํฐ ์ค์ฐจ
1.19e-7. ์ ๋ ฅ ๋ฒ์ ๋ฐ54์์ ํ ์คํธ๋ ์ด ํ ํฌ๋์ด์ ๊ฒ์ฆ์๋ ํฌํจํ๋ค. ๊ด๋ จ์ฑ AUC ํ๊ฐ์๋ ๊ธฐ์กด๊ณผ ๋์ผํ553์๋ง ์ฌ์ฉํ๋ค. ์ด ๊ฒ์ฆ์ reserve๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. - ์๋ณธ ๋น๊ต์๋ง pinned Model2Vec Python์ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์ ์คํยท๋ค์ด๋ก๋ยทCI์ ์ค์ ๋ชจ๋ธ ํ ์คํธ์๋ Python/ONNX/Torch๊ฐ ํ์ ์๋ค. ๊ณต๊ฐ34๋ฌธ์ฅ reference๋ง Git์ ๋ฃ๊ณ CoSQA ์๋ฌธยท๋ฒกํฐ ์ถ์ ์ ๋ก์ปฌ์๋ง ๋ณด๊ดํ๋ค.
- race ๊ฒ์ฌ์ CGO ๋นํ์ฑ ์คํ, INT8/3์ง ์์น ์์ , ์์ ํ์ผยท์ ๋ ฅ ํ๋ ๊ฑฐ๋ถ๋ฅผ ํ์ธํ๋ค. CI๋ ์ค์ ๊ณ ์ ๋ชจ๋ธ์ ๋ด๋ ค๋ฐ์ ์๋ณธ reference์ ๋น๊ตํ๋ฏ๋ก ๋จ์ mock ๊ฒ์ฌ๊ฐ ์๋๋ค.
์์ถ๊ณผ ์ค์ ๋น์ฉ
| ๋ชจ๋ | ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ค์น+scale ํ | ๊ฒ์ฆ AUC | ์ฌ์ธก์ ๋จ๋ฌธ encode p95 |
|---|---|---|---|
| FP32 | 7,559,168B | 0.5289 | 5.04ยตs |
| INT8, ํ ํฐ๋ณ scale | 2,007,904B | 0.5286 | 3.75ยตs |
| 3์ง, ํ ํฐ๋ณ scale | 590,560B (576.72KiB) | 0.5394 | 4.83ยตs |
| BM25 ๊ธฐ์ค์ | ๋ณ๋ | 0.5378 | ์ด๋ฒ ๋น๊ต ๋์ ์๋ |
| ์ง์ 16๊ณ์ matching FP32 | ๋ณ๋ | 0.5729 | ์ด๋ฒ ๋น๊ต ๋์ ์๋ |
AUC๋ ๊ฐ์553๊ฐ ๋ฒ์ ์ ๊ฒ์ฆ ์์ ์ ์ถ์ ์ด๋ฉฐ ์ ๋ขฐ๊ตฌ๊ฐ์ด๋ ์ ์ต์ข ์ํ ๊ฒฐ๊ณผ๊ฐ ์๋๋ค. 54๊ฐ ์ ์ธ๋ฅผ ์จ๊ธฐ์ง ์๋๋ค. FP32๊ฐ ์ฌ์ ์กฐ๊ฑด AUCโฅ0.60 ๋ฐ BM25๋ณด๋คโฅ0.03 ๊ฐ์ ์ ์ถฉ์กฑํ์ง ๋ชปํ๋ค. ์์ 3์ง ์์น์ผ๋ก ์น๊ฒฉ ํ๋ณด๋ฅผ ์ฌํ ๊ต์ฒดํ์ง ์๋๋ค. ์ด ์ฃผ๊ธฐ์๋ ๊ณผ์ ๋ณ ๊ฐ์ค์น ํ์ต์ ํ์ง ์์๋ค.
3์ง์ ํ๋ณ ํ๊ท ์ ๋๊ฐ์ scale๋ก ์ฐ๊ณ ๊ทธ0.7๋ฐฐ ์ด์์ธ ๊ณ์์ ๋ถํธ๋ฅผ ๋จ๊ธด๋ค. ๊ณ์๋น2๋นํธ์64๊ณ์๋ง๋ค4๋ฐ์ดํธ scale์ด ์ถ๊ฐ๋ผ ์ด2.5bits/๊ณ์๋ค. 1.58bit ๋ฌ์ฑ์ ์ฃผ์ฅํ์ง ์๋๋ค. RAM์์ ๋ฐ๋ก ๋นํธ๋ฅผ ์ฝ์ง๋ง ๋์ ์ฐ์ฐ์ float32์ด๋ฉฐ GPUยทํน์ SIMD ์ปค๋์ ์ฐ์ง ์์๋ค. FP32 ์๋ณธ7.56MB๋ฅผ ์ฝ๊ณ ์์ ์ ์์ถํ๋ฏ๋ก ๋์คํฌ ํ์ผ ์์ฒด๊ฐ590KB์ธ ๊ฒ๋ ์๋๋ค.
Apple M4 Pro/24GiB/Go1.27.1์ ๊ณต๊ฐ ๋จ๋ฌธ2,000ํ ์ธก์ ์ด๋ค. ์ฒซ p95๋ FP32/INT8/3์ง ๊ฐ๊ฐ4.21/3.63/4.67ยตs, ์ฌ์ธก์ ์ ์ ํ์ ๊ฐ๋ค. ๋ชจ๋912B/opยท31allocs/op. Go GC ํ ์์กด heap์ ์ฌ์ธก์ ์์ ์ฝ8.44/3.14/1.80MiB์๋ค. ๋ฐ๋ฉด ์ด๊ธฐ ๋ก๋ฉ์ ํฌํจํ ์ฒซ ์ ์ฒด ํ๋ก์ธ์ค ์ต๋RSS๋31.73/33.58/32.33MiB๋ก ์์ถ ๋ชจ๋๊ฐ ๋ ์์ง ์์๋ค. ๊ฐ์ค์น ํยท์์กด heapยท์ ์ฒด peak RSS๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค. ํ์๋ ์ดํยท๋ฐํ์์ด ๋น ์ ธ ์๋ค. ๋จ๋ฌธ encode ๋น์ฉ์ p95 ์ ์ฒด ๊ฒ์ยท64ํ๋ณด ๊ฒ์ยท์์ด์ ํธ ์คํ ๋น์ฉ์ด ์๋๋ค.
์ฌ๋์ด๊ฑฐ๋ ์์ด์ ํธ์ผ ๋ ์คํ ๋ฐฉ๋ฒ
# ํ ๋ฒ: ๊ณ ์ ๋ ๊ณต๊ฐ ํ์ผ๋ง ๋ด๋ ค๋ฐ๊ณ SHA256 ๊ฒ์ฆ
go run ./cmd/riido-staticprobe --stage setup
# ์ดํ ์คํ๋ผ์ธ ์คํ: JSON ํ ๊ฐ ์
๋ ฅ โ ๋ฒกํฐยทํ ํฐ IDยทํ ํฌ๊ธฐ ์ถ๋ ฅ
printf '%s\n' '{"text":"parse HTTP response headers"}' | \
go run ./cmd/riido-staticprobe --mode ternary
# ์์ฒ CoSQA ํ์ผ์ ์์ ์ค๋น ์ ์ฐจ๋ก ๋ก์ปฌ์ ์์ด์ผ ํจ
go run ./cmd/riido-staticprobe --stage validation --mode fp32 \
--out .cache/static-validation-new.json
๊ฒ์ฆ ์ถ๋ ฅ ํ์ผ์ ์ ํ์ผ์ด์ด์ผ ํ๋ค. ์ด ๋๊ตฌ๋ ์คํ์ฉ ๋ฒกํฐ ๊ณต๊ธ์์ด๋ฉฐ ๊ธฐ์กด riido-hints์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ฐ๊พธ๊ฑฐ๋ Codex์ ๋ฑ๋กํ์ง ์๋๋ค. reference ์ฌ์์ฑ ์คํฌ๋ฆฝํธ๋ scripts/training/static_reference.py๋ค. CI์ ์ฌ์ฉ์ ์คํ์ ์ ์ฅ๋ ๊ณต๊ฐ reference๋ฅผ ์ฌ์ฉํ๋ค.
๋ค์ ๋จ๊ณ์ ์ถ์ฒ ๋ฒ์
๋จ์ ํ๊ท ๋ฒกํฐ์ cosine๋ง์ผ๋ก๋ ์ผ๋ฐ ์์ด ์๋ฏธ๋ฅผ ์ฝ๋ ๊ด๋ จ์ฑ์ผ๋ก ์ฎ๊ธฐ์ง ๋ชปํ๋ค. ๋ค์์๋ ๊ธฐ์กด ์ดํ ๊ธฐ์ค์ ์ ์ ์งํ๋ฉด์ ์ฝ๋ ์๋ณ์ ์ ๊ทํ, ์ง๋ฌธ/์ฝ๋ ํํ ๊ฐ ์์ ํ์ต ์ธต, ํ์์ ๊ณผ์ ๋ณ ์ ์ ์๋ฒ ๋ฉ ํ๋์ ๋น๊ตํ๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ ค๋ ํ์ง์ด ์ค๋ฅด์ง ์์ผ๋ฉด ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ฑํํ์ง ์๋๋ค. ์คํ ๊ฐ๋ฅํ Go ์์ถ ๊ฒฝ๋ก๋ ๋ง๋ จ๋์ง๋ง, ์ค์ ํ๋ณด ๊ฒ์๊ณผ LLM ์ ๊ฐ์ ๋ฏธ๊ฒ์ฆ์ด๋ค.
MIT ํ์๋ ์์ฑ์ ๋ชจ๋ธ ์นด๋์ ์ ์ธ์ด๊ณ ๋ชจ๋ ์ฌ์ ํ์ต ๋ฐ์ดํฐ ๊ถ๋ฆฌ๋ ํ๊ฐ ์๋ฃ ์ค๋ณต ๋ถ์ฌ๋ฅผ ์ฆ๋ช ํ์ง ์๋๋ค. CoSQA ์ฝ๋ MIT/๋ฐ์ดํฐ C-UDA ๊ตฌ๋ถ์ ์ ์งํ๋ฉฐ ์๋ฌธยท๋ผ๋ฒจ ํ์ ์ฌ๋ฐฐํฌํ์ง ์๋๋ค. upstream ๊ฐ์ค์น๋ ๋ก์ปฌ์๋ง ์๊ณ Git์ด๋ ์ฐ๋ฆฌ HF ๊ณ์ ์ ๋ณต์ ํ์ง ์์๋ค. ์ ๋ชจ๋ธ ๊ณต๊ฐ๋ ๊ฒ์ฆยท์ถ์ฒยท๋ผ์ด์ ์ค/๋ด์ฉ ์ ๊ฒ์ ๊ฐ์ถ ํ ๋ณ๋๋ก ์งํํ๋ค.