← トップに戻る

レガシーHBM GPUにおける
バックエンド依存の安定性

ROCm/HIP vs Vulkan(Vega/gfx900):残存コードパス・オフロードレイヤセマンティクス・再現可能な診断
伊藤あきら | AETS(Akatsuki Enterprise Technology Solutions)| aets-giken@hiroshima-aktk.com
IEICE GNW-68 | 会場:九州産業大学 | 2026年3月9日
1

背景と動機

ROCm 7.2 の公式サポートマトリクスには gfx900 は記載されていないが、実際のシステムでは残存コードやアーティファクトのパスを通じて実行できる場合がある。

学生や小規模な研究室にとって重要な問いは、「実行できるのか、安定しているのか、再現できるのか」である。

同一の Vega デバイス上に、条件を揃えたデュアルバックエンドのテスト環境を構築し、サポートポリシー・バックエンド選択・ランタイム挙動を切り分けた。

目的:「非サポート」と「使えない」は同じ意味ではないことを、証拠に基づいて説明する。

2

問題設定

旧世代の Vega GPU は、現行の ROCm ワークロードには一律に不適切であると扱われがちである。

成功・失敗の境界は、ディストリビューションのプリセット、ビルドターゲット、初期化バリデーション、バックエンドマクロ、ランタイム計算パスなど、さまざまなレイヤで決まる可能性がある。

問い:不安定性の原因は Vega 自体にあるのか、それとも条件を揃えたうえでの特定のバックエンドパスにあるのか?

3

調査で確認された事実

A. gfx900 ゲートマトリクス

レイヤgfx900 の現在の扱い結果
公式マトリクス(ROCm 7.2)GPU ターゲットリストに gfx900 なしブロック(公式範囲)
CMake フィルタ(ollama)デフォルト正規表現で gfx900 を除外、AMDGPU_TARGETS による手動オーバーライドは可デフォルトはブロック / 手動で許可
rocBLAS アーティファクトKernels.so-000-gfx900.hsaco/usr/lib/ollama/rocblas/library/ に存在許可
ランナー初期化バリデーションディープ初期化プローブ(GGML_CUDA_INIT=1):gfx900 を有効なエージェントとして認識許可
ソースマクロ(hip.h, common.cuh__gfx900__ → GCN5 分類を保持、dp4a パスあり許可
ランタイム実行ROCm/HIP:全 num_gpu 値で OK。Vulkan:num_gpu≥1 で SIGSEGVバックエンド依存

B. num_gpu セマンティクストレース

段階コード上の位置意味
Python クライアントollama-python/_types.py:109ロード時オプション
Ollama CLIcmd/interactive.go:112「GPUに送るレイヤ数」
サーバ割り当てllm/server.go:992,1063requestedLayers = NumGPU
ランナーブリッジllama/llama.go:266cparams.n_gpu_layers
llama.cppinclude/llama.h:289「VRAMに格納されるレイヤ」

結論:num_gpu は「オフロードされるレイヤ数」であり、GPU デバイス数ではない。num_gpu≥2 はマルチ GPU を意味しない。

C. 関連文献(引用、本リポジトリ内では再現せず)

※ 上記は外部参考文献。本ポスターにおけるすべての主張は、リポジトリ内の証拠(セクション 3A, 3B, 6)のみに基づく。

4

エンジニアリング上の課題

5

証拠優先の調査戦略

レイヤ介入内容効果
L1: ディストリビューション / ビルドサポートマトリクス、プリセット、ターゲットフィルタ、インストール済みアーティファクトの調査gfx900 がどこでブロック・許可・部分的に保持されているかを特定
L2: API セマンティクスクライアント → サーバ → ランナー → llama.cpp を通じて num_gpu をトレース解釈を修正:オフロードレイヤ数であり、GPU 数ではない
L3: ランタイム比較条件を揃えた ROCm(:11435)と Vulkan(:11434)のテストを実行同一ハードウェアでのバックエンド固有の故障モードを分離
L4: 証拠の記録構造化されたワークログ、ジャーナルトレース、バックエンドプローブ、rocm-smi、ollama psクラッシュの局所化と主張の再現性確保

アプローチ:楽観的な一度きりの成功ではなく、反証可能な診断と再現性を優先する。

6

実験結果

テスト環境

構成要素仕様
GPUAMD Radeon RX Vega 56(gfx900)、8 GB HBM2
OS / カーネルEndeavourOS、カーネル 6.18.16-1-lts
ROCm パスOllama 0.17.5(:11435 経由)、library=ROCm、libggml-hip.so
Vulkan パスOllama 0.17.4(:11434 経由)、library=Vulkan、同一モデル・プロンプト
オーバーライドHSA_OVERRIDE_GFX_VERSION=9.0.0(ROCm サービスのみ)

※ Vulkan=0.17.4 vs ROCm=0.17.5:バージョン差はデュアルインストール構成に起因。いずれもインストールされた状態のままテスト。

条件を揃えた比較結果(qwen3.5:2b、NUM_PREDICT=512)

num_gpuROCm(:11435)Vulkan(:11434)
0(CPU のみ)OK(46.7s、eval_count=512)OK
1OK(48.7s、eval_count=512)FAIL(HTTP 500、SIGSEGV)
2OK(47.7s、eval_count=512)FAIL(HTTP 500、SIGSEGV)
-1(全レイヤ)OK(44.3s、eval_count=512)FAIL(HTTP 500、SIGSEGV)

Vulkan は num_gpu=0(GPU オフロードなし)で成功。失敗は num_gpu≥1(GPU 計算パスがアクティブ)の場合にのみ発生。
ROCm の結果は本テスト範囲内(単一モデル、短い固定実行)のもの。より広範なワークロードでは異なる結果となる可能性がある。
モデル依存性を確認:tinyllama は以前のテストで Vulkan でも成功(20/20 OK)、qwen3.5:2b は SIGSEGV を発生。

クラッシュの局所化

Vulkan の SIGSEGV は ggml_backend_sched_graph_compute_asynccomputeBatch で発生。モデルのロード完了後、ランナーの起動後であることから、計算フェーズの故障であり、初期化の失敗ではない。

故障仮説の検証

仮説期待される証拠観測結果
Vega は全般的に使用不能同一 GPU で両バックエンドとも失敗反証:ROCm/HIP は成功した
num_gpu は GPU 数を意味する失敗がマルチ GPU エントリを示唆反証:コードトレースでオフロードレイヤ数を確認
Vulkan 計算パスの不安定性ロードは OK、ランナー起動後の計算スタックでクラッシュ一致

gfx900 がまだ動作する理由

ROCm の変更履歴には「デフォルトではビルドされなくなった」と記載されているが、「禁止された」とは書かれていない。ローカルインストールで gfx900 の hsaco アーティファクトと libggml-hip.so 内の文字列が存在することを確認した。

解釈:「非サポート」= 保証なし・未テスト、であって「不可能」ではない。

 

制限事項と今後の課題

制限事項:条件を揃えた比較は短い固定実行(1エポック、512トークン)で単一モデル(qwen3.5:2b)のみ。Vulkan と ROCm の Ollama バージョンが異なる(0.17.4 vs 0.17.5)。tinyllama は Vulkan で qwen3.5 と異なる挙動を示し、モデル依存の故障条件が存在する。本テスト範囲を超えた一般化は、追加検証なしには行うべきでない。

今後の課題:マルチエポックストレステスト、追加モデル(llm-jp、phi-3)、ROCm バージョン比較(6.x vs 7.x)、GGML_CUDA_NO_PEER_COPY 実験によるオフロードパス故障メカニズムの分離。再現性インフラ(15件の文書化されたワークアラウンドマトリクス)をリポジトリで公開中。

7

まとめと主要メッセージ

サポート状況 ≠ 実行可能性
公式の除外は、不可能を意味しない。ゲートマトリクスでは6層中5層が gfx900 の実行を許可。残存コードパスと出荷済みアーティファクトにより、部分的な実行が可能。

💡

バックエンドの選択が支配的
qwen3.5:2b を用いた同一 Vega デバイスで、ROCm/HIP はテスト範囲内の全 num_gpu 条件で成功。Vulkan は num_gpu≥1(GPU オフロードがアクティブ)で失敗。故障はバックエンド固有であり、アーキテクチャ全体の問題ではない。モデル依存性(tinyllama vs qwen)も存在する。

🔬

主張の前に再現性
すべての主張は、特定の run_id とコードトレースに裏付けられている。ゲートマトリクスとワークアラウンドマトリクス(15件)をリポジトリで公開。

非サポート ≠ 不可能 | レガシー ≠ 劣等 | バックエンドの選択が重要