~14 min · mouse, history, llama.cpp, metal, open-weights, 2023
Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"Meta가 가중치를 발표한 지 2주, 가중치가 세상에 새어 나간 지 1주 만에 누군가 그걸 MacBook에서 돌렸어. 애플의 프레임워크는 아홉 달 뒤였고."
2023년 2월에서 3월
2023-02-24에 Meta가 LLaMA를 발표했어. 70억에서 650억 파라미터의 언어 모델 가족을 연구자들에게, 그리고 며칠 안에 모두에게 공개했어. 그 급에서 개인이 가중치를 손에 쥘 수 있는 첫 모델이었어. 2023-03-10에 llama.cpp라는 저장소가 나타났어. 선언된 목적은 그때도 지금도 "C/C++로 하는 LLM 추론"이고, README는 "애플 실리콘은 일급 시민 — ARM NEON, Accelerate, Metal 프레임워크로 최적화"라고 선언해. 처음엔 CPU에서 돌았어. Accelerate 프레임워크의 행렬 루틴을 써서. CPU 트랙의 숨은 코프로세서에, 애플이 그럴 수 있다고 말한 정확히 그 방법으로 닿은 거야. 2023-06-04에 저장소는 "llama : Metal inference"를 병합했고, 그날부터 모델의 디코드는 애플 GPU에서, GPU가 다른 모든 것과 나눠 쓰는 풀에서 가중치를 읽으며 돌았어.
이 순서에서 두 가지가 이 레슨의 요점이야. 첫째, 빨랐어. ChatGPT에서 노트북에서 돌릴 수 있는 공개 모델까지 100일, 발표에서 저장소까지 14일, 유출에서는 7일. 둘째, 애플이 아니었어. 애플 자체 프레임워크 MLX는 2023-11-28에 나타났어. llama.cpp보다 263일 뒤. PyPI의 첫 릴리스는 그 일주일 뒤고. 커뮤니티가 애플보다 먼저 맥을 찾아냈어. 애플의 공개된 문(Accelerate, 그다음 Metal)과 애플의 메모리 배치를 써서, 그리고 찾아낸 걸 보고했어. 어떤 소비자 그래픽 카드도 아예 담을 수 없을 때 65B 모델을 담고 쓸 만한 속도로 디코드하는 노트북.
물리 트랙의 용어로, 그들이 찾아낸 것
커뮤니티가 발견한 건 요령이 아니었어. 메모리 트랙과 물리 트랙을 경험적으로 발견한 거야. 4비트 65B 모델은 39 GB쯤이고, 64 GB M1 Max는 담고 24 GB 카드는 못 담아. 디코드는 대역폭에 묶여. M1 Max의 400 GB/s를 39 GB에 나누면 상한이 초당 10토큰 근처고, 읽는 속도야. llama.cpp가 발명한 양자화 형식, 4비트 가중치와 블록별 스케일을 가진 GGML과 나중의 GGUF 파일이 '들어간다'가 아예 성립하는 이유고, 이 퀘스트의 사다리가 4비트로 도는 이유야. 어느 것도 애플이 이미 출하하지 않은 걸 요구하지 않았어. ProRes를 위해 만든 모양이 모델이 원하는 모양이라는 걸 누군가 알아채는 게 필요했을 뿐이야.
커뮤니티의 런타임을 함대에서 돌리기
llama.cpp는 여전히 GPU로 가는 일급 문이고(GPU 트랙의 표), 이 퀘스트는 레슨을 정직하게 유지하려고 office에서 소스로 빌드해. 코드 블록이 그 빌드고, Metal을 켠 채로, GPU 백엔드가 있다는 걸 증명하는 명령 하나까지. 실험의 숫자는 MLX 것이야. 이 집이 돌리는 게 MLX니까. 같은 기계의 llama.cpp는 연습 문제고, 그 llama-bench는 이 퀘스트가 내내 잰 같은 두 단계를 보고해. 프롬프트 처리와 토큰 생성.
Code
Metal 백엔드로 커뮤니티의 런타임을 빌드하고, 문이 열렸음을 증명하기·bash
# office, 2026-09-15 — llama.cpp at commit 4c9233c (that day's master); Xcode 26.6; Homebrew cmake
git clone --depth 1 https://github.com/ggml-org/llama.cpp.git && cd llama.cpp
cmake -B build -DGGML_METAL=ON
cmake --build build --config Release -j 16 --target llama-bench llama-cli
# the GGUF model: llama.cpp's own format; a 4-bit Qwen3.5-9B is a ~5.7 GB download
hf download unsloth/Qwen3.5-9B-GGUF --include "*Q4_K_M*" --local-dir models/
# the benchmark: pp = prompt processing (prefill), tg = token generation (decode)
./build/bin/llama-bench -m models/Qwen3.5-9B-Q4_K_M.gguf -p 512 -n 128 -ngl 99
# office, M3 Ultra, build 4c9233c, 2026-09-15:
# | model | size | params | backend | test | t/s |
# | qwen35 9B Q4_K - Medium | 5.28 GiB | 8.95 B | MTL,BLAS | pp512 | 1175.85 ± 17.04 |
# | qwen35 9B Q4_K - Medium | 5.28 GiB | 8.95 B | MTL,BLAS | tg128 | 69.82 ± 0.42 |
# 'MTL' in the backend column is the whole point of this lesson.
# For scale: mlx-lm 0.31.3 on the same Mac and the same model family decoded at 95 tok/s (4-bit g64).
days.py — 논증을 만드는 간격들·python
#!/usr/bin/env python3
from datetime import date
chatgpt = date(2022, 11, 30) # OpenAI
llama = date(2023, 2, 24) # Meta: LLaMA announced (gated researcher release)
leak = date(2023, 3, 3) # the weights leak (press coverage that week)
llama_cpp = date(2023, 3, 10) # GitHub: repository created
metal = date(2023, 6, 4) # GitHub: 'llama : Metal inference' merged (#1642)
mlx = date(2023, 11, 28) # GitHub: MLX repository created
print(f"ChatGPT -> open weights (LLaMA): {(llama - chatgpt).days:4d} days")
print(f"LLaMA announced -> llama.cpp: {(llama_cpp - llama).days:4d} days")
print(f"weights leaked -> llama.cpp: {(llama_cpp - leak).days:4d} days")
print(f"llama.cpp -> decode on the Apple GPU: {(metal - llama_cpp).days:4d} days")
print(f"community runtime -> Apple's framework: {(mlx - llama_cpp).days:4d} days")
네 맥에서 Metal 백엔드로 llama.cpp를 빌드하고, 이미 MLX 형태로 가진 모델의 4비트 GGUF를 받아서 llama-bench를 -p 512 -n 128로 돌려. 그 pp와 tg 수치를 네 MLX 사다리 숫자 옆에 카드에 적어. 그다음 같은 풀에서 같은 가중치를 읽는 런타임 둘이 왜 다를 수 있는지, 그 차이를 물리 트랙의 어느 레슨이 설명하는지 한 문장으로 써.
Hint
토큰당 바이트도 버스도 같아. 그러니 차이는 토큰당 오버헤드와 커널 효율이야. 디코드 상한 레슨의 고정 항과 실효 대역폭 항. 가중치 하나하나를 정확히 한 번, 전폭으로 읽는 런타임이 디코드를 이기고, 커널을 덜 띄우는 런타임이 작은 모델을 이겨.
Progress
Progress is local-only — sign in to sync across devices.