About

PyTorch · Hugging Face · Ollama 를 같은 선반에 놓지 마라 — AI 프레임워크는 세 층이다

무엇으로 계산하나 · 무엇으로 모델을 불러오나 · 무엇으로 빠르게 돌리나

「Transformer 가 MVC 같은 거라면, Rails 말고 Django 도 있듯이 Hugging Face 말고 다른 것도 있겠네?」

맞는 직관인데 답이 한 줄로 안 나온다. AI 쪽은 한 층이 아니라 세 층이기 때문이다. PyTorch 와 Hugging Face transformers 와 Ollama 를 한 선반에 놓고 비교하면 계속 헷갈린다. 이 글을 읽으면 처음 보는 AI 도구 이름이 나와도 몇 층인지 먼저 가르고, 같은 층 안에서 고를 수 있다.

Three layers, not one shelfInference enginellama.cpp / Ollama / vLLM / MLXPumaRails analogyModel libraryHF transformers / transformers.jsRailsRails analogyBase frameworkPyTorch / TensorFlow / JAXRuby + RackRails analogyCompare inside a layer. Ollama vs PyTorch is a category error.

세 층

기반 프레임워크 — 행렬 계산과 학습 엔진이다. PyTorch, TensorFlow, JAX. 모델을 처음부터 짜거나 학습시킬 때 쓴다.

모델 라이브러리 — 이미 있는 모델을 불러와 쓰게 해 준다. Hugging Face transformers(Python), transformers.js(JavaScript). 안에서는 기반 프레임워크(또는 ONNX Runtime)를 부른다.

추론 엔진 — 학습이 끝난 모델을 빠르게 돌리는 데만 집중한다. llama.cpp, vLLM, Ollama, MLX.

Rails 로 치면 기반 프레임워크가 Ruby · Rack, 모델 라이브러리가 Rails, 추론 엔진이 Puma 쯤이다. 「Rails 랑 Puma 중 뭐가 나아?」가 이상한 질문이듯, 「Ollama 랑 PyTorch 중 뭐가 나아?」도 이상한 질문이다.

층마다 다시 보면

이름 언어 층 잘하는 것 약한 것
PyTorch (Meta) Python (코어 C++) 기반 연구 · 산업에서 가장 많이 씀 직접 짜면 코드가 길다
TensorFlow / Keras (Google) Python 기반 모바일 배포 도구(TFLite) 새 모델 코드는 PyTorch 쪽이 먼저 나오는 일이 많다
JAX (Google) Python 기반 TPU, Gemini 학습에 쓰임 배우는 데 시간이 든다
HF transformers Python 모델 공개 모델 수, 파인튜닝까지 추론 속도는 전용 엔진보다 느리다
transformers.js JavaScript 모델 브라우저 · Node 에서 ONNX 로 실행 큰 모델은 무리
llama.cpp C/C++ 추론 GGUF, CPU · Mac 에서 LLM, 양자화 학습은 안 한다
Ollama Go 추론 ollama run 한 줄 세밀한 제어는 어렵다
vLLM Python 추론 동시 요청 처리량 GPU 서버가 필요하다
MLX (Apple) Python / Swift 추론 · 학습 Apple Silicon 에서 빠르다 Mac 전용

Ollama 는 README 에 지원 backend 로 llama.cpp 를 든다. 그래서 「Ollama 냐 llama.cpp 냐」는 같은 층 안에서 「편하게 쓸래, 직접 만질래」의 문제다.

언어는 사실상 Python

Python  ─ 전부 된다 (학습 · 파인튜닝 · 추론)
JS/TS   ─ transformers.js (ONNX). 브라우저에서 돌릴 수 있는 게 가장 큰 장점
C/C++   ─ llama.cpp, ONNX Runtime
Go      ─ Ollama 가 대표. 학습은 안 한다
Ruby    ─ 선택지가 적다. ONNX Runtime 을 감싼 gem 정도

이 블로그를 굴리는 쪽은 Rails 라서 이 마지막 줄에 계속 부딪혔다. Rails 프로젝트에서 로컬 모델을 쓰려면 결국 둘 중 하나다. Python 서버를 따로 띄우고 HTTP 로 부르거나, 모델을 ONNX 로 바꿔 부르거나. 브라우저에서 돌려도 되는 일이면 transformers.js 로 아예 서버를 안 거치는 길도 있다.

고르는 순서

학습이나 파인튜닝을 할 거면 기반 층에서 PyTorch, 그 위에 HF transformers. 남이 만든 모델을 그대로 쓸 거면 모델 라이브러리. 정해진 모델을 빨리 · 싸게 돌리는 게 목적이면 추론 엔진. 내 Mac 하나면 Ollama, 여럿이 동시에 쓰는 GPU 서버면 vLLM.

HF transformers 의 pipeline() 이 안에서 무엇을 하는지는 Hugging Face pipeline 은 어떻게 도나에 따로 풀어 뒀다. 같은 가중치를 브라우저용으로 다시 싸는 얘기는 ONNX 는 포장 규격이다에 있다.

Rails 같은 Python 밖의 스택에 로컬 모델을 붙이려는데 어느 층을 어디에 둘지 막혔다면 negabaro 에 물어봐도 된다. 우리도 이 구성을 직접 고민하면서 굴리고 있다.

핵심 개념

1

도구 이름이 나오면 먼저 층을 가른다 — 기반 · 모델 라이브러리 · 추론 엔진

2

비교는 같은 층 안에서만 한다 — Ollama vs vLLM 은 되고, Ollama vs PyTorch 는 안 된다

3

학습하면 PyTorch + HF transformers, 돌리기만 하면 추론 엔진

4

Rails 에서는 Python 서버를 따로 두거나 ONNX 로 부른다

사용 사례

사내 문서 임베딩을 Rails 앱에서 쓰기 — Python 임베딩 서버 + HTTP 개인 Mac 에서 LLM 시험 — Ollama 여러 사람이 쓰는 사내 LLM 서빙 — vLLM
← ONNX 는 모델이 아니라 포장 규격이다 — Xenova 는 BERT 를 만든 게 아니다 구조는 회로도, 가중치는 노브 위치 — 그리고 Attention 변형은 n² 을 피하려는 개조다 →