Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

ROCm unfused gated attention cannot dispatch AttnGateSplit

オープン
#3,106 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
38/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
cpp
領域
backend

調査の方向性

.agents/specs/rocm-attn-gate-split.md を読み、CPU と CUDA の AttnGateSplit 実装を src/vt/rocm/rocm_ops.hip と比較します。ModelRegistry::Forward から FullAttnBlockPaged、vt::AttnGateSplit の順に確認し、その後、変更していない F16 registered-forward fixture と test_gguf_keep_quant を実行します。split パスと zero-width rotation パスが fixture に合格し、production registration を削除すると gate が失敗することが完了の条件です。

索引モデルが issue の本文から書いたものです。

説明

Row: BACKEND-ROCM-ATTN-GATE-SPLIT

The ROCm backend does not register kAttnGateSplit. A full-attention Qwen3.5 forward reaches this missing operation when its rotary width is zero and the fused preamble cannot run.

The operator reproduced the failure in the unchanged F16 registered-forward fixture after integrating the reviewed full-attention state prerequisite from #3098. The complete test_gguf_keep_quant run passed 10,455 assertions, then its explicit-head production case threw vt: no kernel for op AttnGateSplit (id 68) on device rocm (type 5). This is a failed gate, not a test pass. The retained-weight implementation from #3092 does not add or remove this operation.

Observed inputs: BuildDenseF16Gguf(DenseDims{}, false, true) has hidden width 64, vocabulary 32, two query heads, one KV head, head width 32, and two full-attention layers. The fixture omits qwen35.rope.dimension_count; HfConfigFromGguf resolves that field to zero. No fixture, GDN state, fallback permission, or runtime override was changed to avoid the failure.

The executing chain is ModelRegistry::Forward into FullAttnBlockPaged in src/vllm/model_executor/models/qwen3_5.cpp, then vt::AttnGateSplit in src/vt/ops.cpp. src/vt/rocm/rocm_ops.hip has the fused preamble registration but no split registration. The shared operation accepts F32 and BF16 inputs and exposes separate query and gate outputs. The CPU and CUDA implementations already define the local contract.

Evidence: /home/vikash/.cache/rdna3-f16-repair1/operator-focused/gguf-keep-quant-control.log, SHA-256 f4d682bdfa800b80c7e25d75b51c31f00a0d3168579534a3e25fff2fda84752a. HIP archive SHA-256 dae20f3a702462461ae9edc7143e4774fe448882b16fe506441194d446f02bc7. The frozen source map is 398ad011bd6d16d04f1aa4ada98e0058def422a2b4925b6dd39d90604f838696. The operator ran the binary on gfx1100 under /home/vikash/gpu.lock, with HIP and ROCR visibility set to device 0.

The owning backend row owes a committed spec and a fresh implementation/review campaign for this newly exposed provider gap. Read and execute the pinned vLLM split path, preserve all applicable shared dtypes and the current contiguous-input validation, port the focused contract, and require the existing registered-forward fixture to pass. Delete the production registration in scratch to prove the gate detects lost reachability. Inspect subsequent operations before claiming that the unfused attention path is complete.

This is a separate existing backend capability gap discovered during the bounded F16 work. The F16 MR keeps its fixture and records its production gate as FAILING until this issue is resolved. It does not claim that the successful full-attention public fixture, which has nonzero rotary width, verifies the zero-rotary-width path. No quantized GEMM, PR #2782, or CI change is requested here.

Scoped repair specification

Parent: BACKEND-ROCM. Spec: .agents/specs/rocm-attn-gate-split.md, based on 4137b96369467e925bfdf0738e5bad013c89b58f. The child owns the native split and the subsequent zero-width rotation refusal needed by the unchanged production fixture.

Static inspection found that FullAttnBlockPaged calls vt::RopeNeox with the resolved zero rotary width after the split and RMSNorm calls. The shared wrapper currently rejects zero. The pinned Python rotation reference preserves the full tail for zero width, but the custom HIP launcher computes a zero-thread block. The operator measured identity in both dtypes through the default primitive dispatch, which selects forward_native. Explicit forward_hip fails in both dtypes. These operation measurements do not establish upstream model construction or missing-GGUF-field defaults. The selected local adaptation preserves the loader's existing zero resolution and skips only the two model rotation calls when their resolved width is zero. The shared primitive and fixture remain unchanged. A split-only implementation cannot close this production gate.

主要言語
C++
スター
423
フォーク
53
平均マージ
1日 5時間
マージ済み PR(30日)
376

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

mudler/vllm.cpp のほかの issue

mudler/vllm.cpp の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。