apple / apple/coremltools

Cannot convert torch model that uses meshgrid w/ indexing argument

Open
#1,674 0 comments 0 reactions 1 assignee Claimed by @jakesabathia2 View on GitHub
bug PyTorch (traced) triaged
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.