AI SYSTEMS ENGINEERING · 한국어 학습 노트
모델이 실행되는
시스템을 이해하기.
모델, 하드웨어, 워크로드.
세 가지 관점으로 공통 개념부터 추론·학습·RL까지 차근차근 연결합니다.
LEARNING PATH
작은 실행에서 시작하는 네 단계
공통
모델의 계산이 GPU 실행으로 이어지는 과정
추론
고정된 가중치로 요청을 효율적으로 처리하기
학습
Pretraining과 SFT, 한 GPU에서 여러 노드까지
RL
생성·평가·학습을 하나의 과정으로 연결하기
이곳에서는 Pretraining·SFT를 학습 과정으로, RL을 별도 과정으로 다룹니다. 일반적인 용어에서 SFT도 post-training에 포함됩니다.
ARTICLES
지금 읽을 수 있는 글
공통
모델
2026-09-09LLM의 전체 구조: 임베딩 층에서 LM Head까지
텍스트가 토큰 ID와 벡터를 거쳐 어휘별 점수로 바뀌는 흐름과 임베딩 층, 디코더 블록, LM Head의 역할을 살펴봅니다.
2026-09-09디코더 블록의 기본 흐름: Residual과 RMSNorm
Residual stream을 중심으로 디코더 블록의 구조를 살펴보고, d차원 벡터의 덧셈과 RMSNorm의 계산을 설명합니다.
2026-09-09Attention과 MLP: 토큰 사이의 정보와 토큰 내부의 변환
Attention과 MLP의 역할을 비교하고, 행렬 곱부터 기본 MLP와 Gated MLP의 내부 계산까지 살펴봅니다.
2026-09-09Attention의 projection: Q·K·V와 멀티 헤드
Q·K·V projection과 멀티 헤드의 구성을 살펴보고, 출력 projection이 같은 토큰의 여러 head 결과를 조합하는 과정을 설명합니다.
2026-09-09Core Attention: 토큰 사이의 정보 조합하기
Head별 Core Attention의 흐름을 따라 QKᵀ, 스케일링, Causal mask, Softmax, Value 가중합을 살펴봅니다.
2026-09-10RoPE: 토큰 위치를 Attention에 반영하기
Q와 K의 성분을 토큰 위치에 따라 회전하는 방법과, 상대 위치가 Attention 점수에 반영되는 과정을 살펴봅니다.
2026-09-10MoE: 토큰마다 사용할 MLP 선택하기
Dense MLP와 MoE를 비교하고, Router의 선택과 가중치 계산부터 Dispatch, Expert 계산, Combine, Shared expert까지 살펴봅니다.
2026-09-10모델 전체 흐름 다시 보기
Embedding부터 LM Head까지 구성 요소를 연결하고, Attention과 MLP·MoE의 역할과 토큰 사이의 정보가 합쳐지는 위치를 정리합니다.
2026-09-27MQA와 GQA: 여러 Query가 KV를 공유하기
MHA의 계산을 기준으로 MQA와 GQA의 KV 공유 방식을 비교하고, Query별 출력은 유지하면서 저장량을 줄이는 원리와 절충을 살펴봅니다.
2026-09-27MLA의 저장 구조: KV를 작은 잠재 벡터로 표현하기
공동 잠재 벡터로 헤드별 Key·Value를 표현하는 원리와 별도로 저장하는 위치용 Key를 살펴보고, 헤드 간 공유 범위와 KV 캐시 저장량을 계산합니다.
2026-09-27MLA의 계산: KV를 펼치지 않고 Attention하기
현재 Query로 잠재 KV 캐시를 읽는 과정을 살펴보고, Key 투영을 Query 쪽으로, Value 투영을 가중합 뒤로 옮겨 같은 결과를 얻는 원리를 설명합니다.
2026-09-27Local과 Sparse Attention: 읽을 토큰 범위 줄이기
Sparse Attention의 한 종류인 Sliding Window Attention부터 시작해, 고정된 연결 패턴과 층을 통한 정보 전달을 살펴보고 읽는 범위와 KV 캐시 보관량을 구별합니다.
2026-09-27Sparse Attention의 Indexer: 내용에 따라 읽을 위치 고르기
선택용 Query와 Key로 읽을 KV 위치를 고르는 원리를 살펴보고, 생성에 따른 선택 변화와 sliding window의 결합, 읽는 비용과 캐시 보관량을 구별합니다.
2026-09-27토큰 축 압축: 여러 위치의 KV를 요약해서 읽기
내용 투영과 점수 투영으로 요약 벡터를 만드는 과정을 따라가고, 완성된 요약과 최근 위치별 KV를 함께 읽는 이유 및 인덱서와의 결합을 설명합니다.
2026-09-27Linear Attention: KV를 고정 크기 상태에 누적하기
Softmax 대신 독립적인 특징 변환을 사용하는 이유부터, 외적으로 상태에 쓰고 Query로 읽는 과정과 점수 합을 이용한 정규화까지 설명합니다.
2026-09-28델타 규칙: 새 Value에 맞춰 상태의 연결 수정하기
KV를 기록하는 목적에서 출발해 단순 누적과 델타 규칙을 비교하고, Key로 기존 값을 확인하는 과정과 Query로 출력을 읽는 과정의 차이를 설명합니다.
2026-09-28GDN과 KDA: 기존 상태의 유지와 델타 보정
기존 상태를 남기는 유지율과 새 Value에 맞추는 보정 강도를 구분하고, GDN의 상태 갱신에서 KDA의 성분별 유지율과 입력에 따른 조절값 계산까지 살펴봅니다.
2026-09-28SSM: 이전 상태와 새 입력으로 문맥을 이어가기
Linear Attention과 상태 갱신 구조를 비교하고, SSM의 유지·기록·읽기 연산과 과거 입력의 영향이 남는 과정을 작은 수치 예시로 살펴봅니다.
2026-09-28Mamba: 입력에 따라 무엇을 기억할지 조절하기
입력에서 유지·기록·읽기 계수를 만드는 선택적 SSM의 계산과 Mamba 블록을 살펴보고, GDN·KDA의 델타 보정과 비교합니다.
2026-09-28하이브리드 모델: 상태와 Attention을 함께 쓰기
고정 크기 상태와 위치별 KV를 함께 사용하는 이유, 품질과 저장량의 절충을 살펴보고 한 토큰이 두 종류의 층을 지나는 과정을 따라갑니다.
2026-09-28HC와 mHC: Residual 경로를 넓히고 연결하기
여러 residual stream의 읽기·우회 혼합·쓰기를 같은 입력으로 추적하고, mHC가 반복 혼합에 제약을 두는 이유와 실행 비용을 살펴봅니다.
2026-09-28Gated Residual: 성분별로 읽고 원본에 나누어 쓰기
여러 branch를 유지하는 Gated Residual에서 정규화와 성분별 읽기 gate, branch별 scalar 쓰기를 구분하고 하나의 수치 예시로 연결합니다.
2026-09-28Attention Residuals: 지나온 층의 출력을 선택해서 읽기
과거 층의 새 출력을 보관하고 깊이별 비중으로 읽는 과정을 계산해 보고, 학습 Query와 Block 방식의 저장량·선택 단위 절충을 설명합니다.
2026-09-29층간 KV 공유: 앞선 층의 Key와 Value 재사용하기
여섯 층의 KV 저장량을 비교하고, 새 토큰의 Key와 Value를 다음 층에서 재사용하는 순서와 저장·계산의 절충을 설명합니다.
2026-09-29YOCO: 공통 KV를 만드는 층과 읽는 층 나누기
앞부분의 공통 KV를 뒷부분이 읽는 구조와 새 토큰의 처리 순서를 따라가며, 첫 출력에 불필요한 prefill 계산을 생략하는 이유를 설명합니다.
2026-09-29CED: 인과적 Encoder와 Decoder로 문맥 이어가기
생성 경로와 global·local KV의 출처를 비교하고, sparse 선택과 세 재사용 모드, 시퀀스 압축률, prefill 재계산의 관계를 설명합니다.
하드웨어
2026-09-10CPU와 GPU: 모델의 계산을 실행하는 두 장치
GPU를 사용하는 이유와 CPU·GPU의 구조 차이를 살펴보고, Host·Device의 실행 흐름과 데이터 공급의 중요성을 설명합니다.
2026-09-10GPU 구조: 연산 장치와 메모리
SM과 CUDA Core·Tensor Core, GPU 메모리의 구성을 살펴보고, 용량·대역폭·접근 지연을 모델 실행의 문제와 연결합니다.
2026-09-11모델 연산의 병렬성: 원소별 연산, Reduction, 행렬 곱
원소별 연산, reduction, 행렬 곱을 출력 요소의 독립성과 결과 하나에 필요한 입력·계산의 관점에서 비교합니다.
2026-09-11GPU의 병렬 실행: 스레드에서 워프 스케줄링까지
공통 계산 절차와 인덱스별 실행에서 출발해 스레드·블록·그리드, SM 배정, 워프 스케줄링과 지연 숨기기를 설명합니다.
2026-09-17CPU와 GPU가 함께 작업을 실행하는 방법
CPU의 작업 요청과 GPU의 실행을 구별하고, 버퍼·스트림·이벤트를 통해 데이터 준비와 완료 대기, 작업 사이의 실행 순서를 설명합니다.
2026-09-12GPU 최적화의 출발점: 산술 강도와 데이터 이동
메모리와 연산의 병목을 산술 강도와 Roofline으로 연결하고, 데이터 이동 감소·동시 진행과 원소별 연산 fusion의 원리를 설명합니다.
2026-09-12행렬 곱 최적화: 입력 재사용과 타일링
공유 메모리와 레지스터에서 입력을 재사용하는 방법, 타일 크기와 자원 사용량의 관계, 데이터 이동과 계산을 동시에 진행하는 원리를 살펴봅니다.
2026-09-12Attention 최적화가 어려운 이유
큰 점수·확률 행렬의 저장과 재읽기 비용을 살펴보고, 일부 점수만으로 Softmax의 최종 확률을 정할 수 없는 이유를 설명합니다.
2026-09-13점수를 나누어 처리하는 온라인 소프트맥스
수치 안정성을 위한 최댓값 처리와 지수합의 역할을 살펴보고, 새 점수 묶음에 따라 두 값을 유지·보정·갱신하는 온라인 소프트맥스의 원리를 설명합니다.
2026-09-14출력을 누적해 메모리 이동을 줄이는 FlashAttention
Value 가중합과 지수합을 함께 누적하는 원리를 살펴보고, FlashAttention-2의 타일 순회로 출력을 완성하며 큰 중간 행렬의 메모리 이동을 줄이는 과정을 설명합니다.
2026-09-14연산 최적화에서 모델 전체 성능으로
한 연산의 개선이 모델 전체 시간에 미치는 영향을 살펴보고, 병목을 다시 측정하며 최적화를 반복하는 과정과 성능 목표·메모리 용량에 따른 자원 확장을 설명합니다.
2026-09-14여러 GPU로 확장하기
여러 GPU의 연산 장치와 메모리를 살펴보고, 용량·응답 시간·처리량의 목표를 구분하며, 통신과 동기화에 따른 대기가 전체 실행 시간에 미치는 영향을 설명합니다.
2026-09-17GPU 사이에서 데이터를 전달하기
통신 참여자와 버퍼를 준비하고, CPU의 송수신 등록과 GPU 실행을 연결하며, 독립 계산의 동시 진행과 안전한 버퍼 재사용을 설명합니다.
2026-09-17GPU 통신을 수행하는 SM과 복사 엔진
통신을 수행하는 장치와 연결을 구별하고, 계산과의 자원 경쟁이 전체 완료 시간에 미치는 영향을 살펴봅니다.
2026-09-17서버 사이의 GPU 통신과 CPU의 역할
CPU 메모리의 중간 복사를 줄이는 전달 경로와, 전송의 진행을 돕는 CPU의 역할을 살펴봅니다.
2026-09-18집합 통신의 기본 동작
Send/Recv와 집합 통신의 차이에서 출발해 Broadcast, Scatter, Gather, Reduce의 입력과 결과를 살펴봅니다.
2026-09-18집합 통신의 조합과 확장
All-Gather, All-Reduce, Reduce-Scatter, All-to-All을 다음 계산에 필요한 데이터와 결과 배치로 이해합니다.
2026-09-18집합 통신은 어떻게 전달될까: Ring과 Tree
All-Reduce의 같은 결과를 Ring과 Tree로 만드는 과정을 따라가며, 단계 수·전달량·실제 연결이 통신 시간에 미치는 영향을 살펴봅니다.
2026-09-18DP: 모델을 복제해 입력 나누기
같은 모델을 여러 GPU에 복제해 입력을 나누고, 추론의 요청 분산과 학습의 기울기 동기화가 다른 이유를 설명합니다.
2026-09-18TP: 하나의 연산을 여러 GPU로 나누기
가중치의 열과 행을 나누는 방법을 살펴보고, FFN과 어텐션에서 두 분할을 연결해 중간 통신을 줄이는 원리를 설명합니다.
2026-09-18SP: TP와 함께 활성값 나누기
TP 사이에 남는 활성값의 중복을 줄이고, 토큰 분할과 특징 분할을 오가며 트랜스포머 레이어를 계산하는 방법을 살펴봅니다.
2026-09-18CP: 긴 문맥을 여러 GPU로 나누기
SP와의 차이를 살펴보고, Ring과 Ulysses가 GPU 사이의 정보를 연결해 어텐션을 완성하는 과정을 따라갑니다.
2026-09-18PP: 모델의 층을 나누어 실행하기
모델의 레이어를 여러 GPU에 배치하고, 같은 배치를 마이크로배치로 나누어 서로 다른 입력의 계산을 겹치는 과정을 살펴봅니다.
2026-09-18EP: Expert를 나누고 토큰 보내기
같은 GPU에서 어텐션에는 DP, Expert에는 EP를 적용하고, 토큰이 Expert로 흩어졌다가 원래 위치로 돌아오는 과정을 살펴봅니다.
2026-09-18여러 GPU를 어떻게 배치할까?
먼저 작업을 실행할 수 있게 모델을 나누고, 그 구성을 복제한 뒤, 응답 시간과 처리량에 맞춰 GPU 배치를 조정합니다.
추론
워크로드
2026-09-19추론과 KV 캐시
반복적인 토큰 생성에서 같은 계산이 되풀이되는 이유와 KV 캐시의 재사용 과정을 살펴보고, 출력 토큰 선택과 KV 계산의 경계를 구별합니다.
2026-09-19Prefill과 Decode
입력을 함께 처리하는 Prefill과 새 토큰을 하나씩 처리하는 Decode를 비교하고, 처리 토큰 수와 가중치 재사용이 GPU의 병목을 바꾸는 이유를 설명합니다.
2026-09-19배치와 스케줄링
정적 배칭의 한계에서 출발해 매 실행의 요청 구성을 바꾸는 과정을 살펴보고, 필요한 계산과 KV 공간을 확인하는 방법과 미사용 예약 공간의 문제를 설명합니다.
2026-09-19KV 캐시 관리와 PagedAttention
필요한 만큼 KV 블록을 배정하고, 흩어진 KV로 Attention을 계산하는 과정을 살펴봅니다. 같은 입력에서 여러 응답을 만들 때의 블록 공유와 Copy-on-write도 설명합니다.
2026-09-19KV 캐시가 부족할 때: 요청 중단과 재개
생성 중 KV 공간이 부족해지는 상황에서 일부 요청을 중단해 블록을 확보하고, 보존한 토큰 이력이나 KV로 요청을 재개하는 과정과 출력 지연을 살펴봅니다.
2026-09-19추론 성능 지표: 대기 시간과 처리량
한 요청의 기다림과 서버 전체 처리량을 측정하고, 평균에 가려진 출력 공백과 요청별 지연을 살펴본 뒤 지연 목표를 만족한 처리량인 Goodput으로 연결합니다.
RL
토큰 생성은 어떻게 강화학습의 행동이 되는가
미로에서 이동을 고르는 일과 LLM이 다음 토큰을 고르는 일을 비교하고, 여러 토큰으로 만든 응답에 보상이 붙는 과정을 살펴봅니다.
2026-09-25보상은 어떻게 토큰의 생성 확률을 바꾸는가
보상에서 구한 어드밴티지와 토큰의 로그확률을 연결한 뒤, 이전 데이터의 재사용을 위한 확률비와 clipping, 기준 정책을 유지하는 KL을 살펴봅니다.
2026-09-25그룹 비교와 Critic으로 어드밴티지 구하기
같은 질문의 응답을 비교하는 GRPO에서 시작해 critic의 예측과 어드밴티지 계산을 살펴보고, SAO와 FlashREINFORCE의 개별 rollout 학습으로 연결합니다.
2026-09-25교사의 확률에서 학습 신호 얻기: OPD
학생이 생성한 문맥에서 교사의 토큰 확률을 읽고, 그 차이를 토큰별 학습 신호로 바꾸는 on-policy distillation과 Miles의 결합 방식을 살펴봅니다.
2026-09-27RL과 OPD를 조합하는 학습 전략
DeepSeek V4의 전문 모델 학습과 OPD 통합에서 출발해, RL의 출발 정책을 준비하는 역할과 MiMo MOPD²의 교사·문맥 선택을 살펴봅니다.
2026-09-25LLM RL 시스템은 어떻게 연결되는가
경험을 생성해 학습기로 보내고, 새 가중치를 추론기로 돌려보내는 두 흐름을 따라 LLM RL 시스템의 역할과 데이터, GPU 배치를 살펴봅니다.
2026-09-25생성 기록을 학습으로 이어가기: TITO와 R3
TITO로 실제 토큰 ID를 보존하고, R3로 생성 당시 선택한 MoE 전문가를 학습에서도 사용하는 과정을 살펴봅니다.
2026-09-25RL에서 양자화를 사용하는 방법
생성 비용을 줄이는 양자화가 학습과 추론의 계산을 어떻게 바꾸는지, BF16 학습·FP8 추론과 공통 양자화의 두 구성으로 살펴봅니다.
2026-09-25생성 확률과 학습 확률이 달라지는 이유
계산 순서에 따른 차이를 줄이는 방법을 살펴보고, 남은 엔진 차이와 모델 버전 차이를 확률비로 다루는 원리를 설명합니다.
2026-09-25비동기 RL과 오래된 데이터
생성과 학습을 겹치는 비동기 RL에서 배포 버전이 어떻게 바뀌고, 생성 중이거나 버퍼에 쌓인 경험을 언제 제외하는지 살펴봅니다.
2026-09-25RL 롤아웃의 추론 최적화
공유 prefix의 KV 재사용, 길이가 다른 요청의 배치, speculative decoding과 MTP를 통해 RL 생성 비용을 줄이는 위치와 조건을 살펴봅니다.
2026-09-25에이전트 전체를 보고 스케줄링하기
모델 호출과 도구 실행을 잇는 프로그램의 상태를 추적하고, KV 보존과 재계산 사이에서 실행·일시중지·재배치를 결정하는 방법을 살펴봅니다.
2026-09-25새 가중치를 추론 엔진으로 전달하기
학습기와 추론기의 가중치 분할을 맞추고, 전송 경로를 선택하고, 일관된 새 정책으로 생성을 재개하는 과정을 살펴봅니다.
2026-09-28LLM RL 총정리: 토큰의 선택에서 시스템의 순환까지
13편의 핵심 그림을 따라, 토큰 확률을 바꾸는 학습부터 경험과 가중치가 오가는 시스템까지 30분 흐름으로 연결합니다.