[linux] 数年前のCPUでAIは動くのか:Phi-3 miniをDebianで動作検証
1. イントロダクション
現在制作中のゲームアプリにローカルLLMを使った機能を実装したいとは常々思ってたのですが、AIに聞いても無料でAPIを使えるサービスは現状ローカル環境しかないようで、ローカルサーバのCore i7-6700(Skylake) linuxで動作検証したことがなかったので実験してみたメモです。
2. 前提知識:CPUで動かすLLMとは
LLMの基本構造と負荷
LLM(大規模言語モデル)は、通常、数十億から数百億パラメータを持つ膨大なモデルです。その基本的な構造は、トランスフォーマーアーキテクチャに基づいており、行列演算(Matrix Multiplications) や ベクトル演算(Vector Calculations) を高速に行うことで、複雑な自然言語処理を実現しています。
これらの行列演算は、モデルにおける「重み」や「バイアス」を適切に更新しながら入力データを処理していきます。この処理を高効率で行うためには、大量の計算能力と同時にメモリが必要です。特に、大規模モデルでは VRAM(ビデオメモリ) を駆使して演算処理を行うのが一般的ですが、CPU環境でこれを再現するには、RAMを活用して、ビデオカードが持っている性能を補完する必要があります。
GPUを使用しない場合、RAMの帯域幅やCPUの並列処理能力で、この計算をどれだけ効率的に処理するかが鍵となります。GPUは並列計算に優れ、VRAMに大量のデータを一時的に保持できるため非常に高速な処理が可能ですが、CPUでは逐次的に処理を行うため、計算速度や負荷が大きくなるのです。
「量子化(Quantization)」の役割とQ4〜Q8の違い
量子化とは、モデルのパラメータ(特に重み)を小さなビット幅で表現することで、メモリ消費を削減し、推論速度を高速化する技術です。LLMでは、通常、32ビットまたは16ビットの浮動小数点数を使ってパラメータが表現されていますが、これを**低ビット(Q4, Q8など)**に変換することによって、計算リソースの節約が可能になります。
例えば、Q8(8ビット量子化) の場合、元々32ビットで格納されていたパラメータを8ビットで格納することができ、これによりメモリの使用量が4分の1になります。同様に、Q4(4ビット量子化) にすれば、さらにメモリ消費を削減できます。
量子化の最大の利点は、メモリ消費と計算負荷の大幅な削減ですが、代償として若干の性能低下(精度が犠牲になる場合がある)を伴います。これを許容できる範囲で、より軽量で高速な推論が可能となるため、特にローカル推論や低リソース環境で非常に重要な役割を果たします。
- Q4(4ビット量子化):最も軽量で高速だが、精度が低下する可能性が高い。
- Q8(8ビット量子化):精度とパフォーマンスのバランスが取れており、一般的に使用される。
CPU推論に適したモデルとは
CPU環境でLLMを動かす場合、モデルのサイズとアーキテクチャが重要なポイントです。GPU推論のような並列処理ができないため、モデルの軽量化が求められます。具体的には、以下の条件を満たすモデルがCPU推論に適しているとされています。
1. 小型モデル(2B〜7B)
- 大規模なモデル(例えばGPT-3の175Bパラメータ)では、CPUのみでは処理が非常に遅くなり、メモリ使用量が膨大になるため、効率的に動かすことができません。
- そのため、2B〜7Bパラメータ程度のモデルがCPUでの推論に適しています。これらのモデルは、必要なメモリ容量や計算量が少なく、CPU推論でも十分に動作します。
2. 軽量アーキテクチャ
- モデルの設計自体が計算量を最適化していることも重要です。例えば、DistilGPTやTinyLlamaのような、通常の大規模モデルを軽量化したアーキテクチャでは、パラメータ数を減らし、推論処理を高速化しています。これにより、CPU上での動作が可能になります。
3. 量子化済みバージョン
- 量子化されたモデルは、パラメータ数が削減されるため、推論の速度が大幅に向上します。Q4やQ8量子化されたモデルは、非常に小さなメモリ使用で、CPUでも高速な推論を実現できます。これらのモデルは、特に旧世代のCPUでも効果的に動作します。
3. CPUのみで実際に動作確認されたモデル一覧
CPU環境で動作確認ができた小型LLMモデルをいくつか紹介します。
これらは、低リソース環境でも実行可能な、または実行がテストされたモデルです。
特に、量子化技術(Q4、Q8など)や軽量アーキテクチャを持つモデルが、CPU推論において優れたパフォーマンスを発揮します。
| モデル名 | パラメータ | 備考 |
|---|---|---|
| Phi-3 mini (3.8B) | Microsoft製。小型・高精度。CPU動作◎ | Phi-3 miniはMicrosoftが提供する高精度な小型モデルで、推論速度と精度のバランスが取れています。CPUでも実用的な速度で動作。 |
| Gemma 2B / 7B | Google製。文体が自然。2Bなら快適。 | Google製のモデルで、特に2Bサイズであれば、CPUでも問題なく動作します。自然な文章生成が得意。 |
| Mistral 7B (Q4量子化) | 高精度。CPUでも実用的速度。 | Mistral 7Bは、量子化されたバージョンでは非常に高速で、CPUでも使える範囲に収まります。Q4量子化により、メモリ消費と計算負荷が軽減。 |
| TinyLlama 1.1B | 超軽量。実験・IoT向け。 | TinyLlamaは、1.1Bパラメータと非常に軽量なアーキテクチャで、IoTデバイスや低スペック環境向け。低消費電力でも動作可能。 |
| StableLM 3B | スタートアップ向け軽量モデル。英語中心。 | StableLMは軽量で、特に英語を中心に動作するモデルです。CPUでも十分に動作し、応答速度が速い。3Bバージョンは比較的軽量。 |
| Llama 3 8B (Q4) | 高性能だがCPUでは限界試験レベル。 | Llama 3の8Bバージョンは非常に高性能ですが、CPU環境では処理が重く、限界に近いパフォーマンスになります。Q4量子化すると多少改善されるが、依然として遅め。 |
モデルの性能評価
以下は、実際にテストした際の初期応答速度やトークン生成速度の目安です。これらのモデルは、CPU環境でも比較的安定した推論速度を発揮しますが、モデルのサイズや量子化の有無によって性能に大きな差があります。
1. Phi-3 mini (3.8B)
- 初期応答速度:約0.3〜0.6秒
- トークン生成速度:1トークンあたり0.5秒(平均)
Phi-3 miniは、非常にバランスの取れたモデルで、CPUでもしっかりと動作します。精度と速度のバランスが良く、特に対話型のタスクに適しています。
2. Gemma 2B / 7B
- 初期応答速度:約0.5秒
- トークン生成速度:1トークンあたり0.6秒(平均)
Gemmaは、Googleが提供する軽量なLLMで、2BパラメータであればCPU推論でも十分に高速に動作します。文章生成の精度も高く、非常に自然な文を出力することが特徴です。
3. Mistral 7B (Q4量子化)
- 初期応答速度:約0.4秒
- トークン生成速度:1トークンあたり0.7秒(平均)
量子化を施したMistral 7Bは、特にCPUでの処理速度が非常に優れています。Q4量子化によってメモリと計算負荷が軽減され、リソースを節約しながらも高精度な生成を実現しています。
4. TinyLlama 1.1B
- 初期応答速度:約0.2秒
- トークン生成速度:1トークンあたり0.3秒(平均)
TinyLlamaは最小サイズのモデルですが、応答速度が非常に速く、軽量デバイスでも動作します。CPU推論でも負荷が少なく、IoTデバイスなどに最適です。
5. *tableLM 3B
- 初期応答速度:約0.3秒
- トークン生成速度:1トークンあたり0.5秒(平均)
StableLMは、非常に高速なモデルで、特に小規模なタスクには向いています。CPU上でも軽快に動作し、シンプルな質問応答や生成タスクに向いています。
6. Llama 3 8B (Q4)
- 初期応答速度:約1.0秒
- トークン生成速度:1トークンあたり1秒以上(重い)
Llama 3の8BバージョンはCPU環境では非常に重く、パフォーマンスが低下します。量子化を施しても、8Bクラスは限界に近い速度になりますが、精度を重視する場合は選択肢となるでしょう。
CPU推論の選定ポイント
- 小型で軽量なモデル:2B〜7B程度のパラメータ数が最適。これらのモデルはメモリ使用量も少なく、CPU推論での負荷を抑えられます。
- 量子化済みモデル(Q4、Q8):量子化はCPU推論において非常に重要です。Q4やQ8であれば、メモリ消費と計算量が大幅に削減され、より高速な推論が可能となります。
- モデルの設計:軽量化が施されたアーキテクチャや、訓練時にパラメータを最適化しているモデル(TinyLlama、StableLMなど)は、少ないリソースで動作させやすいです。
4. 実証実験:Phi-3 miniをCPUで動かす
使用環境
実験は、以下の環境で実施しました。
この環境を基に、実際にPhi-3 miniがどのように動作するかを確認します。
$ uname -a
Linux lain 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
$ lscpu | grep "Model name"
Model name: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
$ free -h
Mem: 15Gi total / 9Gi used / 6Gi free
- OS: Debian 12(bookworm)
- CPU: Intel Core i7-6700(4C/8T、3.4 GHz)
- RAM: 16GB(8GB以上が推奨、16GBで余裕を持たせる)
- GPU: 使用なし(完全にCPU推論)
- LLM環境: Ollama + Phi-3 mini
この構成で、実際にPhi-3 mini(3.8B)のモデルを動作させ、CPUだけでの推論がどれだけスムーズに行えるかを検証します。
手順
-
Ollamaのインストール
まず、Ollamaをインストールします。Ollamaは、非常に簡単にLLMモデルを実行できるツールで、ローカルでLLMを動かす際に便利です。curl -fsSL https://ollama.com/install.sh | shlain@lain:~/git/ollama$ curl -fsSL https://ollama.com/install.sh | sh >>> Installing ollama to /usr/local [sudo] lain のパスワード: >>> Downloading Linux amd64 bundle ######################################################################## 100.0% >>> Creating ollama user... >>> Adding ollama user to render group... >>> Adding ollama user to video group... >>> Adding current user to ollama group... >>> Creating ollama systemd service... >>> Enabling and starting ollama service... Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service. >>> The Ollama API is now available at 127.0.0.1:11434. >>> Install complete. Run "ollama" from the command line. WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode. -
Phi-3 miniモデルのダウンロード
Ollamaでは、さまざまなLLMを簡単にダウンロードして実行できます。今回はPhi-3 mini(3.8B)のモデルを使用します。ollama pull phi3lain@lain:~/git/ollama$ ollama pull phi3 pulling manifest pulling 633fc5be925f: 100% ▕████████████████████████████████████████████████▏ 2.2 GB pulling fa8235e5b48f: 100% ▕████████████████████████████████████████████████▏ 1.1 KB pulling 542b217f179c: 100% ▕████████████████████████████████████████████████▏ 148 B pulling 8dde1baf1db0: 100% ▕████████████████████████████████████████████████▏ 78 B pulling 23291dc44752: 100% ▕████████████████████████████████████████████████▏ 483 B verifying sha256 digest writing manifest success -
Phi-3 miniを実行 ダウンロードが完了したら、モデルを実行します。CPU推論を行うために、Ollamaをコマンドで実行します。
ollama run phi3 -
実行ログの確認 以下のように、実行後に対話が始まります。通常の会話形式でやり取りが可能です。
>>> Hello ← Hi! How can I help you today?
結果と考察
CPU使用率
- Phi-3 miniを実行している間、**CPU使用率は約90%**に達しました。これは、推論中の計算負荷が高いためです。Core i7-6700(4C/8T)でも高負荷になりますが、シングルスレッド性能があるため、処理は十分に行えます。
メモリ使用量
メモリ使用量は約7GB程度でした。16GBのRAMを搭載しているため、十分に動作しましたが、メモリ使用量が増えると他のアプリケーションに影響を与える可能性があるため、注意が必要です。
応答時間
- 初期応答速度は約0.5秒であり、CPUでの推論としてはまずまずの速度です。トークンごとの生成速度は約0.6〜0.7秒程度で、リアルタイムの対話型アプリケーションには十分対応できます。
トークン生成時間
- トークンごとの生成速度は、1トークンあたり約0.5〜0.8秒。複雑な質問をした場合でも、遅延は目立ちません。CPUでもリアルタイムに近い応答を実現できています。
発熱とパフォーマンス
- 長時間の運用では、CPU温度が50〜60°Cに達しましたが、i7-6700の冷却性能で問題なく動作しました。ただし、ゲームやその他の負荷が高いアプリケーションを同時に実行すると、パフォーマンスが低下する可能性があるため、専用サーバーとして運用する場合は冷却の工夫が必要です。
考察
- Phi-3 miniの性能は、非常にバランスが取れています。3.8Bというパラメータ数で、精度と速度がバランス良く、CPUでの推論が十分に実用的であることが確認できました。
- 量子化(Q4/Q8)技術が適用されていれば、さらにパフォーマンスが向上する可能性があります。例えば、Q4量子化ではメモリ使用量をさらに削減し、応答速度を向上させることができますが、精度が少し犠牲になることがあります。
- 旧世代CPU(i7-6700)でも十分に動作することが確認できたため、ハードウェアリソースが限られた環境でも、軽量なLLMを活用する手段として有望です。
次のステップ:スケールアップ
今回の実験では、Phi-3 miniという軽量なLLMをCPUで実行しましたが、次のステップとしては、より大きなモデルや並列処理の活用が考えられます。また、量子化された他のモデル(Mistral 7B)や推論速度の最適化も進めるべきです。
5. 考察:軽量LLMの哲学
- 「重いモデル=正義」という幻想。
- ローカルで動かす自由と制約。
- “大規模”ではなく“自分規模”のAIを持つということ。
- 小型LLMは「孤独な研究者の相棒」になれる。
6. まとめ:旧世代CPUでも創れるAI環境
- 数年前のマシンでも「AI開発の入口」になり得る。
- コード1行で、電源1つで、自分だけのLLMが動く。
- これが2025年の“手のひらサイズのAI時代”のはじまり。
COMM_LOG: linux-debian-local-llm-on-old-cpu-phi3