本連載でも幾度となく生成AI(LLM)について紹介しており、また紹介していないものを含めて現在は百花繚乱である。モデルに関しては、月替りで出来のいいものがリリースされているような状況で、最新情報を追いかけるだけでも大変である。2025年始に話題をさらったDeepSeek-R1は、執筆段階ではもう過去のものとなっている。今ホットなのはQwen3だが、おそらく再来月くらいには別のものになっているだろう。
そして小さなサイズのモデルでもそれなりに使い物になってきている。ということは、VRAMが8GBしかないようなdGPUにもチャンスが回ってきた。
というわけで、今回は本誌の読者であれば部屋のそのへんに転がっているだろう、余っているPCと余っているビデオカード(dGPU)を使用してLLMサーバーを建てる方法を紹介する。具体的にはOllamaを使用する。そして別PCから接続して使用する。
OllamaはGo言語で書かれており、シングルバイナリである。オープンソースでマルチプラットフォームであり、Windowsでも動作はする。しかしWindowsはクライアント用OSであり、そぐわない。そこで登場するのは我らがUbuntuというわけだ。
使用するPCとdGPU
今回使用するPCは次のようなスペックだ。
パーツ | メーカー | 型番 |
---|---|---|
CPU | AMD | Ryzen 5 5600G |
メモリ | Crucial | CT2K32G4DFD832A |
SSD | KIOXIA | SSD-CK500N3/N |
ケース | ASRock | DeskMeet X300/B/BB/BOX/JP |
使用するdGPUはNVIDIAとAMDの両方とする。Intelは、残念ながらOllamaがネイティブでは対応していない(Intelが派生版を用意している)ので除く。
NVIDIAは、MSIのGeForce RTX 3060 AERO ITX 12G OC、AMDはASRockのRX6600XT CLI 8Gだ。後者はともかく、前者は現在も現役バリバリであまり部屋に転がっていないかもしれない。筆者も転がっていたわけではないが。
Ubuntu Serverのインストール
Ubuntu Serverのインストール方法は第26回で紹介している。こちらでインストールしているのは22.04 LTSだが、今回インストールしたのは24.04.2 LTSだ。インストール方法は概ね同じで、第26回が参考になる。
1つ注意するところがあるとすれば、「Search for third-party drivers」にはチェックを入れないことだ。
インストール完了後は、次のコマンドを実行する。
$ sudo apt -U upgrade
$ sudo apt install avahi-daemon
$ sudo locale-gen ja_JP.UTF-8
$ sudo dpkg-reconfigure -f noninteractive locales
$ echo "LANG=ja_JP.UTF-8" | sudo tee /etc/default/locale
$ sudo timedatectl set-timezone Asia/Tokyo
これで、あとはリモートから作業するといいだろう。avahi-daemonをインストールしたので、mDNSでの名前解決ができる。
このあと設定ファイルを変更するところがある。Ubuntu Serverデフォルトのエディタであるnanoではないものに変更したい場合は次のコマンドを実行する。
$ sudo update-alternatives --config editor
もちろん、インストールされていない場合は事前にインストールしておこう。
Ollamaのインストール
Ollamaのインストールといえば、Dockerをインストールして……となりがちで、それはそれで正しい。しかし前述の通りシングルバイナリなので、Dockerで得られるメリットよりもDockerという「層」を経由することによるデメリットのほうが大きいと考え、ここでは次のコマンドを実行して直接インストールする。
$ curl -fsSL https://ollama.com/install.sh | sh
ちなみにアップデートも同じコマンドを実行する。
Ollamaは、デフォルトだとローカルからのアクセスしか許可しない。そこで、自動起動するために使用しているsystemdのunitファイルに追記する。次のコマンドを実行する。
$ sudo systemctl edit --full ollama.service
次のように追記する。
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
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"
$ sudo systemctl restart ollama.service
すなわち「Environment=“OLLAMA_HOST=0.0.0.0:11434”」を追加する。これでLAN内どのPCからでもアクセスが可能になる。
続けてOllamaを再起動する。
$ sudo systemctl restart ollama.service
モデルも必要なのでインストールするが、Qwen3をはじめ多くのモデルでは複数のサイズを用意している。どれをインストールするといいのかは難しいが、おおむねモデルのサイズ(パラメータ数)とVRAMの容量が同じくらいになるものを選択すると間違いがない。たとえばVRAMが12GBであれば14B、8GBであれば8Bが1つの目安となる。
モデルのインストールは次のコマンドを実行する。
$ ollama pull qwen3:14b
ご覧の通り「14b」の例で、8Bの場合は「8b」とする。
NVIDIAの場合
ここまでは共通パートで、ここからが個別パートだ。
UbuntuはNVIDIAのプロプライエタリなドライバで、サーバー版も用意しているが、これを利用「しない」のがポイントとなる。
従って、次のコマンドを実行してドライバのインストールと有効化を行なう。
$ sudo ubuntu-drivers install
$ sudo reboot
実際にdGPUを使用しているかどうかは、次のコマンドで分かる。
2秒ごとに更新するオプションをつけて起動している。終了する場合はCtrl+Cキーを押す。
AMDの場合
OllamaでROCmを使用するためには、AMDGPUというドライバ(カーネルモジュール)をインストールする必要がある。今回はバージョン6.4をインストールするが、最新の方法はROCmのドキュメントを参照してほしい。
$ wget https://repo.radeon.com/amdgpu-install/6.4/ubuntu/noble/amdgpu-install_6.4.60400-1_all.deb
$ sudo apt install ./amdgpu-install_6.4.60400-1_all.deb
$ sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
$ sudo apt install amdgpu-dkms
さらにRadeon RX 6600 XTではROCmは使用できないことになっている。しかし、環境変数を設定すれば強制的に認識させることができる。やはりunitファイルに追記することになる。
$ sudo systemctl edit --full ollama.service
次のように「Environment=”HSA_OVERRIDE_GFX_VERSION=10.3.0″」を追記する。
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"
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"
ちなみにこの設定はRadeon RX 6400/6500 XT/6600 XTで有効だ。
ここまでできたら再起動する。
実際にdGPUを使用しているかどうかは、次のコマンドで分かる。
$ sudo apt install radeontop
$ sudo radeontop
負荷が高ければdGPUを使用しているということだ。
クライアント
Ollamaクライントはたくさんリリースされている。この中からどれでも好きなものを選択すればいいのだが(中には開発が止まっているようなものも組まれるが)、今回はWitsyを選択した。
GitHubのリリースページからバイナリをダウンロードする。Ubuntuであれば「Witsy_(バージョン)_amd64.deb」を、Windowsであれば「Witsy-(バージョン)-win32-x64.Setup.exe」をダウンロードし、インストールするといいだろう。その後起動する。
Ollamaサーバーへの接続は、まずは左下の「Settings」をクリックする。すると設定ウィンドウが開く。
「Models」-「Ollama」を開き、まずは「API Base URL」にOllamaサーバーのホスト名またはIPアドレスとポート番号を入力する。ポート番号はユニットファイルにもある通り11434となる。
入力後「Chat model」の「Refresh」をクリックするとインストールされているモデルの情報を取得するので、使用したいモデルを選択し、設定ウィンドウを閉じる。
メインウィンドウの右上(ハンバーガーメニューの左側)をクリックすると右ペインが開く。ここで先程設定した「LLM Provider」と「LLM Model」を選択し、さらに「Chat Language」を「日本語」にする。
そして画面下の入力欄(Enter to submit~)に質問したいことを入力してエンターキーを押すと、Ollamaサーバーと通信し、しばらく待つと結果が返ってくる。
例ではUbuntuについて質問してみた。8Bのモデルでもまずまず正確な回答を得られる。「Ubuntu Software Center」はずいぶん前に廃止されているが。
やはり知識を問うものは厳しいが、何かを考えさせるのであれば実用的であるという実感を得た。また前述の通り新しいモデルがどんどん登場しており、きっとさらにいいものが今後も出てくるであろう。そんな進化の様子を、部屋に転がっているようなPCで体験できるので、いろいろ楽しい。本当に楽しい。
🧠 編集部の感想:
このニュースは、余っているPCやGPUを活用して生成AIサーバーを構築するアイデアが面白いです。特にUbuntuを使った構築手法が詳細に説明されているので、実践的で実用性があります。また、生成AIの進化が目まぐるしく、利用方法の幅が広がっていることがわかり、興味をそそられました。
Views: 0