Lumen 사이드 0편 – 시리즈 인덱스, 처음 펴는 분의 입구

Detailed shot of an open book emphasizing printed 1 1

지난 6주 동안 굴린 사이드 프로젝트를 10편짜리 시리즈로 정리했어요. Lumen이라는 LLM 추론 컴파일러를 Rust로 처음부터 짜본 기록을 교육 콘텐츠 형태로 풀었거든요. 처음 시리즈를 펴는 분이 어디부터 봐야 할지 막연할 수 있어서 이 0편을 입구 역할로 정리했어요.

ChatGPT 같은 AI 모델이 컴퓨터 안에서 정확히 어떻게 동작하는지, 그걸 빠르게 만드는 컴파일러를 어떻게 짜는지, 그 과정에서 어떤 측량 도구를 쓰는지를 단계별로 풀어 갑니다. 그리고 그 전 과정에 일관된 비유 하나를 적용했어요: 도시 한 채 짓기.

이 시리즈가 누구를 위한 글인지부터 풀어볼게요.

다양한 컬러 표지의 빈티지 책들

이 시리즈가 누구를 위한 글인가

  • LLM이 답을 어떻게 만드는지 막연한 분
  • “Rust 코드 봤는데 어렵다”는 분
  • 컴파일러 책을 펴고 절반 못 읽고 덮은 분
  • GitHub 매트멀 코드를 봤는데 “무슨 말인지 모르겠다”는 분
  • 사이드 프로젝트를 시작하려는데 무엇부터 짜야 할지 막막한 분

전공자 기준 학부 1~2학년 수준을 가정하고 썼습니다. 비유를 우선하고 코드는 최소로 두었어요. 시리즈의 추상적인 단어들이 실제 코드와 측량 데이터를 만나면 어떻게 구체적으로 보이는지가 이 시리즈의 핵심이에요.

저도 사이드 시작 전엔 LLM이 어떻게 동작하는지 막연했어요. Engineering a Compiler 같은 책 펴서 절반 못 읽고 덮은 기억도 있어요. 직접 짜보고 나서야 “아, 이게 그런 흐름이구나” 잡혔거든요. 이 시리즈가 그 잡힘을 책 100쪽 분량보다 짧게 전달하는 게 목표예요.

시리즈 일관 비유 – 도시 한 채 짓기

시리즈 전체에 건축(도시 짓기) 비유가 일관 적용돼 있어요. 추상적인 컴파일러 용어들이 시공 현장 용어로 풀리면 처음 공부하는 분이 머릿속에 그림으로 잡힙니다.

컴파일러/LLM 용어건축 비유
LLM 모델 (670MB)거대한 도시 청사진 (24개 동 × 5개 시설)
매트멀 (matmul)자재 운송 + 시공 작업
DSL → AST → IR → 어셈블리손 스케치 → 평면도 → 시공 도면 → 작업 지시서
JIT도착해서 현장 즉석 시공
SIMD1차선 vs 8차선 자재 운송 도로
FMA (곱셈+덧셈)자재 트럭에 결합제도 같이 싣기
4-accumulator정산 창고 4개로 분산
양자화 (Q8)mm 단위 청사진 → cm 단위 단순화
멀티스레딩한 동을 시공팀 8명이 분담
메모리 대역폭 한계한 우물에서 8명이 물 긷기
측정-주도 의사결정시공 전 지반 측량부터
KV cache1층 시공 결과 보관 창고

이 비유가 1편부터 10편까지 일관됩니다. 일부 챕터(1편 도입부, 7편 attention)에서는 인지 심리학(두뇌·칵테일 파티) 비유가 보조로 등장하지만, 시리즈의 주된 뼈대는 건축이에요.

10편 목차

각 편이 한 주제씩 독립적입니다. 그래도 순서대로 읽는 게 가장 자연스러워요. 앞편의 개념이 뒷편의 토대가 됩니다.

1편 – LLM이 답 만든다는 게 컴퓨터 입장에서 뭔지

ChatGPT가 답을 만드는 일이 컴퓨터 입장에서 정확히 무엇인지. AI 모델은 결국 거대한 곱셈표(670MB)이고, 답을 만든다는 건 그 곱셈표를 한 번 통과하는 일. 시간의 95%가 어디서 사라지는지, prefill과 decode가 무엇이 다른지.

핵심 비유: 모델 = 24개 동 × 5개 시설의 거대 도시 청사진 / 답 = 청사진 한 번 통과해서 다음 단어 1개 고르기

2편 – 표준 도구 두고 왜 컴파일러를 직접 짰나

llama.cpp(ggml)라는 표준 도구가 이미 있는데도 처음부터 다시 짠 이유. 효율로 따지면 잘못된 결정이지만 학습 자산으로 보면 옳은 결정인 이유. 책으로 배우는 지식과 직접 짠 지식이 어떻게 다른지. 9개월 흐지부지 끝낸 사이드들이 가르쳐 준 것까지.

핵심 비유: 거대 건설사 외주 vs 작은 건축가가 자기 도시 직접 짓기

3편 – 컴파일러가 코드를 어셈블리로 바꾸는 4단계

컴파일러가 사람이 쓴 코드를 어셈블리로 변환하는 4단계. DSL, AST, IR이 정확히 뭐고 왜 필요한지. 추상적 단어들 같지만 실제로는 시공 도면 그리는 4단계와 똑같은 구조.

핵심 비유: 손 스케치 → 구조 평면도(AST) → 시공 도면(IR) → 현장 작업 지시서

4편 – JIT, 컴퓨터가 자기 자신을 위한 코드를 짜는 마법

일반 컴파일러와 달리 프로그램 실행 중에 어셈블리를 만들어 즉시 실행하는 JIT. “메모리에 코드를 쓰고 그걸 함수처럼 호출”이 어떻게 가능한지. 왜 LLM 추론에 잘 맞는지.

핵심 비유: 사전 계획 시공(AOT) vs 현장 도착해서 즉석 시공(JIT)

5편 – SIMD, 1차선 도로를 8차선으로 바꾸는 기술

CPU가 한 명령으로 여러 데이터를 동시 처리하는 SIMD 기술. AVX2, AVX-512가 무엇이고 매트멀이 빨라지는 진짜 원리. FMA(곱셈+덧셈) 명령과 4-accumulator 패턴까지. AMD Zen 4에서 AVX-512가 -4.5% 회귀한 일화도.

핵심 비유: 1차선 vs 8차선 자재 운송 도로, 정산 창고 4개로 분산

6편 – 양자화, 32비트를 8비트로 줄여도 답이 같은 이유

모델 weight를 32비트 float에서 8비트 정수로 압축해도 답이 거의 같은 이유. JPEG 사진 압축과 비슷한 아이디어인데 행렬에 적용한 것. Q8, Q4의 차이, fused matmul, VNNI 명령어까지.

핵심 비유: mm 단위 정밀 청사진 → cm 단위 단순화

7편 – Transformer 한 동 안에서 일어나는 일 8단계

1편에서 “한 동(棟)”이라 풀었던 것의 내부 동작. RMSNorm, Q/K/V 매트멀, RoPE, attention, FFN의 8단계가 어떻게 흐르는지. attention의 원리를 칵테일 파티 비유로 잠깐 풀고 다시 건축으로 돌아옵니다.

핵심 비유: 한 동의 8단계 시공 (RoPE = 자재 위치 표시판, attention = 칵테일 파티에서 자기 이름 듣기)

8편 – 8 코어인데 8배가 아닌 이유, 메모리 대역폭의 벽

8 코어 CPU에서 8 스레드 가속이 8배가 아닌 1.5배밖에 안 나오는 이유. 메모리 대역폭이 코어 수와 무관한 하드웨어 한계. ThreadPool 디자인, atomic counter 패턴.

핵심 비유: 한 우물에서 8명이 물 긷기, atomic counter = 번호표 발급기

9편 – 측정-주도 의사결정, 직관 11번 중 8번이 틀린 이유

시리즈 전반에서 자주 등장한 “측량으로 부정”, “11번 중 8번 부정”의 정체. 한 사이클이 정확히 어떤 모양이고, 왜 그 패턴이 사이드 프로젝트의 본질인지. 측량 인프라를 어떻게 짜야 하는지.

핵심 비유: 시공 전 지반 측량부터 — 신소재가 기후 만나면 변형

10편 – 6주 회고, v0.1에서 v0.5까지의 시공 일지

마지막 편. 시리즈 전반의 추상적 패턴이 실제 6주 사이드 프로젝트 안에서 어떻게 흘렀는지 시간 순으로. v0.1.0(첫 토큰)에서 v0.5.0(release-tagged)까지의 시공 일지. 무엇을 배웠는지.

핵심 비유: 빈 부지 측량 → 첫 동 입주 → 자재 운송 개선 → 신소재 실험 → 준공 도장

펜이 끼워진 사전

어디부터 읽어야 하나 – 추천 순서

가장 자연스러운 순서는 1편부터 차례로입니다. 1편이 큰 그림(도시 청사진 전체)이고 그 위에서 2~9편이 디테일을 채우고 10편이 시공 일지로 마무리.

다만 다음 패턴도 가능해요:

  • 컴파일러부터 궁금하다: 1편 → 3편 → 4편 → 5편
  • LLM 동작부터 궁금하다: 1편 → 7편 → 6편
  • 사이드 프로젝트 패턴부터 궁금하다: 2편 → 9편 → 10편
  • 빠르게 한 번 훑고 싶다: 각 편의 마지막 “정리” 섹션만 (총 30분 분량)

전체 본문은 약 14만 자, 천천히 읽으면 5~7시간 분량입니다.

이 시리즈가 다루지 않는 것

  • 학습(training) 과정 — 이 시리즈는 추론(inference)만 다룹니다
  • GPU/CUDA 가속 — 일반 CPU 위주
  • Rust 문법 — Rust 기본 문법을 알 필요는 없지만 모르면 일부 코드 예제가 어려울 수 있어요
  • 깊은 수학 — 행렬 곱셈 정도만 알면 충분
  • flash attention 같은 긴 컨텍스트 최적화 — 짧은 컨텍스트(32 단어) 위주

더 깊이 들어가고 싶다면

이 시리즈는 처음 공부하는 분 대상이라 깊이가 한정적입니다. 더 깊이 들어가고 싶으면.

Lumen 코드 자체

GitHub: github.com/redchupa/lumen

  • crates/lumen-dsl/: 렉서·파서 (3편 내용 — 손 스케치 → 평면도 변환기)
  • crates/lumen-ir/: IR 정의 (3편 내용 — 시공 도면)
  • crates/lumen-codegen/: SIMD 인코더 (4편, 5편 내용 — 작업 지시서 + 8차선 도로)
  • crates/lumen-jit/: JIT 캐시 (4편 내용 — 현장 즉석 시공)
  • crates/lumen-runtime/: 텐서 연산, ThreadPool (5편, 8편 내용 — 자재 운송 + 시공팀 관리)
  • crates/lumen-model/: GGUF 로더, transformer (6편, 7편 내용 — 청사진 로딩 + 한 동 시공)

각 crate 안의 단위 테스트가 실제로 어떻게 검증하는지 좋은 학습 자료입니다.

시리즈 GitHub markdown 원문

이 블로그 시리즈는 GitHub docs/tutorial에 markdown으로도 정리해 뒀어요. 블로그는 페르소나 톤으로 풀어 가는 버전이고, GitHub은 좀 더 공식 문서 톤이에요.

외부 자료 (이 시리즈 이후)

  • Engineering a Compiler (Cooper & Torczon) — 컴파일러 깊이 들어가기
  • High Performance Computing (Severance, O’Reilly) — SIMD, 캐시, 멀티스레딩
  • llama.cpp 소스 코드 — 진짜 production 양자화·매트멀 커널 패턴
  • Intel SDM (Software Developer’s Manual) — SIMD 명령어 디테일

마지막으로

이 시리즈의 진짜 메시지는 한 문장으로 줄이면 이거예요.

건축 책 100번 읽는 것과 직접 한 채 지어보는 것의 차이는 측량 데이터 한 줄에서 시작한다.

새 사이드 프로젝트 시작하시는 분이 첫 commit 다음에 “측량 코드”를 넣는 습관이 생긴다면 이 시리즈가 의미 있었다고 봅니다. 6주 후 부정 8번 + win 3번의 정직한 비율을 경험하면 그게 본인의 정직한 엔지니어링 자산이 됩니다.

저도 작년 가을부터 9개월 흐지부지된 사이드들 때문에 이번엔 진짜 끝까지 가보자고 마음먹고 시작했거든요. 6주에 결말 본 게 처음이었어요. 그 호흡이 어떻게 가능했는지가 시리즈 전반에 풀려 있어요. 분야가 달라도 패턴은 같이 적용 가능할 거예요.

새 프로젝트 시작하시면 화이팅. 1편으로 가시죠.

1편. LLM이 답 만든다는 게 컴퓨터 입장에서 뭔지

그동안 시리즈 따라와 주신 분들 감사해요. 댓글로 어느 편이 가장 도움 됐는지, 어떤 사이드 시작하시는지 알려주시면 응원할게요.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤