OllamaをCPU-onlyのLinuxサーバーで動かす方法|GPU不要でVPS・ラズパイにローカルLLMを安定稼働させる手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)ローカルLLM > OllamaをCPU-onlyのLinuxサーバーで動かす方法|GPU不要でVPS・ラズパイにローカルLLMを安定稼働させる手順
「GPUサーバーは月額が高すぎてローカルLLMの検証すらできない」
「VPSやRaspberry Pi 5に本当にOllamaが入るのか、実際の設定手順が見当たらない」

そんな悩みを持つLinuxエンジニアは多い。OllamaはGPUが検出できない環境でも、自動的にCPU推論モードへフォールバックして動作する。応答速度はGPUに劣るが、バッチ要約・社内文書の分類・単発質問応答のような非リアルタイム用途では十分に実用になる。
GPU環境が整ったあとも、CPU環境で作成したModelfileやカスタマイズはそのまま引き継げる。まず低コストな環境で仕組みを把握し、必要に応じてGPUサーバーに移行するという使い方が現実的だ。
この記事では、VPS(GPUなし・RAMのみ)とRaspberry Pi 5を対象に、CPU-onlyモードでOllamaを安定稼働させる具体的な手順をステップ形式で解説する。モデル選定・量子化タグの選び方・Linuxシステム設定・代表的なトラブル対処まで一気通貫でカバーする。

この記事のポイント

・OllamaはGPU不在でもCPU-onlyモードで自動起動し、追加設定なしで推論できる
・CPU環境ではRAMの60%以内のモデルサイズとq4_K_Mタグを組み合わせるのが基本方針
・OLLAMA_NUM_THREADSとOLLAMA_MAX_LOADED_MODELS=1で他サービスとの同居稼働を安定させる
・swapとvm.swappiness=10でOOM Killを防ぎ、長時間の安定稼働を実現する


OllamaをCPU-onlyのLinuxサーバーで動かす方法|GPU不要でVPS・ラズパイにローカルLLMを安定稼働させる手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

CPU-onlyで使えるOllamaの仕組み

Ollamaはモデルのロードとトークン推論をllama.cppに委ねている。llama.cppはCUDA(NVIDIA GPU)・Metal(macOS Apple Silicon)・Vulkanなど複数のバックエンドをサポートしながら、CPUだけでも動作するよう設計されている。
OllamaのインストールスクリプトがGPUを検出できない場合、CPUバックエンドで起動する。エンドポイントのURL(http://localhost:11434)も同じなので、コードや設定をGPUサーバーと差し替える必要はない。
ただし速度の差は大きい。7Bモデルで比較すると、NVIDIA RTX 4090では40~60 tokens/sec程度出るのに対し、標準的なVPS(4コア・8GB RAM)ではせいぜい2~5 tokens/secが現実的な数字だ。

1. GPU不在時のフォールバック動作を確認する

サービス起動後、systemdのログでCPU-onlyで稼働しているかを確認できる。

$ sudo journalctl -u ollama -n 50 --no-pager | grep -E 'cuda|cpu|device|GPU'

出力に `no CUDA devices` や `server: CPU` が含まれていればCPU-onlyモードで動いている。GPU環境では `using CUDA device` が表示される。この確認は環境を変えるたびに実行しておくと想定外のトラブルを防げる。

2. CPU推論とGPU推論の主な違いを把握する

CPU-only環境で注意すべき制約を整理する。
・推論速度: GPUの5分の1~10分の1。7Bモデルで2~5 tokens/secが目安
・ボトルネック: VRAMではなくRAMが上限。モデルのウェイトはすべてRAMに展開される
・発熱: CPUコアをフルに使うため、長時間連続稼働では温度管理が必要になる
・並列処理: 複数の並列リクエストはCPU-only環境では特に不安定になりやすい

この制約を踏まえた上で、次のセクションでモデルとハードウェアの組み合わせを選定する。

対応ハードウェアの確認とモデル選定の基準

CPU-only環境での第一優先事項はRAMだ。モデルのウェイトはすべてRAMに展開されるため、RAMが不足するとOOM Killでプロセスが強制終了する。
推奨する選定の考え方は「実装RAMの60%以内に収まるモデルサイズ」を量子化で調整する、というシンプルなルールだ。

1. RAMに応じたモデルサイズの目安

・8GB RAM: Phi-4:3.8b-q4_K_M(約2.5GB)が最も安定。Mistral:7b-instruct-q4_0(約4.1GB)はswap 4GB以上を追加すれば動作する
・16GB RAM: Llama3.3:8b-instruct-q4_K_M(約5.0GB)/ Mistral:7b-instruct-q8_0(約7.7GB)/ Gemma 3:9b-q4_K_M(約5.8GB)が安定稼働の選択肢
・32GB RAM: Llama3.3:70b-instruct-q4_0(約40GB)/ Gemma 3:27b-q4_K_M(約17GB)が動作するが低速。Gemma 3:27bはバッチ処理用途向き

CPU環境ではRAM容量がすべてを決める。モデル選定の詳細な品質比較は「ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント」を参照してほしい。CPU環境向けには特にパラメータ数と量子化の組み合わせを重視した選定が必要になる。

2. VPSとRaspberry Pi 5のハードウェアを確認する

インストール前に実装RAMとCPUコア数を把握しておく。

$ free -h && nproc && uname -m total used free Mem: 15Gi 1.2Gi 12Gi Swap: 0B 0B 0B 8 x86_64

Raspberry Pi 5(8GBモデル)はLPDDR4X RAM 8GBを搭載し、アーキテクチャはaarch64だ。`uname -m` が `aarch64` を返す環境でもOllamaの公式インストールスクリプトはそのまま使える。
Pi 5のCPU(ARM Cortex-A76・4コア)は、x86_64サーバーと比べてスループットは低い。用途は単発質問応答・短文要約に絞り、長文生成には向かないと理解しておこう。

OllamaのインストールとCPU-onlyでの起動確認

Ubuntu 24.04 LTS(x86_64)とRaspberry Pi OS(aarch64)でインストール手順は共通だ。基本的なインストール手順は「Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド」に詳しく解説している。ここではCPU-only環境特有の確認手順を補足する。

1. インストールスクリプトを実行する

$ curl -fsSL https://ollama.com/install.sh | sh

スクリプトはGPUドライバの有無を自動検出する。GPUが見つからない場合はCUDA関連のインストールがスキップされ、CPU-onlyバイナリのみがセットアップされる。インストール完了後にsystemdサービスが自動起動される。

2. systemdサービスの起動とステータス確認

$ sudo systemctl enable --now ollama $ systemctl status ollama * ollama.service - Ollama Service Loaded: loaded (/etc/systemd/system/ollama.service; enabled) Active: active (running) since Mon 2026-08-25 09:00:00 JST

`Active: active (running)` が表示されれば正常起動だ。起動に失敗する場合はポート11434が他サービスに使われていないか確認する。

3. APIでCPU-only動作を確認する

モデルをpullしてAPIで疎通確認を行う。

$ ollama pull phi4:3.8b-q4_K_M $ curl -s http://localhost:11434/api/generate \ -d '{"model":"phi4:3.8b-q4_K_M","prompt":"LinuxのCPU推論とは何か、30字以内で答えよ","stream":false}' \ | python3 -m json.tool | grep -E 'response|eval_duration|eval_count' "response": "CPUのみで機械学習モデルを推論実行する処理方式", "eval_count": 21, "eval_duration": 9823456789

`eval_duration` の値(ナノ秒)と `eval_count`(トークン数)からトークン生成速度を算出できる。初回はモデルのロードで数十秒かかるが、2回目以降はロード不要になり速くなる。

CPU推論に最適な量子化タグとモデルの選び方

CPU-only環境でのモデル選定で最も重要なのが量子化タグの選択だ。量子化はモデルの重みを低精度に圧縮する手法で、精度と速度・メモリのトレードオフが生まれる。
OllamaのHubでは同一モデルに複数の量子化タグが存在する。CPU環境向けに選択肢を絞り込む。

1. CPU環境での量子化タグの優先順位

・q4_K_M(第1選択): K-Quant方式でビット配分を最適化しており、q4_0より品質が高く同程度のRAMで収まる。CPU環境での標準選択肢
・q4_0(第2選択): q4_K_Mより品質はやや落ちるが、RAMが8GBギリギリの環境や速度を優先するケースで選ぶ
・q8_0(第3選択): 量子化ノイズが少なく品質が高い。RAM 16GB以上の環境で7Bモデルを高品質に動かすときに有効
・f16 / q2_K(非推奨): f16はRAMが2倍以上必要になり非実用的。q2_Kは品質劣化が激しく実務には向かない

量子化タグはモデル名にサフィックスとして指定する。書式は `モデル名:サイズ-用途-量子化タグ` だ。たとえば `llama3.3:8b-instruct-q4_K_M` や `mistral:7b-instruct-q4_0` のように記述する。

2. pullコマンドで量子化タグを指定する

# 8GB RAM向け: Phi-4の軽量モデル $ ollama pull phi4:3.8b-q4_K_M # 16GB RAM向け: Mistral 7B instruct $ ollama pull mistral:7b-instruct-q4_K_M # pullしたモデルの一覧とサイズを確認 $ ollama list NAME ID SIZE MODIFIED phi4:3.8b-q4_K_M a1b2c3d4e5f6 2.5 GB 2 minutes ago mistral:7b-instruct-q4_K_M b2c3d4e5f6a1 4.9 GB 5 minutes ago

OllamaのCPUスレッドとメモリ設定を最適化する

デフォルトではOllamaが実装CPUコア数を自動検出して推論に使用するが、サーバー上で他のサービスと同居する場合は明示的にコア数とモデル数を制限した方が安定する。
設定はsystemdのoverride.confで環境変数を注入するのが推奨方法だ。この方法はOllamaのアップデート後も設定が保持される。

1. systemd override.confで環境変数を注入する

$ sudo mkdir -p /etc/systemd/system/ollama.service.d $ sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF' [Service] Environment="OLLAMA_NUM_THREADS=4" Environment="OLLAMA_MAX_LOADED_MODELS=1" Environment="OLLAMA_KEEP_ALIVE=5m" EOF $ sudo systemctl daemon-reload $ sudo systemctl restart ollama

`OLLAMA_NUM_THREADS=4` はllama.cppに渡すスレッド数を制限する。CPUコアが8つあっても他サービスに4コアを残したい場合は `4` を指定する。
`OLLAMA_MAX_LOADED_MODELS=1` は同時にRAMに展開するモデル数を1つに限定する。複数モデルを同時ロードするとRAMが枯渇するため、CPU-only環境では必ず1に設定する。
`OLLAMA_KEEP_ALIVE=5m` はリクエストがない状態でモデルをRAMに保持する時間だ。RAMに余裕があれば5分のままで良く、RAMが逼迫する場合は `0` に設定して即時アンロードさせる。

2. 設定が反映されたことをAPI経由で確認する

# ロード中のモデルとメモリ使用量を確認 $ curl -s http://localhost:11434/api/ps | python3 -m json.tool { "models": [ { "name": "phi4:3.8b-q4_K_M", "size": 2507456512, "size_vram": 0 } ] }

`size_vram` が `0` でモデルがロードされていれば、CPU-onlyで推論していることが確認できる。

LinuxシステムでCPU稼働を安定させる設定

OllamaのCPU-only稼働を長期間安定させるには、Linux側のシステム設定も重要だ。特にRAMが8~16GBのサーバーではswapとOOM設定の調整が必須になる。

1. swapを追加してOOM Killを防ぐ

物理RAMが8GBの場合、モデルのロード中に一時的にRAMが逼迫することがある。4~8GBのswapを追加して緩衝材にする。

$ sudo fallocate -l 8G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile $ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab $ free -h total used free Mem: 7.7Gi 5.2Gi 1.1Gi Swap: 8.0Gi 0B 8.0Gi

なお、ストレージがHDDの場合はswapのI/Oが遅すぎて推論速度がさらに低下する。SSDまたはNVMeストレージの環境でのみswapが緩衝材として機能する。

2. vm.swappinessを調整してRAM優先に設定する

$ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf $ sudo sysctl -p vm.swappiness = 10

デフォルトの `vm.swappiness=60` ではRAMに余裕があってもOSが積極的にswapを使おうとする。`10` に下げるとRAMが逼迫するまでswapを使わなくなり、推論中のI/O遅延を減らせる。

3. CPUガバナーをperformanceモードに切り替える

VPSによってはCPUガバナーが `powersave` に設定されており、推論速度が著しく低下する場合がある。

# 現在のCPUガバナーを確認 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor powersave # performanceモードに変更 $ echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor performance

再起動で元に戻るため、永続化が必要な場合は `cpupower` パッケージで設定する。`scaling_governor` ファイルが存在しない(VPSがCPU周波数制御を公開していない)場合はこの手順はスキップして良い。

CPU-only運用で発生しやすいトラブルと対処法

CPU-only環境ではRAMと速度に関連したトラブルが多発する。代表的な3つのケースと対処法を押さえておこう。

1. OOM Killでollamaが強制終了する

症状: `ollama run` 中にカーソルが止まり、その後セッションが切れる。
確認方法: `dmesg` でOOM Killの記録を調べる。

$ dmesg | grep -i oom | tail -10 [12345.678] Out of memory: Killed process 4321 (ollama) score 950 or sacrifice child

対処: まずswapを追加し(前述の手順参照)、モデルを一段階小さいものに切り替える。`ollama list` でモデルサイズを確認し、実装RAMの60%以内に収まるモデルを選び直す。

2. 応答速度が極端に遅くなる

症状: トークン生成が1 tokens/sec以下になる。プロンプトへの応答に数分かかる。
原因の多くはswapへの書き込みが発生している状態だ。

$ free -h && cat /proc/meminfo | grep -E 'SwapTotal|SwapFree|SwapCached' SwapTotal: 8388604 kB SwapFree: 0 kB SwapCached: 1234567 kB

SwapFreeが0に近い場合はswapが使い切られている。`OLLAMA_KEEP_ALIVE=0` に変更してモデルをアンロードしRAMを回収してから再起動する。根本対処はより小さなモデルへの切り替えだ。

3. モデルのロードに時間がかかりすぎる

症状: `ollama run` 後にプロンプトが出るまで1分以上かかる。
CPU-only環境では7Bモデルのロードに30秒~1分かかることは正常だ。一度ロードされればリクエスト間隔の内はRAMに残るため、`OLLAMA_KEEP_ALIVE=10m` にして保持時間を延ばすと実用的になる。
常に高速応答が必要な場合は、cronまたはsystemdのExecStartPostでwarm-upリクエストを送るスクリプトを登録しておく。

#!/bin/bash # /usr/local/bin/ollama-warmup.sh # サービス起動後に実行して初回ロードを済ませる curl -s http://localhost:11434/api/generate \ -d '{"model":"phi4:3.8b-q4_K_M","prompt":"ping","stream":false}' > /dev/null echo "[ollama-warmup] model loaded successfully"

まとめ

OllamaはGPUがなくてもCPU-onlyで動作する。VPSやRaspberry Pi 5でも、モデルサイズと量子化タグを適切に選び、Linuxシステム設定を施せば実用的なローカルLLM環境を構築できる。
機密情報を外部に出せない業務環境でのローカルLLM活用については「社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢」も参考にしてほしい。CPU-only環境は試用・検証のエントリーポイントとして最適だ。
設定・コマンド内容
ollama pull mistral:7b-instruct-q4_K_MCPU環境向けモデルをpullする
OLLAMA_NUM_THREADS=4CPUスレッド数を明示的に制限する
OLLAMA_MAX_LOADED_MODELS=1同時ロードモデルを1つに限定する
OLLAMA_KEEP_ALIVE=0使用後即座にモデルをアンロードする
vm.swappiness=10RAM優先でswap使用を抑制する
dmesg | grep -i oomOOM Killの発生を確認する
curl -s http://localhost:11434/api/psロード中モデルとメモリ使用量を確認する

GPU不要のローカルLLMをハンズオンで体験する

VPSやRaspberry Pi 5でローカルLLMを動かすノウハウを体系的に身に付けたい方は多い。CPU環境での構築から量子化モデルの選定、Linuxシステム最適化まで、実機環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。