| --- |
| 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 |
|
|