Encoder Free Learning KO - teamswyg/laya-tools GitHub Wiki
์ธ์ฝ๋ ์๋ ํ์ต 01: INT8์ ๊ฐ๋ฅ์ฑ, 3์ง์ ์คํจ
English ยท ํ์ต ์ ๊ณํ ยท ์ ํ ๊ธฐ๋ก ยท ์ต์ข ๊ฒฐ๊ณผ
์ด๋ฒ์ ์ค์ ๋ก Go์์ ํ์ตํ ๊ฒ์ ์์ฒญ๊ณผ ํ๋ณด ๋ฌธ์์ ๊ด๋ จ์ฑ์ ๋งค๊ธฐ๋ ์์ ์ ํ ๋ชจ๋ธ์ด๋ค. Laya ๊ฐ์ค์นยท์ธ์ฝ๋ยท๊ต์ฌ ์ถ๋ ฅ์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ธฐ์กด ๋์ด๋ ๋ผ์ฐํฐ ๋ฐ Laya 3์ง ํค๋ ์คํ๊ณผ ๋ณ๋๋ค. ๋ชจ๋ธ์ ํ๋ จํ๊ณ ๋ก์ปฌ CLI์์ ํํธ๋ก ์ฌ์ฉํ๋ ๊ฒฝ๋ก๊น์ง ๊ตฌํํ์ง๋ง, ์ผ๋ฐ์ ์ธ ์ฝ๋ ๊ฒ์์ ์ธ ๋งํ๋ค๋ ๊ฒฐ๋ก ์ ์์ง ๋ด๋ฆด ์ ์๋ค.
๋ฌด์์ ๋ฐฐ์ ๋
๋ฌธ์ ๋ ๊ฐ๊ฐ ๊ฐ์ ๋จ์ด๋ฅผ ๋ค๋ฅธ ์์๋ก ์ด๋ค.
cache keeps active entries and removes inactive entriescache removes active entries and keeps inactive entries
์์ฒญ์ retain/discard์ ๋ฌธ์์ keeps/removes ์ฌ์ด ๊ด๊ณ๋ฅผ ๋จ์ดยท์ฐ์ ๋ ๋จ์ด์ ์กฐํฉ์ผ๋ก ํ์ตํ๋ค. ์ด์ ์๋ BM25๋ ์ ๋ฌธ์์ ์ ์๊ฐ ๊ฐ๋ค. 20๊ฐ ๋๋ฉ์ธ์์ ํ์ตํ๊ณ ๋ค๋ฅธ 6๊ฐ์์ ์ ํ, ๋ ๋ค๋ฅธ 6๊ฐ์์ ์ต์ข ํ๊ฐํ๋ค. ๋ฌธ๋ฒ๊ณผ ๋์ฌ๋ ๋ชจ๋ split์์ ๊ณต์ ํ๋ค. ์ ๋ช ์ฌ์ ๊ฐ์ ๊ท์น์ ์ฎ๊ธฐ๋ ํต์ ์คํ์ด๋ฉฐ ์ ๋ฌธ๋ฒยท๋์ฌยทํ๊ตญ์ดยท์์ฐ์ค๋ฌ์ด ์ค์ ์์ฒญ์ ๋ํ ๊ฒ์ฆ์ ์๋๋ค. ๋จ์ผ ์์ฑ์์ ํฉ์ฑ ํ ํ๋ฆฟ์ด๋ผ๋ ํ๊ณ๊ฐ ํฌ๋ค.
ํ์ต 80์์ฒญ/40๋ฌธ์, ๊ฒ์ฆ 24์์ฒญ/12๋ฌธ์, ์ต์ข 24์์ฒญ/12๋ฌธ์. ์ต์ข ๋ฌธ์๋ ํ์ต ์์ฑ์ผ๋ก๋ ์ฌ์ฉํ์ง ์์๋ค. ์ด๋ฏธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ต์ข ์ธํธ๋ ๋ค์ ๊ฐ์ ๋ถํฐ ๊ฐ๋ฐ์ฉ์ด๋ค.
๊ฒฐ๊ณผ
| ๋ชจ๋ธ | ํ์ผ | ์ฒซ ํ๋ณด ์ ๋ต (24๊ฑด, seed 1729 / 2718) | ํ๊ท ๊ฒ์ฆ (1729 / 2718) | ์ฌ์ ๊ธฐ์ค |
|---|---|---|---|---|
| BM25 | ๊ฐ์ค์น ์์ | 12 / 12 | 1.500 / 1.500 | ๋น๊ต๊ตฐ |
| FP32 | 32,792B | 24 / 24 | 1.000 / 1.000 | ํต๊ณผ |
| INT8 PTQ | 8,216B | 24 / 24 | 1.000 / 1.000 | ํต๊ณผ |
| 3์ง PTQ | 1,215B | 15 / 12 | 1.583 / 1.917 | ์คํจ |
| 3์ง STE ํ์ต | 1,274 / 1,272B | 16 / 15 | 1.542 / 1.625 | ์คํจ |
๊ธฐ์ค์ recall@4 โฅ95%, ํ๊ท ๊ฒ์ฆ โคBM25์ 80%์๋ค. INT8์ ์ด ์์ ์ํ์์ BM25 ๋๋น 33.3% ์ ์ ๊ฒ์ฆ์ ์๊ตฌํ๋ค. 3์ง์ ํฌ๊ธฐ๊ฐ ์์๋ ๊ฒ์ฆ ๋น์ฉ์ด ์ฆ๊ฐํด ์ฑํํ์ง ์์๋ค. CLI์ BM25 ๊ต๋ ์ ์ฑ ์ ์ ์ฉํด๋ INT8 ํ๊ท ์ 1.0์ด๊ณ 3์ง ํ์ต์ 1.583/1.625๋ก ๊ฐ์ ๊ทผ๊ฑฐ๊ฐ ์๋ค. ๋ชจ๋ ๊ฒ์ฆ ํ์๋ ์ ๋ต ID๋ฅผ ์๋ oracle ๊ธฐ์ค์ด๋ฉฐ ์ค์ LLM ํธ์ถ ์ ๊ฐ์ด ์๋๋ค.
ํ๊ฐ ํ ์ถ๊ฐํ ๋นํ์ต ์ง๋จ ๋น๊ต๊ตฐ์ retainโkeeps, discardโremoves๋ฅผ ๋ช ์์ ์ผ๋ก ์นํํ๊ณ ๋จ์ดยทbigram ๊ต์งํฉ์ ์ผ๋ค. 18/24, ํ๊ท 1.25์๋ค. ์ด ๋น๊ต๊ตฐ์ ์ ํ์ ์ฌ์ฉํ์ง ์์๊ณ ์ฌ์ ๋ฑ๋ก ๊ฒฐ๊ณผ๋ ์๋๋ค. ๋ ๊ฐํ ๋ฌธ๋ฒ๋ณ ๊ท์น๋ง์ผ๋ก ์ด ์ข์ ๋ฌธ์ ๋ฅผ ํ ์ฌ์ง๋ ์์ผ๋ฏ๋ก ์ด ์๋ฃ๋ง์ผ๋ก โ๋ชจ๋ธ์ด ๋ฐ๋์ ํ์ํ๋คโ๊ณ ์ฃผ์ฅํ์ง ์๋๋ค.
์คํ
mkdir -p .cache/semantic-learning
go run ./cmd/riido-hinttrain --out .cache/semantic-learning/local-train
go run ./cmd/riido-hinttrain --stage check \
--selection .cache/semantic-learning/local-train/selection.json \
--out .cache/semantic-learning/local-check
๊ธฐ์กด ์ถ๋ ฅ ํด๋๋ ๋ฎ์ด์ฐ์ง ์๋๋ค. check๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ๋ ์ฐ๊ตฌ ๋ช
๋ น์ด๋ฉฐ ์ข
๋ฃ ์ฝ๋๋ง์ผ๋ก ๋ชจ๋ธ ์น์ธ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ฉด ์ ๋๋ค. results.json์ ๋ชจ๋ธ๋ณ Pass์ ์ ์ฉ ๋ฒ์๋ฅผ ํ์ธํด์ผ ํ๋ค. CI ํต๊ณผ๋ ์ด ์ฐ๊ตฌ ๋ชจ๋ธ์ ์ค์ ์
๋ฌด ์ฑ๋ฅ์ ๋ณด์ฅํ์ง ์๋๋ค.
์คํ ๋ชจ๋ธ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด:
go run ./cmd/riido-hints \
--model .cache/semantic-learning/local-train/int8-1729.hbin \
--sha256 7db5ca98a5fd4426cead07cce2bef897ccf164d3e60ecd731c8ef598f1ed65e8 \
< examples/hints/request-model.json
์ ํด์๋ ์ด๋ฒ ๋ฒ์ /์๋ฃ๋ก ์์ฑํ seed1729 INT8 ํ์ผ์ด๋ค. ๋ค๋ฅธ ๋ฒ์ ์ ํ์ต ๊ฒฐ๊ณผ๋ ์ ํ ๊ธฐ๋ก์ ํด์์ ๋จผ์ ๋น๊ตํ๋ค. ์์๋ ์ด๋ฏธ ๊ด์ฐฐํ ์ต์ข
๋ฐ์ดํฐ์ ํ ์์ฒญ์ด๋ฉฐ ์ ํ์ง ์ํ์ด ์๋๋ค. ๋ชจ๋ธ ์์ด ์คํํ๋ฉด BM25๋ง ์ฌ์ฉํ๋ค. ์ธ๋ถ hints์ --model์ ๋์์ ์ง์ ํ ์ ์๋ค. ๋ชจ๋ ๊ฒฐ๊ณผ๋ unverified์ด๋ฉฐ ๋ชจ๋ธ ํด์๋ฅผ ํฌํจํ๋ค. ๋ชจ๋ธ ์
๋ ฅ์ ์ต๋ 256ํ๋ณด, ๋ฌธ์/์์ฒญ๋ณ 4096Bยท64๋จ์ด๋ก ์ ํํ๋ค. ์ด๊ณผ ์ ์๋ฅด์ง ์๊ณ bm25_model_input_out_of_scope๋ก BM25์ ๋ณต๊ทํ๋ค. SHA ๋ถ์ผ์น/์์ ํ์ผ์ ์ค๋ฅ๋ค.
๊ตฌํยท์์ยท์ฆ๊ฑฐ
- 8192๊ฐ ๊ณ์. unigram/bigram ์์ฒญ-๋ฌธ์ ์กฐํฉ์ ๋ถํธ ์๋ ํด์ ํน์ง์ผ๋ก ๋ณํํ๊ณ ๊ต์งํฉ ๋น์จ์ ์ถ๊ฐํ๋ค. float shadow, softmax cross-entropy, SGD+weight decay. 2seedร2ํ์ต๋ฅ รFP32/3์ง STE=8ํ๋ณด, ๊ฐ60epoch. ๊ฒ์ฆ ํ๊ท ์์, ๋์ ์ด๋ฉด NLL๋ก epoch/config๋ฅผ ์ ํํ๋ค.
- 3์ง forward๋ ์ ์ญ ํ๊ท ์ ๋ ๊ฐ์ค์น scale ๋ฐ 0.7๋ฐฐ ์๊ณ๊ฐ, backward๋ identity STE๋ค. scale์ ๋ฏธ๋ถํ์ง ์๋๋ค. ์ด๋ฒ ์คํจ๋ ์ด ๋ฐฉ๋ฒ์ ๊ฒฐ๊ณผ์ด๋ฉฐ ๋ชจ๋ 3์ง ํ์ต์ ๋ถ๊ฐ๋ฅ์ฑ์ ๋ปํ์ง ์๋๋ค. ๋ค์์๋ ๊ฐ์ค์น ํฌ๊ธฐ ์ฐจ์ด์ ์ ์ญ scale ์์ค์ ๋ถ๋ฆฌํด ๋ณผ ์ ์๋ค.
- ํ์ผ์ FP32/INT8 ๋๋ presence bitmap+nonzero sign bits๋ค. ๋ฐํ์์ 8192๊ฐ float64(๊ณ์๋ง 64KiB)๋ก ํ์ด reference score๋ฅผ ๊ณ์ฐํ๋ค. ์์ถ ํ์ผ ํฌ๊ธฐ๋ ์คํ ์ค ๊ณ์ ๋ฉ๋ชจ๋ฆฌ๋ 3์ง ์ ์ฉ ์ฐ์ฐ ์ฑ๋ฅ์ด ์๋๋ค. GPU/SIMD ๊ฐ์ ์ฃผ์ฅ์ ์๋ค.
- ํ์ต ์ plan/data SHA๋ฅผ ๊ธฐ๋กํ๊ณ ์ ํ ๋ชจ๋ธ 8๊ฐ๋ฅผ ์ ์ฅํ ๋ค final์ ์ฝ์๋ค. final ํ์ผ ์์ฒด๊ฐ ์๋ ๋๋ ํฐ๋ฆฌ๋ก ํ์ต์ ๋ฐ๋ณตํด 8๊ฐ ๋ชจ๋ธ ํด์๊ฐ ๋ชจ๋ ์ฌํ๋๋ค. ๋ชจ๋ธ decode ํ ๊ณ์ ๋์ผ์ฑ๋ ๊ฒ์ฌํ๋ค.
- Apple M4 Pro, Go1.27.1: ํ์ต ์ ์ฒด wall2.34์ด/userCPU1.18์ด, ์ต๋RSS26,607,616B(25.4MiB), swap0. ๋จ์ผ INT8 CLI ์คํ ์ต๋RSS5,701,632B(5.44MiB), wall0.37์ด(ํ๋ก์ธ์ค ์์/๋ก๋ฉ ํฌํจ), swap0. ์ด๋ warm p95๋ ์ค์ ์์ด์ ํธ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋ค. GPU๋ฅผ ์ฌ์ฉํ์ง ์์๋ค.
์ฝ๋์ ์๋ณธ ํฉ์ฑ ๋ฐ์ดํฐ๋ ํ๋ก์ ํธ Apache-2.0 ์กฐ๊ฑด์ผ๋ก ๊ณต๊ฐํ๋ค. ์ธ๋ถ ๋ชจ๋ธ/๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง ์์๋ค. ๋ชจ๋ธ ํ์ผ์ GitHub์์ ์ ์ธํ๊ณ ํ์ฌ ๋ก์ปฌ์ ๋ณด์กดํ๋ค. ์ HF ๋ฐฐํฌ๋ ์ด ํ์์ ๊ณต๊ฐ ํจํค์ง ๊ฒ์ฆ๊ธฐ๋ฅผ ์์ฑํ ๋ค์ ์งํํ๋ค. ํ์ฌ ์ฑ๊ณต์ ํต์ ์คํ์ ํ์ ๋๋ฉฐ ์ ์ฒด ๋ชฉํ๋ ๊ณ์ ์งํ ์ค์ด๋ค.
Updated minimum: 2,400 evaluation requests / ์ต์ 2,400๊ฑด ํ๊ฐ