pytorch - ✅(Solved) Fix eager_then_compile crashes with IndexError when number of dims changes [1 pull requests, 2 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
pytorch/pytorch#178869Fetched 2026-04-08 01:57:25
View on GitHub
Comments
2
Participants
3
Timeline
91
Reactions
0
Author
Timeline (top)
mentioned ×40subscribed ×40labeled ×5commented ×2

Error Message

Traceback (most recent call last): File "/home/user/index_error.py", line 12, in <module> f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError ^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 1036, in compile_wrapper return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 348, in callback_fn return _create_wrapped_callback(compiler_fn)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2432, in call result = self._torchdynamo_orig_backend( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2150, in call result = self._inner_convert( ^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 735, in call result = _compile( ^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1983, in _compile raise InternalTorchDynamoError( File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1919, in _compile guarded_code, tracer_output = compile_inner(code, one_graph, hooks) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_utils_internal.py", line 96, in wrapper_function return function(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1535, in compile_inner result = _compile_inner(code, one_graph, hooks) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1594, in _compile_inner dynamo_output = compile_frame( ^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1442, in compile_frame bytecode, tracer_output = transform_code_object(code, transform) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.py", line 1626, in transform_code_object tracer_output = transformations(instructions, code_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1414, in transform tracer_output = trace_frame( ^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 342, in _fn return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 875, in trace_frame run_tracer() File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 856, in run_tracer tracer.run() File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1698, in run while self.step(): ^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1365, in step self.dispatch_table[inst.opcode](self, inst) File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 3904, in BINARY_OP return _binary_op_lookup[inst.arg](self, inst) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 483, in impl self.push(fn_var.call_function(self, self.popn(nargs), {})) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 1406, in call_function return handler(tx, args, kwargs) # type: ignore[return-value] ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 992, in <lambda> tx, [v.realize() for v in args], kwargs ^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 102, in realize self._cache.realize() File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 43, in realize self.vt = builder.VariableBuilder( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 486, in call return self._call_impl(value) ^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 523, in _call_impl vt = self._wrap(value) ^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 783, in _wrap return type_dispatch(self, value) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 2447, in wrap_tensor example_value = wrap_to_fake_tensor_and_record( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4054, in wrap_to_fake_tensor_and_record return _wrap_to_fake_tensor_and_record_impl( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4084, in _wrap_to_fake_tensor_and_record_impl symbolic_context = _automatic_dynamic(e, tx, source, static_shapes) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 3916, in _automatic_dynamic and dict(base_source.dynamism).get(normalized_source_name, {i: False})[i] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^ torch._dynamo.exc.InternalTorchDynamoError: IndexError: tuple index out of range

from user code: File "/home/user/index_error.py", line 5, in f return x + 1

Fix Action

Fix / Workaround

Error logs

Traceback (most recent call last):
  File "/home/user/index_error.py", line 12, in <module>
    f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 1036, in compile_wrapper
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 348, in callback_fn
    return _create_wrapped_callback(compiler_fn)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2432, in __call__
    result = self._torchdynamo_orig_backend(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2150, in __call__
    result = self._inner_convert(
             ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 735, in __call__
    result = _compile(
             ^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1983, in _compile
    raise InternalTorchDynamoError(
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1919, in _compile
    guarded_code, tracer_output = compile_inner(code, one_graph, hooks)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_utils_internal.py", line 96, in wrapper_function
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1535, in compile_inner
    result = _compile_inner(code, one_graph, hooks)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1594, in _compile_inner
    dynamo_output = compile_frame(
                    ^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1442, in compile_frame
    bytecode, tracer_output = transform_code_object(code, transform)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.py", line 1626, in transform_code_object
    tracer_output = transformations(instructions, code_options)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1414, in transform
    tracer_output = trace_frame(
                    ^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 342, in _fn
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 875, in trace_frame
    run_tracer()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 856, in run_tracer
    tracer.run()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1698, in run
    while self.step():
          ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1365, in step
    self.dispatch_table[inst.opcode](self, inst)
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 3904, in BINARY_OP
    return _binary_op_lookup[inst.arg](self, inst)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 483, in impl
    self.push(fn_var.call_function(self, self.popn(nargs), {}))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 1406, in call_function
    return handler(tx, args, kwargs)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 992, in <lambda>
    tx, [v.realize() for v in args], kwargs
         ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 102, in realize
    self._cache.realize()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 43, in realize
    self.vt = builder.VariableBuilder(
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 486, in __call__
    return self._call_impl(value)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 523, in _call_impl
    vt = self._wrap(value)
         ^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 783, in _wrap
    return type_dispatch(self, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 2447, in wrap_tensor
    example_value = wrap_to_fake_tensor_and_record(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4054, in wrap_to_fake_tensor_and_record
    return _wrap_to_fake_tensor_and_record_impl(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4084, in _wrap_to_fake_tensor_and_record_impl
    symbolic_context = _automatic_dynamic(e, tx, source, static_shapes)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 3916, in _automatic_dynamic
    and dict(base_source.dynamism).get(normalized_source_name, {i: False})[i]
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
torch._dynamo.exc.InternalTorchDynamoError: IndexError: tuple index out of range

CPU:
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Address sizes:                   48 bits physical, 48 bits virtual
Byte Order:                      Little Endian
CPU(s):                          110
On-line CPU(s) list:             0-109
Vendor ID:                       AuthenticAMD
Model name:                      AMD EPYC 7662 64-Core Processor
CPU family:                      23
Model:                           49
Thread(s) per core:              1
Core(s) per socket:              110
Socket(s):                       1
Stepping:                        0
BogoMIPS:                        3992.10
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr wbnoinvd arat npt nrip_save umip rdpid arch_capabilities
Virtualization:                  AMD-V
L1d cache:                       6.9 MiB (110 instances)
L1i cache:                       6.9 MiB (110 instances)
L2 cache:                        55 MiB (110 instances)
L3 cache:                        1.7 GiB (110 instances)
NUMA node(s):                    4
NUMA node0 CPU(s):               0-26
NUMA node1 CPU(s):               27-53
NUMA node2 CPU(s):               54-80
NUMA node3 CPU(s):               81-109
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Mmio stale data:   Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected

PR fix notes

PR #178923: [dynamo] Fix eager_then_compile rank changes

Description (problem / solution / changelog)

Fixes #178869

cc @voznesenskym @penguinwu @EikanWang @jgong5 @Guobing-Chen @XiaobingSuper @zhuhaozhe @blzheng @wenzhe-nrv @jiayisunx @kadeng @chauhang @amjames @Lucaskabela @jataylo

Changed files

  • test/dynamo/test_decorators.py (modified, +16/-0)
  • torch/_dynamo/eval_frame.py (modified, +4/-1)

Code Example

import torch

@torch.compile(dynamic=True)
def f(x):
    return x + 1

with torch.compiler.set_stance("eager_then_compile"):
    f(torch.randn(10))     # Eager phase: tracks 1D tensor
    f(torch.randn(10))     # Eager phase: tracks 1D tensor
    
    # Change the input shape before compilation
    f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError

---

Traceback (most recent call last):
  File "/home/user/index_error.py", line 12, in <module>
    f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 1036, in compile_wrapper
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 348, in callback_fn
    return _create_wrapped_callback(compiler_fn)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2432, in __call__
    result = self._torchdynamo_orig_backend(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2150, in __call__
    result = self._inner_convert(
             ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 735, in __call__
    result = _compile(
             ^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1983, in _compile
    raise InternalTorchDynamoError(
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1919, in _compile
    guarded_code, tracer_output = compile_inner(code, one_graph, hooks)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_utils_internal.py", line 96, in wrapper_function
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1535, in compile_inner
    result = _compile_inner(code, one_graph, hooks)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1594, in _compile_inner
    dynamo_output = compile_frame(
                    ^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1442, in compile_frame
    bytecode, tracer_output = transform_code_object(code, transform)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.py", line 1626, in transform_code_object
    tracer_output = transformations(instructions, code_options)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1414, in transform
    tracer_output = trace_frame(
                    ^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 342, in _fn
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 875, in trace_frame
    run_tracer()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 856, in run_tracer
    tracer.run()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1698, in run
    while self.step():
          ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1365, in step
    self.dispatch_table[inst.opcode](self, inst)
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 3904, in BINARY_OP
    return _binary_op_lookup[inst.arg](self, inst)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 483, in impl
    self.push(fn_var.call_function(self, self.popn(nargs), {}))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 1406, in call_function
    return handler(tx, args, kwargs)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 992, in <lambda>
    tx, [v.realize() for v in args], kwargs
         ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 102, in realize
    self._cache.realize()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 43, in realize
    self.vt = builder.VariableBuilder(
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 486, in __call__
    return self._call_impl(value)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 523, in _call_impl
    vt = self._wrap(value)
         ^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 783, in _wrap
    return type_dispatch(self, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 2447, in wrap_tensor
    example_value = wrap_to_fake_tensor_and_record(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4054, in wrap_to_fake_tensor_and_record
    return _wrap_to_fake_tensor_and_record_impl(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4084, in _wrap_to_fake_tensor_and_record_impl
    symbolic_context = _automatic_dynamic(e, tx, source, static_shapes)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 3916, in _automatic_dynamic
    and dict(base_source.dynamism).get(normalized_source_name, {i: False})[i]
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
torch._dynamo.exc.InternalTorchDynamoError: IndexError: tuple index out of range

from user code:
   File "/home/user/index_error.py", line 5, in f
    return x + 1
RAW_BUFFERClick to expand / collapse

🐛 Describe the bug

Minimal reproducer

import torch

@torch.compile(dynamic=True)
def f(x):
    return x + 1

with torch.compiler.set_stance("eager_then_compile"):
    f(torch.randn(10))     # Eager phase: tracks 1D tensor
    f(torch.randn(10))     # Eager phase: tracks 1D tensor
    
    # Change the input shape before compilation
    f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError

Error logs

Traceback (most recent call last):
  File "/home/user/index_error.py", line 12, in <module>
    f(torch.randn(10, 10)) # Compilation phase: 2D tensor causes IndexError
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 1036, in compile_wrapper
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/eval_frame.py", line 348, in callback_fn
    return _create_wrapped_callback(compiler_fn)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2432, in __call__
    result = self._torchdynamo_orig_backend(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 2150, in __call__
    result = self._inner_convert(
             ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 735, in __call__
    result = _compile(
             ^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1983, in _compile
    raise InternalTorchDynamoError(
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1919, in _compile
    guarded_code, tracer_output = compile_inner(code, one_graph, hooks)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_utils_internal.py", line 96, in wrapper_function
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1535, in compile_inner
    result = _compile_inner(code, one_graph, hooks)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1594, in _compile_inner
    dynamo_output = compile_frame(
                    ^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1442, in compile_frame
    bytecode, tracer_output = transform_code_object(code, transform)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.py", line 1626, in transform_code_object
    tracer_output = transformations(instructions, code_options)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 1414, in transform
    tracer_output = trace_frame(
                    ^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 342, in _fn
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 875, in trace_frame
    run_tracer()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/convert_frame.py", line 856, in run_tracer
    tracer.run()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1698, in run
    while self.step():
          ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 1365, in step
    self.dispatch_table[inst.opcode](self, inst)
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 3904, in BINARY_OP
    return _binary_op_lookup[inst.arg](self, inst)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py", line 483, in impl
    self.push(fn_var.call_function(self, self.popn(nargs), {}))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 1406, in call_function
    return handler(tx, args, kwargs)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py", line 992, in <lambda>
    tx, [v.realize() for v in args], kwargs
         ^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 102, in realize
    self._cache.realize()
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py", line 43, in realize
    self.vt = builder.VariableBuilder(
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 486, in __call__
    return self._call_impl(value)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 523, in _call_impl
    vt = self._wrap(value)
         ^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 783, in _wrap
    return type_dispatch(self, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 2447, in wrap_tensor
    example_value = wrap_to_fake_tensor_and_record(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4054, in wrap_to_fake_tensor_and_record
    return _wrap_to_fake_tensor_and_record_impl(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 4084, in _wrap_to_fake_tensor_and_record_impl
    symbolic_context = _automatic_dynamic(e, tx, source, static_shapes)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/conda/envs/py312/lib/python3.12/site-packages/torch/_dynamo/variables/builder.py", line 3916, in _automatic_dynamic
    and dict(base_source.dynamism).get(normalized_source_name, {i: False})[i]
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
torch._dynamo.exc.InternalTorchDynamoError: IndexError: tuple index out of range

from user code:
   File "/home/user/index_error.py", line 5, in f
    return x + 1

Versions

<details> <summary>torch==2.12.0.dev20260330+cu130</summary> Collecting environment information... PyTorch version: 2.12.0.dev20260330+cu130 Is debug build: False CUDA used to build PyTorch: 13.0 ROCM used to build PyTorch: N/A

OS: Ubuntu 22.04.5 LTS (x86_64) GCC version: (Ubuntu 11.4.0-1ubuntu1~22.04.2) 11.4.0 Clang version: 14.0.0-1ubuntu1.1 CMake version: version 3.22.1 Libc version: glibc-2.35

Python version: 3.12.12 | packaged by Anaconda, Inc. | (main, Oct 21 2025, 20:16:04) [GCC 11.2.0] (64-bit runtime) Python platform: Linux-5.4.210-39.1.pagevecsize-x86_64-with-glibc2.35 Is CUDA available: True CUDA runtime version: 11.5.119 CUDA_MODULE_LOADING set to: GPU models and configuration: GPU 0: NVIDIA A100-SXM4-40GB

Nvidia driver version: 580.95.05 cuDNN version: Probably one of the following: /usr/lib/x86_64-linux-gnu/libcudnn.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so.8.9.7 /usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so.8.9.7 Is XPU available: False HIP runtime version: N/A MIOpen runtime version: N/A Is XNNPACK available: True Caching allocator config: N/A

CPU: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 110 On-line CPU(s) list: 0-109 Vendor ID: AuthenticAMD Model name: AMD EPYC 7662 64-Core Processor CPU family: 23 Model: 49 Thread(s) per core: 1 Core(s) per socket: 110 Socket(s): 1 Stepping: 0 BogoMIPS: 3992.10 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr wbnoinvd arat npt nrip_save umip rdpid arch_capabilities Virtualization: AMD-V L1d cache: 6.9 MiB (110 instances) L1i cache: 6.9 MiB (110 instances) L2 cache: 55 MiB (110 instances) L3 cache: 1.7 GiB (110 instances) NUMA node(s): 4 NUMA node0 CPU(s): 0-26 NUMA node1 CPU(s): 27-53 NUMA node2 CPU(s): 54-80 NUMA node3 CPU(s): 81-109 Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Not affected Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected

Versions of relevant libraries: [pip3] numpy==2.4.2 [pip3] nvidia-cublas==13.1.0.3 [pip3] nvidia-cuda-cupti==13.0.85 [pip3] nvidia-cuda-nvrtc==13.0.88 [pip3] nvidia-cuda-runtime==13.0.96 [pip3] nvidia-cudnn-cu13==9.20.0.48 [pip3] nvidia-cufft==12.0.0.61 [pip3] nvidia-curand==10.4.0.35 [pip3] nvidia-cusolver==12.0.4.66 [pip3] nvidia-cusparse==12.6.3.3 [pip3] nvidia-cusparselt-cu13==0.8.1 [pip3] nvidia-nccl-cu13==2.29.7 [pip3] nvidia-nvjitlink==13.0.88 [pip3] nvidia-nvtx==13.0.85 [pip3] torch==2.12.0.dev20260330+cu130 [pip3] torchvision==0.27.0.dev20260330+cu130 [pip3] triton==3.6.0+git7e48d5df [conda] numpy 2.4.2 pypi_0 pypi [conda] nvidia-cublas 13.1.0.3 pypi_0 pypi [conda] nvidia-cuda-cupti 13.0.85 pypi_0 pypi [conda] nvidia-cuda-nvrtc 13.0.88 pypi_0 pypi [conda] nvidia-cuda-runtime 13.0.96 pypi_0 pypi [conda] nvidia-cudnn-cu13 9.20.0.48 pypi_0 pypi [conda] nvidia-cufft 12.0.0.61 pypi_0 pypi [conda] nvidia-curand 10.4.0.35 pypi_0 pypi [conda] nvidia-cusolver 12.0.4.66 pypi_0 pypi [conda] nvidia-cusparse 12.6.3.3 pypi_0 pypi [conda] nvidia-cusparselt-cu13 0.8.1 pypi_0 pypi [conda] nvidia-nccl-cu13 2.29.7 pypi_0 pypi [conda] nvidia-nvjitlink 13.0.88 pypi_0 pypi [conda] nvidia-nvtx 13.0.85 pypi_0 pypi [conda] torch 2.12.0.dev20260330+cu130 pypi_0 pypi [conda] torchvision 0.27.0.dev20260330+cu130 pypi_0 pypi [conda] triton 3.6.0+git7e48d5df pypi_0 pypi

</details>

cc @chauhang @penguinwu

extent analysis

TL;DR

The most likely fix is to ensure consistent input shapes before compilation.

Guidance

  • Verify that the input shape is consistent across all function calls to f(x).
  • Consider adding input validation or shape checking to ensure that the input shape is consistent before compilation.
  • If the input shape needs to be dynamic, consider using a different compilation strategy or stance that can handle dynamic shapes.
  • Review the PyTorch documentation for torch.compile and torch.compiler.set_stance to ensure that the compilation settings are correct for the use case.

Example

import torch

@torch.compile(dynamic=True)
def f(x):
    if x.ndim != 1:  # Add input validation
        raise ValueError("Input shape must be 1D")
    return x + 1

with torch.compiler.set_stance("eager_then_compile"):
    f(torch.randn(10))     # Eager phase: tracks 1D tensor
    f(torch.randn(10))     # Eager phase: tracks 1D tensor

Notes

  • The error message IndexError: tuple index out of range suggests that there is an issue with the input shape or the compilation process.
  • The use of torch.compile and torch.compiler.set_stance suggests that the code is using PyTorch's compilation features, which can be sensitive to input shapes and types.

Recommendation

Apply workaround: Ensure consistent input shapes before compilation, and consider adding input validation or shape checking to prevent similar errors in the future. This approach allows for more control over the input data and can help prevent compilation errors.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING