Ollamaを使って、DeepSeek-R1をローカルで動かしてみた。
目的は、手元のMacでLLMを動かす流れを確認することだった。 ついでに、Open WebUIを使ってChatGPTのようなUIから触れる状態も作った。
この記事は、成功手順というより、ローカルLLMを触ったときの検証ログである。
前提
試した環境は以下である。
machine:
MacBook Air M3
memory: 24GB
runtime:
Ollama
models:
llama3.2
deepseek-r1
DeepSeek-R1-Distill-Qwen-14B-Japanese gguf
ui:
Open WebUI
Docker Compose
強いGPUを持っている環境ではない。 そのため、速度や快適さはかなり控えめである。
やりたかったこと
やりたかったことは次の3つである。
1. Ollamaを入れる
2. DeepSeek-R1をローカルで動かす
3. Open WebUIからブラウザで使う
ローカルLLMは、API keyなしで手元だけで試せるのが良い。 一方で、モデルサイズ、メモリ、CPU/GPU性能の影響を強く受ける。
まずは動くところまで確認することにした。
Ollamaを入れる
OllamaはHomebrewで入れた。
brew install --cask ollama
versionを確認すると、最初はOllama instanceに接続できないというwarningが出た。
ollama --version
Warning: could not connect to a running Ollama instance
Warning: client version is 0.5.7
clientは入っているが、Ollamaのserver側がまだ動いていない状態である。
llama3.2で動作確認する
まずはDeepSeek-R1ではなく、llama3.2 でOllama自体が動くか確認した。
ollama run llama3.2
初回はmodelのpullが走る。
pulling manifest
pulling dde5aa3fc5ff... 100%
verifying sha256 digest
writing manifest
success
日本語で簡単に話しかけると、応答は返ってきた。
>>> こんにちは
こんにちは!どういたしまして?何か相談することがあれば、ぜひお聞きください。
この時点で、Ollama自体は動いていると判断した。
ただし、試しに大学の学科について聞くと、内容はかなり怪しかった。 固有名詞や学科名が混ざり、正確な情報源としては使えない出力だった。
ローカルで動いたことと、回答が正しいことは別問題である。
DeepSeek-R1を動かす
次にDeepSeek-R1を試した。
ollama run deepseek-r1
初回はmodelのpullが走る。
pulling manifest
pulling 96c415656d37... 100%
verifying sha256 digest
writing manifest
success
日本語で話しかけると、<think> を含む出力が返ってきた。
>>> こんにちは
<think>
</think>
greeting! How can I assist you today?
日本語で聞いても、返答には英語や不自然な多言語混在が出た。
大阪工業大学(大阪府立大学)の情報科学部は、学部制の学科です。
信息科学部は、情報技術や情報 managedefg technologies...
この出力は、検証ログとしては面白い。 しかし、回答内容をそのまま信頼できる状態ではなかった。
少なくともこの環境・このmodelでは、日本語の事実確認用途には注意が必要である。
日本語向けmodelも試す
日本語向けの量子化modelも試した。
ollama run hf.co/bluepen5805/DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:Q5_K_M
日本語応答を期待するなら、こうした日本語向けmodelを選ぶ方が自然である。
ただし、手元のMacBook Air M3では、快適に使えるほど速いとは言いにくかった。
強いGPUを持っていない環境では、ローカルLLMの体験はmodelサイズにかなり左右される。
Open WebUIでブラウザから使う
CLIだけではなく、ChatGPTのようなUIで触るためにOpen WebUIも動かした。
Docker Composeは次のようにした。
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama:/root/.ollama
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
environment:
- WEBUI_AUTH=False
extra_hosts:
- "host.docker.internal:host-gateway"
restart: always
volumes:
ollama:
open-webui:
open-webui を使うと、ブラウザからローカルのOllamaを触れる。
CLIよりも会話ログを見やすく、modelを触る体験としてはかなり分かりやすい。
ただし、WEBUI_AUTH=False は手元検証用の設定である。
外部公開する環境では認証なしにしない方がよい。
分かったこと
今回分かったことは以下である。
Ollamaを使うとローカルLLMの起動はかなり簡単である
modelのpullから実行までの流れは分かりやすい
Open WebUIを使うとブラウザUIで触れる
日本語応答の品質はmodel選択に強く依存する
手元のMacBook Air M3では大きめのmodelは重い
特に大事なのは、ローカルで動いたことと、実用的に速いこと、回答が正しいことは別問題だという点である。
残っている課題
残っている課題は以下である。
日本語で安定して使えるmodelの選定
量子化modelごとの速度比較
CPU / GPU / memory使用量の確認
Open WebUIを安全に公開する場合の認証設定
RAGやローカル文書検索との組み合わせ
今回は「動かす」ことを優先した。 次にやるなら、modelごとの応答品質と速度を同じpromptで比較するのがよい。
まとめ
Ollamaを使うと、DeepSeek-R1のようなmodelをローカルで試すところまではかなり簡単である。
一方で、手元のMacBook Air M3では大きめのmodelを快適に動かすのは難しかった。 出力も、特に日本語の事実確認では不自然な混在が出た。
そのため、今回の結論はこうである。
ローカルLLMの検証環境としては面白い
CLIだけでなくOpen WebUIを使うと触りやすい
回答品質と速度はmodel選択と実行環境に強く依存する
強い環境を持っていないので、体感としてはChatGPT-4が出たての頃のような、少し待ちながら使う感覚だった。
参考
- Ollama: https://ollama.com/
- DeepSeek-R1 on Ollama: https://ollama.com/library/deepseek-r1
- Open WebUI: https://github.com/open-webui/open-webui