TRENDSHIFT 딥다이브 · 2026-06-27

antirez/ds4 딥다이브
— Redis 창시자가 C 언어로 직접 만든 DeepSeek V4 로컬 추론 엔진

Redis를 만든 Salvatore Sanfilippo(antirez)가 "llama.cpp를 쓰지 않고, 단 한 개 모델(DeepSeek V4 Flash/PRO)만을 위해" 순수 C로 밑바닥부터 쌓아 올린 GPU 추론 엔진. Metal(macOS)·CUDA(Linux)·ROCm(AMD Strix Halo) 세 백엔드를 모두 지원하며, SSD 스트리밍으로 VRAM보다 큰 모델도 구동하고, KV 캐시를 디스크에 체크포인트한다. (저장소: antirez/ds4 · 언어: C / Objective-C / Metal MSL / CUDA / ROCm · MIT 라이선스 · TrendShift Daily 상위권 · ※ 베타 품질 소프트웨어 — 프로덕션 사용 전 충분한 검증 필요)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항 · 설치
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 레포가 무엇을 하는 물건인가.

핵심 메시지

"스위스 아미 나이프(llama.cpp)가 있는데,
왜 일본 요리 전문 식칼(ds4)을 만드나?"
하나의 모델을 제대로 익히면, 그게 가장 날카롭기 때문이다.

ds4(DwarfStar)는 DeepSeek V4 Flash/PRO 전용 로컬 추론 엔진이다. llama.cpp처럼 수백 가지 모델을 돌릴 수는 없지만, 이 특정 MoE 아키텍처의 KV 캐시 구조·양자화 레이아웃·라우팅 패턴을 손으로 최적화했기 때문에 동급 하드웨어에서 더 빠른 토큰/초를 낸다.

Redis의 창시자 antirez가 주도한다는 점이 특이하다. 시스템 프로그래밍 철학("작고, 읽기 쉽고, 빠르게")이 그대로 이 코드베이스에 녹아 있다.

용어 카드
추론 엔진 (Inference Engine)
이미 학습이 끝난 AI 모델에게 입력(프롬프트)을 주고 출력(토큰)을 받아내는 소프트웨어. 학습(training)은 하지 않는다. ds4는 추론만 담당한다.
용어 카드
Metal / CUDA / ROCm
GPU 계산을 위한 프레임워크. Metal은 Apple Silicon(M 시리즈) Mac용, CUDA는 NVIDIA GPU용, ROCm은 AMD GPU용이다. ds4는 이 세 가지를 모두 지원한다.
용어 카드
양자화 (Quantization)
모델 가중치를 32비트 부동소수점 대신 2~8비트 정수로 압축하는 기법. 메모리가 줄어들고 연산이 빨라지지만 품질이 살짝 떨어진다. ds4의 기본 권장 포맷은 IQ2XXS(2비트) + Q2_K.

2왜 주목받는가

트렌딩 이유, 경쟁 제품 대비 장점.

ds4가 주목받는 첫 번째 이유는 antirez라는 이름이다. Redis를 C로 직접 만들어 수백만 서버에 배포된 인물이 LLM 추론 엔진을 밑바닥부터 쌓겠다고 선언하면, 커뮤니티는 주목할 수밖에 없다. 두 번째는 DeepSeek V4의 타이밍이다. 284B(Flash)~1.6T(PRO) 파라미터지만 MoE 구조 덕분에 실제 활성 파라미터는 13B~49B로 줄어, MacBook Pro M3 Max 128GB 같은 고사양 개인 장비에서 실행 가능한 첫 번째 준(準)-프론티어급 모델이 되었다. ds4는 이 기회를 노렸다.

함정 주의
llama.cpp와 단순 비교하면 안 된다

llama.cpp는 수백 개 모델을 지원하는 범용 런타임이다. ds4는 DeepSeek V4 Flash/PRO 전용이다. "llama.cpp보다 낫다"는 비교 자체가 틀렸다 — 목적이 다르다. ds4는 이 한 모델을 완벽하게 돌리겠다는 좁은 베팅이다. 내일 더 좋은 오픈 모델이 나오면 ds4는 대상 모델을 교체할 수도 있다고 README에서 솔직하게 밝힌다.

차별점
공식 로짓 벡터로 정확성 검증

ds4는 DeepSeek 공식 구현에서 얻은 로짓 벡터와 자체 출력을 비교하는 회귀 테스트를 유지한다. "빠르지만 틀린" 구현이 아니라, 정확성을 먼저 증명하고 속도를 더하는 설계 철학을 고수한다.

차별점
SSD 스트리밍 — VRAM이 부족해도 포기하지 않는다

모델이 RAM에 다 들어오지 않아도 SSD에서 스트리밍으로 전문가(Expert) 가중치를 로드하는 기능을 Metal에서 지원한다. MacBook 64GB에서도 96GB 모델을 (느리지만) 구동할 수 있다. 메모리를 "있다/없다"의 이분법이 아니라 속도 스펙트럼으로 보는 관점 전환이다.

차별점
분산 추론 — Thunderbolt 5로 두 Mac을 하나로

두 대의 MacBook을 Thunderbolt 5 케이블로 연결해 모델 레이어를 분할, 단일 머신에는 올릴 수 없는 전체 PRO Q4(약 2TB급) 모델을 두 대의 Mac Studio(각 512GB)로 운용하는 것도 지원한다. 프리필(prefill)에서는 파이프라인 병렬성으로 최대 1.85배 속도 향상도 측정됐다.

3기술 스택 전체 지도

C 코어 / GPU 백엔드 3종 / 빌드 / 모델 포맷 상세.

레이어기술역할파일
코어 엔진C99GGUF 로딩, 토크나이저, KV 캐시, 샘플링, 세션 관리ds4.c (27k줄), ds4.h
Metal 백엔드Objective-C + Metal MSLmacOS Apple Silicon GPU 커널 실행, no-copy MTLBuffer mmapds4_metal.m (26k줄), metal/*.metal (20개)
CUDA 백엔드CUDA C++NVIDIA GPU 커널, DGX Spark / GB10 전용 최적화ds4_cuda.cu (13k줄)
ROCm 백엔드HIP / ROCmAMD Strix Halo(gfx1151) GPU, rocWMMA 행렬 연산ds4_rocm.cu, rocm/*.cuh (23개)
HTTP 서버C (내장 HTTP)OpenAI/Anthropic 호환 REST API, 스트리밍 SSEds4_server.c (15k줄)
CLI / REPLC + linenoise대화형 터미널 인터페이스, /read /think 명령ds4_cli.c, linenoise.c
코딩 에이전트C내장 코딩 에이전트, API 경계 없이 세션 직접 접근ds4_agent.c (10k줄)
KV 저장소C + rax(기수트리)서버 KV 캐시 디스크 체크포인트, 세션 복원ds4_kvstore.c, rax.c
SSD 스트리밍CVRAM 부족 시 GGUF에서 Expert 가중치 온디맨드 로드ds4_ssd.c
분산 추론C + TCP레이어 분할 멀티머신 추론, HELLO/WORK 프레임 프로토콜ds4_distributed.c (8k줄)
GGUF 도구C + Python양자화, imatrix 생성, 품질 비교, mixed expert 스플라이싱gguf-tools/ 하위
벤치마크C컨텍스트 프론티어별 prefill/generation t/s 측정, CSV 출력ds4_bench.c
모델 포맷GGUF (전용 레이아웃)antirez 제공 HF 저장소의 전용 텐서 레이아웃만 허용huggingface.co/antirez/deepseek-v4-gguf
빌드GNU MakemacOS/Linux 크로스 타겟 빌드 (Metal/CUDA/ROCm/CPU)Makefile
방향성 조종C + 벡터 파일활성화 공간에 벡터를 더해 모델 출력 성향을 유도dir-steering/
비유로 이해하기

ds4 = 전용 사출 금형이고, DeepSeek V4 Flash는 그 금형으로만 찍어내는 제품이다. 범용 3D 프린터(llama.cpp)는 무엇이든 만들 수 있지만 느리다. 전용 금형은 하나만 만들 수 있지만 속도와 완성도가 다르다.

4아키텍처 심화 분석

ASCII 시스템 구조도 + 핵심 설계 패턴.

전체 추론 파이프라인

사용자 프롬프트 (텍스트) │ ▼ ┌─────────────────────────────────┐ │ 토크나이저 │ ds4.c │ 텍스트 → 토큰 ID 배열 │ (BPE, DeepSeek 어휘 33K) └──────────────┬──────────────────┘ │ token[] ▼ ┌─────────────────────────────────┐ │ 세션 동기화 │ ds4_session_sync() │ 기존 KV 캐시와 비교 → 재사용 │ (접두사 매칭, 디스크 체크포인트) └──────────────┬──────────────────┘ │ ┌────────┴────────┐ │ │ ▼ ▼ [프리필 경로] [디코딩 경로] 4096토큰 청크 토큰 1개씩 병렬 처리 자기회귀 생성 │ │ └────────┬────────┘ │ ▼ ┌─────────────────────────────────┐ │ GPU 백엔드 선택 │ │ Metal(macOS) / CUDA / ROCm │ └──────────────┬──────────────────┘ │ ┌─────────┴──────────┐ │ │ ▼ ▼ [전체 모델 상주] [SSD 스트리밍] MTLBuffer mmap Expert 가중치를 GPU 직접 접근 캐시 적중/미스 관리 │ │ └─────────┬──────────┘ │ ▼ ┌─────────────────────────────────┐ │ Transformer 레이어 × 43 │ DeepSeek V4 Flash 기준 │ │ │ ┌──────────────────────────┐ │ │ │ RMSNorm → Attention │ │ │ │ - Raw 슬라이딩윈도(128토큰)│ │ │ │ - 압축 KV (ratio 4/128) │ │ │ │ - Indexer top-k=512 │ │ │ └──────────────────────────┘ │ │ ┌──────────────────────────┐ │ │ │ MoE FFN │ │ │ │ - 라우터 → Top-K 전문가 선택│ │ │ │ - 공유 전문가(항상 활성) │ │ │ │ - SwiGLU 활성화 │ │ │ └──────────────────────────┘ │ └──────────────┬──────────────────┘ │ logits (어휘 크기) ▼ ┌─────────────────────────────────┐ │ 샘플링 │ │ temperature / top-p / min-p │ │ → 다음 토큰 1개 선택 │ └──────────────┬──────────────────┘ │ ▼ 생성된 토큰 → 다시 디코딩 루프

핵심 설계 패턴 1: mmap 기반 무복사 로딩

ds4.c의 엔진 코드는 GGUF 파일 전체를 RAM으로 복사하지 않는다. 대신 mmap()으로 파일을 주소 공간에 매핑한다. Metal 백엔드에서는 이 mmap 포인터를 MTLBuffer로 직접 래핑(no-copy)해 GPU에 바로 전달한다. 결과적으로 80GB 모델을 로드해도 실제 RAM 복사가 발생하지 않고, 페이지 캐시가 알아서 필요한 부분만 로드한다.

핵심 설계 패턴 2: 압축 KV 캐시 (CSA/HCA)

DeepSeek V4의 독특한 KV 캐시 설계를 ds4가 완벽하게 구현한다. 표준 트랜스포머는 모든 토큰의 KV를 저장해 컨텍스트 길이에 비례해 메모리가 폭발한다. DeepSeek V4는 시간 축 압축을 사용한다.

레이어 0, 1: Raw 슬라이딩 윈도 128토큰만 [tok_n-127][tok_n-126]...[tok_n] 짝수 레이어 (2, 4, 6...): ratio-4 압축 + Indexer 압축 KV: 4개 토큰 → 1개 행 (공간 1/4) Indexer: 512개 가장 관련성 높은 압축 행을 선택 홀수 레이어 (3, 5, 7...): ratio-128 압축 압축 KV: 128개 토큰 → 1개 행 (공간 1/128) → 이 덕분에 1M 토큰 컨텍스트가 가능

핵심 설계 패턴 3: SSD 스트리밍

MoE 모델의 특성상 전체 가중치 중 "라우팅된 전문가"가 대용량을 차지한다. ds4의 SSD 스트리밍은 이 전문가 가중치를 GGUF에서 온디맨드로 읽되, 공유 전문가 계산 시간을 활용해 다음 라우팅 전문가를 미리 로드(prefetch)한다. 캐시 미스 페널티를 숨기는 전형적인 레이턴시 히딩 기법이다.

핵심 설계 패턴 4: 분산 추론 프로토콜

[Coordinator (머신 A)] [Worker (머신 B)] GGUF: 레이어 0-30만 로드 GGUF: 레이어 31-output 로드 │ │ │ 1. HELLO 등록 (레이어 범위 등) │ │◄───────────────────────────────────│ │ │ │ 2. WORK 프레임 전송 │ │ (세션 ID, 토큰 위치, 활성화 값) │ │───────────────────────────────────►│ │ │ │ 3. RESULT 프레임 반환 │ │ (로짓 또는 ACK) │ │◄───────────────────────────────────│ │ 샘플링 → 다음 토큰

5디렉토리 구조 해부

파일 하나하나가 어떤 역할을 하는지.

ds4/ ├── ds4.c 핵심 엔진 (27k줄) — GGUF 로딩/토크나이저/KV 캐시 │ CPU 레퍼런스 커널 / Metal 그래프 드라이버 ├── ds4.h 공개 API — ds4_engine, ds4_session, 옵션 구조체 ├── ds4_metal.m Metal 백엔드 (26k줄) — Obj-C, MTLBuffer/Dispatch ├── ds4_cuda.cu CUDA 백엔드 (13k줄) — DGX Spark 전용 최적화 포함 ├── ds4_rocm.cu ROCm 진입점 (얇은 래퍼) ├── ds4_rocm.h ROCm API 헤더 ├── ds4_gpu.h Metal/CUDA/ROCm 공통 GPU 추상화 헤더 ├── ds4_server.c HTTP 서버 (15k줄) — OpenAI/Anthropic API 호환 ├── ds4_cli.c CLI REPL (1.7k줄) — 대화형 터미널 UI ├── ds4_agent.c 코딩 에이전트 (10k줄) — API 경계 없는 네이티브 에이전트 ├── ds4_bench.c 벤치마크 — 컨텍스트 프론티어별 t/s 측정 ├── ds4_eval.c 품질 평가 — 내장 92문항 QA로 회귀 테스트 ├── ds4_distributed.c 분산 추론 (8k줄) — TCP 기반 레이어 분할 프로토콜 ├── ds4_distributed.h 분산 추론 API ├── ds4_kvstore.c KV 저장소 — 서버 세션 디스크 체크포인트 ├── ds4_kvstore.h ├── ds4_ssd.c SSD 스트리밍 — Expert 온디맨드 로드 ├── ds4_ssd.h ├── ds4_web.c 웹 유틸리티 — HTTP 파싱/응답 헬퍼 ├── ds4_web.h ├── ds4_help.c --help 텍스트 / 도움말 출력 ├── ds4_help.h ├── linenoise.c 읽기 편한 터미널 입력 라이브러리 (antirez 제작) ├── linenoise.h ├── rax.c 기수 트리 (Radix Tree) 구현 — KV 저장소 색인 ├── rax.h ├── rax_malloc.h ├── Makefile Metal/CUDA/ROCm/CPU 멀티타겟 빌드 ├── download_model.sh HuggingFace GGUF 다운로드 스크립트 ├── README.md 주 문서 (상세 옵션/성능 수치 포함) ├── MODEL_CARD.md DeepSeek V4 모델 카드 요약 ├── STRIXHALO.md AMD Strix Halo ROCm 설정 가이드 ├── AGENT.md AI 에이전트용 코드베이스 가이드 (GPT 5.5 협업!) ├── CONTRIBUTING.md 기여자 테스트/회귀 체크 가이드 ├── QA_BEFORE_RELEASES.md 릴리스 전 QA 체크리스트 │ ├── metal/ Metal Shader 커널 (20개 .metal 파일) │ ├── flash_attn.metal 어텐션 커널 │ ├── moe.metal MoE 전문가 라우팅/연산 │ ├── dsv4_kv.metal DeepSeek V4 압축 KV 캐시 커널 │ ├── dsv4_hc.metal mHC(Manifold-Constrained Hyper-Connections) │ ├── dsv4_rope.metal RoPE 위치 인코딩 │ ├── norm.metal RMSNorm 정규화 │ ├── glu.metal SwiGLU 활성화 함수 │ └── ... 기타 행렬 연산 커널 │ ├── rocm/ ROCm/HIP 헤더 (23개 .cuh 파일) │ ├── ds4_rocm_attention.cuh │ ├── ds4_rocm_moe.cuh │ ├── ds4_rocm_hc.cuh │ └── ... │ ├── gguf-tools/ GGUF 오프라인 도구 │ ├── deepseek4-quantize.c DeepSeek V4 전용 양자화기 │ ├── quants.c / quants.h 양자화 테이블 구현 │ ├── imatrix/ imatrix(중요도 행렬) 수집 도구 │ ├── mixed/ 혼합 Expert 레이어 스플라이싱 │ └── quality-testing/ 공식 출력 대비 품질 점수 측정 │ ├── dir-steering/ 방향성 조종 — 활성화 벡터 생성/적용 ├── speed-bench/ 벤치마크 데이터/차트 (promessi_sposi.txt 포함) └── tests/ 회귀 테스트 벡터 및 단위 테스트
비유로 이해하기

ds4.c는 엔진 블록이다. 여기서 GGUF 파일을 읽고, 토크나이저를 초기화하고, Metal/CUDA/ROCm에 GPU 작업을 위임한다. ds4_server.c는 서비스 창구이고 ds4_cli.c는 정비사 핸들이다. 커널(metal/*.metal, rocm/*.cuh)은 실제로 GPU 위에서 돌아가는 어셈블리급 최적화 코드다.

6학습 포인트 (기술별)

저수준 추론 / GPU 커널 / C 시스템 프로그래밍 배울 것.

C 시스템 프로그래밍

ds4.c는 C99 표준 코드다. mmap()·mlock()·pthread·posix_memalign()같은 POSIX API를 실전에서 어떻게 쓰는지 볼 수 있다. antirez의 코딩 스타일—작은 함수, 명확한 변수명, 과도한 추상화 거부—을 직접 체감할 수 있는 희귀한 코드베이스다.

GGUF 파일 포맷 이해

GGUF는 llama.cpp에서 표준화한 LLM 가중치 파일 포맷이다. ds4는 직접 GGUF 파서를 구현한다. 헤더·메타데이터·텐서 디렉토리를 어떻게 읽는지, 텐서 타입(IQ2XXS·Q2_K·Q4_K·FP8 등)별 블록 구조가 어떻게 다른지 소스 코드로 배울 수 있다.

Metal GPU 프로그래밍

metal/ 폴더의 .metal 파일은 GLSL과 유사한 Metal Shading Language(MSL)로 작성된 GPU 커널이다. 행렬 곱(dense.metal), 어텐션(flash_attn.metal), MoE 라우팅(moe.metal)이 실제로 어떻게 threadgroup/simdgroup을 사용하는지 볼 수 있다.

MoE 아키텍처 실 구현

DeepSeek V4는 Mixture of Experts(MoE) 모델이다. 입력마다 소수의 "전문가"만 활성화된다. ds4 코드에서 라우터가 어떻게 top-K 전문가를 선택하고, 활성화된 전문가 가중치만 연산하는지 C와 Metal 코드 레벨에서 추적할 수 있다.

KV 캐시 관리

LLM에서 가장 비싼 메모리가 KV 캐시다. ds4는 세션 간 KV 재사용, 디스크 체크포인트(snapshot), 접두사 매칭 최적화를 직접 구현한다. 컨텍스트가 길어질수록 어떻게 메모리를 관리하는지 실 코드로 배울 수 있다.

실습 아이디어

실습

GGUF 파서 직접 읽기

ds4.c의 GGUF 로딩 부분(1857~2100 라인 근처)을 읽고, 간단한 Python 스크립트로 동일한 GGUF 메타데이터를 파싱해 ds4 출력과 비교해 보자.

실습

Metal 커널 추적

metal/norm.metal(RMSNorm)을 읽고 동일한 연산을 CPU Python NumPy로 구현해 봄으로써 GPU 커널과 레퍼런스 구현의 관계를 이해해 보자.

7시스템 요구사항 · 설치

GPU / OS 요구사항 표 + 빌드 명령.

백엔드OS하드웨어최소 RAM권장 모델
MetalmacOSApple Silicon M2~M5 (M3 Max 이상 권장)96GB+q2-imatrix (Flash)
Metal (SSD 스트리밍)macOSApple Silicon64GBq2-imatrix (느림)
Metal (PRO 모델)macOSMac Studio M3 Ultra512GBpro-q2-imatrix
CUDALinuxNVIDIA DGX Spark / GB10 / 기타 CUDA GPU128GBq2-imatrix
ROCmUbuntu 26.04AMD Strix Halo (gfx1151, Framework Desktop 등)128GBq2-imatrix
CPU (진단용)Linux (macOS 비권장)모든 CPURAM = 모델 크기테스트용 only
함정 주의
macOS CPU 모드는 커널 크래시 위험

README가 명시한다: 현재 macOS 버전에는 가상 메모리 구현 버그가 있어 CPU 모드로 대형 모델을 추론하면 커널이 패닉을 일으켜 재부팅이 필요하다. macOS에서는 반드시 Metal 빌드를 사용해야 한다.

빌드 명령

# macOS (Metal 백엔드)
make

# Linux CUDA (DGX Spark / GB10)
make cuda-spark

# Linux CUDA (기타 CUDA GPU)
make cuda-generic

# AMD Strix Halo (ROCm)
make strix-halo

# CPU만 (디버그/진단용)
make cpu

모델 다운로드

# 96/128GB RAM 권장 (imatrix 최적화 2비트)
./download_model.sh q2-imatrix

# 96/128GB RAM, 마지막 6레이어 Q4 혼합
./download_model.sh q2-q4-imatrix

# 256GB+ RAM (4비트, 고품질)
./download_model.sh q4-imatrix

# 512GB RAM (PRO 모델 2비트)
./download_model.sh pro-q2-imatrix

실행 예시

# 기본 CLI 대화
./ds4 -m ./ds4flash.gguf

# SSD 스트리밍 (64GB MacBook)
./ds4 -m ./ds4flash.gguf --ssd-streaming --ctx 32768 --nothink

# HTTP 서버 (OpenAI 호환 API)
./ds4-server -m ./ds4flash.gguf --ctx 100000

# 코딩 에이전트
./ds4-agent --chdir /path/to/ds4

# GPU 발열/팬 소음 제어 (70% 사용)
./ds4 --power 70

8직접 해볼 수 있는 실습 과제

난이도별 3~5개 과제.

LV.1 — 입문

모델 다운로드 스크립트 분석

download_model.sh를 열고 curl을 이용한 HuggingFace 다운로드, 재개(resume) 로직, 심볼릭 링크 생성 방식을 분석해 보자. Bash 스크립트 실력을 키우는 좋은 출발점이다.

목표: curl -C - (재개 다운로드)와 HF_TOKEN 인증 처리 방식을 이해하고 유사한 스크립트를 직접 작성해 보기.
LV.2 — 초급

벤치마크 돌리고 CSV 분석

모델이 있는 환경이라면 ds4-bench를 다양한 컨텍스트 크기로 실행해 CSV를 생성한 후, Python의 pandas/matplotlib으로 시각화해 보자. "컨텍스트 길이 vs. prefill 속도" 그래프를 그려보는 것이 목표다.

./ds4-bench -m ds4flash.gguf --ctx-start 4096 --ctx-max 32768 --step-incr 4096 --gen-tokens 64
LV.3 — 중급

GGUF 헤더 파서 직접 구현

ds4.c의 GGUF 파싱 코드를 참고해 Python으로 GGUF 파일을 열고 메타데이터(어휘 크기, 레이어 수, 어텐션 헤드 수 등)를 출력하는 스크립트를 짜보자. 바이너리 파일 파싱과 llama.cpp 생태계 이해가 목표다.

힌트: GGUF는 매직 넘버 "GGUF"(4바이트) + 버전(uint32) + 텐서 수(uint64) + 메타데이터 KV 수(uint64)로 시작한다.
LV.4 — 고급

Metal 커널 수정 — RMSNorm epsilon 실험

metal/norm.metal을 열고 RMSNorm의 epsilon 값을 1e-6에서 1e-5, 1e-4로 바꿔 가며 빌드·실행해 보자. 수치 안정성이 모델 출력에 미치는 영향을 직접 체감할 수 있다. GPU 커널 수정 → 재빌드 → 동작 확인의 사이클을 몸에 익히는 것이 목표다.

주의: 커널 변경 후 make로 재빌드하면 Metal은 런타임에 컴파일되므로 빌드 오류는 실행 시점에 나타날 수 있다.
LV.5 — 심화

두 머신 분산 추론 설정

Mac이 두 대 있다면 Thunderbolt나 이더넷으로 연결하고 coordinator/worker로 나눠 분산 추론을 설정해 보자. 레이어 분할 전략(0:N vs N:output)에 따른 prefill/generation 속도 변화를 측정하고, ds4_distributed.c의 HELLO/WORK/RESULT 프로토콜 흐름을 코드에서 추적해 보자.

측정 지표: prefill t/s 향상 비율, generation t/s 감소 비율, 링크 레이턴시 영향.

9관련 기술 심화 학습 로드맵

주차별 학습 경로.

주차주제학습 내용실습
1주차C 언어 기초포인터, 구조체, malloc/free, 파일 I/O, Makefile간단한 GGUF 메타데이터 파서 Python으로 작성
2주차Transformer 구조Self-Attention, MLP, RMSNorm, RoPE 위치 인코딩 수식 이해PyTorch로 최소 GPT-2 포워드 패스 구현
3주차MoE 아키텍처라우터, Top-K Expert 선택, 부하 균형, SwiGLU 활성화SwitchTransformer 논문 읽고 간단한 MoE 구현
4주차양자화 기초INT8/INT4 양자화, 블록 양자화(Q4_K, IQ2_XXS), calibrationllama.cpp의 quantize 소스 코드 읽기
5주차KV 캐시 설계KV 재사용, sliding window, prefix caching, GQAds4.c KV 캐시 코드 추적, 세션 복원 실험
6주차Metal / CUDA 기초GPU 스레드 계층(threadgroup/warp), 공유 메모리, atomic 연산간단한 벡터 덧셈 Metal 커널 직접 작성
7주차Attention 커널 최적화Flash Attention 알고리즘, tiled matmul, softmax 수치 안정성flash_attn.metal 코드 분석 + FlashAttention 논문 읽기
8주차시스템 최적화mmap, mlock, prefetch, 레이턴시 히딩, 분산 통신ds4_distributed.c WORK 프레임 처리 흐름 추적

10핵심 키워드 사전

이 레포를 읽으며 만나는 용어 정리.

키워드한글 설명
GGUFllama.cpp 생태계의 표준 LLM 가중치 파일 포맷. 헤더/메타데이터/텐서를 하나의 파일에 담는다.
MoE (Mixture of Experts)입력마다 전체 전문가(FFN 층) 중 소수만 활성화하는 구조. 전체 파라미터 수는 많지만 실제 연산은 적다.
IQ2XXS / Q2_K2비트 양자화 포맷. 전문가(MoE Expert) 가중치에만 적용해 크기를 극단적으로 줄인다. ds4 기본 권장 포맷.
imatrix (Importance Matrix)양자화 시 중요한 가중치를 더 정밀하게 보존하도록 돕는 교정 행렬. imatrix 버전이 품질이 높다.
mmap파일을 메모리 주소 공간에 매핑하는 POSIX 시스템 콜. 복사 없이 파일을 RAM처럼 읽을 수 있다.
MTLBufferMetal(Apple GPU 프레임워크)의 GPU 메모리 버퍼. ds4는 mmap 포인터를 no-copy로 MTLBuffer로 래핑한다.
prefill / generationLLM 추론 두 단계. prefill은 전체 프롬프트를 한 번에 처리(병렬), generation은 토큰을 하나씩 생성(순차).
KV 캐시Attention 계산 시 이전 토큰의 Key/Value를 저장해 재계산을 피하는 캐시. 컨텍스트 길이에 비례해 커진다.
SSD 스트리밍모델이 RAM에 다 올라오지 않을 때, SSD에서 필요한 전문가 가중치를 온디맨드로 읽는 방식.
RoPE (Rotary Position Embedding)어텐션에서 토큰 위치를 인코딩하는 방식. 회전 행렬로 상대적 위치 관계를 표현한다.
RMSNorm레이어 정규화의 경량 버전. 평균 없이 제곱 평균만 사용해 연산이 빠르다.
SwiGLUSwish 함수와 GLU(Gated Linear Unit)를 결합한 활성화 함수. 현대 LLM FFN의 표준.
Flash Attention어텐션을 타일 단위로 나눠 GPU 고대역폭 메모리(HBM) 접근을 최소화하는 알고리즘. O(N²) 메모리를 피한다.
CSA / HCADeepSeek V4의 Compressed Sparse Attention / Heavily Compressed Attention. 시간 축 압축으로 1M 컨텍스트를 가능하게 한다.
mHC (Manifold-Constrained Hyper-Connections)레이어 간 신호 전파 안정성을 높이는 DeepSeek V4 고유 구조. ds4_metal.m에서 dsv4_hc.metal로 구현된다.
분산 추론 (Distributed Inference)여러 머신에 모델 레이어를 나눠 함께 추론하는 방식. 단일 머신에 올라오지 않는 대형 모델을 위한 해법.
directional steering모델 내부 활성화 벡터에 방향을 더해 출력 성향을 유도하는 기법. ds4는 이를 실험적으로 지원한다.
DwarfStards4의 공식 프로젝트명. README 첫 줄에 등장. 파일명/바이너리명은 ds4로 통일.
linenoiseantirez가 직접 만든 경량 읽기 편한 터미널 라인 입력 라이브러리. Redis에도 쓰인다.
raxantirez가 직접 만든 기수 트리(Radix Tree) 구현. ds4_kvstore의 키 색인으로 사용된다.

11참고 링크

출처 · 더 읽을 거리.