🦙
WSL+DockerでOllamaを構築しはじめて推論を実行する
- WSL上でOllamaによる推論を実行するための手順を備忘録的に残しておく。
目的
- WSL上でOllamaのDockerコンテナを立ち上げ、ローカルLLMモデルに推論を実行させる。
手順
NVIDIA Container Toolkitをインストール
コンテナ上でGPUを使用するためにNVIDIA Container Toolkitをインストールする必要がある。
これが何をしているかというと、WSLからマシンのGPUを使用可能にすると理解しておいてよいと思う。(参考:https://qiita.com/tkusumi/items/f275f0737fb5b261a868)
- まずGPUドライバを最新にしておく。
WindowsでNvidia appを起動し、ドライバーを最新化
Toolkitをインストールする
Nvidiaの公式ページを参考にインストールをする
$ nvidia-container-cli info を実行しWSL上で認識されていることを確認
$ nvidia-container-cli info
NVRM version: 591.59
CUDA version: 13.1
Device Index: 0
Device Minor: 0
Model: NVIDIA GeForce RTX 3060
Brand: GeForce
GPU UUID: GPU-06a0b789-30c4-13a3-eb27-5399408071ad
Bus Location: 00000000:01:00.0
Architecture: 8.6
Docker上から参照できるか確認する
nvidia/cudaのDocker imageが必要。
run時に--gpus allオプションを指定することで、マシンのGPUリソースをすべて使用可能にする。
$ docker run --rm --gpus all nvidia/cuda:13.1.0-base-ubuntu22.04 nvidia-smi
Sun Dec 21 07:43:47 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 590.48.01 Driver Version: 591.59 CUDA Version: 13.1 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3060 On | 00000000:01:00.0 On | N/A |
| 0% 55C P8 19W / 170W | 951MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 33 G /Xwayland N/A |
+-----------------------------------------------------------------------------------------+
Ollamaを起動する
Dockerイメージをpullしてコンテナ立ち上げ
# imageをpull
$ docker pull ollama/ollama
# pullできたことを確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ollama/ollama latest 0cab1dbf8bb2 2 days ago 3.96GB
# コンテナ立ち上げ
$ docker run -d --gpus=all -v $(pwd)/ollama_data:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# コンテナに入ってollamaを動かしてみる
$ docker exec -it ollama /bin/bash
root@5e5286076854:/ ollama --version
ollama version is 0.13.5
モデル選択
google作成の軽量オープンモデルであり、日本語にも対応しているgemma3を選択する。(モデルの比較についてはこちらの記事が参考になるかもしれない:https://tech-lab.sios.jp/archives/50797#Gemma_3Google_DeepMind)
# コンテナ内で実行
$ ollama run gemma3:4b
pulling manifest
pulling aeda25e63ebd: 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 3.3 GB
pulling e0a42594d802: 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 358 B
pulling dd084c7d92a3: 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 8.4 KB
pulling 3116c5225075: 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 77 B
pulling b6ae5839783f: 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 489 B
verifying sha256 digest
writing manifest
success
# ↑こんな感じでモデルをダウンロードする
推論を実行
# >>> と表示された後にプロンプトを入力すると推論を実行する
>>> こんにちは
こんにちは!何かお手伝いできることはありますか? 😊
>>> あなたは何者ですか?
私は、Googleによってトレーニングされた、大規模言語モデルです。
簡単に言うと、人間が書いた文章を大量に読んで学んだことによって、質問に答えたり、文章を作成したり、様々なタスクを実行したりすることができます。
私はまだ学習中であり、完璧ではありませんが、あなたの質問に答えるために最善を尽くします。
**重要なこと:** 私は「意識」を持っているわけではありません。ただ、大量のデータを基に、パターンを認識し、それに基づいて応答を生成しているだけです。
# 詩を作らせることも可能
>>> 140字程度の詩的な文章を作成してください
夕闇が忍び寄る、茜色の空。
風は静かに語りかけ、草の葉を揺らす。
遠くの山並みはシルエットとなり、
時を刻むかのように、深まっていく。
心は静寂に包まれ、
過ぎ去りし日々の記憶を辿る。
明日への希望を胸に、
夜の帳が降りるのを待つ。
# 変なことも言う
>>> 太宰治の小説「走れメロス」でメロスは何をしましたか?
太宰治の小説「走れメロス」でメロスは、王の命令に背いて、国を滅ぼしたとされる羊飼い「羊飼い」の死を信じようと奔走しました。
具体的には、以下のことを行います。
* **羊飼い「羊飼い」を信じる:** 羊飼いは、自分が王の命に背いたと主張しています。メロスは、羊飼いの言葉を鵜呑みにして、それが事実であると信じ込みます。
* **王の命令に反論する:** 羊飼いの死を否定し、王の命令を信じようとするメロスは、王との間で激しく対立します。
* **自分の信念を貫く:** どんなに周囲が反対しても、羊飼い「羊飼い」を信じるという自分の信念を曲げないため、苦難の道を歩みます。
この行動が、国家や社会の規範に反し、最終的にはメロスを破滅へと導きます。
# セッションを保存する
>>> /save first_session
Created new model 'first_session'
推論中にGPUのステータスをモニタリングしていると、使用率90%ほどまでいくこともありました。ちゃんとWSL+Docker上からGPUを使用していることが確認できます。
まとめ
- Dockerを使用することで簡単にOllamaでモデル選択と推論が可能になる。
- Nvidia Container Toolkitによって、WSL・DockerコンテナからGPUを使用して推論が可能になる。
Discussion