2025年8月14日
自宅PCをローカルLLMサーバにする【Nvidia/K3s/Ollama/Gemma3】
個人的Ubuntu24.04 Serverセットアップメモ の続きです。VRAM 8 GB しかない GPU で、マルチモーダル入力可能なローカル LLM サーバーを構築していきます。結論、これからローカル LLM のために GPU を用意するなら RTX 40xx 世代以降がおすすめ。
環境
- Ubuntu 24.04 Server
- Ryzen 7 3700X
- メモリ 32GB
- NVIDIA GeForce RTX 2070
- VRAM 8 GB
- nvidia-driver-575 575.64.03-0ubuntu0.24.04.1
- NVIDIA Container Toolkit 1.17.8-1
- K3s v1.32.6+k3s1
- Helm v3.15.3
- NVIDIA GPU Operator 25.3.2
vLLM v0.10.0- Ollama v0.11.2
前提条件
- Nvidia ドライバを導入済み
- Nvidia Container Toolkit を導入済み
- K3s セットアップ済み
各手順は 前回の記事 を参照
NVIDIA GPU Operator 導入
K3s のドキュメントにはドライバと container toolkit をインストールした状態で K3s をセットアップすれば、そのまま pod で GPU を要求すれば動くふうに書かれていますが、筆者の環境ではダメだったので、ネットの情報を頼りに 1 NVIDIA GPU Operator をインストールしました。
(以下、実際には Helmfile を使っているのでコマンドは間違っている可能性がある)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update
helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --version=v25.3.2 \ --values=values.yaml
values.yaml
operator: runtimeClass: nvidia # upgrade CRD on chart upgrade, requires --disable-openapi-validation flag # to be passed during helm upgrade. upgradeCRD: true driver: enabled: false toolkit: enabled: false dcgmExporter: enabled: false config: name: ""
NVIDIA GPU Operator のページ に書かれているように、ノード上にドライバと container toolkit がインストールされている場合は driver.enabled=false
toolkit.enabled=false
を設定して OK です。
dcgmExporter
の項目は helm install 時にコケたので入れているだけで、なしでいけるならなしでいいです。
Ollama デプロイ
otwld/ollama-helm を使用します。
helm repo add otwld https://helm.otwld.com/ helm repo update helm install --wait ollama \ -n ollama --create-namespace \ otwld/ollama \ --version=v1.26.0 \ --values values.yaml
values.yaml
ollama: gpu: enabled: true type: 'nvidia' number: 1 models: pull: - gemma3:4b runtimeClassName: nvidia persistentVolume: enabled: true
動作確認します。
kubectl run curl-test \ --rm -it \ --image=curlimages/curl:8.7.1 \ --restart=Never \ -- curl -s http://ollama.ollama:11434/api/generate \ -H "Content-Type: application/json" \ -d '{"model": "gemma3:4b", "prompt": "Hello from Kubernetes!", "stream": false}'
(レスポンスを見やすくフォーマットしています)
{ "model": "gemma3:4b", "created_at": "2025-08-13T01:12:45.465213503Z", "response": "Hello to you too from my digital world! 👋 \n\nIt’s great to hear from someone running in Kubernetes. It's a powerful platform for deploying and managing applications. \n\nWhat's happening in your cluster? Are you running anything interesting? Do you want to chat about Kubernetes, or perhaps you have a question you'd like to ask?", "done": true, "done_reason": "stop", "context": [ ... ], "total_duration": 1185074966, "load_duration": 118207640, "prompt_eval_count": 13, "prompt_eval_duration": 32136908, "eval_count": 75, "eval_duration": 1034268789 }
画像も送ってみます。
kubectl run curl-test \ --rm -it \ --image=curlimages/curl:8.7.1 \ --restart=Never \ -- sh -c 'wget https://sogo.dev/images/icon.png \ && base64 -w 0 icon.png > image.txt \ && curl -s http://ollama.ollama:11434/api/generate \ -H "Content-Type: application/json" \ -d "{\"model\": \"gemma3:4b\", \"prompt\": \"何が写っていますか\", \"images\":[\"$(cat image.txt)\"], \"stream\": false}"'
{ "model": "gemma3:4b", "created_at": "2025-08-13T01:48:30.629190309Z", "response": "画像には、橙色のドッグ(長毛のドッグ)の横顔が写っています。", "done": true, "done_reason": "stop", "context": [ ... ], "total_duration": 3821486516, "load_duration": 2237497834, "prompt_eval_count": 275, "prompt_eval_duration": 1299865248, "eval_count": 22, "eval_duration": 283175986 }
いいかんじですね!
おまけ: vLLM 編
最初は、本番用途に強いとされる vLLM で構築を進めていたのですが、私の GPU では Gemma 3 4B を動かせなかったので断念しました。
- メモリ 8 GB では通常の 32 ビットを動かすには足りない
- BF16, SFP8, INT4 については、RTX 20xx が対応していない、または vLLM が要求するバージョン未満の世代の GPU なので不可
Gemma 3 1B なら GPU で動きましたが、1B はテキストのみでマルチモーダル非対応なので、用途に合わず却下。vLLM は CPU でも動く みたいですが、pre-built なコンテナイメージが amd64 用に用意されてなかったので試していません。
参考文献
- 高度なオプション / 設定 | K3s
- Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit
- k3sでNvidia GPUを使用する
- Installing the NVIDIA GPU Operator — NVIDIA GPU Operator
- k8s クラスタからGPUを使用する方法について( gpu-operator)
- Gemma 3 モデルの概要 | Google AI for Developers
Footnotes
-
k3sでNvidia GPUを使用する の記事でも k3s 構築直後の状態では GPU が使えないと書かれている。 ↩