eouya2's picture
Duplicate from mlx-community/Qwen3.6-35B-A3B-KGuard-REAP12.5-8bit-MLX
9f84e73
|
Raw
History Blame Contribute Delete
4.35 kB

Qwen3.6-35B-A3B K-Guard REAP 12.5% โ€” MLX 8-bit

English model card: README.md

์ด ๋ชจ๋ธ์€ mlx-community/Qwen3.6-35B-A3B-8bit์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“  ํ•œ๊ตญ์–ด ์ค‘์‹ฌ expert-pruned MLX ์ฒดํฌํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. Routed MoE expert์—๋Š” REAP ๋ฐฉ์‹์˜ router-weighted activation pruning์„ ์ ์šฉํ–ˆ์œผ๋ฉฐ, ๊ธฐ์กด 8-bit MLX ํ˜•์‹, top-8 routing, shared expert, tokenizer, chat template๊ณผ ๋น„-MoE ๊ตฌ์„ฑ์š”์†Œ๋Š” ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฆด๋ฆฌ์Šค์—์„œ K-Guard๋Š” pruning ์ „์— routing ๋ฐ activation ํ†ต๊ณ„๋ฅผ ์ˆ˜์ง‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ํ•œ๊ตญ์–ด ์ค‘์‹ฌ calibration profile์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ fine-tuning์ด๋‚˜ ๊ฐ€์ค‘์น˜ ์žฌํ•™์Šต์€ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ์š”์•ฝ

ํ•ญ๋ชฉ ๊ฐ’
๊ธฐ๋ฐ˜ ์ฒดํฌํฌ์ธํŠธ mlx-community/Qwen3.6-35B-A3B-8bit
์•„ํ‚คํ…์ฒ˜ Qwen3.6 MoE (qwen3_5_moe)
MoE layer 40
Layer๋‹น routed expert 256๊ฐœ์—์„œ 224๊ฐœ๋กœ ์ถ•์†Œ
Layer๋‹น ์ œ๊ฑฐ expert 32 / 256 (12.5%)
Token๋‹น ํ™œ์„ฑ routed expert 8๊ฐœ, ์œ ์ง€
Shared expert ์œ ์ง€
์–‘์žํ™” MLX affine 8-bit, group size 64
๋กœ์ปฌ ์ฒดํฌํฌ์ธํŠธ ํฌ๊ธฐ ์•ฝ 31.17 GiB
Pruning ํ›„ ํ•™์Šต ์—†์Œ

Calibration ๋ฐ expert ์„ ์ •

์ด 24,576๊ฐœ sequence๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฐ์ •์  ํ•œ๊ตญ์–ด ์ค‘์‹ฌ mixture์—์„œ expert ์ค‘์š”๋„๋ฅผ ๊ด€์ธกํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ํ•œ๊ตญ์–ด instruction ๋ฐ reasoning 8,192๊ฐœ
  • ํ•œ์˜ ์˜๋ฏธ ๋Œ€์‘ pair 8,192๊ฐœ
  • ๋ฒ”์šฉ capability replay 4,096๊ฐœ
  • Qwen3.6 text ๋ฐ reasoning ํŠนํ™” 4,096๊ฐœ

Observer๋Š” seed 17, ์ตœ๋Œ€ sequence length 8,192๋กœ 40๊ฐœ MoE layer ์ „์ฒด๋ฅผ ๊ด€์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ layer์—์„œ router-weighted activation ํ†ต๊ณ„๋กœ expert๋ฅผ ์ •๋ ฌํ•˜์—ฌ ์ƒ์œ„ 224๊ฐœ๋ฅผ ์œ ์ง€ํ•˜๊ณ , router row๋„ ๋™์ผํ•œ index๋กœ ์ถ•์†Œํ–ˆ์œผ๋ฉฐ, top-8 routing์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Calibration ํŒŒ์ผ๊ณผ layer/expert๋ณ„ ์ „์ฒด observation CSV๋Š” eouya2/KGuard-Korean-MoE-Calibration-v1์— ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ‰๊ฐ€ ๊ฒฐ๊ณผ

Base์™€ pruning ๋ชจ๋ธ ๋ชจ๋‘ ๋™์ผํ•œ deterministic subset๊ณผ prompt๋กœ ํ‰๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Benchmark Base 8-bit ์ด ๋ชจ๋ธ
KMMLU 66.4 64.5
MMLU-Pro 64.3 61.3
GSM8K 96.7 95.7
HumanEval+ pass@1 90.9 92.1
ํ•™์ˆ  10-benchmark macro 81.2 80.5

KMMLU, MMLU-Pro, GSM8K๋Š” ๊ฐ๊ฐ 512๋ฌธํ•ญ์˜ ๊ณ ์ • subset์„ ์‚ฌ์šฉํ–ˆ๊ณ , HumanEval+๋Š” EvalPlus ์ „์ฒด 164๋ฌธํ•ญ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•œ ๋กœ์ปฌ ํ‰๊ฐ€ ์กฐ๊ฑด์—์„œ ๋ชจ๋ธ ๊ฐ„ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค.

MLX ์‚ฌ์šฉ๋ฒ•

pip install -U mlx-lm

mlx_lm.generate \
  --model eouya2/Qwen3.6-35B-A3B-KGuard-REAP12.5-8bit-MLX \
  --prompt "ํ•œ๊ตญ์–ด๋กœ mixture-of-experts ๋ชจ๋ธ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”." \
  --max-tokens 256 \
  --temperature 0.0

Python ์˜ˆ์ œ:

from mlx_lm import generate, load

model_id = "eouya2/Qwen3.6-35B-A3B-KGuard-REAP12.5-8bit-MLX"
model, tokenizer = load(model_id)

messages = [{"role": "user", "content": "ํ•œ๊ตญ์–ด๋กœ ์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ํ•ด ์ฃผ์„ธ์š”."}]
prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)

print(generate(model, tokenizer, prompt=prompt, max_tokens=256))

OpenAI-compatible server:

mlx_lm.server --model eouya2/Qwen3.6-35B-A3B-KGuard-REAP12.5-8bit-MLX

๊ถŒ์žฅ ์šฉ๋„

Apple Silicon ๋กœ์ปฌ ์‹คํ–‰, ํ•œ๊ตญ์–ดยทํ•œ์˜ ์ƒ์„ฑ, MoE pruning ์—ฐ๊ตฌ, routed expert ์šฉ๋Ÿ‰์„ ์™„๋งŒํ•˜๊ฒŒ ์ค„์ธ ๋ชจ๋ธ์ด ํ•„์š”ํ•œ ์‹คํ—˜์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค ์ ์šฉ ์ „์—๋Š” ๊ธฐ๋ฐ˜ ๋ชจ๋ธ๊ณผ ๋™์ผํ•˜๊ฒŒ ์šฉ๋„๋ณ„ ํ’ˆ์งˆ ๋ฐ ์•ˆ์ „์„ฑ ํ‰๊ฐ€๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

๋ผ์ด์„ ์Šค

๋ชจ๋ธ์€ upstream Qwen ๋ฆด๋ฆฌ์Šค์˜ Apache 2.0 ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋ณ„๋„ ๊ณต๊ฐœํ•œ ํ•ฉ์„ฑ calibration ๋ฐ์ดํ„ฐ๋Š” CC BY 4.0์ž…๋‹ˆ๋‹ค.