LLMの推論用にRTX3090 2台構成のPCを組んだので覚え書き
LLMの推論用にRTX 3090を2台搭載したPCを構築したので、その時の構成やセットアップの内容などを記録しておきます。
PC構成
今回構築したPCの構成は下記表の通りです。
CPUは前から使っていたものをそのまま流用しているので、ちょっとバランスが悪い構成になっちゃっています。
カテゴリ | パーツ名 |
---|---|
CPU | Ryzen 5 3600 |
GPU | VRAM 48GB / RTX 3090 VENTUS 3X 24G OC x 2 |
メモリ | 128GB / Crucial 32GB DDR4-3200 UDIMM CT32G4DFD832A x 4 |
M.2 SSD | 2TB / WD_Black SN850X NVMe SSD WDS200T2X0E |
マザーボード | ProArt B550-CREATOR |
電源ユニット | 1200W / Thermaltake TOUGHPOWER GF1 1200W PS-TPD-1200FNFAGJ-1 |
PCケース | Fractal Design Define R5 |
あとはケースファンをケース標準のものから交換&増設していたりします。
OSのインストール
WindowsよりLinuxのほうがLLMの推論が早いそうなのでLinuxを入れることにしました。
ディストリビューションは DistroWatch.com のランキング を参考にしつつ、 Pop!_OS を選定してみました。
他には Ubuntu、Linux Mint、EndeavourOS あたりのディストリビューションが候補でしたが、ネット上に情報が多いUbuntuの派生であることと、NVIDIAのドライバが標準でインストールされるという点を重視して Pop!_OS を選んでいます。
以下のような流れでセットアップしました。
- 公式サイトから Pop!_OS 22.04 LTS with NVIDIA のisoイメージをダウンロード
- isoイメージを、 Rufus を使用してUSBメモリ書き込み
- UEFIのセットアップ画面からセキュアブートを無効化する
- USBメモリからPCを起動する
- UEFIブートで起動するとうまくOSが立ち上がらなかったのですが(起動途中に停止してしまう)、レガシーブートで起動させるとうまくいきました
- 画面の指示に従ってインストールを進める
LLM推論環境を整える
とりあえず使える程度に環境を構築します。
docker
入っていると何かと便利なので、 docker をインストールしておきます。
公式マニュアルに記載されている、Ubuntuへの導入方法に従ってインストールします。
ollama
LLMの推論環境としてはひとまず ollama を入れます。
公式サイトの記述に従ってインストールすれば systemd に登録されて、システム起動時に ollama が自動的に立ち上がるようにしてくれます。
インストールしたあとは /etc/systemd/system/ollama.service
を編集して設定を追記します。
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
# ↓ここから
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KEEP_ALIVE=4h"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_CONTEXT_LENGTH=32768"
# ↑ここまでを追記
[Install]
WantedBy=default.target
このあたりの設定はお好みで調整してください。
編集がおわったら下記コマンドで反映します。
sudo systemctl daemon-reload
sudo systemctl restart ollama
モデルはとりあえず google/gemma-3-27b-it や Qwen/Qwen3-32B、Qwen/Qwen3-30B-A3B あたりをダウンロードしておきます。
僕は unsloth 版の量子化モデルをダウンロードしました。
ollama pull hf.co/unsloth/gemma-3-27b-it-GGUF:Q4_K_XL
ollama pull hf.co/unsloth/Qwen3-32B-GGUF:Q4_K_XL
ollama pull hf.co/unsloth/Qwen3-30B-A3B-GGUF:Q4_K_XL
Open WebUI
LLM推論のフロントエンドとしてOpen WebUIを入れます。
リポジトリの README.md
に記載されているdockerでの立ち上げ手順を参考にしつつ、以下内容で docker-compose.yml
を作成します。
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- 3000:8080
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- open-webui:/app/backend/data
restart: always
volumes:
open-webui:
こちらのファイルを適当なディレクトリに保存したら、同じディレクトリ内で docker compose up -d
を実行するとコンテナが立ち上がります。
コンテナの起動が完了したら、ブラウザで http://localhost:3000
を開くとOpen WebUIにアクセスできます。
Open WebUIにアクセスできたら、 管理者パネル を開いて 設定 > 接続 から Ollama API の Manage Ollama API Connections に http://host.docker.internal:11434
と入力します。
これで 管理者パネル の モデル の画面を開くと ollama で pull されているモデルが表示されると思います。
何も表示されない場合は、ホスト側のファイアーウォールでコンテナからの通信がブロックされている可能性があるため、sudo ufw allow 11434
などで通信を許可しておきます。
僕は面倒なので sudo ufw disable
でファイアウォール自体を無効化していますが自己責任で。
とりあえずここまで設定すればollamaでダウンロードしたLLMをOpen WebUIから使えるようになるはずです。やったね!
その他の設定
以下はお好みで設定します。
GPUのPowerLimit
GPUを2台も載せていると消費電力が気になるのでPowerLimitの設定します。
設定には以下リポジトリのスクリプトを使用しました。
nvpl.sh
をダウンロードして実行すると、システム起動時にGPUを指定した電力に制限するスクリプトを systemd に登録してくれます。
僕は 240W(80%) に制限するように設定しました。
この値は下記の投稿を参考にしています。
Tailscaleを入れる
VPNサービスであるTailscaleを入れておくと、出先からでもマシンにアクセスできて便利です。
おわりに
一般的な構成ではないのであまり参考にならないかと思いますが、もし同様の環境を構築しようと検討されている方などのお役に立ちましたら幸いです。
お疲れ様でした。
Discussion