粗筋
ミニPCを購入してサーバを構築したがiGPUを活用する用途がないので、LLMを動かす方法を試みることにした。
ハードウエア
Minisforum UM690S にはCPUとしてRyzen 9 6900HXが登載され、iGPUとしてRadeon 680Mを持つ。GPUはVRAMをメインメモリを共有して動作する。メインメモリは上限の64Gまで登載してあるので、BIOSでVRAMに8Gの領域を設定しておく。
ソフトウエア
サーバはFreeBSD 14.3-RELEASEを使用する。
依存パッケージ
llama.cppでiGPUを使用するには依存パッケージを導入する必要がある。
pkg install drm-kmod mesa-dri vulkan-loader vulkan-tools llama-cpp
インストールが完了したら、/etc/rc.conf に kld_list="amdgpu" を追記して再起動する。vulkaninfoでiGPUが使用可能か確認しておく。
$ vulkaninfo | grep deviceType
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceType = PHYSICAL_DEVICE_TYPE_CPU
llama-swap稼働用ユーザの作成
llama-swapを動作するユーザを作成する。ユーザはiGPUを利用可能にする必要があるので、vigrで追加したユーザをvideoグループに追加すること。
llama-swapのインストール
llama-swapのgithubからインストールする。FreeBSDのバイナリがあるのでそれを使用すると良い。これを先に追加したユーザのホームに展開した。
設定ファイルの作成
ホームディレクトリに設定ファイルを作成する。
models:
"gemma-3n-E4B":
cmd: |
/usr/local/bin/llama-server
--model /path_to_models/gemma-3n-E4B-it-Q4_K_S.gguf
-ngl 99
--ctx-size 32768
--temp 1.0
--top-k 64
--top-p 0.95
--min-p 0.0
--port ${PORT}
"phi-4-mini-reasoning":
cmd: |
/usr/local/bin/llama-server
--model /path_to_models/Phi-4-mini-reasoning-Q4_K_M.gguf
-ngl 99
--prio 3
--temp 0.8
--top-p 0.95
--jinja
--min-p 0.00
--ctx-size 32767
--port ${PORT}
使用したLLMはunsloth版で、ローカルに保存したものを流用した。llama-serverへ引き渡すパラメータは、unsloth版の設定を使用した。
llama-swapの起動
設定が完了したのでllama-swapを起動する。
$ llama-swap&
ポート8080で待ち受けするので、ブラウザから http://サーバIP:8080/ でアクセスする。llama-swapのWeb-UIが表示されたら、Modelsから使用するモデルをLoadする。モデル名のリンクからチャットI/Fに遷移して、動作を確認する。
OpenWeb-UIでの利用
llama-swapはOpenAI APIを持つので、外部アプリから利用も可能だ。既に稼働したOpenWeb-UIがあるので、そちらを設定してllama-swapを利用する。OpenWeb-UIの管理者パネルから「接続」を選び、OpenAI APIとして http://サーバIP:8080/v1 を設定する。これでllama-swapのモデルがOpenWeb-UIからも利用可能となる。
パフォーマンスについて
iGPUを使用したLLMは、CPUと較べると速いがdGPUに較べると性能に劣る。またVRAMが8Gなので小さなLLMしか動作しない。試しにQwen3-32BをLoadしてみたが、辛うじて動作するものの利用するのには不向きだ。しかし、8GでもLLMを動かせるのはありがたいものなので、サーバのiGPU利用手段として活用して欲しい。
御精讀ありがたうございました。