[Diffusion] Fix compile graph broken by flashinfer rope (#20699)
This commit is contained in:
@@ -5,6 +5,28 @@ from typing import Optional, Tuple
|
|||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.jit_kernel.diffusion.triton.rotary import apply_rotary_embedding
|
from sglang.jit_kernel.diffusion.triton.rotary import apply_rotary_embedding
|
||||||
|
from sglang.multimodal_gen.runtime.platforms import current_platform
|
||||||
|
from sglang.srt.utils.custom_op import register_custom_op_from_extern
|
||||||
|
|
||||||
|
_is_cuda = current_platform.is_cuda()
|
||||||
|
if _is_cuda:
|
||||||
|
try:
|
||||||
|
from flashinfer.rope import (
|
||||||
|
apply_rope_with_cos_sin_cache_inplace as _flashinfer_apply_rope_inplace,
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
_flashinfer_apply_rope_inplace = None
|
||||||
|
else:
|
||||||
|
_flashinfer_apply_rope_inplace = None
|
||||||
|
|
||||||
|
if _flashinfer_apply_rope_inplace is not None:
|
||||||
|
flashinfer_apply_rope_inplace = register_custom_op_from_extern(
|
||||||
|
_flashinfer_apply_rope_inplace,
|
||||||
|
op_name="flashinfer_apply_rope_with_cos_sin_cache_inplace",
|
||||||
|
mutates_args=["query", "key"],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
flashinfer_apply_rope_inplace = None
|
||||||
|
|
||||||
|
|
||||||
def _apply_rotary_emb(
|
def _apply_rotary_emb(
|
||||||
@@ -67,9 +89,7 @@ def apply_flashinfer_rope_qk_inplace(
|
|||||||
if head_size != d:
|
if head_size != d:
|
||||||
raise ValueError(f"head_size mismatch: inferred {d}, but head_size={head_size}")
|
raise ValueError(f"head_size mismatch: inferred {d}, but head_size={head_size}")
|
||||||
|
|
||||||
try:
|
if flashinfer_apply_rope_inplace is None:
|
||||||
from flashinfer.rope import apply_rope_with_cos_sin_cache_inplace
|
|
||||||
except ImportError:
|
|
||||||
# Triton fallback for AMD/ROCm where FlashInfer is not available
|
# Triton fallback for AMD/ROCm where FlashInfer is not available
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
@@ -110,7 +130,7 @@ def apply_flashinfer_rope_qk_inplace(
|
|||||||
|
|
||||||
q_flat = q.reshape(bsz * seqlen, nheads * d).contiguous()
|
q_flat = q.reshape(bsz * seqlen, nheads * d).contiguous()
|
||||||
k_flat = k.reshape(bsz * seqlen, nheads * d).contiguous()
|
k_flat = k.reshape(bsz * seqlen, nheads * d).contiguous()
|
||||||
apply_rope_with_cos_sin_cache_inplace(
|
flashinfer_apply_rope_inplace(
|
||||||
positions=positions,
|
positions=positions,
|
||||||
query=q_flat,
|
query=q_flat,
|
||||||
key=k_flat,
|
key=k_flat,
|
||||||
|
|||||||
Reference in New Issue
Block a user