From 68c49fdc953e99f87524ad878a54c15c4188afec Mon Sep 17 00:00:00 2001 From: Daniel Maddern Date: Wed, 19 Aug 2026 22:39:05 +0700 Subject: [PATCH] Use merge_dim as normalized_shape in _VisionPatchMerger (4*1152 for 2x2 merge) --- src/h3_blackwell_runtime/qwen3vl_vision.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/h3_blackwell_runtime/qwen3vl_vision.py b/src/h3_blackwell_runtime/qwen3vl_vision.py index 635e180..e532b35 100644 --- a/src/h3_blackwell_runtime/qwen3vl_vision.py +++ b/src/h3_blackwell_runtime/qwen3vl_vision.py @@ -322,8 +322,10 @@ class _VisionPatchMerger(nn.Module): self.out_hidden_size = out_hidden_size def forward(self, x: torch.Tensor) -> torch.Tensor: - # x: [seq, hidden] (already spatially merged upstream). - x = F.layer_norm(x, (VISION_HIDDEN,), weight=self.norm_weight, bias=self.norm_bias, eps=1e-6) + # x: [seq, 4*hidden] (spatially merged upstream: 2x2 blocks concatenated). + if x.shape[-1] != self.merge_dim: + print(f"[merger] x.shape={tuple(x.shape)}, merge_dim={self.merge_dim}, norm_w={tuple(self.norm_weight.shape)}") + x = F.layer_norm(x, (self.merge_dim,), weight=self.norm_weight, bias=self.norm_bias, eps=1e-6) x = x.view(-1, self.merge_dim) return F.linear(F.gelu(F.linear(x, self.fc1_weight, self.fc1_bias), approximate="tanh"), self.fc2_weight, self.fc2_bias)