본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

‘Dense’가 실제로 뜻하는 것

~10 min · dense, fundamentals, ffn

Level 0정찰자
0 XP0/41 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

모든 토큰이 모든 파라미터를 지나가

Dense 모델은 토큰마다 각 레이어의 모든 피드포워드 가중치를 활성화하는 디코더 전용 트랜스포머야. FFN 블록을 지날 때 라우팅이나 선택적 활성화 없이 모든 뉴런을 거쳐. 70B 모델이라면 모든 토큰과 위치, 모든 배치에서 70B 전체가 계산에 참여해.

정의에서 따라오는 세 가지

  • 전체 = 활성. 모델 카드에 적힌 파라미터 수가 토큰마다 쓰이는 파라미터 수와 같아.
  • 토큰당 연산량이 일정해. 흔한 단어와 복잡한 코드 토큰의 비용이 같아서 용량 계획은 토큰 수와 토큰당 비용의 곱으로 잡을 수 있어.
  • 활성 경로가 결정돼 있어. 입력과 가중치가 같으면 매번 같은 길을 지나므로 라우터 결정을 따로 디버깅할 필요가 없어.

포기하는 것과 지키는 것

Dense는 전체 파라미터를 키우면서 토큰당 연산량만 작게 유지할 수 없어. 파라미터를 두 배로 늘리면 FLOPs도 대략 두 배가 돼서 100B를 넘는 규모부터 비용이 가파르게 커져. 대신 단순한 구조, 쉬운 디버깅과 미세 조정, 성숙한 서빙 생태계를 얻어. vLLM, llama.cpp, MLX, TensorRT-LLM도 모두 Dense 지원부터 다져 왔어.

2026년에도 Dense가 강한 자리

30B보다 작은 규모에서는 라우터, 부하 균형, 전문가 병렬화 같은 MoE의 고정비가 연산 절감 효과를 삼키기 쉬워. 그래서 Llama 3 8B, Gemma 3 27B, Qwen3 14B·32B, Phi-4 14B, Mistral NeMo 12B 같은 중소형 오픈 가중치 모델은 여전히 Dense가 많아. 로컬 배포에서 메모리 사용량을 예측하고 양자화를 편하게 적용하려면 Dense가 안전한 기본값이야.

Code

PyTorch로 본 Dense FFN 블록의 표준 모양·python
import torch.nn as nn

class DenseFFN(nn.Module):
    def __init__(self, d_model, d_ffn):
        super().__init__()
        self.gate = nn.Linear(d_model, d_ffn, bias=False)
        self.up   = nn.Linear(d_model, d_ffn, bias=False)
        self.down = nn.Linear(d_ffn, d_model, bias=False)

    def forward(self, x):
        # SwiGLU-style — every token sees every weight, every time.
        return self.down(nn.functional.silu(self.gate(x)) * self.up(x))
Dense FFN 레이어 토큰당 FLOP 추정·python
def dense_ffn_flops_per_token(d_model, d_ffn):
    # gate, up: each d_model x d_ffn
    # down:        d_ffn x d_model
    # Forward pass is 3 matmuls of those shapes.
    return 2 * (3 * d_model * d_ffn)
# Example: Llama 3 70B has d_model=8192, d_ffn=28672
# -> ~1.4 GFLOP per token per layer, just in the FFN block.

External links

Exercise

Hugging Face에서 Llama 3 8B, Qwen3 4B, Phi-4 14B 같은 소형 Dense 모델 하나를 골라 config.json을 열어. d_model(hidden_size)과 d_ffn(intermediate_size)을 찾아 위 공식으로 토큰당 FFN FLOPs를 계산해. 여기에 num_hidden_layers를 곱하면 모델 전체의 토큰당 Dense FFN 연산량을 대략 구할 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.