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
- Set padding=None to let the module compute causal padding (_left=kernel_size-1, _right=stride-1)
- Or keep stride=1 if you must pass custom padding
- 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
- Prefer padding=None for causal convs
- Compute asymmetric padding against kernel_size - 1, never use 'same'
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
- Invalid padding param: {padding}!
- Sampling factor should be a multiply of 2!
- out must have stride 1 in the last dimension
- out must have stride 1 in the last dimension
- Not a canonical UMMA_MN Layout: Expected stride failure.
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/6ab697eaa863f2f7.
Report an issue: GitHub.