sgl-project/sglang · error · ValueError

No striding allowed for non-symmetric convolutions!

Error message

No striding allowed for non-symmetric convolutions!

What it means

CausalConv1D rejects configurations where a custom padding is combined with stride > 1 unless the padding is exactly kernel_size - 1 (fully causal padding). Strided non-symmetric convolutions would misalign the causal cache, so __init__ fails fast with this ValueError.

Source

Thrown at python/sglang/srt/models/phi4mm_utils.py:939

        in_channels: int,
        out_channels: int,
        kernel_size: int,
        stride: int = 1,
        padding: Union[str, int] = 0,
        dilation: int = 1,
        groups: int = 1,
        bias: bool = True,
        padding_mode: str = "zeros",
        device=None,
        dtype=None,
    ) -> None:
        self.cache_drop_size = None
        if padding is None:
            self._left_padding = kernel_size - 1
            self._right_padding = stride - 1
        else:
            if stride != 1 and padding != kernel_size - 1:
                raise ValueError("No striding allowed for non-symmetric convolutions!")
            if isinstance(padding, int):
                self._left_padding = padding
                self._right_padding = padding
            elif (
                isinstance(padding, list)
                and len(padding) == 2
                and padding[0] + padding[1] == kernel_size - 1
            ):
                self._left_padding = padding[0]
                self._right_padding = padding[1]
            else:
                raise ValueError(f"Invalid padding param: {padding}!")

        self._max_cache_len = self._left_padding

        super().__init__(
            in_channels=in_channels,
            out_channels=out_channels,

View on GitHub (pinned to 0132848349)

Solutions

  1. Set padding=None to let the module compute causal padding (_left=kernel_size-1, _right=stride-1)
  2. Or keep stride=1 if you must pass custom padding
  3. Or use padding exactly equal to kernel_size - 1 when striding

Example fix

# before
CausalConv1D(in_ch, out_ch, kernel_size=4, stride=2, padding=1)  # ValueError
# after
CausalConv1D(in_ch, out_ch, kernel_size=4, stride=2, padding=None)
Defensive patterns

Strategy: validation

Validate before calling

if padding is not None:
    assert stride == 1 or padding == kernel_size - 1, "causal conv forbids custom padding with stride>1"

Type guard

def is_valid_causal_conv1d_padding(kernel_size: int, stride: int, padding) -> bool:
    if padding is None:
        return True
    if stride != 1:
        return padding == kernel_size - 1
    return padding is not None

Prevention

When it happens

Trigger: Constructing CausalConv1D with padding != None and stride > 1 where padding != kernel_size - 1 — e.g. stride=2, kernel_size=4, padding=1.

Common situations: Building custom downsampling conformer encoders (e.g. dw_striding subsampling) with hand-tuned padding; porting conv configs from non-causal codebases where 'same' padding is common.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/6ab697eaa863f2f7. Report an issue: GitHub.