Cannot convert torch model that uses meshgrid w/ indexing argument
- Dominant language
- Python
- Stars
- 5.4k
- Forks
- 850
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 10
Description
coremltools will crash when attempting to convert a torch model that uses the meshgrid operation w/ indexing argument.
To reproduce, try this python script:
```python
import torch
import torch.nn as nn
import coremltools as ct
class Model1(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
return torch.meshgrid(torch.arange(5), torch.arange(10))[0] * x
class Model2(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
return torch.meshgrid(torch.arange(5), torch.arange(10), indexing='ij')[0] * x
print(f'pytorch version: {torch.__version__}')
print(f'ct version: {ct.__version__}')
input = torch.tensor([5], dtype=torch.int64)
model1 = Model1()
model1_traced = torch.jit.trace(model1, (input,))
model1_coreml = ct.convert(
model1_traced,
convert_to='mlprogram',
inputs=[ct.TensorType(shape=ct.Shape((1,)),
name='i0')])
model1_coreml.save('./test_coreml1.mlpackage')
print('saved model1')
model2 = Model2()
model2_traced = torch.jit.trace(model2, (input,))
model2_coreml = ct.convert(
model2_traced,
convert_to='mlprogram',
inputs=[ct.TensorType(shape=ct.Shape((1,)),
name='i0')])
model2_coreml.save('./test_coreml2.mlpackage')
print('saved model2')
```
It gives the following output on my system:
```
pytorch version: 1.12.1
ct version: 6.0
/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/torch/functional.py:478: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/TensorShape.cpp:2895.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
Converting PyTorch Frontend ==> MIL Ops: 0%| | 0/16 [00:00 MIL Ops: 94%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 15/16 [00:00<00:00, 575.70 ops/s]
Running MIL Common passes: 0%| | 0/38 [00:00 MIL Ops: 0%| | 0/17 [00:00 MIL Ops: 82%|█████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 14/17 [00:00<00:00, 12715.52 ops/s]
Traceback (most recent call last):
File "/Users/carson/code/bfx/ai/python/raft/coreml_test.py", line 42, in
model2_coreml = ct.convert(
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/_converters_entry.py", line 451, in convert
mlmodel = mil_convert(
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/converter.py", line 193, in mil_convert
return _mil_convert(model, convert_from, convert_to, ConverterRegistry, MLModel, compute_units, **kwargs)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/converter.py", line 220, in _mil_convert
proto, mil_program = mil_convert_to_proto(
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/converter.py", line 285, in mil_convert_to_proto
prog = frontend_converter(model, **kwargs)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/converter.py", line 115, in __call__
return load(*args, **kwargs)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 53, in load
return _perform_torch_convert(converter, debug)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 92, in _perform_torch_convert
prog = converter.convert()
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 269, in convert
convert_nodes(self.context, self.graph)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/frontend/torch/ops.py", line 95, in convert_nodes
add_op(context, node)
File "/Users/carson/miniconda3/envs/ai/lib/python3.9/site-packages/coremltools/converters/mil/frontend/torch/ops.py", line 3812, in meshgrid
if not isinstance(tensor_var.val, _np.ndarray):
AttributeError: 'list' object has no attribute 'val'
```
## System environment (please complete the following information):
- coremltools version: 6.0
- OS (e.g. MacOS version or Linux type): Apple M1 Pro, macos Ventura
- pytorch version: 1.12.1 (see same behavior on other pytorch versions)
thanks!
Contributor guide
Assessment
This issue has not been assessed yet.