このページで得られる理解:C14 pilot 6 フェーズの成果まとめ——何が確認でき、何が最も筋のいい読みで、何がまだ分からないか。
What you'll gain here: the synthesis of C14 pilot Phase A–F — what was confirmed, what is the strongest current reading, and what remains unknown.
RX9070XT(gfx1201)は RDNA4 世代の GPU として、本命経路が通るかどうかを観測で確認しなければならない世代に位置する。 Phase A〜F の調査が完了した時点での全体像をここにまとめる。 調査の背景や方法論の詳細は 調査の読み方 を参照。
RX9070XT (gfx1201), as an RDNA4 GPU, is a generation where observation is required to determine whether the primary path actually runs. This page summarizes the full picture as of Phase A–F completion. For investigation background and methodology, see How to Read This Investigation.
bundle_0030(MMVQ)、prefill 側は bundle_0096(MMQ)と読むのが現時点で最も筋がいい。bundle_0030 (MMVQ), prefill-side with bundle_0096 (MMQ).観測ポイント: どの環境・ワークロードを「基準点」として調査するか。
Observation target: What environment and workload to use as the investigation's anchor point.
Q4_K_M を anchor にした理由は、ggml の dispatch 分岐が量子化型と ne11 の組み合わせで決まるため、
1 つの量子化型を固定することで dispatch 閾値の変数を絞れるからだ。
deepseek-r1-distill-qwen-7b:q4_k_m は Q4_K family の代表として選んだ。
Q4_K_M was chosen as anchor because ggml dispatch branching is determined by the combination of quantization type and ne11.
Fixing one quantization type reduces the variables in dispatch threshold analysis.
deepseek-r1-distill-qwen-7b:q4_k_m was selected as representative of the Q4_K family.
| 項目Item | 確認値Confirmed Value |
|---|---|
| GPU | AMD Radeon RX 9070 XT |
| GFX target | gfx1201 (device id 0x7550) |
| VRAM pool | 16.7 GiB |
| ROCm | 7.2.0 |
| Ollama | 0.17.4 |
| ROCm bundle | /usr/local/lib/ollama/rocm/ |
| wavefront_size | 32 (MI25 の 64 と異なる — gfx1201 固有)(differs from MI25's 64 — gfx1201-specific) |
| 調査 anchor ワークロードAnchor workload | deepseek-r1-distill-qwen-7b:q4_k_m |
観測ポイント: 6 フェーズを通じて、何が「確定した事実」として積み上がったか。
Observation target: Across 6 phases, what accumulated as "confirmed facts"?
offloaded 29/29 layers to GPU を runtime ログで確認。
Flash Attention が auto 設定で有効化された(set to enabled)。
依存チェーン libggml-hip.so → libhipblas.so → librocblas.so → libamdhip64.so → hsa-runtime64 を ldd で確認。
load=17.455s, prompt_eval=0.0238s, eval=0.306s。
hot (resident): load=0.083s, prompt_eval=0.0248s, eval=0.149s。
hot の eval が cold の半分になっており、GPU 常駐の効果が数値で現れている。
.hip_fatbin(587 MiB)から MMVQ / MMQ / Flash Attention / RoPE の gfx1201 hsaco を isolate・逆アセンブル済み。
binary が「存在しないために動かない」という状況ではないことを確認した。
rocblas/library/Kernels.so-000-gfx1201.hsaco に Cijk_* family が存在することを逆アセンブリで確認。
prompt_eval_count = 3(MMVQ 圏)・11(MMQ-eligible 圏)・290(境界候補)を取得。
runtime を壊さずに dispatch 圏の近似を読めることを確認した。
offloaded 29/29 layers to GPU.
Flash Attention enabled automatically (set to enabled).
Dependency chain libggml-hip.so → libhipblas.so → librocblas.so → libamdhip64.so → hsa-runtime64 confirmed via ldd.
load=17.455s, prompt_eval=0.0238s, eval=0.306s.
Hot (resident): load=0.083s, prompt_eval=0.0248s, eval=0.149s.
Hot eval is roughly half of cold, numerically confirming GPU residency benefit.
.hip_fatbin (587 MiB).
Confirmed that "binary missing" is not the reason any path would fail to run.
Cijk_* family confirmed in rocblas/library/Kernels.so-000-gfx1201.hsaco via disassembly.
prompt_eval_count = 3 (MMVQ zone), 11 (MMQ-eligible), 290 (boundary candidate).
Confirmed that dispatch zone approximation is readable without breaking the runtime.
観測ポイント: 確認できた事実から、「今この実行で何が起きていたか」をどう読むのが最も自然か。
Observation target: From the confirmed facts, what is the most natural reading of "what was happening during this run"?
prompt_eval_count = 3 は ne11 ≤ 8 の MMVQ 圏に入っていると読むのが最も自然。
custom Q4_K mul_mat_vec_q(bundle_0030)が主経路として機能している可能性が高い。
BLAS 支配を積極的に示す証拠は現時点でない。
flash_attn_ext_f16(bundle_0019)family で処理されているとみるのが自然。
KQ/KQV GEMM が直接見えないことは、Flash Attention ルーティングと整合する。
prompt_eval_count = 11 は MMQ-eligible 圏。
bundle_0030(MMVQ)の閾値 ne11 ≤ 8 を超えており、bundle_0096(exact Q4_K mul_mat_q)との整合が強い。
bundle_0039 に isolate 済み。
prompt_eval_count = 3 most naturally places in the MMVQ zone (ne11 ≤ 8).
Custom Q4_K mul_mat_vec_q (bundle_0030) likely serves as the primary path.
No positive evidence for BLAS dominance at this stage.
flash_attn_ext_f16 family (bundle_0019) handling attention.
Absence of visible KQ/KQV GEMM names is consistent with Flash Attention routing.
prompt_eval_count = 11 is in the MMQ-eligible zone.
Crosses the MMVQ threshold (ne11 ≤ 8), aligning more strongly with bundle_0096 (exact Q4_K mul_mat_q).
bundle_0039.
ROCBLAS_LAYER=9 で rocblas_create_handle のみ見えたことは「BLAS が使われていない」の証拠ではなく、
custom kernel 優位・Flash Attention・observer 制約の複合で説明できる。
All of the above are "strongest current readings," not direct confirmation by a dispatch-safe observer.
rocblas_create_handle being the only visible item via ROCBLAS_LAYER=9 is not evidence that BLAS is unused —
it is better explained by custom-kernel dominance, Flash Attention routing, and observer constraints combined.
| 示せることCan Show | 示せないことCannot Show |
|---|---|
| gfx1201 向けの全 kernel family(MMVQ / MMQ / FA / RoPE / BLAS)の binary が存在する All gfx1201 kernel family binaries (MMVQ / MMQ / FA / RoPE / BLAS) exist | live run でそれぞれが実際に dispatch されたか Whether each was actually dispatched in a live run |
| 29/29 layers が GPU にオフロードされた 29/29 layers were offloaded to GPU | 各 layer でどの kernel が選ばれたか Which kernel was selected for each layer |
| phase proxy で dispatch 圏の近似(MMVQ / MMQ / 境界)を読める Phase proxy can approximate dispatch zones (MMVQ / MMQ / boundary) | kernel launch 時の正確な ne11 値 Exact ne11 value at kernel launch |
| BLAS-side Cijk_* が gfx1201 向けに存在する BLAS-side Cijk_* exists for gfx1201 | live short case で Cijk_* が入ったか Whether Cijk_* entered the live short case |
| hot/cold の eval_duration 差(resident 効果)が数値で出ている hot/cold eval_duration difference (residency effect) is numerically visible | prompt_eval_count=290 が fallback か chunking か Whether prompt_eval_count=290 is fallback or chunking |
Cijk_* family が実際に入ったかどうか。bundle_0096 を踏んだかどうか(dispatch 帰属なしには確定しない)。prompt_eval_count = 290 の境界が MMQ heuristic 超過(BLAS fallback)か internal chunking か。mul_mat_f dense family など隣接 kernel が混在する割合。Cijk_* family participated in the short live case.bundle_0096 (not confirmed without dispatch attribution).prompt_eval_count = 290 boundary is MMQ heuristic overflow (BLAS fallback) or internal chunking.mul_mat_f dense family in the decode-side mix.Cijk_* の live phase ownership、bundle_0096 の実行確認、prompt_eval_count=290 の切り分けを再試行する。
Cijk_* live phase ownership, bundle_0096 execution confirmation, and prompt_eval_count=290 disambiguation.