2. 프리셋 사용하기
이 장에서는 EulerStack v1 이 기본으로 제공하는 53 개 프리셋 을 어떻게 탐색하고 목적에 맞는 것을 고르는지 설명합니다. 새 아키텍처를 백지에서 짜기 전에, 이미 잘 다듬어진 출발점을 활용하는 방법을 익히는 단계입니다.
학습 순서 — v1 3-tier 접근법
프리셋은 "검증된 것부터 실험적인 것까지" 의 3 단계로 구성되어 있습니다. 이 순서는 프로덕션 도입 / 연구 탐색 / 최신 primitive 검증 모두에 그대로 쓰일 수 있습니다.
Tier 1 — 검증된 산업 표준 (먼저 익힌다)
Llama 2/3, Mistral, Gemma 2, Qwen longctx 계열. 훈련 실패가 거의 없는
보수적 baseline. 규모별 llm_0p1b_{simple,mistral} + llm_*_{simple,mistral}
(0.8B~16B), 그리고 arch_beginner_* / arch_intermediate_*.
Tier 2 — 최신 / 복합 (다음)
Jamba 하이브리드, Mixtral / DeepSeek MoE, Samba, RetNet, MLA (DeepSeek-V3
2024), MoD (Raposo ICML 2024), 전문가 조합 (speculative 4 개 포함).
arch_advanced_{jamba,samba,retnet,mla,mod}, arch_expert_*,
arch_expert_*_mini, llm_*_{jamba,moe,mla}.
Tier 3 — v1 실험 (마지막, Phase B primitive demo 4 개, arch-scale)
arch_expert_reasoning_r1 — 2-phase 추론 (DeepSeek-R1 2025)
arch_expert_titans_memory — Titans 파라미터형 메모리 (Google 2024-2025)
arch_expert_dual_stream — monoidal 병렬 (Jamba × PaLM 일반화)
arch_expert_kitchen_sink — **v1 모든 primitive 를 한 스펙에 결합한 capstone**
(MLA + Titans + MoE + branched + TTT + ODE-RK4
+ parallel + discrete integrator + MoD +
per-layer override + let + reserved namespace
+ execution_modes). 실제로 validate/compile/
save/load/HF 훈련이 한 번에 돌아가는지 검증.
~5.5M params, ~20 layers.
v1.1 런타임 성숙도 스프린트 결과: **MLA / MoD / Titans memory 는 Core 이며**
(Titans 는 v1.1 에서 plugin-track → core 승격), reasoning_r1 은 메타데이터
Core, dual_stream 은 Component. 추가로 `ode_rk4` / `ode_euler` 가
reserved → core 로 승격됐고, TTT 는 플러그인 레퍼런스
(`eulerstack.plugins.ttt`) 로 실제 meta-learning 루프를 제공합니다.
자세한 매트릭스: `docs/architectures/runtime_primitive_status.md`.
0.1B 클래스 (신규): Stage-1 / CPT 워밍업 목적. 소버린 파운데이션 모델의 1 단계 훈련 혹은 지속 사전학습 (CPT) 초기에 쓰기 좋은 ~100M 규모. MoE 는 이 규모에서 의미가 없어 제외하고 simple / mistral / jamba / mla 4 개 변형만 제공합니다.
이 순서로 읽으면, 검증된 baseline → 최신 연구의 실전 조합 → v1 에서만 가능한 새 primitive 로 자연스럽게 진입할 수 있습니다.
왜 프리셋이 필요한가
LLM 아키텍처를 처음부터 직접 설계하려면 20 개 이상의 파라미터 를 서로 맞춰야 합니다. 대표적으로 다음과 같은 항목들입니다.
d_model,n_heads,n_kv_heads,mlp_ratio,n_layers같은 기본 차원- 믹서 종류 (attention / mamba / retnet / hyena)
- FFN 종류 (mlp / gated_mlp / moe) 및 MoE 세부 설정
- 위치 인코딩 (rope / alibi / learned), rope_theta, 스케일링
- 정규화 방식 (rmsnorm / layernorm) 및 위치 (pre / post)
- KV 캐시 / SSM state 설정
이 모두를 동시에 맞추는 것은 초보자에게 부담이고, 숙련자에게도 실수가 잦습니다. EulerStack 프리셋은 이런 균형 잡기를 미리 검증/컴파일/파라미터 추정 까지 모두 완료한 출발점을 제공합니다. 대부분의 사용자는 프리셋을 골라서 약간만 수정하는 방식으로 시작하는 것이 효율적입니다.
프리셋의 세 축
EulerStack 프리셋은 세 축으로 구성됩니다.
-
arch_— 수준별 학습용 (20 개, ~1–2B) 초급 → 중급 → 고급 → 전문가의 4 단계로 현대 LLM 아키텍처의 발전 순서 를 재현합니다. 각 단계마다 경쟁 관계의 여러 접근법을 함께 배치하여, 같은 파라미터 예산에서 아키텍처 선택이 어떻게 다른 결과를 내는지 비교할 수 있게 합니다. v1 에서 advanced 2 종 (MLA, MoD), expert 3 종 (Reasoning R1, Titans memory, Dual-stream) 이 추가됐습니다. -
llm_— 실전 배포용 (24 개, 0.1B–16B) 5 가지 크기(0.1B / 0.8B / 2B / 4B / 16B)와 최대 5 가지 변형(simple / mistral / jamba / moe / mla) 의 조합입니다. 0.1B 는 Stage-1 / CPT 워밍업용이며 MoE 는 이 규모에서 의미가 없어 제외합니다. 실제 서비스 배포나 프로젝트 스타터로 씁니다. -
arch_expert_*_mini— 소형 expert 실험용 (6 개, ~80M–360M) 전문가 단계 아키텍처를 소형 GPU 에서도 실험할 수 있게 축소한 버전입니다. 2B 급 전문가 프리셋의 설계 아이디어를 유지하면서 규모만 줄였습니다.
아래에서 각 축의 내용을 차례로 살펴봅니다.
1. arch_ 프리셋 (수준별 학습용, 20 개)
각 단계마다 경쟁 관계의 접근법이 여러 개 배치되어 있습니다. 같은 목표에 대한 여러 답을 나란히 비교할 수 있어야, 왜 어떤 선택이 다른 선택보다 좋은지 설명할 수 있습니다. 자세한 단계별 학습은 07_arch_walkthrough.md 를 먼저 읽는 것을 권장합니다.
| 수준 | 프리셋 | 한 줄 설명 | 연구 근거 |
|---|---|---|---|
| beginner | arch_beginner_gpt2 |
Classic Transformer (MHA + LayerNorm post + GeLU) | Vaswani 2017, GPT-2 |
| beginner | arch_beginner_llama |
Modern baseline (GQA + RMSNorm pre + SwiGLU) | Llama 2/3 |
| intermediate | arch_intermediate_mistral |
1 global : 3 sliding attention | Mistral 7B |
| intermediate | arch_intermediate_gemma2 |
1:1 alternating global/local | Gemma 2 |
| intermediate | arch_intermediate_qwen_longctx |
RoPE scaling (factor 4, 32K) | Qwen 2/3 |
| advanced | arch_advanced_jamba |
Mamba + Attention 3:1 hybrid | Jamba-1.5 (AI21) |
| advanced | arch_advanced_samba |
Mamba + Sliding attention 1:1 | Samba (Microsoft) |
| advanced | arch_advanced_retnet |
Pure RetNet (attention-free) | Sun et al. 2023 |
| expert | arch_expert_research |
4 믹서 + MoE 3-phase | Research-grade |
| expert | arch_expert_mixtral_moe |
Pure attn + 매 레이어 MoE (8 experts × top-2) | Mixtral 8x7B |
| expert | arch_expert_striped_hyena |
Hyena + Attention 4:1, 128K context | StripedHyena |
| expert | arch_expert_blackmamba_moe |
Mamba + MoE (비-attn 믹서에 MoE) | BlackMamba, MoE-Mamba |
| expert | arch_expert_deepseek_moe |
Fine-grained MoE (32 experts × top-3) | DeepSeek-V2/V3 |
| expert | arch_expert_retnet_moe |
RetNet + MoE (예측 조합, 논문 無) | Sun 2023 + MoE 외삽 |
| expert | arch_expert_frontier_full_moe |
Attention-free, multi-mixer + all-MoE (가장 실험적) | 복합 예측 |
| expert | arch_expert_progressive_stack |
깊이별 점진 복잡도: hyena→mamba→retnet→attn+MoE (논문 無) | 계층 구조 예측 |
| expert | arch_expert_dilated_longnet |
Temporal pyramid: mamba+sw(1K→4K→16K)+global+MoE (논문 無) | Longnet + Jamba 외삽 |
target_params 는 대부분 1–2B 범위에 맞춰져 있어, 같은 예산에서 어느 아키텍처가
어떤 장점을 가지는지 를 직접 비교할 수 있습니다.
단계별 진화의 핵심 아이디어
초급 → 중급으로 갈 때 바뀌는 것: 슬라이딩 윈도우 도입
arch_beginner_llama 는 모든 레이어에서 O(N²) 전역 attention 을 사용합니다. 이는
시퀀스 길이가 길어질수록 비용이 제곱으로 늘어난다는 뜻입니다. 중급 단계의
arch_intermediate_mistral 은 4 개 레이어 중 1 개만 전역 attention 을 유지하고, 나머지
3 개는 4096 토큰 크기의 슬라이딩 윈도우로 제한합니다. 이렇게 하면 전체 attention
KV 캐시 크기가 약 4 배 줄어들고, 긴 문맥 처리의 비용이 크게 낮아집니다.
중급 → 고급으로 갈 때 바뀌는 것: Attention 을 Mamba 로 교체
arch_advanced_jamba 는 레이어의 75% 를 Mamba2 SSM 으로 교체합니다. Mamba 는 O(N)
시간 복잡도를 가지므로 제곱 병목이 사라집니다. 나머지 25% 의 attention 은 "검색
앵커(retrieval anchor)" 역할을 맡아 in-context learning 능력을 유지시킵니다. 결과적으로
32K 토큰 같은 장문 처리가 실용적 수준이 되고 추론 처리량이 크게 올라갑니다.
고급 → 전문가로 갈 때 바뀌는 것: 여러 믹서 + MoE 결합
전문가 단계의 대표 프리셋인 arch_expert_research 는 EulerStack 의 4 개 믹서를 모두
한 스택에 섞고, attention 레이어에는 MoE FFN 을 추가합니다. 이 설계는 세 단계의
역할 분담을 갖습니다.
- Phase 1 (1-8 레이어): mamba + hyena — 효율적인 벌크 토큰 처리
- Phase 2 (9-24 레이어): mamba + retnet + attention/MoE — 깊은 추론 코어
- Phase 3 (25-32 레이어): attention/MoE + retnet — 출력 정제와 검색 앵커 보강
이런 조합은 실전 배포에 바로 쓰기 위한 것이라기보다는, "어떤 믹서와 MoE 조합이 가장 좋은가" 라는 연구 질문을 저렴하게 실험하기 위한 출발점입니다.
각 믹서의 내부 원리는 mixers/ 폴더의 문서들에서 더 자세히 설명합니다.
2. llm_ 프리셋 (실전 배포용, 24 개)
크기 5 개 (0.1B / 0.8B / 2B / 4B / 16B) × 변형 5 개 (simple / mistral / jamba / moe / mla) = 최대 25 개 중 24 개 (0.1B×MoE 제외). 각 변형이 어떤 상황에 어울리는지는 다음과 같습니다.
| Variant | 설명 | 어울리는 용도 |
|---|---|---|
simple |
순수 attention (Llama 스타일) | 가장 보편적. 모든 HF 도구와 호환 |
mistral |
attention + 슬라이딩 윈도우 | KV 캐시 절약이 중요할 때, 중간 길이 문맥(8–16K) |
jamba |
Mamba + attention 하이브리드 | 장문(32K+) 우선, 추론 처리량이 중요할 때 |
moe |
attention + MoE FFN (1-in-4) | 활성 compute 대비 모델 용량 극대화 |
크기별 조합표는 다음과 같습니다.
| Scale | simple | mistral | jamba | moe |
|---|---|---|---|---|
| 0.8B | llm_0p8b_simple |
llm_0p8b_mistral |
llm_0p8b_jamba |
llm_0p8b_moe |
| 2B | llm_2b_simple |
llm_2b_mistral |
llm_2b_jamba |
llm_2b_moe |
| 4B | llm_4b_simple |
llm_4b_mistral |
llm_4b_jamba |
llm_4b_moe |
| 16B | llm_16b_simple |
llm_16b_mistral |
llm_16b_jamba |
llm_16b_moe |
MoE 변형의 d_model 이 작은 이유
MoE 변형의 d_model 은 같은 크기의 simple 변형의 약 65% 수준입니다. 이는
의도적인 선택입니다. MoE 는 여러 expert(전문가) FFN 을 포함하므로, 같은 d_model
로 만들면 총 파라미터가 불필요하게 커집니다. d_model 을 줄여서 총 파라미터를
표기된 크기(0.8B, 2B 등)에 맞춘 것 입니다. 그 결과 활성 파라미터(각 토큰이 실제로
쓰는 파라미터)는 총 파라미터의 약 1/4 수준이 됩니다.
크기 선택의 자유
프리셋은 출발점일 뿐입니다. EulerStack 은 d_model, n_layers 를 바꾸는 것만으로
70B, 100B 이상의 모델도 어셈블할 수 있습니다. 필요하면 기존 프리셋을 복사해서
원하는 대로 수정하면 됩니다.
3. arch_expert_*_mini 프리셋 (소형 expert 실험용, 6 개)
전문가급 프리셋은 보통 2B 규모라서 개인 GPU 한 대로 돌리기 부담스럽습니다.
arch_expert_*_mini 는 같은 설계 아이디어를 12 레이어, d_model 384–512 수준으로
축소한 버전으로, 12–16 GB GPU 에서도 학습 가능합니다.
| 프리셋 | ~총 params | 핵심 포인트 |
|---|---|---|
arch_expert_progressive_stack_mini |
~86M | 가장 먼저 실험할 것. Zone 분리가 명확 |
arch_expert_blackmamba_moe_mini |
~156M | 부분 sparse MoE, 소형에서 가장 현실적 |
arch_expert_mixtral_moe_mini |
~175M | 고전적 MoE baseline |
arch_expert_dilated_longnet_mini |
~83M | 장문 pyramid (512→2K→8K) |
arch_expert_deepseek_moe_mini |
~357M | Fine-grained MoE 실패 모드 관찰용 |
arch_expert_frontier_full_moe_mini |
~106M | Attention-free + all-MoE, 가장 실험적 |
mini 의 설계 이유와 각 프리셋의 장단점은 08_expert_mini_walkthrough.md 에서 자세히 다룹니다.
프리셋 조회와 사용
설치 후 가장 먼저 해볼 명령은 전체 프리셋 목록 조회입니다.
# 전체 목록과 파라미터 추정치
eulerstack presets list
# 특정 프리셋의 상세 정보
eulerstack presets show arch_advanced_jamba
eulerstack presets show llm_4b_moe
# 언어를 바꿔서 보기
eulerstack --lang en presets show llm_2b_jamba
presets list 는 모든 프리셋의 이름, 추정 파라미터 수, 한 줄 요약을 표 형태로 출력합니다.
presets show 는 특정 프리셋의 레이어 스케줄, 믹서 설정, MoE 설정 등을 모두 보여줍니다.
검증, 컴파일, export 체인
프리셋을 실제로 사용하는 전형적인 흐름은 다음과 같습니다.
# 1) 검증 (realism 리포트 포함)
eulerstack validate --preset configs/presets/arch_advanced_jamba.yml --report
# 2) 구조 파악
eulerstack explain --preset configs/presets/arch_advanced_jamba.yml
# 3) JSON 런타임 config 로 컴파일 (검사/디버깅용)
eulerstack compile --preset configs/presets/arch_advanced_jamba.yml --print-config
# 4) HuggingFace 모델 디렉토리로 export (훈련 준비)
eulerstack compile --preset configs/presets/arch_advanced_jamba.yml --output-dir ./my_jamba
각 단계의 구체적인 설명은 튜토리얼 4: 컴파일과 설명 에서 이어집니다.
Python 에서 모델 로드
export 된 HuggingFace 모델은 표준 AutoModelForCausalLM 인터페이스로 바로 로드할
수 있습니다.
from transformers import AutoModelForCausalLM
from eulerstack.hf.auto_register import register_eulerstack_auto_classes
register_eulerstack_auto_classes()
# Llama / Mistral 로드와 동일한 방식
model = AutoModelForCausalLM.from_pretrained("./my_jamba", trust_remote_code=True)
print(model.config.d_model, model.config.n_layers)
실행 가능한 예제 스크립트는 examples/ 디렉토리 아래에서 찾을 수 있습니다.
examples/01_compile_and_export.pyexamples/02_load_and_generate.pyexamples/03_architecture_evolution.py— 4 단계 arch_ 프리셋 비교
다음 단계
- 튜토리얼 4: 컴파일과 설명 — explain / compile 자세히
- 튜토리얼 6: Sanity 훈련 — 모델이 실제로 학습되는지 확인
- 07_arch_walkthrough.md — 20 개 arch_ 프리셋 단계별 학습 (beginner 2 · intermediate 3 · advanced 5 · expert 10)
- 08_expert_mini_walkthrough.md — 6 개 expert mini 상세
- 09_new_primitives_walkthrough.md — v1 신규 Phase B primitive (MLA / R1 reasoning / Titans memory / MoD / dual-stream 등) 단계별 사용법
- 믹서 개요 — 각 믹서가 어떤 상황에서 좋은지