---
library_name: transformers
license: apache-2.0
language:
  - ko
  - en
model_type: llama
tags:
  - 3b
  - korean
  - from-scratch
  - orpo
  - instruction-tuned
  - preference-aligned
  - fp8
  - b200
  - gguf
datasets:
  - cc100
  - allenai/c4
  - heegyu/orca-math-korean-preference-cleaned
  - nayohan/preference-collection-ko-full
  - maywell/ko_Ultrafeedback_binarized
  - HuggingFaceTB/cosmopedia
  - wikimedia/wikipedia
pipeline_tag: text-generation
model-index:
  - name: FRANKENSTALLM-3B
    results:
      - task:
          type: text-generation
        dataset:
          type: kobest
          name: KoBEST (0-shot)
        metrics:
          - name: Average
            type: accuracy
            value: 52.75
          - name: COPA
            type: accuracy
            value: 63.9
          - name: HellaSwag-KO
            type: accuracy
            value: 38.0
          - name: SentiNeg
            type: accuracy
            value: 62.5
          - name: BoolQ
            type: accuracy
            value: 50.6
          - name: WiC
            type: accuracy
            value: 48.8
      - task:
          type: text-generation
        dataset:
          type: haerae
          name: HAE-RAE (0-shot)
        metrics:
          - name: Average
            type: accuracy
            value: 21.81
      - task:
          type: text-generation
        dataset:
          type: piqa
          name: PIQA (0-shot)
        metrics:
          - name: Accuracy
            type: accuracy
            value: 59.9
      - task:
          type: text-generation
        dataset:
          type: ai2_arc
          name: ARC-Easy (0-shot)
        metrics:
          - name: Accuracy
            type: accuracy
            value: 36.0
---

# FRANKENSTALLM 3B

> **⚠️ v2 모델 교체 공지 (2026-03-26)**
>
> v2 GGUF 및 safetensors 파일이 변환 과정의 오류로 **1.2B 모델(hidden_size=2048, 24 layers)**로 잘못 배포되었습니다.
> 2026-03-26에 올바른 **3B ORPO 체크포인트(hidden_size=3072, 28 layers, vocab_size=64256, byte-fallback 적용)**로 교체 완료했습니다.
> 이전에 다운로드한 v2 파일이 있다면 재다운로드를 권장합니다.


> **한국어 3B LLM을 처음부터 직접 만들었습니다 — 토크나이저 학습부터 사전학습, SFT, ORPO까지, 8× NVIDIA B200 GPU 위에서.**

| | |
|---|---|
| **개발자** | [pathcosmos](https://huggingface.co/pathcosmos) |
| **파라미터** | ~24억 (weight tying 적용, 3B급) |
| **언어** | 한국어 (주), 영어 (부) |
| **라이선스** | Apache 2.0 |
| **학습** | 3단계: 사전학습 → SFT → ORPO |
| **하드웨어** | 8× NVIDIA B200 (FP8), 총 ~86시간 |

---

## 빠른 시작

### Transformers

```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "pathcosmos/frankenstallm"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id, torch_dtype=torch.bfloat16, device_map="auto"
)

inputs = tokenizer(
    "한국의 전통 음식 중 김치에 대해 설명해주세요.",
    return_tensors="pt"
).to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        do_sample=True,
        temperature=0.7,
        repetition_penalty=1.2,  # 권장
        top_p=0.9,
        max_new_tokens=512,
        pad_token_id=tokenizer.eos_token_id,
    )

print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```

### Ollama (GGUF)

```bash
# GGUF + Modelfile 다운로드
huggingface-cli download pathcosmos/frankenstallm \
  gguf/frankenstallm-3b-v2-Q4_K_M.gguf \
  gguf/Modelfile.3b-v2-Q4_K_M \
  --local-dir ./frankenstallm

# Modelfile 내 FROM 경로 수정 후 생성
ollama create frankenstallm -f ./frankenstallm/gguf/Modelfile.3b-v2-Q4_K_M

# 실행
ollama run frankenstallm
```

---


## 파일 다운로드 링크

### 모델 파일

| 파일 | 크기 | 설명 | 다운로드 |
|------|------|------|----------|
| [`model.safetensors`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/model.safetensors) | 5.7 GB | HF Transformers 네이티브 (3B ORPO, byte-fallback) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/model.safetensors) |
| [`config.json`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/config.json) | 1 KB | 모델 설정 (hidden=3072, 28L, vocab=64256) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/config.json) |
| [`tokenizer.json`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/tokenizer.json) | 4 MB | 토크나이저 (SentencePiece Unigram) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/tokenizer.json) |
| [`tokenizer.model`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/tokenizer.model) | 1.4 MB | SentencePiece 모델 (GGUF 변환용) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/tokenizer.model) |
| [`sampling_config.json`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/sampling_config.json) | 1 KB | 권장 샘플링 파라미터 | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/sampling_config.json) |

### GGUF (Ollama / llama.cpp)

| 파일 | 크기 | 양자화 | 다운로드 |
|------|------|--------|----------|
| [`frankenstallm-3b-v2-Q4_K_M.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-Q4_K_M.gguf) | 1.8 GB | **Q4_K_M (권장)** | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-Q4_K_M.gguf) |
| [`frankenstallm-3b-v2-Q8_0.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-Q8_0.gguf) | 3.0 GB | Q8_0 (고품질) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-Q8_0.gguf) |
| [`frankenstallm-3b-v2-f16.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-f16.gguf) | 5.7 GB | F16 (무손실) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-f16.gguf) |
| [`Modelfile.3b-v2-Q4_K_M`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/Modelfile.3b-v2-Q4_K_M) | 1 KB | Ollama Modelfile (Q4) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/Modelfile.3b-v2-Q4_K_M) |
| [`Modelfile.3b-v2-Q8_0`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/Modelfile.3b-v2-Q8_0) | 1 KB | Ollama Modelfile (Q8) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/Modelfile.3b-v2-Q8_0) |

> v1 GGUF (byte-fallback 미적용)도 `gguf/frankenstallm-3b-*.gguf`로 제공되지만, **v2 사용을 권장**합니다.

### 학습 데이터 (SFT / ORPO 재현용)

| 파일 | 크기 | 용도 | 다운로드 |
|------|------|------|----------|
| [`train_filtered.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_combined/train_filtered.jsonl) | 7.5 GB | SFT 학습 데이터 (24개 소스, 240만 샘플, 필터링 완료) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/sft_combined/train_filtered.jsonl) |
| [`val_filtered.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_combined/val_filtered.jsonl) | 157 MB | SFT 검증 데이터 | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/sft_combined/val_filtered.jsonl) |
| [`combined_preference.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/combined_preference.jsonl) | 2.6 GB | ORPO 학습 데이터 (7개 소스 통합, 63만 쌍) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/combined_preference.jsonl) |

<details>
<summary>ORPO Preference 데이터 개별 소스 (7종)</summary>

| 파일 | 크기 | 다운로드 |
|------|------|----------|
| [`nayohan_preference-collection-ko-full.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/nayohan_preference-collection-ko-full.jsonl) | 4.9 GB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/nayohan_preference-collection-ko-full.jsonl) |
| [`heegyu_orca-math-korean-preference-cleaned.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/heegyu_orca-math-korean-preference-cleaned.jsonl) | 1.6 GB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/heegyu_orca-math-korean-preference-cleaned.jsonl) |
| [`kuotient_orca-math-korean-dpo-pairs.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/kuotient_orca-math-korean-dpo-pairs.jsonl) | 750 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/kuotient_orca-math-korean-dpo-pairs.jsonl) |
| [`maywell_ko_Ultrafeedback_binarized.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/maywell_ko_Ultrafeedback_binarized.jsonl) | 394 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/maywell_ko_Ultrafeedback_binarized.jsonl) |
| [`tellang_yeji-preference-ko-v1.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/tellang_yeji-preference-ko-v1.jsonl) | 171 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/tellang_yeji-preference-ko-v1.jsonl) |
| [`jojo0217_korean_rlhf_dataset.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/jojo0217_korean_rlhf_dataset.jsonl) | 137 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/jojo0217_korean_rlhf_dataset.jsonl) |
| [`lemon-mint_korean-realqa-reasoning-v01-preference.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/lemon-mint_korean-realqa-reasoning-v01-preference.jsonl) | 58 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/lemon-mint_korean-realqa-reasoning-v01-preference.jsonl) |

</details>

### 데이터 파이프라인 스크립트

| 파일 | 설명 |
|------|------|
| [`prepare_sft_data.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/prepare_sft_data.py) | HF 데이터셋 → JSONL 정규화 (Alpaca 포맷) |
| [`filter_sft_v2.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/filter_sft_v2.py) | SFT 품질 필터링 (중복 제거, 반복률 필터) |
| [`prepare_preference_combined.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/prepare_preference_combined.py) | Preference 데이터 통합 (DPO/ORPO용) |
| [`tokenize_extra.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/tokenize_extra.py) | 대용량 데이터 병렬 토크나이징 |
| [`sft_dataset.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_dataset.py) | SFT 데이터셋 로더 (Alpaca/대화 포맷) |
| [`dataset.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/dataset.py) | 사전학습 데이터셋 로더 (memmap .bin) |
| [`build_korean_dataset.sh`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/build_korean_dataset.sh) | 한국어 데이터 전체 파이프라인 |

### Phase별 보고서

| 보고서 | 내용 |
|--------|------|
| [`PROJECT_COMPLETION_REPORT`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-10_PROJECT_COMPLETION_REPORT.md) | 프로젝트 최종 완료 보고서 |
| [`ORPO_EVALUATION_REPORT`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-09_ORPO_EVALUATION_REPORT.md) | ORPO 10차원 종합 평가 |
| [`ORPO_TRAINING_JOURNEY`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-08_ORPO_TRAINING_JOURNEY.md) | ORPO 학습 여정 (HP sweep, 디버깅) |
| [`SFT_COMPLETION_AND_EVAL`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md) | SFT 완료 및 평가 |
| [`3B_BASE_EVALUATION`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-05_3B_BASE_EVALUATION_REPORT.md) | 사전학습 베이스 모델 평가 |
| [`Phase0_Optimization`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-02_0200_FRANKENSTALLM_phase0_optimization_report.md) | FP8 최적화 보고서 |


---

## 모델 특징

- **처음부터 만든 한국어 토크나이저**: SentencePiece Unigram, 64K 어휘, 한국어 문자 커버리지 99.95%
- **3단계 학습 파이프라인**: 사전학습 (57K 스텝, ~600억 토큰) → SFT (25.5K 스텝, 240만 샘플) → ORPO (10K 스텝, 63만 선호도 쌍)
- **B200 FP8 네이티브 학습**: TransformerEngine MXFP8 — BF16 대비 이론적 2배 처리량
- **GGUF 배포 지원**: Q4_K_M (1.8GB), Q8_0 (3.0GB), F16 (5.7GB) + Ollama Modelfile 제공

---

## 아키텍처

| 구성 요소 | 값 |
|-----------|-----|
| 구조 | Decoder-only Transformer (LLaMA 스타일) |
| Hidden size | 3,072 |
| 레이어 수 | 28 |
| 어텐션 헤드 | 24 |
| KV 헤드 | 8 (GQA 3:1) |
| FFN 차원 | 8,192 (SwiGLU) |
| 어휘 크기 | 64,256 (byte-fallback 적용) |
| 컨텍스트 길이 | 4,096 (학습 시 2,048) |
| 위치 인코딩 | RoPE (θ=500,000) |
| 정규화 | Pre-norm RMSNorm |
| 어텐션 구현 | FlashAttention-2 |
| 정밀도 | FP8 (TransformerEngine MXFP8) |
| Weight tying | 적용 (embedding ↔ lm_head) |

---

## 학습 파이프라인

### Phase 1: 사전학습

| 항목 | 값 |
|------|-----|
| 스텝 수 | 57,000 |
| 최종 loss | 1.466 |
| 학습 토큰 | ~600억 (385억 고유 × ~1.5 에폭) |
| 소요 시간 | ~63시간 |
| 데이터 | CC-100 KO, HPLT KO, C4 KO, 나무위키, 위키피디아 KO, Cosmopedia (EN) |
| 배치 크기 | 5 × 8 GPU × 8 accum × 2,048 seq = ~65만 토큰/스텝 |

### Phase 2: SFT (지도 미세조정)

| 항목 | 값 |
|------|-----|
| 스텝 수 | 25,500 (77.3% 지점에서 조기 종료) |
| 최적 val_loss | 1.8851 (step 23,000) |
| 소요 시간 | ~15.5시간 |
| 데이터 | 24개 소스, 243만 9,397 샘플 (7.48 GB) |
| 구성 | SFT 70% + 사전학습 리플레이 30% (치명적 망각 방지) |
| 지식 망각률 | 0.9% (19개 데이터셋 기준) |

### Phase 3: ORPO (선호도 최적화)

| 항목 | 값 |
|------|-----|
| 스텝 수 | 9,997 (조기 수렴) |
| 최적 eval_loss | 1.625 |
| 선호도 정확도 | 76.02% |
| 보상 마진 | 0.6100 |
| 소요 시간 | ~7시간 |
| 데이터 | 한국어 HF 데이터셋 7종, ~63만 선호도 쌍 |
| 하이퍼파라미터 | beta=0.25, lr=1.2e-5, eff_batch=128 |

**총 학습 시간: 8× B200에서 약 86시간**

---

## 벤치마크

### 학습 단계별 성능 변화 (Base → SFT → ORPO)

| 벤치마크 | Base | SFT | ORPO | 변화 (Base→ORPO) |
|-----------|:----:|:---:|:----:|:---:|
| **KoBEST 평균 (0-shot)** | 43.7% | 43.3% | **52.8%** | **+9.1pp** |
| KoBEST COPA | 49.3% | 48.6% | **63.9%** | +14.6pp |
| KoBEST HellaSwag-KO | 21.6% | 19.8% | **38.0%** | +16.4pp |
| KoBEST SentiNeg | 48.6% | 49.1% | **62.5%** | +13.9pp |
| KoBEST BoolQ | 50.3% | 50.1% | 50.6% | +0.3pp |
| PIQA | 52.5% | 52.6% | **59.9%** | +7.3pp |
| ARC-Easy | 25.6% | 25.9% | **36.0%** | +10.4pp |
| HAE-RAE | 19.7% | 19.9% | 21.8% | +2.1pp |
| HellaSwag EN | 26.2% | 26.1% | 29.2% | +3.0pp |
| Greedy 3-gram 반복률 | 61.0% | 73.0% | **30.9%** | -30.1pp |
| EOS 종료율 | 0% | 60% | **67%** | +67pp |
| PPL 망각률 | — | 0.9% | 4.1% | 15% 이내 ✅ |

### 3B급 모델 비교 (Ollama, 35개 테스트)

| 모델 | 파라미터 | 한국어 NLU | 지식 | 지시 수행 | 추론 | 평균 점수 |
|-------|:------:|:----------:|:----:|:---------:|:----:|:---------:|
| Qwen 2.5 3B | 3B | 100.0 | 20.8 | 55.6 | 62.5 | **63.4** |
| Phi-4 Mini | 3.8B | 66.7 | 29.2 | 33.3 | **87.5** | 60.6 |
| **FRANKENSTALLM 3B** | **3B** | **100.0** | **75.0** | **66.7** | 50.0 | 46.7 |

> FRANKENSTALLM은 **한국어 NLU** (Qwen과 동률), **한국어 지식** (75.0 vs 20.8/29.2), **지시 수행** (66.7 vs 55.6/33.3)에서 앞섭니다.

### 추론 속도 (Ollama, Q4_K_M)

| 모델 | 평균 TTFT | TPS | 비고 |
|-------|:--------:|:---:|------|
| **FRANKENSTALLM 3B** | **16.7ms** | **142.5** | 가장 빠름 |
| Phi-4 Mini 3.8B | 25.6ms | 100.4 | |
| Qwen 2.5 3B | 28.2ms | 93.8 | |

### Perplexity 보존율 (ORPO 지식 유지)

| 데이터셋 | Base PPL | ORPO PPL | 망각률 |
|---------|:--------:|:--------:|:------:|
| Korean C4 | 5.72 | 5.87 | +2.7% |
| Korean Wiki | 11.84 | 12.21 | +3.2% |
| 최대 망각률 | — | — | 4.1% ✅ |

---

## 학습 데이터

### 사전학습 (~385억 토큰)

| 분류 | 소스 | 추정 토큰 수 |
|------|------|:-----------:|
| 한국어 웹 크롤 | C4 KO, CC-100 KO, HPLT KO | ~172억 |
| 한국어 백과사전 | 위키피디아 KO, 나무위키 (2개 버전) | ~28억 |
| 영어 교육 | Cosmopedia (Stories, Web, Stanford, WikiHow, OpenStax, Khan) | ~57억 |
| 영어 수학·과학 | AutoMathText, OpenWebMath, Proof-Pile-2 | ~85억 |
| 코드 | StarCoder (필터링) | ~43억 |

### SFT (240만 샘플, 24개 소스)

| 영역 | 비율 | 주요 데이터셋 |
|------|:----:|-------------|
| 추론/CoT | 38% | reasoning_r1_1.4m, magpie_reasoning |
| 한국어 지시문 | 23% | korean_instruction_mix, open_korean_instructions, kullm_v2 |
| 영어 일반 | 16% | openhermes_2.5, ultrachat_200k |
| 수학 | 12% | NuminaMath-CoT, orca-math-ko |
| 대화/코드/기타 | 11% | smol-koreantalk, Evol-Instruct-Code-80k-ko |

### ORPO (~63만 선호도 쌍, 7개 소스)

| 데이터셋 | 용량 | 영역 |
|---------|:----:|------|
| nayohan/preference-collection-ko-full | 4.9GB | 일반 선호도 |
| heegyu/orca-math-korean-preference-cleaned | 1.6GB | 수학 추론 |
| kuotient/orca-math-korean-dpo-pairs | 750MB | 수학 DPO |
| maywell/ko_Ultrafeedback_binarized | 394MB | 피드백 정렬 |
| tellang/yeji-preference-ko-v1 | 171MB | 일반 선호도 |
| jojo0217/korean_rlhf_dataset | 137MB | RLHF 쌍 |
| lemon-mint/korean-realqa-reasoning-v01-preference | 58MB | QA 추론 |

---

## GGUF & Ollama

### 제공 양자화 파일

| 파일 | 크기 | 설명 |
|------|:----:|------|
| `gguf/frankenstallm-3b-v2-Q4_K_M.gguf` | 1.8GB | **권장** — 크기 대비 최적 품질 |
| `gguf/frankenstallm-3b-v2-Q8_0.gguf` | 3.0GB | 높은 품질 |
| `gguf/frankenstallm-3b-v2-f16.gguf` | 5.7GB | 전체 정밀도 |
| `model.safetensors` | 5.7GB | Transformers 네이티브 (3B ORPO best, byte-fallback 수정, vocab=64256) |

### 권장 샘플링 파라미터

| 파라미터 | 값 | 비고 |
|---------|:---:|------|
| `temperature` | 0.7 | 한국어 생성 품질 최적 |
| `repeat_penalty` | 1.2 | **필수** — 미적용 시 greedy 반복률 30.9% |
| `top_p` | 0.9 | Nucleus 샘플링 |
| `top_k` | 50 | Top-k 후보 수 |
| `max_tokens` | 512 | 최대 생성 길이 |
| `num_ctx` | 4096 | 컨텍스트 윈도우 (초과 금지) |

> ⚠️ 반드시 `repeat_penalty >= 1.2`를 사용하세요. 적용하면 반복률이 **0%** 로 떨어집니다. 미적용 시 greedy 디코딩에서 ~31% 3-gram 반복이 발생합니다.

---

## 제한 사항

- **영어 성능 제한**: MMLU-EN ~23%, HellaSwag-EN ~29% — 한국어 특화 모델입니다
- **코드 생성**: 거의 불가능 (학습 데이터에 코드 비중이 낮음)
- **Greedy 반복**: `repeat_penalty` 미사용 시 30.9% 3-gram 반복 — 반드시 `repeat_penalty >= 1.2` 사용
- **안전성**: 안전 정렬(safety alignment) 데이터가 학습에 포함되지 않았으므로 적절한 가드레일과 함께 사용하세요
- **규모 차이**: 수조 토큰으로 학습된 상용 3B 모델 대비 ~600억 토큰으로 학습 — 전반적 벤치마크 점수는 낮을 수 있습니다

---

## 하드웨어 및 학습 환경

| 구성 요소 | 사양 |
|-----------|------|
| GPU | 8× NVIDIA B200 (183GB HBM3e × 8, 총 ~1.47TB) |
| FP8 연산 | 2,250 TFLOPS/GPU (총 18,000 TFLOPS) |
| 인터커넥트 | NVLink 5.0, NVSwitch all-to-all mesh |
| CPU | 2× AMD EPYC 9365 (72코어, Zen 5) |
| RAM | 2.21 TB DDR5 |
| PyTorch | 2.10.0a0+b4e4ee81d3.nv25.12 (NVIDIA 커스텀) |
| TransformerEngine | 2.10.0 |
| FlashAttention | 2.7.4 |
| NCCL | 2.28.9 |
| CUDA | 13.1 |
| 총 학습 시간 | ~86시간 (사전학습 63h + SFT 15.5h + ORPO 7h) |

---

## 인용

```bibtex
@misc{frankenstallm2026,
  title={FRANKENSTALLM: A Korean 3B LLM Built From Scratch on B200 GPUs},
  author={pathcosmos},
  year={2026},
  url={https://huggingface.co/pathcosmos/frankenstallm},
  note={3-phase training (Pretrain, SFT, ORPO) with FP8 on 8x NVIDIA B200}
}
```

---

## 링크 및 연락처

- **GitHub**: [pathcosmos/FRANKENSTALLM](https://github.com/pathcosmos/FRANKENSTALLM) — 전체 소스코드, 학습 스크립트, 빌더 로그
- **HuggingFace**: [pathcosmos/frankenstallm](https://huggingface.co/pathcosmos/frankenstallm)
- **연락처**: pathcosmos@gmail.com

---

## 감사의 글

이 프로젝트는 **과학기술정보통신부**의 **「첨단 GPU 활용 지원 사업」** (과학기술정보통신부 공고 제2025-1068호)을 통해 제공된 GPU 컴퓨팅 자원을 활용하여 수행되었습니다.

> **국가 AI컴퓨팅자원 지원포털**: https://aiinfrahub.kr
>
> - 주관: 과학기술정보통신부 (MSIT), 정보통신산업진흥원 (NIPA)
> - 운영: 한국정보통신진흥협회 (KAIT)

대한민국 정부의 AI 인프라 지원 사업 덕분에 8× NVIDIA B200 GPU 환경에서 한국어 3B LLM을 처음부터 학습할 수 있었습니다. 국가 차원의 AI 컴퓨팅 자원 지원에 깊이 감사드립니다.

---
---

> 🇺🇸 **English version below**

---

# FRANKENSTALLM 3B

> **⚠️ v2 Model Replacement Notice (2026-03-26)**
>
> The v2 GGUF and safetensors files were incorrectly deployed as a **1.2B model (hidden_size=2048, 24 layers)** due to a conversion pipeline error.
> On 2026-03-26, they were replaced with the correct **3B ORPO checkpoint (hidden_size=3072, 28 layers, vocab_size=64256, byte-fallback applied)**.
> If you downloaded v2 files before this date, please re-download.


> **A Korean 3B LLM built entirely from scratch — tokenizer, pretraining, SFT, and ORPO — on 8× NVIDIA B200 GPUs.**

| | |
|---|---|
| **Developer** | [pathcosmos](https://huggingface.co/pathcosmos) |
| **Parameters** | ~2.4B (3B-class with weight tying) |
| **Languages** | Korean (primary), English (secondary) |
| **License** | Apache 2.0 |
| **Training** | 3-phase: Pretrain → SFT → ORPO |
| **Hardware** | 8× NVIDIA B200 (FP8), ~86 hours total |

---

## Quick Start

### Transformers

```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "pathcosmos/frankenstallm"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id, torch_dtype=torch.bfloat16, device_map="auto"
)

inputs = tokenizer(
    "한국의 전통 음식 중 김치에 대해 설명해주세요.",
    return_tensors="pt"
).to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        do_sample=True,
        temperature=0.7,
        repetition_penalty=1.2,  # recommended
        top_p=0.9,
        max_new_tokens=512,
        pad_token_id=tokenizer.eos_token_id,
    )

print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```

### Ollama (GGUF)

```bash
# Download GGUF + Modelfile
huggingface-cli download pathcosmos/frankenstallm \
  gguf/frankenstallm-3b-v2-Q4_K_M.gguf \
  gguf/Modelfile.3b-v2-Q4_K_M \
  --local-dir ./frankenstallm

# Fix FROM path in Modelfile, then create
ollama create frankenstallm -f ./frankenstallm/gguf/Modelfile.3b-v2-Q4_K_M

# Run
ollama run frankenstallm
```

---


## File Downloads

### Model Files

| File | Size | Description | Download |
|------|------|-------------|----------|
| [`model.safetensors`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/model.safetensors) | 5.7 GB | HF Transformers native (3B ORPO, byte-fallback) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/model.safetensors) |
| [`config.json`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/config.json) | 1 KB | Model config (hidden=3072, 28L, vocab=64256) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/config.json) |
| [`tokenizer.json`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/tokenizer.json) | 4 MB | Tokenizer (SentencePiece Unigram) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/tokenizer.json) |
| [`tokenizer.model`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/tokenizer.model) | 1.4 MB | SentencePiece model (for GGUF conversion) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/tokenizer.model) |

### GGUF (Ollama / llama.cpp)

| File | Size | Quantization | Download |
|------|------|--------------|----------|
| [`frankenstallm-3b-v2-Q4_K_M.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-Q4_K_M.gguf) | 1.8 GB | **Q4_K_M (Recommended)** | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-Q4_K_M.gguf) |
| [`frankenstallm-3b-v2-Q8_0.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-Q8_0.gguf) | 3.0 GB | Q8_0 (High quality) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-Q8_0.gguf) |
| [`frankenstallm-3b-v2-f16.gguf`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/gguf/frankenstallm-3b-v2-f16.gguf) | 5.7 GB | F16 (Lossless) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/gguf/frankenstallm-3b-v2-f16.gguf) |

### Training Data (for SFT / ORPO reproduction)

| File | Size | Purpose | Download |
|------|------|---------|----------|
| [`train_filtered.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_combined/train_filtered.jsonl) | 7.5 GB | SFT training data (24 sources, 2.4M samples, filtered) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/sft_combined/train_filtered.jsonl) |
| [`val_filtered.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_combined/val_filtered.jsonl) | 157 MB | SFT validation data | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/sft_combined/val_filtered.jsonl) |
| [`combined_preference.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/combined_preference.jsonl) | 2.6 GB | ORPO training data (7 sources, 630K pairs) | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/combined_preference.jsonl) |

<details>
<summary>Individual ORPO Preference Sources (7 datasets)</summary>

| File | Size | Download |
|------|------|----------|
| [`nayohan_preference-collection-ko-full.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/nayohan_preference-collection-ko-full.jsonl) | 4.9 GB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/nayohan_preference-collection-ko-full.jsonl) |
| [`heegyu_orca-math-korean-preference-cleaned.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/heegyu_orca-math-korean-preference-cleaned.jsonl) | 1.6 GB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/heegyu_orca-math-korean-preference-cleaned.jsonl) |
| [`kuotient_orca-math-korean-dpo-pairs.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/kuotient_orca-math-korean-dpo-pairs.jsonl) | 750 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/kuotient_orca-math-korean-dpo-pairs.jsonl) |
| [`maywell_ko_Ultrafeedback_binarized.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/maywell_ko_Ultrafeedback_binarized.jsonl) | 394 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/maywell_ko_Ultrafeedback_binarized.jsonl) |
| [`tellang_yeji-preference-ko-v1.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/tellang_yeji-preference-ko-v1.jsonl) | 171 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/tellang_yeji-preference-ko-v1.jsonl) |
| [`jojo0217_korean_rlhf_dataset.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/jojo0217_korean_rlhf_dataset.jsonl) | 137 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/jojo0217_korean_rlhf_dataset.jsonl) |
| [`lemon-mint_korean-realqa-reasoning-v01-preference.jsonl`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/preference/lemon-mint_korean-realqa-reasoning-v01-preference.jsonl) | 58 MB | [Download](https://huggingface.co/pathcosmos/frankenstallm/resolve/main/data/preference/lemon-mint_korean-realqa-reasoning-v01-preference.jsonl) |

</details>

### Data Pipeline Scripts

| File | Description |
|------|-------------|
| [`prepare_sft_data.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/prepare_sft_data.py) | HF datasets → JSONL normalization (Alpaca format) |
| [`filter_sft_v2.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/filter_sft_v2.py) | SFT quality filtering (dedup, repetition filter) |
| [`prepare_preference_combined.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/prepare_preference_combined.py) | Preference data merging (DPO/ORPO format) |
| [`tokenize_extra.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/tokenize_extra.py) | Large-scale parallel tokenization |
| [`sft_dataset.py`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/data/sft_dataset.py) | SFT dataset loader (Alpaca/conversation format) |

### Phase Reports

| Report | Content |
|--------|---------|
| [`PROJECT_COMPLETION_REPORT`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-10_PROJECT_COMPLETION_REPORT.md) | Final project completion report |
| [`ORPO_EVALUATION_REPORT`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-09_ORPO_EVALUATION_REPORT.md) | ORPO 10-dimension evaluation |
| [`ORPO_TRAINING_JOURNEY`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-08_ORPO_TRAINING_JOURNEY.md) | ORPO training journey (HP sweep, debugging) |
| [`SFT_COMPLETION_AND_EVAL`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md) | SFT completion and evaluation |
| [`3B_BASE_EVALUATION`](https://huggingface.co/pathcosmos/frankenstallm/blob/main/reports/2026-03-05_3B_BASE_EVALUATION_REPORT.md) | Pretrained base model evaluation |


---

## Model Highlights

- **From-scratch Korean tokenizer**: SentencePiece Unigram, 64K vocab, 99.95% Korean character coverage
- **3-phase training pipeline**: Pretrain (57K steps, ~60B tokens) → SFT (25.5K steps, 2.4M samples) → ORPO (10K steps, 630K preference pairs)
- **B200 FP8 native training**: TransformerEngine MXFP8 on NVIDIA B200 — 2× theoretical throughput vs BF16
- **GGUF deployment ready**: Q4_K_M (1.8GB), Q8_0 (3.0GB), F16 (5.7GB) with optimized Ollama Modelfiles

---

## Architecture

| Component | Value |
|-----------|-------|
| Type | Decoder-only Transformer (LLaMA-style) |
| Hidden size | 3,072 |
| Layers | 28 |
| Attention heads | 24 |
| KV heads | 8 (GQA 3:1) |
| FFN dim | 8,192 (SwiGLU) |
| Vocab size | 64,256 (byte-fallback applied) |
| Context length | 4,096 (trained at 2,048) |
| Position encoding | RoPE (θ=500,000) |
| Normalization | Pre-norm RMSNorm |
| Attention impl | FlashAttention-2 |
| Precision | FP8 (MXFP8 via TransformerEngine) |
| Weight tying | Yes (embedding ↔ lm_head) |

---

## Training Pipeline

### Phase 1: Pretraining

| Detail | Value |
|--------|-------|
| Steps | 57,000 |
| Final loss | 1.466 |
| Tokens seen | ~60B (38.5B unique × ~1.5 epochs) |
| Duration | ~63 hours |
| Data | CC-100 KO, HPLT KO, C4 KO, NamuWiki, Wikipedia KO, Cosmopedia (EN) |
| Batch size | 5 × 8 GPU × 8 accum × 2,048 seq = ~655K tok/step |

### Phase 2: Supervised Fine-Tuning (SFT)

| Detail | Value |
|--------|-------|
| Steps | 25,500 (early stop at 77.3%) |
| Best val_loss | 1.8851 (step 23,000) |
| Duration | ~15.5 hours |
| Data | 2,439,397 samples from 24 sources (7.48 GB) |
| Mix | 70% SFT + 30% pretrain replay (catastrophic forgetting prevention) |
| Knowledge forgetting | 0.9% (19 datasets) |

### Phase 3: ORPO (Odds Ratio Preference Optimization)

| Detail | Value |
|--------|-------|
| Steps | 9,997 (early convergence) |
| Best eval_loss | 1.625 |
| Preference accuracy | 76.02% |
| Reward margin | 0.6100 |
| Duration | ~7 hours |
| Data | ~630K preference pairs from 7 Korean HF datasets |
| Hyperparams | beta=0.25, lr=1.2e-5, eff_batch=128 |

**Total training time: ~86 hours on 8× B200**

---

## Benchmarks

### Training Phase Progression (Base → SFT → ORPO)

| Benchmark | Base | SFT | ORPO | Δ (Base→ORPO) |
|-----------|:----:|:---:|:----:|:---:|
| **KoBEST Avg (0-shot)** | 43.7% | 43.3% | **52.8%** | **+9.1pp** |
| KoBEST COPA | 49.3% | 48.6% | **63.9%** | +14.6pp |
| KoBEST HellaSwag-KO | 21.6% | 19.8% | **38.0%** | +16.4pp |
| KoBEST SentiNeg | 48.6% | 49.1% | **62.5%** | +13.9pp |
| KoBEST BoolQ | 50.3% | 50.1% | 50.6% | +0.3pp |
| PIQA | 52.5% | 52.6% | **59.9%** | +7.3pp |
| ARC-Easy | 25.6% | 25.9% | **36.0%** | +10.4pp |
| HAE-RAE | 19.7% | 19.9% | 21.8% | +2.1pp |
| HellaSwag EN | 26.2% | 26.1% | 29.2% | +3.0pp |
| Greedy 3-gram repetition | 61.0% | 73.0% | **30.9%** | -30.1pp |
| EOS termination rate | 0% | 60% | **67%** | +67pp |
| PPL forgetting | — | 0.9% | 4.1% | within 15% ✅ |

### 3B-class Model Comparison (Ollama, 35 tests)

| Model | Params | Korean NLU | Knowledge | Instruction | Reasoning | Avg Score |
|-------|:------:|:----------:|:---------:|:-----------:|:---------:|:---------:|
| Qwen 2.5 3B | 3B | 100.0 | 20.8 | 55.6 | 62.5 | **63.4** |
| Phi-4 Mini | 3.8B | 66.7 | 29.2 | 33.3 | **87.5** | 60.6 |
| **FRANKENSTALLM 3B** | **3B** | **100.0** | **75.0** | **66.7** | 50.0 | 46.7 |

> FRANKENSTALLM leads in **Korean NLU** (tied with Qwen), **Korean Knowledge** (75 vs 20.8/29.2), and **Instruction Following** (66.7 vs 55.6/33.3).

### Inference Speed (Ollama, Q4_K_M)

| Model | Avg TTFT | TPS | Note |
|-------|:--------:|:---:|------|
| **FRANKENSTALLM 3B** | **16.7ms** | **142.5** | Fastest |
| Phi-4 Mini 3.8B | 25.6ms | 100.4 | |
| Qwen 2.5 3B | 28.2ms | 93.8 | |

### Perplexity Preservation (ORPO Knowledge Retention)

| Dataset | Base PPL | ORPO PPL | Forgetting |
|---------|:--------:|:--------:|:----------:|
| Korean C4 | 5.72 | 5.87 | +2.7% |
| Korean Wiki | 11.84 | 12.21 | +3.2% |
| Max forgetting | — | — | 4.1% ✅ |

---

## Training Data

### Pretraining (~38.5B tokens)

| Category | Sources | Est. Tokens |
|----------|---------|:-----------:|
| Korean Web Crawl | C4 KO, CC-100 KO, HPLT KO | ~17.2B |
| Korean Encyclopedia | Wikipedia KO, NamuWiki (2 versions) | ~2.8B |
| English Educational | Cosmopedia (Stories, Web, Stanford, WikiHow, OpenStax, Khan) | ~5.7B |
| English Math/Science | AutoMathText, OpenWebMath, Proof-Pile-2 | ~8.5B |
| Code | StarCoder (filtered) | ~4.3B |

### SFT (2.4M samples, 24 sources)

| Domain | Share | Key Datasets |
|--------|:-----:|-------------|
| Reasoning/CoT | 38% | reasoning_r1_1.4m, magpie_reasoning |
| Korean Instructions | 23% | korean_instruction_mix, open_korean_instructions, kullm_v2 |
| English General | 16% | openhermes_2.5, ultrachat_200k |
| Math | 12% | NuminaMath-CoT, orca-math-ko |
| Dialog/Code/Other | 11% | smol-koreantalk, Evol-Instruct-Code-80k-ko |

### ORPO (~630K preference pairs, 7 sources)

| Dataset | Size | Domain |
|---------|:----:|--------|
| nayohan/preference-collection-ko-full | 4.9GB | General preference |
| heegyu/orca-math-korean-preference-cleaned | 1.6GB | Math reasoning |
| kuotient/orca-math-korean-dpo-pairs | 750MB | Math DPO |
| maywell/ko_Ultrafeedback_binarized | 394MB | Feedback alignment |
| tellang/yeji-preference-ko-v1 | 171MB | General preference |
| jojo0217/korean_rlhf_dataset | 137MB | RLHF pairs |
| lemon-mint/korean-realqa-reasoning-v01-preference | 58MB | QA reasoning |

---

## GGUF & Ollama

### Available Quantizations

| File | Size | Description |
|------|:----:|-------------|
| `gguf/frankenstallm-3b-v2-Q4_K_M.gguf` | 1.8GB | **Recommended** — best size/quality balance |
| `gguf/frankenstallm-3b-v2-Q8_0.gguf` | 3.0GB | Higher quality |
| `gguf/frankenstallm-3b-v2-f16.gguf` | 5.7GB | Full precision |
| `model.safetensors` | 5.7GB | Transformers native (3B ORPO best, byte-fallback fixed, vocab=64256) |

### Recommended Sampling Parameters

| Parameter | Value | Notes |
|-----------|:-----:|-------|
| `temperature` | 0.7 | Optimal for Korean generation quality |
| `repeat_penalty` | 1.2 | **Required** — without it, greedy repetition is 30.9% |
| `top_p` | 0.9 | Nucleus sampling |
| `top_k` | 50 | Top-k candidates |
| `max_tokens` | 512 | Max generation length |
| `num_ctx` | 4096 | Context window (do not exceed) |

> ⚠️ Always use `repeat_penalty >= 1.2`. With it, repetition drops to **0%**. Without it, greedy decoding produces ~31% 3-gram repetition.

---

## Limitations

- **English performance is limited**: MMLU-EN ~23%, HellaSwag-EN ~29% — this is a Korean-focused model
- **Code generation**: Near zero capability (limited code in training data)
- **Greedy repetition**: 30.9% 3-gram repetition without `repeat_penalty` — always use sampling with `repeat_penalty >= 1.2`
- **Safety**: Safety alignment data was not included in training; use with appropriate guardrails
- **Scale gap**: Compared to commercial 3B models trained on trillions of tokens, this model was trained on ~60B tokens — expect lower overall benchmark scores

---

## Hardware & Training Environment

| Component | Specification |
|-----------|---------------|
| GPU | 8× NVIDIA B200 (183GB HBM3e each, ~1.47TB total) |
| FP8 Compute | 2,250 TFLOPS/GPU (18,000 TFLOPS total) |
| Interconnect | NVLink 5.0, NVSwitch all-to-all mesh |
| CPU | 2× AMD EPYC 9365 (72 cores, Zen 5) |
| RAM | 2.21 TB DDR5 |
| PyTorch | 2.10.0a0+b4e4ee81d3.nv25.12 (NVIDIA custom) |
| TransformerEngine | 2.10.0 |
| FlashAttention | 2.7.4 |
| NCCL | 2.28.9 |
| CUDA | 13.1 |
| Total training | ~86 hours (Pretrain 63h + SFT 15.5h + ORPO 7h) |

---

## Citation

```bibtex
@misc{frankenstallm2026,
  title={FRANKENSTALLM: A Korean 3B LLM Built From Scratch on B200 GPUs},
  author={pathcosmos},
  year={2026},
  url={https://huggingface.co/pathcosmos/frankenstallm},
  note={3-phase training (Pretrain, SFT, ORPO) with FP8 on 8x NVIDIA B200}
}
```

---

## Links & Contact

- **GitHub**: [pathcosmos/FRANKENSTALLM](https://github.com/pathcosmos/FRANKENSTALLM) — Full source code, training scripts, and builder's log
- **HuggingFace**: [pathcosmos/frankenstallm](https://huggingface.co/pathcosmos/frankenstallm)
- **Contact**: pathcosmos@gmail.com

---

## Related Projects

- **[EVAFRILL-Mo](https://github.com/pathcosmos/EVAFRILL-Mo)** | [🤗 HuggingFace](https://huggingface.co/pathcosmos/EVAFRILL-Mo-3B) — Hybrid Mamba-2 + Transformer sister project (2.94B params). While FRANKENSTALLM uses a pure Transformer architecture, EVAFRILL-Mo adopts Mamba-2 SSM + sparse Transformer attention. Both share the same tokenizer and training infrastructure.

---

## Acknowledgment

This project was conducted using GPU computing resources provided through the **"Advanced GPU Utilization Support Program"** (MSIT Notice No. 2025-1068) by the **Ministry of Science and ICT (MSIT)** of the Republic of Korea.

> **National AI Computing Resource Support Portal**: https://aiinfrahub.kr
>
> - Organized by: Ministry of Science and ICT (MSIT), National IT Industry Promotion Agency (NIPA)
> - Operated by: Korea Association of Information & Telecommunication (KAIT)

We are deeply grateful for the national-level AI computing infrastructure support from the Korean government, which made it possible to train a Korean 3B LLM from scratch on 8× NVIDIA B200 GPUs.
