--- language: - ko license: mit tags: - hamster - korean - small-language-model - educational - onnx - chatml library_name: onnx --- # 🐹 HamsterLM HamsterLM은 **ν–„μŠ€ν„° μΊλ¦­ν„°λ‘œ λŒ€ν™”ν•˜λŠ” μž‘μ€ ν•œκ΅­μ–΄ μ–Έμ–΄ λͺ¨λΈ**μž…λ‹ˆλ‹€. λΈŒλΌμš°μ €μ—μ„œ 직접 μ‹€ν–‰ν•  수 μžˆλ„λ‘ ONNX둜 λ³€ν™˜λ˜μ–΄ 있으며, ꡐ윑 λͺ©μ μœΌλ‘œ μ²˜μŒλΆ€ν„° ν•™μŠ΅λ˜μ—ˆμŠ΅λ‹ˆλ‹€. [arman-bd/guppylm](https://github.com/arman-bd/guppylm)μ—μ„œ μ˜κ°μ„ λ°›μ•„ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ## λͺ¨λΈ 정보 | ν•­λͺ© | κ°’ | |------|------| | νŒŒλΌλ―Έν„° | ~100M | | μ•„ν‚€ν…μ²˜ | Transformer 디코더 (RMSNorm + SwiGLU + RoPE) | | μž„λ² λ”© 차원 | 768 | | λ ˆμ΄μ–΄ 수 | 12 | | μ–΄ν…μ…˜ ν—€λ“œ | 12 | | μ΅œλŒ€ μ‹œν€€μŠ€ 길이 | 128 | | μ–΄νœ˜ 크기 | 4,096 | | ν† ν¬λ‚˜μ΄μ € | ByteLevel BPE | | λŒ€ν™” 포맷 | ChatML | | μ–‘μžν™” | int8 (Dynamic Quantization) | ## ν•™μŠ΅ κ³Όμ • ### 1단계: μ‚¬μ „ν•™μŠ΅ (Pretrain) - **데이터**: ν•œκ΅­μ–΄ μœ„ν‚€ν”Όλ””μ•„ (μ•½ 200만 청크) - **λͺ©ν‘œ**: ν•œκ΅­μ–΄ 문법, μ–΄μˆœ, 쑰사 λ“± κΈ°λ³Έ μ–Έμ–΄ νŒ¨ν„΄ ν•™μŠ΅ - **μ„€μ •**: 20K iter, batch 32, LR 1e-3 (warmup + cosine decay) ### 2단계: SFT (Supervised Fine-Tuning) - **데이터**: Claude Haiku API둜 μƒμ„±ν•œ ν–„μŠ€ν„° λŒ€ν™” 10,000개 - **λͺ©ν‘œ**: ν–„μŠ€ν„° μΊλ¦­ν„°μ˜ λ§νˆ¬μ™€ λ‹΅λ³€ μŠ€νƒ€μΌ ν•™μŠ΅ - **μ„€μ •**: 5K iter, batch 32, LR 3e-4 (val loss κΈ°μ€€ best checkpoint μ €μž₯) - **데이터 ꡬ성**: - κ³ μ • 질문 ν’€ 기반 5,000개 - AI 생성 λ‹€μ–‘ν•œ 질문 5,000개 - 34개 μΉ΄ν…Œκ³ λ¦¬ (인사, μŒμ‹, 감정, μ² ν•™ λ“±) ## 파일 - `hamsterlm.onnx` - int8 μ–‘μžν™”λœ ONNX λͺ¨λΈ (~90MB) - `tokenizer.json` - HuggingFace tokenizers ν˜•μ‹ ## μ‚¬μš© 방법 이 λͺ¨λΈμ€ `transformers`와 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” **μ»€μŠ€ν…€ μ•„ν‚€ν…μ²˜**μž…λ‹ˆλ‹€. ONNX Runtime을 직접 μ‚¬μš©ν•˜μ—¬ μΆ”λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. ### λΈŒλΌμš°μ € 데λͺ¨ [https://kciter.github.io/HamsterLM](https://kciter.github.io/HamsterLM) μ—μ„œ 직접 μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  좔둠이 λΈŒλΌμš°μ €μ—μ„œ WASM으둜 μ‹€ν–‰λ˜λ©° μ„œλ²„λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ### μΆ”λ‘  μ˜ˆμ‹œ ν”„λ‘¬ν”„νŠΈλŠ” λ‹€μŒ ChatML ν˜•μ‹μ„ 따라야 ν•©λ‹ˆλ‹€: ``` <|im_start|>user {user_message}<|im_end|> <|im_start|>assistant ``` λΈŒλΌμš°μ €/Node.jsμ—μ„œμ˜ 전체 μΆ”λ‘  μ½”λ“œλŠ” [GitHub 레포](https://github.com/kciter/HamsterLM)의 `web/app.js`λ₯Ό μ°Έκ³ ν•˜μ„Έμš”. ν† ν¬λ‚˜μ΄μ € λ‘œλ“œ, μžκΈ°νšŒκ·€ λ””μ½”λ”©, top-k μƒ˜ν”Œλ§μ΄ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ## λŒ€ν™” μ˜ˆμ‹œ ``` User: μžκΈ°μ†Œκ°œ 해봐 HamsterLM: λ‚˜λŠ” ν–„μŠ€ν„°μ•Ό. 해바라기씨 μ—„μ²­ μ’‹μ•„ν•˜κ³  λ³Όμ£Όλ¨Έλ‹ˆμ— 간식 λͺ¨μœΌλŠ” 게 νŠΉκΈ°μ§€. User: λ³Όμ£Όλ¨Έλ‹ˆμ— 뭐 μžˆμ–΄? HamsterLM: μ§€κΈˆ ν˜Έλ°•μ”¨ 두 개 λ“€μ–΄μžˆμ–΄. λΉ„μƒμš©μ΄λΌ μ ˆλŒ€ λͺ» 쀘. User: λ¬΄μ„œμš΄ 게 뭐야? HamsterLM: 진곡 μ²­μ†ŒκΈ° μ†Œλ¦¬. μƒκ°λ§Œ 해도 κ·€κ°€ λ‚©μž‘ν•΄μ Έ. ``` ## ν•œκ³„μ  - **μž‘μ€ λͺ¨λΈ**: 100M νŒŒλΌλ―Έν„°λ‘œ ν•™μŠ΅ 데이터 λ²”μœ„λ₯Ό 크게 λ²—μ–΄λ‚˜λŠ” μ§ˆλ¬Έμ€ 잘 λ‹΅ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€ - **짧은 μ»¨ν…μŠ€νŠΈ**: μ΅œλŒ€ 128 토큰이라 κΈ΄ λŒ€ν™”κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€ - **도메인 μ œν•œ**: ν–„μŠ€ν„° κ΄€λ ¨ λŒ€ν™”λ‘œλ§Œ ν•™μŠ΅λ˜μ–΄ 일반적인 질문(μˆ˜ν•™, κ³Όν•™ λ“±)은 닀루지 μ•ŠμŠ΅λ‹ˆλ‹€ - **μ‹±κΈ€ν„΄ ꢌμž₯**: μ›Ή 데λͺ¨μ—μ„œλŠ” 속도λ₯Ό μœ„ν•΄ 단일 ν„΄ λŒ€ν™”λ§Œ μ§€μ›ν•©λ‹ˆλ‹€ - **μ–‘μžν™” 영ν–₯**: int8 μ–‘μžν™”λ‘œ 인해 일뢀 ν‘œν˜„μ—μ„œ λ―Έμ„Έν•œ ν’ˆμ§ˆ μ €ν•˜κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€ ## ν•™μŠ΅ ν™˜κ²½ - GPU: NVIDIA A100 (Colab Pro) - ν•™μŠ΅ μ‹œκ°„: μ‚¬μ „ν•™μŠ΅ ~50λΆ„ + SFT ~15λΆ„ ## κ΄€λ ¨ 자료 - **데이터셋**: [kciter/HamsterLM-SFT](https://huggingface.co/datasets/kciter/HamsterLM-SFT) - **μ†ŒμŠ€ μ½”λ“œ**: [github.com/kciter/HamsterLM](https://github.com/kciter/HamsterLM) - **μ˜κ°μ„ μ€€ ν”„λ‘œμ νŠΈ**: [GuppyLM](https://github.com/arman-bd/guppylm) ## λΌμ΄μ„ μŠ€ MIT License