TorchScript compatibility between pytorch versions

Hi,

I am trying to use libtorch in a C++ application that’s restricted to the gcc-4.8 ABI, which forces me to link against libtorch-1.2.0 (I was told newer version of libtorch aren’t compatible with that ABI).

This application needs to load a pre-trained model. That model was trained and saved from a python script that needs to use pytorch-1.3.0 or newer.

Trying to load the serialized TorchScript model aborts the program with this error:

terminate called after throwing an instance of 'c10::Error'
  what():  [enforce fail at inline_container.cc:137] . PytorchStreamReader failed closing reader: file not found 

This happens both from the C++ and the python API. Is this a compatibility issue?

This is easily reproducible: from an environment with either pytorch-1.3.1 or 1.5.0, run

import torch

class TestModule(torch.nn.Module):
    def __init__(self, N, M):
        super().__init__()
        self.weight = torch.nn.Parameter(torch.rand(N, M))

    def forward(self, x):
        return self.weight.mv(x)

my_module = TestModule(10,20)
test_module = torch.jit.script(my_module)

test_module.save("test_module.pt")

Then from an environment with pytorch-1.2.0:

import torch
m = torch.jit.load('test_module.pt')

If the file was written from 1.5.0, I get

RuntimeError: version_number <= kMaxSupportedFileFormatVersion INTERNAL ASSERT FAILED at ../caffe2/serialize/inline_container.cc:131, please report a bug to PyTorch. Attempted to read a PyTorch file with version 2, but the maximum supported version for reading is 1. Your PyTorch installation may be too old.

which is clearly a compatibility issue. But if the file was written from 1.3.1, I get the “file not found” error above (note this is a process abort, not an exception, from both C++ and python API).

I could not find documentation on TorchScript file compatibility across versions. Is that information available somewhere?

Thanks,
A.

Hi, we maintain backwards compatibility but not forwards compatiblity. New versions will work with older models, but older versions will not work with newer models.

2 Likes