はじめに
前回の記事では、モデルをより少ないメモリで動かすための「量子化」と、ローカルLLMでよく利用されるモデルファイル形式「GGUF」について整理しました。
ローカルLLMについて調べていると、
- llama.cpp
- Ollama
- MLX
- vLLM
など、モデルとは別の名前もよく登場します。
これらはLLMそのものではなく、LLMを実際に動かすためのソフトウェアです。
以前の記事でも「推論エンジン」という言葉に触れましたが、今回はもう少し詳しく、
- 推論エンジンとは何なのか
- モデルだけではなぜLLMを動かせないのか
- llama.cppとは何なのか
- Ollamaとは何なのか
- llama.cppとOllamaは何が違うのか
- GGUFとはどのような関係なのか
といった内容を中心に整理していきます。
モデルだけではLLMは動かない
これまでの記事では、QwenやLlama、GemmaなどのLLMモデルについて紹介してきました。
しかしモデルのファイルをPCに保存しただけではLLMと会話することはできません。
モデルは簡単に言えば、学習によって獲得した大量のパラメータを持ったデータです。
そのモデルを読み込み、入力された文章を処理し、実際に推論を行うソフトウェアが必要になります。
ユーザー
│
│ プロンプト
▼
推論エンジン
│
│ モデルを使って計算
▼
LLMモデル
│
▼
推論結果
│
▼
ユーザー
イメージすると、上記のような関係になります。
モデル
+
推論エンジン
↓
LLMを実行できる
シンプルに整理すると、このような関係です。
推論エンジンとは?
推論エンジンとは、学習済みのLLMモデルを読み込み、実際に推論を実行するためのソフトウェアです。
ユーザーからプロンプトを受け取ると、モデルを利用して次のトークンを計算し、文章を生成していきます。
以前の記事でLLMは次に来るトークンを予測しながら文章を生成していることを整理しました。
その計算を実際に実行しているのが推論エンジンです。
プロンプト
│
▼
トークン化
│
▼
モデルを使って推論
│
▼
次のトークンを生成
│
▼
繰り返す
│
▼
文章として出力
推論エンジンによって、下記が異なります。
- 対応しているモデル
- 対応しているモデル形式
- 対応しているハードウェア
- 推論速度
- メモリの使い方
- 利用できる機能
そのためローカルLLMではモデルだけではなく、どの推論エンジンを利用するのかも重要になります。
llama.cppとは?
ローカルLLMについて調べていると、頻繁に登場するのがllama.cppです。
llama.cppは、LLMをローカル環境で動かすための推論エンジンです。
名前にLlamaと入っていますが、現在ではLlama以外にもさまざまなモデルを実行できます。
大きな特徴の一つが、前回の記事で紹介したGGUF形式のモデルを扱えることです。
GGUFモデル
│
▼
llama.cpp
│
▼
CPU / GPU
│
▼
推論
CPUだけを利用した推論にも対応しており、環境に応じてGPUを利用することもできます。
そのため、下記のような使い方もできます。
高性能なGPUがない
│
▼
CPUを利用して推論
GPUが利用できる
│
▼
GPUを利用して推論を高速化
また、必要に応じて処理の一部をGPUへオフロードすることもできます。
量子化されたGGUFモデルと組み合わせることで比較的限られたハードウェアでもLLMを動かせることが、llama.cppの大きな特徴です。
Ollamaとは?
もう一つ、ローカルLLMでよく利用されているのがOllamaです。
Ollamaは、ローカル環境でLLMを簡単に利用するためのツールです。
例えばOllamaをインストールすると、コマンドからモデルを指定して実行できます。
ollama run llama3.2
これだけで、下記の処理をまとめて行ってくれます。
モデルの取得
│
▼
モデルの読み込み
│
▼
推論環境の準備
│
▼
LLMを実行
自分でモデルファイルを探し推論エンジンの設定を細かく行わなくても、比較的簡単にローカルLLMを利用できます。
そのため、「まずローカルLLMを動かしてみたい」という場合にも扱いやすいツールです。
llama.cppとOllamaは何が違う?
llama.cppとOllamaはどちらもローカルLLMを動かす際に登場するため、最初は違いが少し分かりにくいところです。
大まかに整理すると、下記のような違いがあります。
llama.cpp
モデルを実際に推論する
ための仕組みに近い
Ollama
モデルの取得や管理なども含めて
ローカルLLMを扱いやすくするツール
llama.cppでは、モデルファイルや推論時の設定などを自分で細かく指定できます。
一方でOllamaではモデルの取得や管理、実行などがまとめられており、より簡単に利用できるようになっています。
イメージを形にすると、下記のような違いになります。
llama.cpp
ユーザー
│
▼
llama.cpp
│
▼
GGUF
│
▼
CPU / GPU
Ollama
ユーザー
│
▼
Ollama
│
├─ モデル取得
├─ モデル管理
├─ 推論
└─ API
ただし完全に別物として考えるよりも、Ollamaは推論処理だけでなく、ローカルLLMを扱うためのさまざまな機能をまとめて提供していると考えると分かりやすいかと思います。
Ollamaの裏側では何が起きている?
Ollamaを利用すると、
ollama run モデル名
という簡単な操作でLLMを実行できます。
しかし、裏側ではさまざまな処理が行われています。
非常に単純化すると、下記のような流れです。
ollama run
│
▼
モデルを準備
│
▼
モデルをメモリへ読み込む
│
▼
推論処理を実行
│
▼
生成された文章を表示
Ollamaはこうした複雑な部分を隠し、利用者が簡単にモデルを扱えるようにしてくれています。
これは便利な反面、仕組みを知らずに使っていると下記の部分が分かりにくくなります。
なぜこのモデルが動くのか?
なぜVRAMが足りないのか?
量子化方式は何なのか?
どの推論処理が使われているのか?
これまでモデル、GPU、VRAM、量子化、GGUFについて整理してきたことで、Ollamaが裏側で行っている処理も少しずつ理解できるようになってきます。
GGUF・llama.cpp・Ollamaの関係
前回の記事で紹介したGGUFも含めて整理してみます。
まずGGUFは、モデルを保存するためのファイル形式でした。
llama.cppはそのGGUF形式などのモデルを読み込み、推論を行うためのソフトウェアです。
Ollamaはモデルの取得や管理、推論などを簡単に扱えるようにしたツールです。
LLMモデル
│
▼
量子化
│
▼
GGUFなどのモデルデータ
│
▼
推論処理
│
▼
CPU / GPU
そして、こうした処理を利用者から扱いやすくしているのがOllamaです。
それぞれ役割は異なりますが、ローカルLLMを動かすための一連の仕組みとしてつながっています。
他にはどんな選択肢がある?
ローカルLLMを実行するためのソフトウェアはllama.cppだけではありません。
例えば、下記などもあります。
- MLX
- vLLM
MLXはApple Silicon向けに設計された機械学習フレームワークで、Mac上でLLMを動かす際にも利用されています。
一方vLLMはLLMの推論を効率化するための仕組みを持ち、複数ユーザーへLLMを提供するようなサーバー用途でも利用されています。
それぞれ得意とする用途が異なるため、下記などの目的によって選択肢が変わってきます。
ローカルPCで手軽に動かしたい
複数ユーザーから利用したい
Apple Siliconを活用したい
細かく推論設定を調整したい
今回はそれぞれの詳細までは触れませんが、ローカルLLMを動かすためのソフトウェアにも用途による違いがあるということを覚えておくと良さそうです。
どれを使えばいい?
では実際にローカルLLMを利用する場合、どれを選べば良いのでしょうか。
まずローカルLLMを簡単に試してみたい場合は、Ollamaのようなツールを利用すると始めやすいです。
一方で下記に当てはまる場合には、llama.cppなどを直接利用する選択肢もあります。
- モデルファイルを自分で選択したい
- 量子化方式を細かく選びたい
- 推論時の設定を調整したい
- CPUやGPUの使い方を調整したい
重要なのは、
どのツールが一番優れているか
ではなく、
自分が何をしたいのか
│
▼
それに合った仕組みを選ぶ
ということだと思います。
ローカルLLMの用途や環境によって、適切な選択肢は変わってきます。
用語集
今回の記事で登場した用語を簡単に整理します。
| 用語 | 概要 |
|---|---|
| 推論エンジン | 学習済みのLLMモデルを読み込み、推論を実行するためのソフトウェア。 |
| llama.cpp | ローカル環境でLLMを実行するための推論エンジン。GGUF形式のモデルなどを扱える。 |
| Ollama | モデルの取得・管理・実行など、ローカルLLMを扱いやすくするためのツール。 |
| GGUF | LLMのパラメータや実行に必要な情報などを保存できるモデルファイル形式。 |
| MLX | Apple Silicon向けに設計された機械学習フレームワーク。 |
| vLLM | LLMの推論を効率的に実行するための推論・サービングエンジン。 |
| オフロード | 処理の一部を別のプロセッサへ移すこと。ローカルLLMではCPUからGPUへ計算を移す場合などに使われる。 |
| API | ソフトウェア同士が機能やデータをやり取りするための仕組み。 |
さいごに
これまでモデル、GPU、VRAM、量子化について整理してきましたが、今回はそれらを実際に動かす推論エンジンについて整理しました。
Ollamaなどを使えば簡単にローカルLLMを動かすことができますが、その裏側の仕組みを理解することでモデルや実行環境についても適切に選択できるようになります。
便利なツールをただ利用するだけではなく、何が行われているのか理解した上で選択できるよう、引き続きローカルLLMについて理解を深めていきたいです。