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 entries
  • cache 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๊ฑด ํ‰๊ฐ€