본문으로 건너뛰기

Transformer부터 Qwen 추론까지

Transformer의 핵심 수식과 Qwen2.5-Coder-7B-Instruct 순수 NumPy·Rust 추론 구현을 한 편에 연결한 기술 튜토리얼

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

이 글은 RNN·LSTM의 직렬 처리 한계를 출발점으로 Transformer의 Attention, Residual connection, Pre-Norm, Multi Head Attention, RoPE, KV cache가 LLM의 학습과 추론을 어떻게 구성하는지 수식과 구현으로 연결합니다. 이어 Qwen2.5-Coder-7B-Instruct의 28개 Layer, Hidden size 3584, 4개 KV head 구조를 순수 NumPy와 Rust로 읽고 실행하는 과정을 제시하며, GQA가 KV 캐시를 줄이고 SwiGLU가 FFN을 구성하는 방식을 코드 수준에서 다룹니다. 후반부에는 MoE, YARN, MLA, Sliding window attention, Multi Token Prediction, QK normalization과 Logit softcapping을 통해 정확도·메모리·문맥 길이·추론 비용을 조정하는 현대적 변형을 이어 붙입니다. 핵심은 Transformer의 병렬 학습 능력과 Attention 기반 문맥 선택이 여전히 주요 LLM의 중심이며, 실제 서비스에서는 KV cache와 행렬 연산 효율이 성능을 좌우한다는 점입니다.

섹션별 상세

01
이 글은 RNN과 LSTM이 이전 토큰을 순차적으로 처리해야 해서 대규모 말뭉치 학습에서 병목이 생겼던 배경에서 출발해 Transformer의 병렬 처리 구조를 연결합니다. Transformer는 Attention으로 각 토큰이 과거 토큰의 정보를 직접 조회하므로 순차 상태 하나에 모든 문맥을 압축하지 않아도 됩니다. 글은 이 구조를 토큰 임베딩과 위치 정보부터 최종 다음 토큰 생성까지 수식과 NumPy·Rust 구현으로 이어 갑니다.
02
Attention은 각 토큰에서 Query·Key·Value를 만들고 Query와 모든 Key의 내적을 √dmodel로 정규화한 뒤 Softmax 가중치로 Value를 합산합니다. Causal mask는 미래 위치에 −∞를 더해 Softmax 이후 해당 토큰을 참조하지 못하게 하며, 이 방식으로 학습 시 병렬 계산과 생성 시 인과성을 함께 유지합니다. Attention은 토큰마다 필요한 문맥을 동적으로 선택한다는 점에서 RNN의 단일 상태 벡터보다 유연한 표현을 제공합니다.
03
Transformer block은 Attention 뒤에 SwiGLU 기반 Feed Forward Network를 배치하고 두 지점에 Residual connection을 더합니다. FFN은 입력을 확장된 dff 공간에서 gate와 up 경로로 처리한 뒤 down projection으로 되돌리며, 글에서는 이 부분이 LLM 가중치의 일반적으로 약 70%를 차지한다고 설명합니다. Residual connection은 층을 거쳐도 입력 경로와 Gradient 흐름을 남기고, Pre-Norm은 정규화되지 않은 Residual 경로를 보존해 깊은 네트워크의 학습 안정성을 높입니다.
04
Multi Head Attention은 하나의 큰 Attention 표현을 h개의 작은 head로 나눠 서로 다른 문법·참조·토큰 관계를 병렬로 처리합니다. 각 head의 출력은 이어 붙인 뒤 W^O로 다시 혼합해 Residual stream 전체에 영향을 주도록 만들며, 작은 차원의 K·Q·V를 사용해 저장량과 연산량을 줄입니다. 글은 이 구조가 서로 독립적인 head의 병렬 실행에도 유리하다고 설명합니다.
05
위치 정보는 단순히 학습된 Position embedding을 토큰 임베딩에 더하는 대신 RoPE로 Query와 Key를 회전시켜 상대적 거리를 내적에 반영할 수 있습니다. RoPE는 각 임베딩 차원 쌍에 서로 다른 회전 주파수를 적용하며, 빠른 주파수의 aliasing과 느린 주파수의 구분력 저하를 함께 피하도록 주파수를 감쇠시킵니다. Qwen2.5-Coder-7B-Instruct는 head dimension 128과 RoPE base 1,000,000을 사용하고 split-half 방식으로 회전을 적용합니다.
06
다음 토큰 생성에서는 마지막 Transformer 표현을 LM Head에 통과시켜 vocabulary별 logits를 얻고 Softmax와 Sampling으로 토큰을 선택합니다. 새 토큰을 입력에 붙이는 과정을 반복하지만 이미 처리한 토큰의 K와 V는 KV cache에 저장해 다시 계산하지 않으며, 새 Query만 과거 KV와 비교합니다. 이 구조가 Autoregressive decoding의 계산을 줄이는 대신 긴 문맥에서 KV cache 메모리와 검색 비용을 주요 부담으로 만듭니다.
07
글은 Qwen2.5-Coder-7B-Instruct를 순수 NumPy와 Rust로 실행하는 구현을 제시합니다. 모델은 28개 Layer, Hidden size 3584, 28개 Query head, 4개 KV head, Head dimension 128, FFN size 18944를 사용하며, Safetensors shard에서 필요한 Weight를 읽고 Layer별로 해제해 메모리 사용량을 관리합니다. Rust 구현은 rayon으로 Matrix multiplication과 일부 벡터 연산을 병렬화하고, 예시 Prompt에서 Quicksort Python 코드를 생성하는 결과까지 연결합니다.
08
현대 LLM의 확장 기법으로 GQA, MoE, YARN, MLA, Sliding window attention, Multi Token Prediction이 이어집니다. GQA는 여러 Query head가 일부 KV head를 공유하고, MoE는 Gating network가 선택한 소수의 FFN Expert만 활성화하며, MLA는 저차원 KV 표현을 캐시해 저장량을 낮춥니다. YARN은 RoPE 주파수의 빠른 부분을 크게 바꾸지 않으면서 긴 문맥에 맞게 느린 부분을 조정하고, MTP는 별도 모듈로 여러 미래 토큰을 예측해 Speculative decoding을 지원합니다.
09
마지막 부분은 Encoder-only, Decoder-only, Encoder-decoder의 사용 범위를 구분하고 QK normalization과 Logit softcapping의 목적을 연결합니다. QK normalization은 깊은 Residual network에서 커지는 Query·Key 크기를 RMSNorm으로 제한해 Attention Softmax의 포화를 완화하며, Logit softcapping은 tanh로 LM Head logits를 일정 범위에 부드럽게 제한합니다. 글은 Transformer가 여전히 주요 LLM의 기반이지만 SSMs 같은 비Transformer 구조도 존재하며 다음 글에서 단일 프로세서와 GPU를 겨냥한 Inference engine을 다룰 계획이라고 끝맺습니다.

용어 해설

어텐션 메커니즘(Attention Mechanism)
각 토큰이 Query로 다른 토큰의 Key와 관련도를 계산하고, Softmax로 얻은 가중치에 따라 Value를 합산하는 구조입니다. 토큰마다 필요한 문맥을 동적으로 선택하면서도 전체 시퀀스의 계산을 병렬화할 수 있어 Transformer와 현대 LLM의 핵심 연산으로 쓰입니다.
KV 캐시(KV Cache)
Autoregressive decoding에서 이미 처리한 토큰의 Key와 Value를 저장해 다음 토큰 생성 때 재사용하는 메모리 구조입니다. 과거 토큰의 Query는 다시 필요하지 않으므로 K와 V만 보관하며, 반복적인 행렬 연산을 줄이는 대신 긴 문맥에서는 캐시 메모리 사용량이 병목이 됩니다.
회전 위치 임베딩(Rotary Position Embedding (RoPE))
토큰의 위치 정보를 벡터 쌍의 회전으로 인코딩하는 방식입니다. Query와 Key에 위치별 회전을 적용하면 두 벡터의 내적에 절대 위치가 상대적 거리 차이로 반영됩니다. 여러 회전 주파수를 사용해 가까운 토큰과 먼 토큰의 관계를 함께 표현합니다.
Grouped Query Attention(Grouped Query Attention (GQA))
여러 Query head가 소수의 Key·Value head를 공유하는 Attention 변형입니다. 각 Query head의 질의 표현은 유지하면서 KV 캐시의 저장 단위를 줄여 추론 메모리를 절약합니다. 글에서는 Multi Query Attention보다 정확도 저하가 작고 KV head와 Query head의 비율에 따라 50%에서 90%까지 메모리를 줄일 수 있다고 설명합니다.
Mixture of Experts(Mixture of Experts (MoE))
하나의 큰 FFN을 여러 개의 작은 Expert로 나누고, Gating network가 토큰마다 일부 Expert만 선택하는 구조입니다. 선택된 Expert의 출력을 가중합하므로 전체 파라미터를 늘리면서 토큰당 계산량은 제한할 수 있습니다. 특정 Expert로 라우팅이 쏠리는 문제를 완화하려면 학습 중 보조 손실이 필요합니다.
Multi-head Latent Attention(Multi-head Latent Attention (MLA))
Attention head마다 큰 K와 V를 저장하는 대신 각 레이어에서 저차원 KV 표현 하나를 캐시에 보관하는 방식입니다. Query에 head별 Up-projection을 흡수해 저차원 공간에서 Attention score를 계산하고, Value 변환도 같은 방식으로 재구성합니다. 글에서는 GQA보다 정확도와 메모리 효율이 모두 높으면서 속도는 유지된다는 경험적 결과를 전합니다.

기술

  • Python
  • Rust
  • numpy
  • rayon
  • Qwen2.5-Coder-7B-Instruct
  • HuggingFace Hub
  • transformers
  • safetensors

활용 사례

  • LLM architecture 학습
  • Qwen2.5-Coder-7B-Instruct 로컬 추론
  • NumPy 기반 LLM 구현
  • Rust 기반 병렬 추론 구현
  • KV cache를 활용한 Autoregressive decoding
  • 단일 GPU용 Inference engine 개발
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 18.수집 2026. 08. 18.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.