Pair Training 02 KO - teamswyg/laya-tools GitHub Wiki

์‹ค์ œ ๊ด€๋ จ์„ฑ ํ•™์Šต 02: ์ž‘์€ ๋ชจ๋ธ์€ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์ผ๋ฐ˜ํ™”๋Š” ์•„์ง ์‹คํŒจ

English ยท ์‹คํ–‰ ์ „ ๊ณ„ํš ยท ์ „์ฒด ์ง‘๊ณ„์™€ ๋ชจ๋ธ ํ•ด์‹œ ยท ์•ž์„  2,400๊ฐœ ํ‰๊ฐ€

Go๋กœ ์‹ค์ œ CoSQA ๊ด€๋ จ์„ฑ ํ•™์Šต์„ ์‹คํ–‰ํ–ˆ๋‹ค. ๊ฒ€์ฆ AUC๊ฐ€ 0.475~0.513์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์ˆœ์œ„ ์‹ ํ˜ธ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ–ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋ธ๋กœ ์Šน๊ฒฉํ•˜์ง€ ์•Š๊ณ , reserve1 2,403๊ฐœ์™€ reserve2 2,401๊ฐœ๋ฅผ ์ด๋ฒˆ์—๋Š” ํ‰๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด ๋ณด๋ฅ˜๋Š” ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋‚ด๋ฆฐ ๊ฐœ๋ฐœ ํŒ๋‹จ์ด๋ฉฐ ์‚ฌ์ „ ๋“ฑ๋ก๋œ ํ†ต๊ณ„์  ํ•ฉ๊ฒฉ ํŒ์ •์€ ์•„๋‹ˆ๋‹ค. 3์ง„์˜ ์ž‘์€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ํ’ˆ์งˆ ๊ฐœ์„ ์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌด์—‡์„ ํ•™์Šตํ–ˆ๋‚˜

์งˆ๋ฌธ๊ณผ ์ฝ”๋“œ๊ฐ€ ๊ด€๋ จ๋˜๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์ธ ์ด์ง„ ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ๋ฅผ ์ตœ์†Œํ™”ํ–ˆ๋‹ค. ์›๋ž˜ ํ•ฉ์„ฑ ํ›„๋ณด ์ˆœ์œ„ ํ•™์Šต๊ธฐ์™€ ๋ถ„๋ฆฌ๋œ internal/pairlearn ๋ฐ cmd/riido-pairtrain์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ƒ์„ฑ ๋ชจ๋ธ์ด๋‚˜ ๊ธฐ์กด Laya ์ธ์ฝ”๋”๋ฅผ ํ•™์Šตํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 8,192๊ฐœ ๊ณ„์ˆ˜๋กœ ๋‹จ์–ดยท์ธ์ ‘ ๋‘ ๋‹จ์–ด์˜ ๊ต์ฐจ ํŠน์ง•๊ณผ ๋‹จ์–ด ๊ฒน์นจ์„ ์ ์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ๋…๋ฆฝ์ ์ธ ๊ฒฝ๋Ÿ‰ ์‹คํ—˜์ด๋‹ค. ์ ˆํŽธ์€ ์—†์œผ๋ฉฐ ์ ์ˆ˜๋Š” ๊ฒ€์ฆ๋œ ํ™•๋ฅ ์ด ์•„๋‹ˆ๋‹ค.

๋ถ„ํ• ์€ ์•ž ์‹คํ—˜๊ณผ ๋™์ผํ•˜๋‹ค. development 12,189๊ฐœ ์ค‘ ์ž…๋ ฅ ๋ฒ”์œ„ ์•ˆ์˜ 11,263๊ฐœ๋ฅผ ํ•™์Šตํ–ˆ๊ณ  926๊ฐœ๋Š” ์ž…๋ ฅ ํ•œ๋„ ๋•Œ๋ฌธ์— ํ•™์Šต์—์„œ ์ œ์™ธํ–ˆ๋‹ค. validation 607๊ฐœ ์ค‘ 553๊ฐœ๋กœ ์„ ํƒํ–ˆ๊ณ  54๊ฐœ๋Š” ์ œ์™ธํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜ ๊ฒฐ๊ณผ๋Š” ๋ฒ”์œ„ ์•ˆ ๊ฒ€์ฆ ์ž๋ฃŒ๋งŒ์˜ ๊ฒฐ๊ณผ๋‹ค. ์ตœ์ข… ์‹œํ—˜์—์„œ๋Š” ๊ธด ์ž…๋ ฅ๋„ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  BM25๋กœ ๋ณต๊ท€ํ•ด์•ผ ํ•œ๋‹ค. ์›๋ฌธ ํŒŒ์ผ ์ „์ฒด๋Š” ์ถœ์ฒ˜ ๊ฒ€์ฆยท๋ถ„ํ•  ์ƒ์„ฑ์— ์ฝ์ง€๋งŒ ์˜ˆ๋น„ ์‹œํ—˜์˜ ํŠน์ง•ยท์ ์ˆ˜ยท๋ผ๋ฒจ์€ ํ•™์Šต์ด๋‚˜ ์„ ํƒ์— ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

seed 2๊ฐœ ร— ํ•™์Šต๋ฅ  2๊ฐœ ร— FP32/3์ง„ STE = 8๊ฐœ ์„ค์ •์„ ๊ฐ๊ฐ 20 epoch ์‹คํ–‰ํ–ˆ๋‹ค. batch128, L2=0.0001์„ ๊ณ ์ •ํ–ˆ๋‹ค. ๊ฐ seedยทํ•™์Šต ๋ฐฉ์‹๋งˆ๋‹ค ๊ฒ€์ฆ ์†์‹ค์ด ๊ฐ€์žฅ ์ž‘์€ epoch์™€ ํ•™์Šต๋ฅ ์„ ์„ ํƒํ–ˆ๋‹ค. ์„ ํƒ FP32์—์„œ INT8์™€ 3์ง„ PTQ๋ฅผ ๋งŒ๋“ค๊ณ  3์ง„ STE๋Š” ๋ณ„๋„๋กœ ์„ ํƒํ•ด ์ด 8๊ฐœ ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ๋‹ค. ๊ฒ€์ฆ AUC๋Š” ์„ ํƒ ํ›„ ์ง„๋‹จ ์ง€ํ‘œ์ด๋ฉฐ ์ƒˆ๋กœ์šด ๋…๋ฆฝ ์‹œํ—˜์ด ์•„๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ธฐ

AUC๋Š” ๊ด€๋ จ ์Œ์ด ๋น„๊ด€๋ จ ์Œ๋ณด๋‹ค ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›๋Š” ์ •๋„๋‹ค. 0.5 ๋ถ€๊ทผ์ด๋ฉด ์ด ์ž๋ฃŒ์—์„œ ์œ ์šฉํ•œ ์ˆœ์„œ ๊ตฌ๋ถ„์ด ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค. ์‹ ๋ขฐ๊ตฌ๊ฐ„ ์—†๋Š” ๊ฒ€์ฆ ์  ์ถ”์ •์ด๋ฏ€๋กœ ์ž‘์€ ์ฐจ์ด์˜ ์šฐ์—ด์€ ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐฉ์‹ seed1729 ๊ฒ€์ฆ AUC seed2718 ๊ฒ€์ฆ AUC ํŒŒ์ผ ํฌ๊ธฐ
FP32 0.4937 0.5045 32,792B
INT8 0.4935 0.5053 8,216B
3์ง„ PTQ 0.5028 0.5133 1,633 / 1,636B
3์ง„ STE 0.4751 0.5062 1,639 / 1,630B

์„ ํƒ FP32์˜ ํ•™์Šต ์†์‹ค์€ ์•ฝ 0.680์œผ๋กœ ๋‚ด๋ ค๊ฐ”์ง€๋งŒ ๊ฒ€์ฆ ์†์‹ค์€ ์•ฝ 0.693์— ๋จธ๋ฌผ๋ €๋‹ค. ๋ชจ๋“  ์ž…๋ ฅ์— 0.5๋ฅผ ๋‚ด๋Š” ๊ธฐ์ค€์˜ ์†์‹ค์€ ์•ฝ 0.693147์ด๊ณ  ํ•™์Šต ์–‘์„ฑ ๋น„์œจ๋งŒ ์“ฐ๋Š” ๊ธฐ์ค€์€ ๊ฒ€์ฆ์—์„œ 0.693824๋‹ค. ๋”ฐ๋ผ์„œ 'ํ•™์Šต ์ฝ”๋“œ๊ฐ€ ๋Œ์•˜๋‹ค'์™€ '์ƒˆ๋กœ์šด ์ฝ”๋“œ์—๋„ ์“ธ ๋งŒํ•ด์กŒ๋‹ค'๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค. ์˜๋ฏธ ์ผ๋ฐ˜ํ™”๊ฐ€ ์•ฝํ•˜๋‹ค๋Š” ์ฆ๊ฑฐ์ด๋ฉฐ, ๋” ํฐ ๋ชจ๋ธ๋งŒ์ด ์œ ์ผํ•œ ๋‹ต์ด๋ผ๋Š” ์ฆ๊ฑฐ๋Š” ์•„๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌยทCPU์™€ ์žฌํ˜„

  • Apple M4 Pro, 24GiB RAM, Go1.27.1, CPU ์‹คํ–‰. ์ฒซ ์ „์ฒด ์‹คํ–‰ wall3.87์ดˆ, userCPU3.52์ดˆ, ์ตœ๋Œ€RSS236,814,336B(225.84MiB), swap0. ์›์ฒœ ์ฝ๊ธฐยทํŠน์ง• ์ค€๋น„ยท8ํšŒ ํ•™์Šตยท๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ ๋‹จ์ผ ์ถ”๋ก  ๋น„์šฉ์ด ์•„๋‹ˆ๋‹ค.
  • ํฌ์†Œ ํŠน์ง•์€ offset, uint16 index, float64 value์˜ ์—ฐ์† ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ํŠน์ง• index/value ๋…ผ๋ฆฌ payload๋Š” 70,556,830B(67.29MiB); ๋ฐฐ์—ด ์—ฌ์œ  ์šฉ๋Ÿ‰ยทoffsetยท๋ผ๋ฒจยท์›์ฒœยท๋Ÿฐํƒ€์ž„์€ ๋ณ„๋„๋‹ค. ๋ฐ์ดํ„ฐ์…‹๋ณ„ payload ์ƒํ•œ 320MB๋กœ ๋ฌด์ œํ•œ ์บ์‹œ๋ฅผ ๋ง‰๋Š”๋‹ค.
  • ๋ณ„๋„ ํ”„๋กœํŒŒ์ผ ์‹คํ–‰์—์„œ Go ์ƒ์กด heap ํ‘œ๋ณธ ์•ฝ 80.94MiB, ๊ทธ์ค‘ ์ค€๋น„๋œ ํŠน์ง• ๋ฐฐ์—ด์ด ์•ฝ 95.48%. CPU ํ‘œ๋ณธ์€ ํฌ์†Œ ์ ์ˆ˜ ๊ณ„์‚ฐ ์•ฝ 35.83%, Fit ์ž์ฒด ์•ฝ 21.50%, ํŠน์ง• ์ค€๋น„ ์ž์ฒด ์•ฝ 4.67%์˜€๋‹ค. ํฌํ•จ ์‹œ๊ฐ„๋ผ๋ฆฌ ํ•ฉ์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. pprof๋Š” ์ „์ฒด RSS๋‚˜ GPU ์ธก์ •์ด ์•„๋‹ˆ๋‹ค. GPUยทSIMD ๊ฐ€์†์€ ๊ตฌํ˜„/์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.
  • ํ•™์Šต ๋ฃจํ”„๋Š” ๋‹จ์ผ ์†Œ์œ  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉฐ lockยท๊ณต์œ  ๊ฐ€๋ณ€ ์ƒํƒœ๊ฐ€ ์—†๋‹ค. ์ „์—ญ 3์ง„ scale์€ batch๋งˆ๋‹ค ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ณ  backward๋Š” identity STE๋ฅผ ์“ด๋‹ค. ํŒŒ์ผ์€ ์ž‘์•„๋„ ๋Ÿฐํƒ€์ž„ decode๋Š” ๊ณ„์ˆ˜๋‹น float64์—ฌ์„œ ๊ณ„์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ 64KiB๋‹ค.
  • ํ”„๋กœํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ AUC ์ง„๋‹จ ์ถ”๊ฐ€ ํ›„ ์žฌ์‹คํ–‰ํ•ด๋„ 8๊ฐœ ๋ชจ๋ธ SHA256์ด ์ตœ์ดˆ ์‹คํ–‰๊ณผ ๋ชจ๋‘ ๊ฐ™์•˜๋‹ค. ์›์ฒœยท๊ณ„ํšยท๋ถ„ํ• ยท๋ชจ๋ธ ํ•ด์‹œ๋Š” ์ง‘๊ณ„ JSON์— ์žˆ๋‹ค. CPU/heap ์›๋ณธ๊ณผ ๊ฐ€์ค‘์น˜๋Š” Git์— ๋„ฃ์ง€ ์•Š์•˜๋‹ค.
go run ./cmd/riido-pairtrain --out .cache/pair-training-new \
  --cpu-profile .cache/pair-training-cpu.pprof \
  --heap-profile .cache/pair-training-heap.pprof

์•ž ๋ฌธ์„œ์˜ ๊ณ ์ • CoSQA ํŒŒ์ผ์„ ๋จผ์ € ๋กœ์ปฌ์— ์ค€๋น„ํ•ด์•ผ ํ•œ๋‹ค. ์ถœ๋ ฅ ํด๋”๋Š” ์ƒˆ ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค. ์ด ๋ช…๋ น์—๋Š” ์ตœ์ข… ์‹œํ—˜ ๋‹จ๊ณ„๊ฐ€ ์—†์œผ๋ฉฐ ์ข…๋ฃŒ ์ฝ”๋“œ 0์€ ์‹คํ–‰ ์„ฑ๊ณต๋งŒ ์˜๋ฏธํ•œ๋‹ค. .hbin์€ ๊ธฐ์กด riido-hints --model ... --sha256 ...๊ณผ ํŒŒ์ผ ํ˜•์‹์ด ๊ฐ™์ง€๋งŒ ์‹ค์‚ฌ์šฉ ๊ถŒ์žฅ ๋ชจ๋ธ์ด ์•„๋‹ˆ๋‹ค.

๋‹ค์Œ ์‹คํ—˜๊ณผ ๊ณต๊ฐœ ๋ฒ”์œ„

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

CoSQA ์ €์ž ๋ฐฐํฌ๋ณธ์˜ ์ฝ”๋“œ๋Š” MIT, ๋ฐ์ดํ„ฐ๋Š” C-UDA๋‹ค. ์ด๋ฒˆ์—๋Š” ๋กœ์ปฌ ๊ณ„์‚ฐ ์‚ฌ์šฉ๊ณผ ์ง‘๊ณ„ ๊ณต๊ฐœ๋งŒ ํ–ˆ๋‹ค. ์›๋ฌธยท๋ผ๋ฒจ ํ–‰ยท๋ชจ๋ธ ๋ณธ์ฒด๋Š” GitHub์— ์˜ฌ๋ฆฌ์ง€ ์•Š์•˜๋‹ค. ์ƒˆ ๊ฐ€์ค‘์น˜์˜ Hugging Face ๋ฐฐํฌ๋Š” ์ถœ์ฒ˜ยท๋ผ์ด์„ ์Šคยท๊ณต๊ฐœ ๋‚ด์šฉยท๋ชจ๋ธ ๊ฒ€์ฆ ๊ฒฝ๋กœ๋ฅผ ๊ฐ–์ถ˜ ํ›„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด๋ฒˆ ๊ธฐ๋ก์€ ๊ฒŒ์‹œ ์™„๋ฃŒ๋ฅผ ๋œปํ•˜์ง€ ์•Š๋Š”๋‹ค.