はじめに
Minisforum UM890 が手に入ったので、せっかくならば ollama をインストールし、gpt-oss:20b を動かしてみたので、その内容を自分の備忘録のためにも書いてみたメモです。似たような環境の方の参考になれば嬉しいです。
最終ゴール
とりあえず ollama + gpt-oss:20b が GPU を使って応答してくれる状況を作ることです。
前提
- PC: Minisforum UM890
- CPU: AMD Ryzen 9 7940HS
- GPU: AMD Radeon 780M
- OS: RockyLinux 9
AMD GPU ドライバのインストール
基本的に公式のinstallation guideに従ってインストールすれば良いです。
必要なところだけ抜粋すると下記のようになります。
# dnf install -y https://repo.radeon.com/amdgpu-install/7.2.1/el/9.7/amdgpu-install-7.2.1.70201-1.el9.noarch.rpm
# dnf install -y wget
# dnf clean all
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
# rpm -ivh epel-release-latest-9.noarch.rpm
# crb enable
# dnf install -y python3-setuptools python3-wheel kernel-headers kernel-devel kernel-devel-matched
# usermod -a -G render,video $LOGNAME
# dnf install -y rocm
# dnf install -y amdgpu-dkms
インストール後は reboot してください。
reboot 後とりあえず、下記のように情報が取得できれば大丈夫です。
# amd-smi
+------------------------------------------------------------------------------+
| AMD-SMI 26.2.2+e1a6bc5663 amdgpu version: Linuxver ROCm version: 7.2.1 |
| VBIOS version: 022.012.000.027.000001 |
| Platform: Linux Baremetal |
|-------------------------------------+----------------------------------------|
| BDF GPU-Name | Mem-Uti Temp UEC Power-Usage |
| GPU HIP-ID OAM-ID Partition-Mode | GFX-Uti Fan Mem-Usage |
|=====================================+========================================|
| 0000:c5:00.0 AMD Radeon Graphics | N/A N/A 0 N/A |
| 0 0 N/A N/A | N/A N/A 68/2048 MB |
+-------------------------------------+----------------------------------------+
+------------------------------------------------------------------------------+
| Processes: |
| GPU PID Process Name GTT_MEM VRAM_MEM MEM_USAGE CU % |
|==============================================================================|
| No running processes found |
+------------------------------------------------------------------------------+
AMD TTM のインストール
TTM の割り当て具合や、設定変更に使用しますので、下記コマンドでインストールします。
# dnf install -y python3.12-pip
# pip3.12 install amd-debug-tools
下記コマンドで実際に割り当てられている TTM が確認できるとひとまず良いです。
# amd-ttm
💻 Current TTM pages limit: 7911315 pages (30.18 GB)
💻 Total system memory: 60.36 GB
ollama のインストールと設定
インストール
こちらも公式のドキュメントに従ってインストールすると良いです。ただし、zstd がない場合は怒られますので、インストールされていない場合は下記のようにインストールしてください。
# dnf install -y zstd
# curl -fsSL https://ollama.com/install.sh | sh
設定
ollama の環境変数を systemctl edit 経由で下記のように設定します。
# systemctl edit ollama.service
追加内容は下記の通りです。
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="HSA_OVERRIDE_GFX_VERSION=11.0.2"
それぞれのパラメータの概要は下記の通りです。
OLLAMA_KEEP_ALIVE
モデルがメモリに保持される期間であり、筆者としては今回のホストを基本的に ollama にしか使わないため、-1 (永続) としました。
OLLAMA_HOST
ollama サーバの listen に関する設定であり、今回は外からもアクセスさせたいため、 0.0.0.0:11434 としています。
HSA_OVERRIDE_GFX_VERSION
今回の場合は
# rocminfo | grep gfx
Name: gfx1103
Name: amdgcn-amd-amdhsa--gfx1103
Name: amdgcn-amd-amdhsa--gfx11-generic
ということで、11.0.3を設定したところ、どうもGPUを使ってくれないので、11.0.2を設定します。詳細は公式ドキュメントをご確認ください。
gpt-oss:20b の起動
さて、下準備が整ったところで、本題の gpt-oss:20b を動かしていきます。まずは下記コマンドで、pull します。結構時間がかかりますので、気長にお待ちください。
# ollama pull gpt-oss:20b
実際に gpt-oss:20b を使ってみると、GPU 100% ということで、GPU をちゃんと使っていそうですね。
# ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gpt-oss:20b 17052f91a42e 15 GB 100% GPU 32768 Forever
ちなみに、amd-ttm で TTM のサイズを調整可能ですので、必要に応じて色々変更いただけると良いかなと思います。
# amd-ttm --set 48
🐧 Successfully set TTM pages limit to 12582912 pages (48.00 GB)
🐧 Configuration written to /etc/modprobe.d/ttm.conf
○ NOTE: You need to reboot for changes to take effect.
余談(ほぼ本編)
記事を書いていく中で ollama の version や kernel の version が上がったりし、gpu を認識しなくなったり、ollama が core を吐いて gpu を使ってくれなかったりしたので、その辺りの回避策を共有したいと思います。
gpu を認識しなくなった話
secure boot が原因でした。とりあえず読み込めばなんでも OK くらいな感覚でしたので、bios で secure boot を切ると無事読み込まれました。
ollama が gpu を使ってくれなかった話
起動時に /var/log/messages に下記のようなエラーが出ており、gpu を使ってくれなくなりました。
systemd-coredump[1799]: Process 1700 (ollama) of user 995 dumped core.#012#012Module librocroller.so.1 without build-id.#012Module libggml-hip.so without build-id.#012Stack trace of thread 1703:#012#0 0x00007f155468d02c __pthread_kill_implementation (libc.so.6 + 0x8d02c)#012#1 0x00007f155463fb86 raise (libc.so.6 + 0x3fb86)#012#2 0x00007f1554629873 abort (libc.so.6 + 0x29873)#012#3 0x00007f14ff7943ee rocblas_abort (librocblas.so.5 + 0x27943ee)#012#4 0x00007f14ff546a5e _ZN12_GLOBAL__N_123get_library_and_adapterEPSt10shared_ptrIN7Tensile21MasterSolutionLibraryINS1_18ContractionProblemENS1_19ContractionSolutionEEEEPS0_I20hipDeviceProp_tR0600Ei (librocblas.so.5 + 0x2546a5e)#012#5 0x00007f14d38ddd62 n/a (libggml-hip.so + 0x2baddd62)#012#6 0x00007f14d38de980 ggml_backend_cuda_reg (libggml-hip.so + 0x2bade980)#012#7 0x00005580ec92707a n/a (ollama + 0x162807a)#012#8 0x00005580ec92368d n/a (ollama + 0x162468d)#012#9 0x00005580ec92492f n/a (ollama + 0x162592f)#012#10 0x00005580eb73e1a1 n/a (ollama + 0x43f1a1)#012ELF object binary architecture: AMD x86-64
vulkan を有効にすれば問題なく動作するという話を見かけましたので、
# amdgpu-install --vulkan=amdvlk,pro
にて vulkan をインストール後、
# systemctl edit ollama
にて
Environment="OLLAMA_VULKAN=1"
を追加し、ollama を restart すれば無事使ってくれるようになりました。
最後に
いかがだったでしょうか。余談部分がほぼ筆者の共有したい内容でしたが、同じような環境で、同じように引っかかった人の助けに少しでもなれば幸いです。