Laya Parity 18 KO - teamswyg/laya-tools GitHub Wiki

Laya ๊ตฌํ˜„ยท๋ณ€ํ™˜ ์ง„๋‹จ 18

์ด๋ฒˆ 12๊ฐœ ์ž…๋ ฅ์—์„œ Go์™€ Python์˜ INT8 ์ถœ๋ ฅ์€ ์ผ์น˜ํ–ˆ๋‹ค. ์›๋ณธ ๊ฐ€์ค‘์น˜ FP32 ์‹คํ–‰๊ณผ INT8์˜ ์ตœ๋Œ€ ํ™•๋ฅ  ์ฐจ์ด๋Š” ์ •์ƒ ์ˆœ์„œ ์•ฝ 0.45%p, ์—ญ์ˆœ ์•ฝ 20.76%p์˜€๋‹ค. ์ด๋Š” ํ’ˆ์งˆ ํ‰๊ฐ€๊ฐ€ ์•„๋‹Œ ๊ตฌํ˜„ ์ง„๋‹จ์ด๋‹ค. ๋…๋ฆฝ ์งˆ๋ฌธ 2,400๊ฐœ ํ‰๊ฐ€๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์‹ค์‚ฌ์šฉ ๊ฐœ์„ ยท๋ณด์ •๋œ ํ™•๋ฅ ยท์›๋ณธ ๋ชจ๋ธ์˜ ์šฐ์ˆ˜์„ฑ์„ ์ž…์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌด์—‡์„ ๋น„๊ตํ–ˆ๋‚˜

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

  1. Go์™€ ์„ค์น˜๋œ laya==0.3.21์˜ build_sequence๊ฐ€ ๋งŒ๋“  ํ† ํฐ๊ณผ ์„ ํƒ์ง€ ์œ„์น˜๋ฅผ ๋น„๊ตํ•œ๋‹ค.
  2. ๊ฐ™์€ INT8 ONNX ํŒŒ์ผ์„ Go์™€ Python ONNX Runtime 1.30.0 CPU์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ™์€ ์˜จ๋„ ๋ณด์ •์„ ์ ์šฉํ•œ ํ™•๋ฅ ์„ ๋น„๊ตํ•œ๋‹ค. ์ฐธ์กฐ ์Šคํฌ๋ฆฝํŠธ๋Š” upstream sequence builder์™€ ์ง์ ‘ ORT ์‹คํ–‰์„ ์‚ฌ์šฉํ•œ๋‹ค. Python ONNXAgent์˜ ์ „์ฒด APIยทํ›…ยท๋ฐฐ์น˜ ๋™์ž‘์„ ์‹œํ—˜ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  3. tindang/laya-code์˜ ๊ณ ์ • revision 25f97e5a2ec5f8cf7218a4f67504367d8832e1fe ์›๋ณธ F16 ์ €์žฅ ๊ฐ€์ค‘์น˜๋ฅผ FP32 CPU๋กœ ์‹คํ–‰ํ•˜์—ฌ INT8๊ณผ ๋น„๊ตํ•œ๋‹ค. ์„ค์น˜๋œ Laya ๋ชจ๋ธ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๊ณ  strict state loading์„ ์ ์šฉํ•œ๋‹ค. ๋ชจ๋ธ ์ €์žฅ์†Œ์˜ Python ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ

์ง€ํ‘œ ๊ฒฐ๊ณผ
ํ† ํฐยท์„ ํƒ์ง€ ์œ„์น˜ ์ •ํ™•ํžˆ ์ผ์น˜ 12/12
Go โ†” Python INT8 ์ตœ๋Œ€ ํ™•๋ฅ  ์ฐจ์ด 1.73 ร— 10โปยนโธ
Go โ†” Python ์ตœ์ข… ์„ ํƒ ๋ถˆ์ผ์น˜ 0/12
์›๋ณธ FP32 โ†” INT8 ์ •์ƒ ์ˆœ์„œ ์ตœ๋Œ€ ์ฐจ์ด 0.004498, ์•ฝ 0.45%p
์›๋ณธ FP32 โ†” INT8 ์—ญ์ˆœ ์ตœ๋Œ€ ์ฐจ์ด 0.207607, ์•ฝ 20.76%p
์›๋ณธ FP32 โ†” INT8 ์ „์ฒด ์ตœ๋Œ€ ํ™•๋ฅ  ์ฐจ์ด 0.207607, ์•ฝ 20.76%p
์›๋ณธ FP32 โ†” INT8 ํ‰๊ท  ์‚ฌ๋ก€๋ณ„ ์ตœ๋Œ€ ์ฐจ์ด 0.019952, ์•ฝ 2.00%p
์›๋ณธ FP32 โ†” INT8 ์ตœ์ข… ์„ ํƒ ๋ถˆ์ผ์น˜ 0/12

Go ์žฌ์‹คํ–‰์˜ ์‹œ๊ฐ„ ์™ธ ๋ชจ๋“  ๋น„๊ต ์ˆ˜์น˜๋Š” ๋™์ผํ–ˆ๋‹ค. Python ์ฐธ์กฐ์˜ ์ „์ฒด ๋ฐ˜๋ณต ์‹คํ–‰์€ ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ฐธ์กฐ ํŒŒ์ผ ํ•ด์‹œ๋Š” ์‹œ๊ฐ„ ํ•„๋“œ๋„ ํฌํ•จํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ •์ƒ ์ˆœ์„œ์™€ ์—ญ์ˆœ์€ ๊ฐ๊ฐ 6๊ฐœ๋‹ค. ์ „์ฒด ์ตœ๋Œ€ ์ฐจ์ด๋Š” ์—ญ์ˆœ์—์„œ ๋‚˜์™”์œผ๋ฏ€๋กœ ์ •์ƒ ์‚ฌ์šฉ์˜ ์ตœ๋Œ€ ์ฐจ์ด๋กœ ์ธ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ˆœ์„œ๋ณ„ ๊ตฌ๋ถ„์€ ์ „์ฒด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ ๋’ค ์ถ”๊ฐ€ํ•œ ์„ค๋ช…์šฉ ์ง‘๊ณ„์ด๋ฉฐ ์ƒˆ ํ’ˆ์งˆ ํ†ต๊ณผ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋‹ค.

Go ์ด์‹ ์˜ค๋ฅ˜๋ผ๋Š” ์„ค๋ช…์€ ์ด ์ž…๋ ฅ ๋ฒ”์œ„์—์„œ ์ง€์ง€๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ FP32โ†”INT8 ์ฐจ์ด๋Š” PyTorch ์‹คํ–‰ยทONNX ๋ณ€ํ™˜ยท์–‘์žํ™”ยท์ปค๋„ ์ฐจ์ด๊ฐ€ ํ•ฉ์ณ์ง„ ๊ฐ’์ด๋‹ค. ๋™์ผ FP32 ONNX ๋Œ€์กฐ๊ตฐ์ด ์—†์œผ๋ฏ€๋กœ ์ˆœ์ˆ˜ํ•œ ์–‘์žํ™” ์†์‹ค์ด๋ผ๊ณ  ๋‹จ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. 12๊ฐœ์—์„œ ์„ ํƒ์ด ๊ฐ™์•˜๋‹ค๋Š” ์‚ฌ์‹ค๋„ ์‹ค์ œ ์งˆ๋ฌธ์˜ ์ˆœ์œ„ยทAUCยท๊ธฐ์ค€๊ฐ’ ํ†ต๊ณผ ์—ฌ๋ถ€๊ฐ€ ๋ณด์กด๋œ๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค.

์ž์›๊ณผ ์žฌํ˜„

Apple M4 Pro, macOS ARM64, CPU 4์Šค๋ ˆ๋“œ, ์ตœ๋Œ€ 512ํ† ํฐ. ๋‘ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ–ˆ๋‹ค. Python ์ฐธ์กฐ๋Š” 5.69์ดˆ wall, ์ตœ๋Œ€ RSS 3,143,892,992๋ฐ”์ดํŠธ(์•ฝ 2.93GiB); Go ๋น„๊ต๊ธฐ๋Š” 2.31์ดˆ wall, ์ตœ๋Œ€ RSS 1,600,077,824๋ฐ”์ดํŠธ(์•ฝ 1.49GiB). Python์€ INT8๊ณผ ์›๋ณธ์„ ๋ชจ๋‘ ์‹คํ–‰ํ•˜๊ณ  Go๋Š” INT8๋งŒ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ด ์‹œ๊ฐ„ยท๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ด๋ฅผ ์–ธ์–ด ์„ฑ๋Šฅ ๋น„๊ต๋กœ ํ•ด์„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๋ฒˆ์˜ ์™ธ๋ถ€ ์ธก์ •์ด๋ฉฐ pprof heap์ด๋‚˜ GPU ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

ํ˜ธ์ถœ ์‚ฌ์ด์— 15๋ถ„ยท8GiB RSS ์ œํ•œ์„ ํ™•์ธํ•œ๋‹ค. ํ˜ธ์ถœ ๋‚ด๋ถ€์˜ ๊ฐ•์ œ ์ œํ•œ์€ ์•„๋‹ˆ๋‹ค. maintainer ํ™˜๊ฒฝ์— ONNX Runtime 1.30.0 wheel์„ ์ถ”๊ฐ€ํ–ˆ๊ณ , ์›๋ณธ ์„ ํƒ ํŒŒ์ผ 8๊ฐœ ์•ฝ 846MB๋ฅผ ๊ณ ์ • revision์—์„œ ๋‚ด๋ ค๋ฐ›์•„ HF ํ•ด์‹œ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ–ˆ๋‹ค. ๊ฒ€์ฆ ๊ฒฝ๊ณ ์˜ ๋ˆ„๋ฝ 4๊ฐœ๋Š” ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์€ ์›๊ฒฉ ํŒŒ์ผ, ์ถ”๊ฐ€ ํ•ญ๋ชฉ์€ ๋กœ์ปฌ Hub ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋‹ค. ์‚ฌ์šฉ ํŒŒ์ผ์€ ๋ณ„๋„ ํ•ด์‹œ๋กœ ๊ณ ์ •ํ–ˆ๋‹ค. ์ฝ”๋“œ ๋ชจ๋ธ์˜ Apache-2.0 LICENSE/NOTICE๋ฅผ ๋กœ์ปฌ์— ๋ณด์กดํ•˜๋ฉฐ ์ƒˆ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

# ๊ธฐ์กด maintainer ๊ฐ€์ƒํ™˜๊ฒฝ์— onnxruntime==1.30.0 ํ•„์š”; ์‚ฌ์šฉ์ž Go ๋Ÿฐํƒ€์ž„ ์š”๊ตฌ ์‚ฌํ•ญ ์•„๋‹˜.
hf download tindang/laya-code README.md LICENSE NOTICE rl_agent_config.json encoder/config.json tokenizer/tokenizer.json tokenizer/tokenizer_config.json model.safetensors --revision 25f97e5a2ec5f8cf7218a4f67504367d8832e1fe --local-dir .cache/laya-code-source-18
python scripts/training/laya_parity_reference.py --model-dir .cache/models-v2/code --source-dir .cache/laya-code-source-18 --out .cache/parity18-reference.json
go run ./cmd/riido-parityprobe --reference .cache/parity18-reference.json --model-dir .cache/models-v2/code --runtime /path/to/pinned/libonnxruntime.1.30.0.dylib

์‹คํ–‰ ํ™˜๊ฒฝ ๋ฒ„์ „ยท์ง‘๊ณ„๋Š” ๊ฒฐ๊ณผ JSON์— ์žˆ๋‹ค. ๊ธฐ์กด ์ฐธ์กฐ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š์œผ๋ฏ€๋กœ ์žฌ์ƒ์„ฑํ•  ๋•Œ ์ƒˆ ์ถœ๋ ฅ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋น„๊ต๊ธฐ๋Š” ๋™์ผ ์ž์‚ฐ ํ•ด์‹œ, ํ™•๋ฅ  ์œ ํšจ์„ฑ, ์ž…๋ ฅ ์ผ์น˜์™€ ํ™•๋ฅ  ํ—ˆ์šฉ์˜ค์ฐจ 10โปโต๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ตฌํ˜„ ์ผ์น˜ ํ†ต๊ณผ์™€ ๋ชจ๋ธ ํ’ˆ์งˆ ํ†ต๊ณผ๋Š” ๋ณ„๊ฐœ๋‹ค.

๋‹ค์Œ์€ ์›๋ณธ FP32 ๋ชจ๋ธ์„ ์‹คํ—˜ 17b์™€ ๋™์ผํ•œ ๊ฒ€์ฆ ์งˆ๋ฌธยท์ž…๋ ฅยท๋ฒ”์œ„๋กœ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์œผ๋กœ ์ ์ˆ˜ ์ฐจ์ด๊ฐ€ ์‹ค์ œ ๊ด€๋ จ์„ฑ ๊ตฌ๋ถ„์— ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€ ํ™•์ธํ•œ ๋’ค ํ•™์Šตยท์ฆ๋ฅ˜ ๋ฐฉํ–ฅ์„ ์ •ํ•œ๋‹ค. ๋ฏธ์‚ฌ์šฉ reserve 2,403๊ฐœยท2,401๊ฐœ๋Š” ๊ณ„์† ๋ณด์กดํ•œ๋‹ค.

Source: PR #41. Native diagnostic results are local evidence; Exact-head CI passed macOS, Linux, secrets and quality. Merged as de708929c0835259ed052d900983baaf306ef07e; this does not establish model quality.