そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

現時点(2026/03)でのEVO-X2でのOllama運用環境メモ

うちではEVO-X2にUbuntuを入れてローカルLLMを運用している。

blue1st.hateblo.jp

いっときLlama.cpp Serverで動かしていたが、色々なモデルを試すにはOllamaが手軽なんだよなあってことで今はOllamaを使う方向に戻っている。

昨晩サーバ環境をアプデをしていたら思いのほか沼ってしまって、最初スルッといけたのが幸運だっただけで意外とバージョンまわりの相性があるものなのかもなと思ったので、今時点での環境を記録に残しておこうと思う。


OS・カーネル

LTSなUbuntu24.04.4を使用。

$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 24.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.4 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

カーネルは6.14

$ uname -r
6.14.0-24-generic

ROCm・ドライバ

昨日の沼りどころは結果的にいえばここで、僕の今時点での運用では最新ではない7.1.1で動かす感じになる。

rocm.docs.amd.com

$ apt list --installed rocm
一覧表示... 完了
rocm/noble,now 7.1.1.70101-38~24.04 amd64 [インストール済み]
$ modinfo amdgpu | grep ^version
version:        6.16.6

Docker

Dockerは29.3.0

$ docker version
Client: Docker Engine - Community
 Version:           29.3.0
 API version:       1.54
 Go version:        go1.25.7
 Git commit:        5927d80
 Built:             Thu Mar  5 14:25:48 2026
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.3.0
  API version:      1.54 (minimum version 1.40)
  Go version:       go1.25.7
  Git commit:       83bca51
  Built:            Thu Mar  5 14:25:48 2026
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.2.2
  GitCommit:        301b2dac98f15c27117da5c8af12118a041a31d9
 runc:
  Version:          1.3.4
  GitCommit:        v1.3.4-0-gd6d73eb8
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Ollama

Ollamaはこれまた直近で動きが怪しくて、うちの環境では0.17.7がちゃんと動く最新バージョンになっている。

ホストはROCm7.1.1なのにDockerfileは7.2ベースでよくよく考えると変な感じはするが、実際問題今のところこれで動いてるんだよなあ。

外部からOLLAMA_VERSION変数によりインストールバージョンを指定できるようなものを用意しておいて・・・

FROM rocm/dev-ubuntu-24.04:7.2

SHELL ["/bin/bash", "-lc"]

ARG OLLAMA_VERSION

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      ca-certificates curl zstd \
 && rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://ollama.com/install.sh | sh

VOLUME ["/root/.ollama"]

ENV OLLAMA_HOST=0.0.0.0:11434
EXPOSE 11434

CMD ["ollama", "serve"]

以下のようなdocker-compose.ymlで0.17.7を指定している。

services:
  ollama:
    restart: always  
    build:
      context: .
      args:
        - OLLAMA_VERSION=0.17.7
    environment:
      - OLLAMA_ORIGINS=*
      - HSA_OVERRIDE_GFX_VERSION=11.5.1
      - HIP_VISIBLE_DEVICES=0
      - ROCR_VISIBLE_DEVICES=0  
    group_add:
      - video
      - render
    security_opt:
      - seccomp=unconfined
      - label=disable
    cap_add:
      - SYS_PTRACE
    ports:
      - "11434:11434"
    devices:
      - /dev/kfd:/dev/kfd
      - /dev/dri:/dev/dri
    volumes:
      - /opt/amdgpu/share/:/opt/amdgpu/share/:ro 
      - ollama:/root/.ollama

Ollamaの方を0.17.8以降にしようとするとどうもOllamaが上手くGPU動作せず、Ollamaのリポジトリを眺めるに直近でのビルドはROCm7.2ベースになったりしてて、一方で自分の環境はROCm7.1.1だったので「じゃあ上げとくか」という軽いノリで昨晩いじってたんだけど、そうすると既存で動いていたイメージすらVRAMのアロケートエラーが生じてOllamaがGPUを見つけてくれずCPUでの激重動作になってしまうという状態に陥っちゃったんだよなあ・・・

長期的には解決して最新版を追いたいとこではあるが、Dockerを挟んでるのがもしかすると難しさの一因かもしれない。


ついでの機会なんでローカルモデルについて語ると、色々と大きな動きがあった去年後半と打って変わって今年に入ってからは個人的にはそこまで心躍るニュースは乏しいかな。

というのも今のところのローカルLLM体感としては~20bは用途を特化すればなんとか、20~30bとかのサイズでギリ汎用用途で使えそうって肌感を持っていて、だからこそグラボでなんとか動かしていた時期は色々な特色あるモデルを試したりファインチューニングを試みる価値を感じていた。

でもそれがgpt-oss:120bが実用ラインの速度で動いてくれる環境を持ってしまうと、大体の用途でそれなりに上手く働いてくれるので、「まあ、gpt-oss:120b使っとけば良いか」って気分になってしまうのだ。

Qwen3.5はすごく評価する意見と否定する意見の両方を目にするんだけど、単純にあえて切り替えて使うだけのモチベが沸いてないとこはある。

あまりにサイズに見合わない高評価はベンチマークリーク的なやつなんじゃないかって警戒心が湧いてしまうわけでして、変な落とし穴を恐れて積極的には使いたくないなと思ってしまう面がある。

画像認識できるんで局所的な用途では普通に便利なんだけどね。


追記: ROCm7.2にして公式イメージollama/ollama:0.18.2-rocm動かせた!

記事書くだけ書いちゃったけど、やっぱ最新が動かないの気持ち悪いよねってことでGeminiパイセン片手に試行錯誤して上手いこと動かせたっぽい!

既存のROCmまわりのものをキッチリ消した上で

# 既存のインストーラーを削除
sudo apt purge amdgpu-install -y
sudo apt autoremove -y

# リポジトリ設定ファイルのバックアップ(または削除)
sudo rm /etc/apt/sources.list.d/amdgpu.list
sudo rm /etc/apt/sources.list.d/rocm.list
sudo apt update

現時点でのlatestであるROCm7.2に入れ替えて・・・ rocm.docs.amd.com

以下のyamlに書き換え。

services:
  ollama:
    image: ollama/ollama:0.18.2-rocm
    container_name: ollama
    restart: always
    environment:
      # APIへの外部アクセスを許可する場合に設定(CORS対策)
      - OLLAMA_ORIGINS=*
      # 【重要】iGPU (APU) での初期化失敗やフリーズを防ぐための設定
      - HSA_ENABLE_SDMA=0
      # 【重要】Strix Point (gfx1151) を認識させるための環境変数
      - HSA_OVERRIDE_GFX_VERSION=11.5.1
    # GPUデバイスへのアクセス権限設定
    group_add:
      - video
    # デバッグやプロファイリングに必要な権限
    cap_add:
      - SYS_PTRACE
    # SELinux環境下などで権限エラーが出る場合の回避策
    security_opt:
      - label:disable
    ports:
      - "11434:11434"
    devices:
      # AMD GPUの計算およびレンダリングに必要なデバイスファイル
      - /dev/kfd:/dev/kfd
      - /dev/dri:/dev/dri
    volumes:
      # モデルデータの永続化
      - ollama_data:/root/.ollama

volumes:
  ollama_data:

昨晩とサーバ環境が変わったか、はたまた取り除いた環境変数や設定要素のどれかが効いたのかは定かではないが、ひとまずこれで最低限WebUIでの応答はできてることは確認。

思いの外スムーズにいけて拍子抜け。やっぱりPCまわりのトラブルは(許されるなら)一晩置いて落ち着いてから取り掛かるのが良いなあ。

これまでの経験的にollama:rocmはcudaと比べてシェアが低くてテストされずらいせいか、不意のアプデで急に挙動が怪しくなることがあるので、都度バージョンタグを明記しての運用がおすすめ。


ベンチマーク

記録ついでなんでROCm7.2・Ollama0.18.2環境でのベンチマークも残してみた。

計測コマンド

# 基本プロンプト
PROMPT="量子コンピュータの仕組みを500文字程度で解説してください。"

# 計測用ワンライナー
curl -s http://localhost:11434/api/generate -d "{
  \"model\": \"<model_name>\",
  \"prompt\": \"$PROMPT\",
  \"stream\": false
}" | jq -r '"Tokens/s: \(.eval_count / (.eval_duration / 1000000000))"'

モデル

モデル名 平均速度 (Tokens/s) 評価
nemotron-3-nano:30b 60.03 最速。思考の速度を完全に上回る書き込み。
gpt-oss:20b 48.78 爆速。ほぼ瞬時に出力完了。
qwen3.5:35b 43.12 極めて快適。30b帯としては非常に優秀な数値。
gpt-oss:120b 35.43 驚異的。巨大モデルながら並のモデルより速い。
qwen3.5:122b 19.90 実用的。人間が読む速度より速い。
nemotron-3-super:120b 19.18 実用的。Qwen122bと同等の体感。
gemma3:27b 12.04 標準的。音読〜速読の間くらいの流体感。
qwen3.5:27b 11.04 標準的。今回の計測環境ではサイズに対して伸び悩む。

計測データ

nemotron-3-nano:30b

今回の計測でトップの数値を記録。30bクラスながら最適化が凄まじい。

  • Trial 1: 60.89 T/s

  • Trial 2: 59.52 T/s

  • Trial 3: 59.67 T/s

gpt-oss:20b
  • Trial 1: 48.43 T/s

  • Trial 2: 49.29 T/s

  • Trial 3: 48.64 T/s

qwen3.5:35b
  • Trial 1: 42.90 T/s

  • Trial 2: 43.24 T/s

  • Trial 3: 43.22 T/s

gpt-oss:120b
  • Trial 1: 35.48 T/s

  • Trial 2: 35.22 T/s

  • Trial 3: 35.60 T/s

qwen3.5:122b
  • Trial 1: 19.79 T/s

  • Trial 2: 19.84 T/s

  • Trial 3: 20.07 T/s

nemotron-3-super:latest
  • Trial 1: 19.12 T/s

  • Trial 2: 19.18 T/s

  • Trial 3: 19.27 T/s

gemma3:27b
  • Trial 1: 12.05 T/s

  • Trial 2: 12.04 T/s

  • Trial 3: 12.04 T/s

qwen3.5:27b
  • Trial 1: 11.15 T/s

  • Trial 2: 10.95 T/s

  • Trial 3: 11.01 T/s


こう並べてみると、gpt-oss:120bがやっぱり「ちょうど良い」感あるなあ。

念の為に以前のllama.cpp serverのvulkanの構成を引っ張り出してきてgpt-oss:120bで同内容を計測してみたけど、平均35.34T/sと現行のollama:rocmとであれば速度は変わらなそう。

これで心置きなくOllamaで運用できるってもんだ。


あと個人的にローカルLLM関連で気になるところといえば、そろそろGemmaの後継モデルが欲しいとこだけど、Googleさんどうでしょう?