Repository: pytorch/TensorRT (language: python)

Issue:
small fix: Index validator enable int64
# Description

- Currently, pending the implementation of #2590, constant index Tensors are type `int64` before being frozen. This workaround enables valid usecases while #2590 is being implemented

## Type of change

- Bug fix (non-breaking change which fixes an issue)

# Checklist:

- [ x ] My code follows the style guidelines of this project (You can use the linters)
- [ x ] I have performed a self-review of my own code
- [ x ] I have commented my code, particularly in hard-to-understand areas and hacks
- [ x ] I have made corresponding changes to the documentation
- [ x ] I have added tests to verify my fix or my feature
- [ x ] New and existing unit tests pass locally with my changes
- [ x ] I have added the relevant labels to my PR in so that relevant reviewers are notified



Discussion / hints:
@peri044 - when `dynamic=None`, as is currently the (Default) case, `torch.compile` will insert `SymInt`s upon detection of a new batch dimension, which we cannot handle currently, causing errors in the compiler. We currently specify it manually in the `torch_tensorrt.compile` convenience frontend, as here:
https://github.com/pytorch/TensorRT/blob/e38a7f3199923a699398e9919480b7b8ef5d590d/py/torch_tensorrt/_compile.py#L251-L254
When users call `torch.compile` directly, however, they need to specify `dynamic=False` to avoid errors.

Fix patch:
diff --git a/examples/dynamo/torch_compile_advanced_usage.py b/examples/dynamo/torch_compile_advanced_usage.py
index 96146a43d8..8ebedab111 100644
--- a/examples/dynamo/torch_compile_advanced_usage.py
+++ b/examples/dynamo/torch_compile_advanced_usage.py
@@ -43,7 +43,7 @@ def forward(self, x: torch.Tensor, y: torch.Tensor):
 # For the default settings, we can simply call torch.compile
 # with the backend "torch_tensorrt", and run the model on an
 # input to cause compilation, as so:
-optimized_model = torch.compile(model, backend="torch_tensorrt")
+optimized_model = torch.compile(model, backend="torch_tensorrt", dynamic=False)
 optimized_model(*sample_inputs)
 
 # %%
@@ -81,7 +81,10 @@ def forward(self, x: torch.Tensor, y: torch.Tensor):
 
 # Run the model on an input to cause compilation, as so:
 optimized_model_custom = torch.compile(
-    model_half, backend="torch_tensorrt", options=backend_kwargs
+    model_half,
+    backend="torch_tensorrt",
+    options=backend_kwargs,
+    dynamic=False,
 )
 optimized_model_custom(*sample_inputs_half)
 
diff --git a/examples/dynamo/torch_compile_transformers_example.py b/examples/dynamo/torch_compile_transformers_example.py
index 5422f9cc1d..01d46e96f6 100644
--- a/examples/dynamo/torch_compile_transformers_example.py
+++ b/examples/dynamo/torch_compile_transformers_example.py
@@ -61,6 +61,7 @@
 optimized_model = torch.compile(
     model,
     backend="torch_tensorrt",
+    dynamic=False,
     options=compilation_kwargs,
 )
 optimized_model(*inputs)
diff --git a/py/torch_tensorrt/dynamo/conversion/aten_ops_converters.py b/py/torch_tensorrt/dynamo/conversion/aten_ops_converters.py
index 69cb6cecb1..e8ee7d2bae 100644
--- a/py/torch_tensorrt/dynamo/conversion/aten_ops_converters.py
+++ b/py/torch_tensorrt/dynamo/conversion/aten_ops_converters.py
@@ -397,7 +397,7 @@ def index_dtype_validator(node: Node) -> bool:
     for ind in index:
         if ind is not None:
             val = ind.meta.get("val")
-            if val is not None and val.dtype != torch.int32:
+            if val is not None and val.dtype not in (torch.int32, torch.int64):
                 return False
     return True
 


Test patch:
diff --git a/tests/py/dynamo/conversion/test_index_aten.py b/tests/py/dynamo/conversion/test_index_aten.py
index 88db7f0817..56762cd4bc 100644
--- a/tests/py/dynamo/conversion/test_index_aten.py
+++ b/tests/py/dynamo/conversion/test_index_aten.py
@@ -1,9 +1,8 @@
-import operator
-
 import torch
 import torch.nn as nn
 from torch.testing._internal.common_utils import run_tests
-from torch_tensorrt import Input
+
+from .harness import DispatchTestCase
 
 from .harness import DispatchTestCase
 
@@ -16,7 +15,6 @@ def __init__(self):
                 super().__init__()
 
             def forward(self, x):
-                index0 = torch.randint(0, 1, (1, 1))
                 indices = [None, self.index0]
                 out = torch.ops.aten.index.Tensor(x, indices)
                 return out
@@ -159,8 +157,6 @@ def __init__(self):
                 super().__init__()
 
             def forward(self, x):
-                index0 = torch.tensor([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7])
-                index1 = index0.unsqueeze(0).T.long()
                 indices = [None, None, self.index0, self.index1]
                 out = torch.ops.aten.index.Tensor(x, indices)
                 return out