[Model] Optimize Qwen3-Omni MRv2 handoff, code prediction and audio decoding (#8223)

Signed-off-by: Sy03 <1370724210@qq.com>
This commit is contained in:
Sy03 authored and GitHub committed 2026-10-01 22:22:54 -07:00
1 parent 68003cf6ad
commit d93e1a8e09
35 files changed
+2363 -161

No files matched your search

@@ -0,0 +1,90 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
import pytest
import torch
pytestmark = [
pytest.mark.core_model,
pytest.mark.cuda,
pytest.mark.skipif(not torch.cuda.is_available() or torch.version.hip is not None, reason="requires CUDA"),
]
def _reference(logits, uniforms, top_k, top_p):
if top_k > 0:
threshold = logits.topk(top_k, dim=-1).values[:, -1:]
logits = logits.masked_fill(logits < threshold, -torch.inf)
if top_p < 1:
values, indices = logits.sort(dim=-1, descending=True)
probs = values.softmax(dim=-1, dtype=torch.float32)
values[(probs.cumsum(-1) - probs) >= top_p] = -torch.inf
logits = values.scatter(1, indices, values)
return (logits.float() - torch.log(-torch.log(uniforms))).argmax(-1, keepdim=True)
@pytest.mark.parametrize("batch,vocab", [(1, 128), (7, 2048), (64, 2048)])
@pytest.mark.parametrize("dtype", [torch.float32, torch.float16, torch.bfloat16])
@pytest.mark.parametrize("top_k,top_p", [(-1, 0.8), (0, 1.0), (50, 0.8), (50, 0.01)])
def test_fixed_uniform_sampling_and_graph(batch, vocab, dtype, top_k, top_p):
from vllm_omni.model_executor.models.common.fused_sampling import sample_top_k_top_p_gumbel
torch.manual_seed(173)
logits = torch.randn(batch, vocab, device="cuda", dtype=dtype)
# The MTP caller supplies a noncontiguous row slice of [B, 15, vocab].
uniforms = torch.rand(batch, 15, vocab, device="cuda")[:, 3].clamp_min_(1e-7)
expected = _reference(logits, uniforms, top_k, top_p)
actual = sample_top_k_top_p_gumbel(logits, uniforms, top_k=top_k, top_p=top_p)
torch.testing.assert_close(actual, expected, rtol=0, atol=0)
graph = torch.cuda.CUDAGraph()
with torch.cuda.graph(graph):
captured = sample_top_k_top_p_gumbel(logits, uniforms, top_k=top_k, top_p=top_p)
logits.add_(torch.randn_like(logits) * 0.1)
uniforms.uniform_(1e-7, 1 - 1e-7)
graph.replay()
torch.testing.assert_close(captured, _reference(logits, uniforms, top_k, top_p), rtol=0, atol=0)
@pytest.mark.parametrize("top_k,top_p", [(3, 0.5), (3, 1.0), (0, 0.8)])
def test_threshold_ties_and_degenerate_rows(top_k, top_p):
from vllm_omni.model_executor.models.common.fused_sampling import sample_top_k_top_p_gumbel
logits = torch.tensor(
[[2, 2, 2, 2, 2, 1, 0, -1], [1] * 8, [-torch.inf] * 8, [torch.nan, 1, 2, 3, 4, 5, 6, 7]],
device="cuda",
dtype=torch.float32,
)
uniforms = torch.tensor([[0.4, 0.7, 0.8, 0.9, 0.2, 0.3, 0.6, 0.5]], device="cuda").expand(4, -1)
actual = sample_top_k_top_p_gumbel(logits, uniforms, top_k=top_k, top_p=top_p)
torch.testing.assert_close(actual, _reference(logits, uniforms, top_k, top_p), rtol=0, atol=0)
@pytest.mark.parametrize("dtype", [torch.float32, torch.float16, torch.bfloat16])
def test_native_nucleus_boundaries(dtype):
from vllm_omni.model_executor.models.common.fused_sampling import sample_top_k_top_p_gumbel
torch.manual_seed(1923)
logits = torch.randn(1, 2048, device="cuda", dtype=dtype)
values, indices = logits.sort(descending=True)
probabilities = values.softmax(-1, dtype=torch.float32)
before = probabilities.cumsum(-1) - probabilities
for rank in [1, 19, 49, 1000, 2000]:
boundary = before[0, rank]
uniforms = torch.full_like(logits, 0.001, dtype=torch.float32)
uniforms[0, indices[0, rank]] = 1 - 1e-7
for direction in [-torch.inf, torch.inf]:
top_p = torch.nextafter(boundary, boundary.new_tensor(direction)).item()
actual = sample_top_k_top_p_gumbel(logits, uniforms, top_k=0, top_p=top_p)
torch.testing.assert_close(actual, _reference(logits, uniforms, 0, top_p), rtol=0, atol=0)
@pytest.mark.parametrize("top_p", [0.8, 1.0])
def test_strided_logits_and_non_power_of_two_vocabulary(top_p):
from vllm_omni.model_executor.models.common.fused_sampling import sample_top_k_top_p_gumbel
for seed in range(16):
torch.manual_seed(seed)
logits = torch.randn(128, 2050, device="cuda")[:, ::2]
uniforms = torch.rand(128, 3, 1025, device="cuda")[:, 1].clamp_min_(1e-7)
actual = sample_top_k_top_p_gumbel(logits, uniforms, top_k=-1, top_p=top_p)
torch.testing.assert_close(actual, _reference(logits, uniforms, -1, top_p), rtol=0, atol=0)
@@ -0,0 +1,44 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Causal/GQA correctness and graph replay for the frame-local KV kernel."""
import pytest
import torch
pytestmark = [
pytest.mark.core_model,
pytest.mark.cuda,
pytest.mark.skipif(not torch.cuda.is_available() or torch.version.hip is not None, reason="requires CUDA"),
]
@pytest.mark.parametrize("batch", [1, 3, 64])
@pytest.mark.parametrize("heads,kv_heads,dim", [(16, 8, 128), (8, 8, 64)])
@pytest.mark.parametrize("positions", [[0, 1], [2], [8], [15]])
def test_short_attention_causal_gqa_and_graph(batch, heads, kv_heads, dim, positions):
from vllm_omni.model_executor.models.common.short_kv_attention import short_kv_attention
with torch.inference_mode():
torch.manual_seed(42)
pos = torch.tensor(positions, device="cuda")
q = torch.randn(batch, len(positions), heads, dim, device="cuda", dtype=torch.bfloat16).transpose(1, 2)
cache = torch.randn(2, batch + 3, kv_heads, 17, dim, device="cuda", dtype=torch.bfloat16)
k, v = cache[0, :batch], cache[1, :batch]
mask = torch.arange(17, device="cuda")[None, :] <= pos[:, None]
kr = k.float().repeat_interleave(heads // kv_heads, dim=1)
vr = v.float().repeat_interleave(heads // kv_heads, dim=1)
scores = (q.float() @ kr.transpose(-1, -2)) * dim**-0.5
expected = scores.masked_fill(~mask, -torch.inf).softmax(-1) @ vr
actual = short_kv_attention(q, k, v, pos, dim**-0.5)
torch.testing.assert_close(actual.float(), expected, atol=0.016, rtol=0.008)
# Unwritten cache slots must not affect a new frame, even if poisoned.
k[:, :, max(positions) + 1 :] = torch.nan
v[:, :, max(positions) + 1 :] = torch.nan
poisoned = short_kv_attention(q, k, v, pos, dim**-0.5)
torch.testing.assert_close(poisoned, actual, atol=0, rtol=0)
graph = torch.cuda.CUDAGraph()
with torch.cuda.graph(graph):
captured = short_kv_attention(q, k, v, pos, dim**-0.5)
graph.replay()
torch.testing.assert_close(captured, actual, atol=0, rtol=0)