LiquidAI LFM2-1.2B κΈ°λ° νκ΅μ΄-μμ΄ μλ°©ν₯ λ²μ λͺ¨λΈ νμΈνλ
β οΈ Note: ν΄λΉ λ ν¬λ κΈ°μ‘΄μ νμ΅νλ μ½λλ€μ κΈ°λ°μΌλ‘ μν°κ·Έλ λΉν°(Antigravity)μμ Claude Opus 4.5λ₯Ό μ¨μ λ§λ μ½λλ€μ λλ€. μμ§ Colabκ³Ό Kaggleμμ μ€νμ νλ©° κ²μ¦ν΄λ³΄μ§ μμμ΅λλ€. ν΄λΉ μ€νμ λ§μΉκ³ ν΄λΉ λ§ν¬λ₯Ό ν¬ν¨ν΄μ μΆκ° μ λ°μ΄νΈλ₯Ό ν μμ μ λλ€.
1.2B λͺ¨λΈμ΄ 4B λͺ¨λΈμ μλ! Gemma-3 (4B)λ³΄λ€ 1.78 CHrF++ λμ
λ¨ 400 Step (0.78 Epoch) λ§μ SOTA λ¬μ±
| Rank | Model | CHrF++ | BLEU | Params | λΉκ³ |
|---|---|---|---|---|---|
| 1 | Google Translate | 39.27 | 18.18 | - | μμ© μλΉμ€ (Target) |
| 2 | Yanolja-4B-GGUF | 38.61 | 16.03 | 4B | Open Source SOTA |
| 3 | NLLB-200 (3.3B) | 35.09 | 11.68 | 3.3B | λ²μ μ μ© λͺ¨λΈ |
| 4 | π LFM2-v8-rl-10k-adapter | 34.61 | 13.21 | 1.2B | λ³Έ νλ‘μ νΈ SOTA |
| 5 | LFM2-v6.4-merged | 33.53 | 12.31 | 1.2B | SFT Base |
| 6 | Gemma-3-4B-it-GGUF | 32.83 | 11.36 | 4B | Google μ΅μ 4B |
| 7 | LFM2-v6.1-curriculum | 32.48 | 11.89 | 1.2B | SFT Curriculum |
| 8 | NLLB-200-Distilled-600M | 31.97 | 10.32 | 600M | κ²½λ λ²μ λͺ¨λΈ |
| 9 | LFM2-v4-100k | 31.53 | 11.13 | 1.2B | μ΄κΈ° SFT |
| 10 | LFM2-1.2B (Base) | 27.23 | 6.43 | 1.2B | λ² μ΄μ€λΌμΈ |
| 11 | Qwen3-4B-GGUF | 25.62 | 7.46 | 4B | Base Model |
| 12 | Gemma-3-1B-it-GGUF | 24.07 | 6.94 | 1B | 1B λͺ¨λΈ |
| 13 | Qwen3-1.7B-GGUF | 21.19 | - | 1.7B | Base Model |
| 14 | Qwen3-0.6B-GGUF | 13.48 | 1.98 | 0.6B | Base Model |
| Quantization | CHrF++ | BLEU | Size | λΉκ³ |
|---|---|---|---|---|
| fp32 (μλ³Έ) | 34.32 | 13.10 | 4.68G | λ°λ³΅ λ²κ·Έ μμ |
| Q8_0 π | 34.39 | 12.93 | 1.25G | νμ§+μμ μ± μ΅κ³ |
| Q5_K_M | 34.08 | 12.78 | 843M | κ· ν μΆμ² |
| Q4_K_M | 33.97 | 12.56 | 731M | κ²½λν/λͺ¨λ°μΌ |
κ²°λ‘ : 4/5/8λΉνΈ μμν λͺ¨λ fp32μ μ¬μ€μ λμΌν μ±λ₯!
| Step | Epoch | CHrF++ | BLEU | λΉκ³ |
|---|---|---|---|---|
| 0 | 0.00 | 33.53 | 12.63 | v6.4 Base |
| 200 | 0.39 | 34.10 | 12.93 | +0.57 ν₯μ |
| 300 | 0.59 | 34.19 | 13.24 | Historic High |
| 400 | 0.78 | 34.61 | 13.21 | π SOTA |
- μ‘΄λλ§ μΌκ΄μ±: "ν©λλ€", "νμ΅λλ€" μ΄λ―Έκ° 1012κ° μ 체 μνμμ μΌκ΄ μ μ©
- μμ°μ€λ¬μ΄ λ¬Έμ₯: 볡μ‘ν λ¬Έμ₯λ μμ°μ€λ½κ² μ²λ¦¬
- λ¬Έλ§₯ μΈμ: "While"μ λ¬Έλ§₯μ λ°λΌ "λ°λ©΄", "λμ" λ±μΌλ‘ μ μ°νκ² λ²μ
- μ λ¬Έ μ©μ΄: "rachis"λ₯Ό "μ°μΆ"μΌλ‘ μ ννκ² λ²μ
- κ³ μ λͺ μ¬ νκ°: "George W. Bush" β "μ‘°μ§ μμ±ν΄" (λ² μ΄μ€ λͺ¨λΈ νΈν₯)
- ν΄κ²° λ°©μ: SFT + DPOλ₯Ό ν΅ν νκ° κ΅μ μμ (v9)
βββ colab/ # Colab λ
ΈνΈλΆ
β βββ GRPO_v8_adapter_github.ipynb # RL GRPO (SOTA)
β βββ GRPO_v8_unsloth_vllm_github.ipynb # RL Unsloth+vLLM
β βββ SFT_colab_github.ipynb # SFT Colab μ€νμΌ β
β βββ SFT_v6.1_curriculum_github.ipynb # SFT Kaggle μ€νμΌ
βββ kaggle/ # Kaggle λ
ΈνΈλΆ
β βββ SFT_v6.1_curriculum.ipynb # SFT v6.1
β βββ SFT_v6_200k.ipynb # SFT v6 200k
βββ evaluation/
β βββ benchmark_flores200.ipynb # λ²€μΉλ§ν¬
βββ quantization/
β βββ convert_to_gguf_github.ipynb # GGUF λ³ν (GitHubμ©)
βββ dataset/
βββ samples/ # νμ΅ λ°μ΄ν° μν
βββ upload_to_hf_github.py # HF μ
λ‘λ μ€ν¬λ¦½νΈ (GitHubμ©)
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Base λͺ¨λΈ λ‘λ
base_model = AutoModelForCausalLM.from_pretrained(
"gyung/lfm2-1.2b-koen-mt-v6.4-merged",
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained("gyung/lfm2-1.2b-koen-mt-v6.4-merged")
# Adapter λ‘λ λ° λ³ν©
model = PeftModel.from_pretrained(base_model, "gyung/lfm2-1.2b-koen-mt-v8-rl-10k-adapter")
model = model.merge_and_unload()
# λ²μ
messages = [
{"role": "system", "content": "Translate to Korean."},
{"role": "user", "content": "Hello, world!"}
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt")
outputs = model.generate(inputs, max_new_tokens=256, temperature=0.3)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))from llama_cpp import Llama
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
"gyung/lfm2-1.2b-koen-mt-v8-rl-10k-merged-GGUF",
"lfm2-1.2b-koen-mt-v8-rl-10k-merged-Q8_0.gguf"
)
llm = Llama(model_path=model_path, n_ctx=4096, n_gpu_layers=-1)
prompt = """<|im_start|>system
Translate to Korean.<|im_end|>
<|im_start|>user
Hello, world!<|im_end|>
<|im_start|>assistant
"""
output = llm(prompt, max_tokens=256, stop=["<|im_end|>"], temperature=0.3)
print(output['choices'][0]['text'])dataset/samples/μ νμ΅ λ°μ΄ν° μν ν¬ν¨:
| νμΌ | μ©λ | κ°μ |
|---|---|---|
sample_sft_100_bidirectional.jsonl |
SFT | 100 |
sample_grpo_100_bidirectional.jsonl |
GRPO | 100 |
# .env νμΌμ HF=your_token μ€μ ν
cd dataset
python upload_to_hf_github.py --repo YOUR_ID/your-dataset-name| νλͺ© | κ° |
|---|---|
| Base Model | gyung/lfm2-1.2b-koen-mt-v6.4-merged |
| Method | GRPO (Group Relative Policy Optimization) |
| Reward | COMET + CHrF++ |
| Dataset | 10,000 samples (μλ°©ν₯) |
| Steps | 400 |
| LoRA Rank/Alpha | 32 / 64 |
SFTConfig(
per_device_train_batch_size=1,
gradient_accumulation_steps=16,
learning_rate=1e-5,
lr_scheduler_type="cosine",
warmup_ratio=0.1,
optim="paged_adamw_8bit",
fp16=True, # T4 μ΅μ ν
)| λͺ¨λΈ | μ€λͺ | λ§ν¬ |
|---|---|---|
| v8 Adapter π | SOTA (CHrF++ 34.61) | HuggingFace |
| v8 GGUF | μμν λ²μ | HuggingFace |
| v6.4 Merged | Base λͺ¨λΈ | HuggingFace |
| v4 100k | μ΄κΈ° SFT | HuggingFace |
| LFM2-1.2B | μλ³Έ λ² μ΄μ€ | LiquidAI |
@misc{lfm2-koen-v8-rl,
author = {gyung},
title = {LFM2-1.2B-KoEn-MT: GRPO-Enhanced Korean-English Translation},
year = {2025},
publisher = {Hugging Face},
url = {https://huggingface.co/gyung/lfm2-1.2b-koen-mt-v8-rl-10k-adapter}
}μ΄ λͺ¨λΈμ Liquid AI LFM Open License v1.0μ λ°λ¦ λλ€.
- β νμ μ°κ΅¬ λ° κ°μΈμ μ¬μ©: 무μ ν
- β μμ μ μ΄μ©: μ° λ§€μΆ $10M λ―Έλ§ λ¬΄λ£
β οΈ μ° λ§€μΆ $10M μ΄κ³Ό: λ³λ λΌμ΄μ μ€ νμ
Last Updated: 2026-01-03