1. はじめに
自宅 LAN に AI 環境が欲しくて PC を調達した。ThinkPad T16 Gen4 AMD メモリー 32GB でもそれなりに動くことはわかっていたけど、VRAM 32GB で大きめのモデルを使用したときに、AI エージェントとして果たしてどれくらい使えるのか気になっていた。また、Codex や Claude Code を Ollama と組み合わせることで、賢さは別として API 課金ゼロの開発環境も構築できる。
趣味の個人利用で Claude や OpenAI の従量課金トークン貧乏になりたくないから、誰にも迷惑をかけずにいろいろ試行錯誤が可能なローカル LLM はまさに救いの神。決して安くはない金額だけど、これも自分への投資(と趣味)と勝手に納得している。
2. 購入した PCパーツたち
モデルは gemma4:26b を基準として、VRAM 32GB なら余裕だろうということで GPUx2 で自作した。最近の SSD やメモリー高騰はどうしようもなく、暫く待てば安くなるという保証もない。
GPU は、普通なら NVIDIA GeForce RTX 5060 Ti 16GB が王道なのを理解したうえで、ROCm に期待しつつRTX 5060 Ti の6割程度の価格で入手できる AMD Radeon RX 9060 XT を選択した。企業で導入するなら NVIDIA だろうけど。
マザーボードは GPUx2 は絶対条件なので、cute_agapan9087 の note で分かりやすく紹介されている PROART-X870E CREATOR WIFI を購入した。ただし、BIOS で Wi-Fi も 10Gb Ethernet も接続予定がないから無効化するなど、性能からすると勿体ないとも言える。でもそれ以上に、厚さ 2.3 スロットを占有する SAPPHIRE PULSE Radeon RX 9060 XT を2枚余裕で載せられることは何事にも代えがたいメリット。
CPU は Zen 5 アーキテクチャで TDP 65W(最大 105W)の Ryzen 7 9700X。オーバークロックとか全く興味ないから BIOS でAMD PBO などは無効化している。このCPU はクーラー無しだから別途、Noctua NH-U12S を取り付けたけど CPU に対して少し過大。ケースが大きいから余裕で納まるけど。
電源ユニットも 850W で足りるハズだけど、少しくらい効率を犠牲にしてでも安心感を得るために 1000W にした。
3. Ubuntu Server 26.04
サーバー用の OS。Debian か Ubuntu で迷ったけれど、比較的新しいハードウェアに対応している Ubuntu にした。
とりあえず、ssh でログインしたときの日本語化の設定。
日本語言語パックのインストール
sudo apt update
sudo apt install -y language-pack-ja manpages-ja manpages-ja-de
日本語ロケール生成
sudo locale-gen ja_JP.UTF-8
システム全体のロケールを日本語に設定
sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja
現在のセッションに即時反映(しなくてもいい)
source /etc/default/locale
タイムゾーンを日本(東京)に設定
sudo timedatectl set-timezone Asia/Tokyo
SSH クライアントによる LANG 上書き防止
SSH クライアントが LANG=en_US.UTF-8 を送ってくると、日本語設定が無効化されるから対策する。sudo vi /etc/ssh/sshd_config で以下をコメントアウトする。
# AcceptEnv LANG LC_*sudo systemctl restart ssh
確認
一度ログアウトして再度ログイン、次のようなコマンドで確認する。
locale
date
man ls
サーバーの CUI での文字化け防止
日本語フォントをインストールする。
sudo apt install -y fonts-noto-cjk
TTY のフォント設定を UTF-8 に変更する。
sudo dpkg-reconfigure console-setup- Character set → UTF-8
- Font → Terminus(または UTF-8 対応フォント)
- Font size → 任意
再起動する。
sudo reboot
4. Ollama インストール
インストール
公式スクリプトでインストールした。
curl -fsSL https://ollama.com/install.sh | sh
AMD RDNA 4 に関する設定を追加する。
併せて LAN 内のクライアントから接続できるようにする。
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=12.0.0"
Environment="OLLAMA_HOST=0.0.0.0"sudo systemctl daemon-reload
sudo systemctl restart ollama
GPU 動作状況を確認する CLI ツールをインストールする。
sudo apt install rocm-smi
watch で実行する。
watch -n 1 rocm-smi
モデルのインストールは ollama pull gemma4:12b など。ollama run gemma4:12b で CLI 環境で実行できる。
gemma4:31b を動作させてみる
・Modelfile の作成
任意の場所に Modelfile という名前のファイルを作成し、以下を記述する。
FROM gemma4:31b
# コンテキスト長を16K(16384)に制限してVRAMを節約
PARAMETER num_ctx 16384
・カスタムモデルの構築
ターミナルで以下のコマンドを実行し、カスタムモデル(例: gemma4-31b-vram32)を構築する。
VARM 72% 程度で実行できたからもう少し余裕は有りそうだけど無理はしない。
ollama create gemma4-31b-vram32 -f ./Modelfile
5. OpenClaw のインストール(クライアント PC の話)
AI エージェント基盤。チャット画面も含まれているから OpenWebUI は不要になった。こちらも公式サイトのスクリプトでインストールした。
ちなみに、OpenClaw をサーバーにインストールして運用することもできるけど、その場合は ssh トンネルを利用することになる。どちらの運用方法が適しているかはケースバイケースなのでお好みでどうぞ。自分は手元の T16 にインストールした。
外部検索 SearXNG に関する設定
以下は http://192.168.1.153 で SearXNG を動作させている場合。
修正箇所はユーザーサービスと json ファイル。
サービスの修正
systemctl --user edit openclaw-gateway.service
URL を正しく入力する。最初のインストール時点で設定されていれば問題ない。
[Service]
Environment="SEARXNG_BASE_URL=http://192.168.1.153:8080"systemctl --user daemon-reload
systemctl --user restart openclaw-gateway.service
設定ファイルの修正
vi ./.openclaw/openclaw.json "searxng": {
"enabled": true,
"config": {
"webSearch": {
"baseUrl": "http://192.168.1.153:8080"
}
}
}
モデルの追加
ollama pull でモデルを追加したら、OpenClaw でも選択ができるように、次のコマンドで Model の項目を選択して追加する。
openclaw configure
6. Drupal コンテンツタイプのフィールドのプロンプト修正
記事本文から概要を生成するにあたり、条件や内容を明確にしないと正しく動作しなかった。
gemma4:e4b ならそれなりに要約してくれるけれど、gemma4:12b や 26b では Drupal が認識できる JSON フォーマットにならなかったからプロンプトを修正した。大きなモデルのほうが自然な文章として読みやすく要約してくれる。
【条件】
・回答は必ず有効なJSONフォーマットのみで返却してください。
・マークダウンの枠( ```json )や、挨拶、説明などの余計なテキストは絶対に含めず、純粋なJSONデータだけを出力してください。
【内容】
以下の文章を、次の要件で150文字程度に要約してください。
・文末に文字数は表示しないこと。
・一人称は「自分」若しくは「私」とすること。ただし、使用は必要な文章に限定し最小限とすること。
・文体は、「する」「した」「しない」「しよう」「た」「だった」「ではない」「だろう」などの普通形を用いる文体で、小説や日記などで用いられる普通体(常体)とすること。
{{ context }}
7. 終わりに
最終的な構成はこんな感じ。
- AI サーバー:推論専用
ollama、各種 LLM - 検索サーバー(VM):外部検索専用
SearXNG - Drupal サーバー(VM):外部公開専用
Drupal - クライアント(T16):UI、エージェント機能
OpenClaw
AI 基盤の構築はとりあえず完了。お一人様ローカル LLM なら十分な構成だと思っている。次は何かしらの具体的なテーマで AI エージェントを使ってみる。まずはサーバーログ調査フローのような、簡単なワークフローかな。
また、せっかくだから Codex を使った開発も手掛けよう。