概要
ローカルでLLMを動かすときに気になるのは、「CPUだけで実用になるのか」「GPUはどれくらい効くのか」という点です。
今回はこれを検証するために、Docker上で Ollama + Mistral を動かし、同じプロンプトをCPU実行とGPU実行で比較しました。
今回使用した技術
今回の検証では、ローカルでLLMを動かすための実行基盤としてOllamaを使い、実際に動かすモデルとしてMistralを採用しました。
今回はOllamaとMistralを使うため、ここでそれぞれの技術について簡単に整理しておきます。
Ollamaとは?
Ollamaは、LLMをローカル実行・管理するための軽量ツールです。
CPUとGPUのどちらでも実行可能で、モデルはあらかじめ量子化されており、低メモリで高速推論が可能になります。
今回は、ファイルサイズが比較的小さい下記イメージを使用します。
ollama/ollama:0.9.5
Mistralとは?
Mistralは、自然言語の理解や文章生成ができる大規模言語モデル(LLM)です。
今回は、そのMistralをOllama経由でローカル実行できる形で利用しています。
mistral:latest
何を検証したか
今回の検証では、ローカルのDocker環境上で Ollama + Mistral を動かし、CPU実行とGPU実行でどの程度差が出るのかを確認しました。
具体的には、以下の内容を検証しました。
- Ollama + Mistral をローカルDocker環境で起動
- 同一プロンプトで CPU / GPU の応答時間を比較
使用技術と環境
今回の検証で使用した構成と実行環境は、以下の通りです。
LLMサーバー構成
| 項目 | 内容 |
|---|---|
| LLMサーバー | Ollama |
| 使用モデル | Mistral 7B |
| ホスト環境 | Docker |
CPU推論環境
| 項目 | 内容 |
|---|---|
| OS | macOS Sequoia |
| 実行環境 | Docker Desktop |
| CPU | Apple M1(8コア) |
| GPU | なし(CPUモードで実行) |
| RAM | 16GB |
GPU推論環境
| 項目 | 内容 |
|---|---|
| OS | Windows 11 |
| 実行環境 | Docker Desktop |
| CPU | 12th Gen Intel(R) Core(TM) i7-12700 |
| GPU | NVIDIA GeForce RTX 3070 |
| RAM | 32GB |
構成ファイル
検証で使ったファイルは次の3つです。
ファイル構成
.
├── docker-compose.yml
└── ollama
├── Dockerfile
└── entrypoint.sh
docker-compose.yml
version: '3.9'
services:
ollama:
build:
context: ./ollama
dockerfile: Dockerfile
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_MODELS=/root/.ollama
- NVIDIA_VISIBLE_DEVICES=all # GPUのある環境でのみ追加
runtime: nvidia # GPUのある環境でのみ追加
networks:
- internal
volumes:
ollama_data:
networks:
internal:
driver: bridge
Dockerfile
FROM ollama/ollama:0.9.5 RUN apt-get update && apt-get install -y netcat && rm -rf /var/lib/apt/lists/* COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
#!/bin/sh ollama serve & echo 'Waiting for Ollama server...' while ! nc -z localhost 11434; do sleep 0.5 done echo 'Pulling model...' ollama pull mistral echo 'Restarting Ollama server in foreground...' pkill ollama sleep 1 ollama serve
実行結果
同じプロンプト(「日本の首都は?」)を投げた結果です。
CPU推論環境で実行
$ curl -s -w "\nTotal time:%{time_total}s\n" http://localhost:11434/api/generate -d '{"model": "mistral", "prompt": "日本の首都は?", "stream": false}'
{
"model":"mistral",
"created_at":"2025-07-31T03:41:35.940957721Z",
"response":" 日本の首都は東京です。",
"done":true,
"done_reason":"stop",
"context":[3,1027,29910,29887,29761,30761,30228,30045,30539,4,1027,29910,29887,29761,30761,30228,30045,31134,30704,29998,29894,29712],
"total_duration":95069480043,
"load_duration":27107547929,
"prompt_eval_count":11,
"prompt_eval_duration":5973519544,
"eval_count":13,
"eval_duration":61964287778
}
Total time:95.098789s
GPU推論環境で実行
> curl.exe -s -w "`nTotal time:%{time_total}s`n" http://localhost:11434/api/generate -d '{\"model\":\"mistral\",\"prompt\":\"日本の首都は?\",\"stream\":false}'
{
"model":"mistral",
"created_at":"2025-07-31T04:22:05.504069733Z",
"response":" 日本の首都は東京です。",
"done":true,"done_reason":"stop",
"context":[3,1027,29910,29887,29761,30761,30228,30045,30539,4,1027,29910,29887,29761,30761,30228,30045,31134,30704,29998,29894,29712],
"total_duration":500696900,
"load_duration":5428969,"prompt_eval_count":11,
"prompt_eval_duration":1924588,
"eval_count":13,
"eval_duration":492462477
}
Total time:0.503693s
比較して分かったこと
今回の検証では、CPU(約95.10秒)とGPU(約0.50秒)で大きな差が出ました。
実際に比べてみると、CPUでも動かすこと自体はできるものの、これだけ待ち時間が長いと、ローカルで生成AIを日常的に使うにはかなり厳しいと感じました。
学習はもちろん、今回の推論のような一見軽く見える処理でも、体感できる差は非常に大きいかと思います。
今回の検証を通して、ローカルで生成AIを実用的に使ううえでは、GPUが前提になると考えてよさそうです。CPUで動かせることは確認できましたが、位置づけとしては本番運用での用途というより、動作確認や簡易的な検証に留めたほうが良いかと思います。