About

PyTorch・Hugging Face・Ollamaを同じ棚に並べるな — AIフレームワークは3層だ

何で計算するか・何でモデルを読み込むか・何で速く動かすか

「TransformerがMVCみたいなものなら、Railsの他にDjangoがあるように、Hugging Face以外にも何かあるよね?」

いい直感だが、答えは一行では出ない。AIの側は1層ではなく3層だからだ。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.

3つの層

基盤フレームワーク — 行列計算と学習のエンジン。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 1台なら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²を避けるための改造だ →