higher_order_ops\test_invoke_subgraph_xpu.py::TestInvokeSubgraphCompile::test_different_strides_in_backward AssertionError
- Dominant language
- Python
- Stars
- 113
- Forks
- 128
- Avg merge
- 5d 9h
- Merged PRs (30d)
- 112
Description
### 🐛 Describe the bug
There is `higher_order_ops\test_invoke_subgraph_xpu.py::TestInvokeSubgraphCompile::test_different_strides_in_backward` AssertionError on BMG B580 Windows. Test passed PyTorch fddcbe3 (Jul 28) and torch-xpu-ops https://github.com/intel/torch-xpu-ops/commit/298168d88308a8039c654f9a64b10782e30c4384 (Jul 24).
Error:
```
________ TestInvokeSubgraphCompile.test_different_strides_in_backward _________
[gw0] win32 -- Python 3.12.14 C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\python.exe
Traceback (most recent call last):
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\unittest\case.py", line 58, in testPartExecutor
yield
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\unittest\case.py", line 634, in run
self._callTestMethod(testMethod)
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\unittest\case.py", line 589, in _callTestMethod
if method() is not None:
^^^^^^^^
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\site-packages\torch\testing\_internal\common_utils.py", line 3886, in wrapper
method(*args, **kwargs)
File "C:\Users\gta\repositories\pytorch\pytorch\third_party\torch-xpu-ops\test\xpu\higher_order_ops\test_invoke_subgraph_xpu.py", line 2596, in test_different_strides_in_backward
self.assertExpectedInline(
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\site-packages\torch\testing\_internal\common_utils.py", line 3829, in assertExpectedInline
return super().assertExpectedInline(actual if isinstance(actual, str) else str(actual), expect, skip + 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\site-packages\expecttest\__init__.py", line 413, in assertExpectedInline
assert_expected_inline(
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\site-packages\expecttest\__init__.py", line 378, in assert_expected_inline
assert_eq(expect, actual, msg=help_text)
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\site-packages\expecttest\__init__.py", line 450, in assertMultiLineEqualMaybeCppStack
self.assertMultiLineEqual(expect, actual, *args, **kwargs)
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\unittest\case.py", line 1251, in assertMultiLineEqual
self.fail(self._formatMessage(msg, standardMsg))
File "C:\Users\gta\miniforge3\envs\202608272250_fbcf2af8_32.0.101.8991_2026.1.3.20\Lib\unittest\case.py", line 715, in fail
raise self.failureException(msg)
AssertionError: 'clas[2221 chars] add_15: "f32[]" = torch.ops.aten.add.Tensor([769 chars]s_0)' != 'clas[2221 chars] add: "f32[]" = torch.ops.aten.add.Tensor(sum[763 chars]s_0)'
class GraphModule(torch.nn.Module):
def forward(self, primals_1: "Sym(s77)", primals_2: "f32[s77, 16]"):
partitioned_fw_subgraph_0_1 = self.partitioned_fw_subgraph_0_1
invoke_subgraph_8 = torch.ops.higher_order.invoke_subgraph(partitioned_fw_subgraph_0_1, 'partitioned_fw_subgraph_0_1', primals_1, primals_2); partitioned_fw_subgraph_0_1 = primals_2 = None
getitem_17: "Sym(s77)" = invoke_subgraph_8[2]
getitem_16: "f32[s77, 16]" = invoke_subgraph_8[1]
getitem: "f32[s77, 16]" = invoke_subgraph_8[0]; invoke_subgraph_8 = None
partitioned_fw_subgraph_0_2 = self.partitioned_fw_subgraph_0_1
invoke_subgraph_10 = torch.ops.higher_order.invoke_subgraph(partitioned_fw_subgraph_0_2, 'partitioned_fw_subgraph_0_1', primals_1, getitem); partitioned_fw_subgraph_0_2 = getitem = None
getitem_19: "Sym(s77)" = invoke_subgraph_10[2]
getitem_18: "f32[s77, 16]" = invoke_subgraph_10[1]
getitem_1: "f32[s77, 16]" = invoke_subgraph_10[0]; invoke_subgraph_10 = None
sin: "f32[s77, 16]" = torch.ops.aten.sin.default(getitem_1)
partitioned_fw_subgraph_0_3 = self.partitioned_fw_subgraph_0_1
invoke_subgraph_12 = torch.ops.higher_order.invoke_subgraph(partitioned_fw_subgraph_0_3, 'partitioned_fw_subgraph_0_1', primals_1, sin); partitioned_fw_subgraph_0_3 = sin = None
getitem_21: "Sym(s77)" = invoke_subgraph_12[2]
getitem_20: "f32[s77, 16]" = invoke_subgraph_12[1]
getitem_2: "f32[s77, 16]" = invoke_subgraph_12[0]; invoke_subgraph_12 = None
partitioned_fw_subgraph_0_0 = self.partitioned_fw_subgraph_0_0
invoke_subgraph_14 = torch.ops.higher_order.invoke_subgraph(partitioned_fw_subgraph_0_0, 'partitioned_fw_subgraph_0_0', primals_1, getitem_2); partitioned_fw_subgraph_0_0 = None
getitem_23: "Sym(s77)" = invoke_subgraph_14[2]
getitem_22: "f32[s77, 16]" = invoke_subgraph_14[1]
getitem_3: "f32[s77, 16]" = invoke_subgraph_14[0]; invoke_subgraph_14 = None
sum_1: "f32[]" = torch.ops.aten.sum.default(getitem_2); getitem_2 = None
sum_2: "f32[]" = torch.ops.aten.sum.default(getitem_3); getitem_3 = None
- add_15: "f32[]" = torch.ops.aten.add.Tensor(sum_1, sum_2); sum_1 = sum_2 = None
? ---
+ add: "f32[]" = torch.ops.aten.add.Tensor(sum_1, sum_2); sum_1 = sum_2 = None
cos: "f32[s77, 16]" = torch.ops.aten.cos.default(getitem_1); getitem_1 = None
- return (add_15, getitem_16, getitem_18, getitem_20, getitem_22, cos, primals_1, getitem_17, getitem_19, getitem_21, getitem_23)
? ---
+ return (add, getitem_16, getitem_18, getitem_20, getitem_22, cos, primals_1, getitem_17, getitem_19, getitem_21, getitem_23)
class partitioned_fw_subgraph_0_1(torch.nn.Module):
def forward(self, primals_0: "Sym(s77)", primals_1: "f32[s77, 16]"):
cos: "f32[s77, 16]" = torch.ops.aten.cos.default(primals_1)
return (cos, primals_1, primals_0)
class partitioned_fw_subgraph_0_0(torch.nn.Module):
def forward(self, primals_0: "Sym(s77)", primals_1: "f32[s77, 16]"):
cos: "f32[s77, 16]" = torch.ops.aten.cos.default(primals_1)
return (cos, primals_1, primals_0)
: To accept the new output, re-run test with envvar EXPECTTEST_ACCEPT=1 (we recommend staging/committing your changes before doing this)
To execute this test, run the following from the base repo dir:
PYTORCH_TEST_WITH_SLOW=1 python test\xpu\higher_order_ops\test_invoke_subgraph_xpu.py TestInvokeSubgraphCompile.test_different_strides_in_backward
```
### Versions
Click to expand
PyTorch version: 2.15.0a0+gitfbcf2af
Is debug build: False
CUDA used to build PyTorch: None
ROCM used to build PyTorch: N/A
OS: Microsoft Windows 11 Pro (10.0.26200 64-bit)
GCC version: Could not collect
Clang version: Could not collect
CMake version: version 3.31.6
Libc version: N/A
Python version: 3.12.14 | packaged by conda-forge | (main, Aug 21 2026, 22:37:19) [MSC v.1944 64 bit (AMD64)] (64-bit runtime)
Python platform: Windows-11-10.0.26200-SP0
Is CUDA available: False
CUDA runtime version: No CUDA
CUDA_MODULE_LOADING set to: N/A
GPU models and configuration: No CUDA
Nvidia driver version: No CUDA
cuDNN version: No CUDA
Is XPU available: True
XPU used to build PyTorch: 20260101
Intel GPU driver version:
* 32.0.101.8991 (20260824000000.******+***)
Intel GPU models onboard:
* Intel(R) Arc(TM) B580 Graphics
Intel GPU models detected:
* [0] _XpuDeviceProperties(name='Intel(R) Arc(TM) B580 Graphics', platform_name='Intel(R) oneAPI Unified Runtime over Level-Zero V2', type='gpu', device_id=0xE20B, uuid=86800be2-0000-0000-0300-000000000000, driver_version='1.15.39183+3', total_memory=11875MB, local_mem_size=128KB, last_level_cache_size=18432KB, max_compute_units=160, memory_clock_rate=0MHz, memory_bus_width=64-bit, gpu_eu_count=160, gpu_subslice_count=20, max_work_group_size=1024, max_num_sub_groups=64, sub_group_sizes=[16 32], has_fp16=1, has_fp64=1, has_atomic64=1, is_integrated_gpu=0)
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: False
Caching allocator config: N/A
CPU:
Name: 13th Gen Intel(R) Core(TM) i5-13400
Manufacturer: GenuineIntel
Family: 205
Architecture: 9
ProcessorType: 3
DeviceID: CPU0
CurrentClockSpeed: 2500
MaxClockSpeed: 2500
L2CacheSize: 9728
L2CacheSpeed: None
Revision: None
Versions of relevant libraries:
[pip3] bert_pytorch==0.0.1a4
[pip3] functorch==1.14.0a0+b71aa0b
[pip3] intel-openmp==2026.1.1
[pip3] mkl-include==2026.1.0
[pip3] mkl-static==2026.1.0
[pip3] mypy==2.3.1
[pip3] mypy_extensions==1.1.0
[pip3] numpy==1.26.4
[pip3] onemkl-license==2026.1.0
[pip3] onnx==1.21.0
[pip3] onnx-ir==0.1.16
[pip3] onnxscript==0.6.2
[pip3] optree==0.13.0
[pip3] pytorch-labs-segment-anything-fast==0.2
[pip3] tbb==2023.1.0
[pip3] tbb-devel==2023.1.0
[pip3] tcmlib==1.5.0
[pip3] torch==2.15.0a0+gitfbcf2af
[pip3] torch_geometric==2.4.0
[pip3] torchao==0.18.0
[pip3] torchaudio==2.11.0a0+4e3e282
[pip3] torchbench==0.1
[pip3] torchmetrics==1.9.0
[pip3] torchmultimodal==0.1.0b0
[pip3] torchrec-nightly==2022.4.26
[pip3] torchvision==0.30.0a0+541c083
[pip3] torchx-nightly==2026.8.27
[pip3] triton-xpu==3.8.0+git1e2d42a0
[conda] bert-pytorch 0.0.1a4 dev_0
[conda] functorch 1.14.0a0+b71aa0b pypi_0 pypi
[conda] intel-openmp 2026.1.1 pypi_0 pypi
[conda] mkl-include 2026.1.0 pypi_0 pypi
[conda] mkl-static 2026.1.0 pypi_0 pypi
[conda] numpy 1.26.4 pypi_0 pypi
[conda] onemkl-license 2026.1.0 pypi_0 pypi
[conda] optree 0.13.0 pypi_0 pypi
[conda] pytorch-labs-segment-anything-fast 0.2 pypi_0 pypi
[conda] tbb 2023.1.0 pypi_0 pypi
[conda] tbb-devel 2023.1.0 pypi_0 pypi
[conda] tcmlib 1.5.0 pypi_0 pypi
[conda] torch 2.15.0a0+gitfbcf2af pypi_0 pypi
[conda] torch-geometric 2.4.0 pypi_0 pypi
[conda] torchao 0.18.0 pypi_0 pypi
[conda] torchaudio 2.11.0a0+4e3e282 pypi_0 pypi
[conda] torchbench 0.1 pypi_0 pypi
[conda] torchmetrics 1.9.0 pypi_0 pypi
[conda] torchmultimodal 0.1.0b0 pypi_0 pypi
[conda] torchrec-nightly 2022.4.26 pypi_0 pypi
[conda] torchvision 0.30.0a0+541c083 pypi_0 pypi
[conda] torchx-nightly 2026.8.27 pypi_0 pypi
[conda] triton-xpu 3.8.0+git1e2d42a0 pypi_0 pypi
Contributor guide
Research direction
Start by running PYTORCH_TEST_WITH_SLOW=1 python test\xpu\higher_order_ops\test_invoke_subgraph_xpu.py TestInvokeSubgraphCompile.test_different_strides_in_backward. Inspect test\xpu\higher_order_ops\test_invoke_subgraph_xpu.py around line 2596 and compare the expected inline graph with the generated output. Done means identifying the cause of the assertion mismatch and making the named test pass on the reported XPU configuration without masking a real regression.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- machine-learning, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100