Problem with my checkpoint file when using torch.load()

username: YYGX
cooked: <p>Hi, I have a problem loading my checkpoint file(.pth). It’s all right when I load my other checkpoint files but not with this. Here’s how I save the model:</p>
<pre><code class="lang-auto">    def save_networks(self, epoch):
        """Save all the networks to the disk.

        Parameters:
            epoch (int) -- current epoch; used in the file name '%s_net_%s.pth' % (epoch, name)
        """
        for name in self.model_names:
            if isinstance(name, str):
                save_filename = '%s_net_%s.pth' % (epoch, name)
                save_path = os.path.join(self.save_dir, save_filename)
                net = getattr(self, 'net' + name)

                if len(self.gpu_ids) &gt; 0 and torch.cuda.is_available():
                    if name == 'Rgr':
                        torch.save(net.state_dict(), save_path)
                    else:
                        torch.save(net.module.cpu().state_dict(), save_path)
                        net.cuda(self.gpu_ids[0])
                else:
                    if name == 'Rgr':
                        torch.save(net.state_dict(), save_path)
                    else:
                        torch.save(net.cpu().state_dict(), save_path)
</code></pre>
<p>And when I load the file:</p>
<pre><code class="lang-auto">torch.load('./latest_net_G.pth', map_location='cpu')
</code></pre>
<p>I got the following error:</p>
<pre><code class="lang-auto">---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/conda/lib/python3.7/tarfile.py in nti(s)
    186             s = nts(s, "ascii", "strict")
--&gt; 187             n = int(s.strip() or "0", 8)
    188         except ValueError:

ValueError: invalid literal for int() with base 8: '_v2\nq\x03(('

During handling of the above exception, another exception occurred:

InvalidHeaderError                        Traceback (most recent call last)
/opt/conda/lib/python3.7/tarfile.py in next(self)
   2288             try:
-&gt; 2289                 tarinfo = self.tarinfo.fromtarfile(self)
   2290             except EOFHeaderError as e:

/opt/conda/lib/python3.7/tarfile.py in fromtarfile(cls, tarfile)
   1094         buf = tarfile.fileobj.read(BLOCKSIZE)
-&gt; 1095         obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors)
   1096         obj.offset = tarfile.fileobj.tell() - BLOCKSIZE

/opt/conda/lib/python3.7/tarfile.py in frombuf(cls, buf, encoding, errors)
   1036 
-&gt; 1037         chksum = nti(buf[148:156])
   1038         if chksum not in calc_chksums(buf):

/opt/conda/lib/python3.7/tarfile.py in nti(s)
    188         except ValueError:
--&gt; 189             raise InvalidHeaderError("invalid header")
    190     return n

InvalidHeaderError: invalid header

During handling of the above exception, another exception occurred:

ReadError                                 Traceback (most recent call last)
/opt/conda/lib/python3.7/site-packages/torch/serialization.py in _load(f, map_location, pickle_module, **pickle_load_args)
    555         try:
--&gt; 556             return legacy_load(f)
    557         except tarfile.TarError:

/opt/conda/lib/python3.7/site-packages/torch/serialization.py in legacy_load(f)
    466 
--&gt; 467         with closing(tarfile.open(fileobj=f, mode='r:', format=tarfile.PAX_FORMAT)) as tar, \
    468                 mkdtemp() as tmpdir:

/opt/conda/lib/python3.7/tarfile.py in open(cls, name, mode, fileobj, bufsize, **kwargs)
   1590                 raise CompressionError("unknown compression type %r" % comptype)
-&gt; 1591             return func(name, filemode, fileobj, **kwargs)
   1592 

/opt/conda/lib/python3.7/tarfile.py in taropen(cls, name, mode, fileobj, **kwargs)
   1620             raise ValueError("mode must be 'r', 'a', 'w' or 'x'")
-&gt; 1621         return cls(name, mode, fileobj, **kwargs)
   1622 

/opt/conda/lib/python3.7/tarfile.py in __init__(self, name, mode, fileobj, format, tarinfo, dereference, ignore_zeros, encoding, errors, pax_headers, debug, errorlevel, copybufsize)
   1483                 self.firstmember = None
-&gt; 1484                 self.firstmember = self.next()
   1485 

/opt/conda/lib/python3.7/tarfile.py in next(self)
   2300                 elif self.offset == 0:
-&gt; 2301                     raise ReadError(str(e))
   2302             except EmptyHeaderError:

ReadError: invalid header

During handling of the above exception, another exception occurred:

RuntimeError                              Traceback (most recent call last)
&lt;ipython-input-10-c2a19cc36006&gt; in &lt;module&gt;
----&gt; 1 torch.load('multi_task/checkpoints/latest_pet/latest_net_G.pth', map_location=torch.device('cpu'))

/opt/conda/lib/python3.7/site-packages/torch/serialization.py in load(f, map_location, pickle_module, **pickle_load_args)
    385         f = f.open('rb')
    386     try:
--&gt; 387         return _load(f, map_location, pickle_module, **pickle_load_args)
    388     finally:
    389         if new_fd:

/opt/conda/lib/python3.7/site-packages/torch/serialization.py in _load(f, map_location, pickle_module, **pickle_load_args)
    558             if zipfile.is_zipfile(f):
    559                 # .zip is used for torch.jit.save and will throw an un-pickling error here
--&gt; 560                 raise RuntimeError("{} is a zip archive (did you mean to use torch.jit.load()?)".format(f.name))
    561             # if not a tarfile, reset file offset and proceed
    562             f.seek(0)

RuntimeError: multi_task/checkpoints/latest_pet/latest_net_G.pth is a zip archive (did you mean to use torch.jit.load()?)
</code></pre>
<p>I don’t know what mistakes I have made when saving the model. Could you help me with this?</p>

username: ptrblck
cooked: <p>Are you using the same PyTorch version to save and load the <code>state_dict</code> or are you using an older one to load it?</p>

username: Chandan_Agrawal
cooked: <p>Thanks <a class="mention" href="/u/ptrblck">@ptrblck</a>. I was facing a similar kind of a problem. I realized that the pytorch versions while saving and loading were different.</p>

username: YYGX
cooked: <p><a class="mention" href="/u/chandan_agrawal">@Chandan_Agrawal</a> <a class="mention" href="/u/ptrblck">@ptrblck</a> thanks, that’s the problem. The version of pytorch for saving and loading should be the same~</p>

username: Eric_Hou
cooked: <p>When you have to inference with a pytorch version below 1.6, try code below to convert your model, because pytorch changed the model saving format after version 1.6.</p>
<pre><code class="lang-python">torch.save(model.state_dict(), path, _use_new_zipfile_serialization=False)
</code></pre>

username: Abu
cooked: <p>Hi <a class="mention" href="/u/eric_hou">@Eric_Hou</a>, nice what about loading the model from a newer version of pytorch (1.8.1) to and older version of pytorch (1.3.0) what would you need to add? I receive the error:</p>
<pre><code class="lang-auto">RuntimeError: test.pth is a zip archive (did you mean to use torch.jit.load()?)
</code></pre>
<p>Then when adding torch.jit.load, I receive the error message:</p>
<pre><code class="lang-auto">RuntimeError: version_number &lt;= kMaxSupportedFileFormatVersion INTERNAL ASSERT FAILED at ../caffe2/serialize/inline_container.cc.......
</code></pre>
<p>Regards,<br>
Abu</p>

username: saba
cooked: <aside class="quote no-group" data-username="Eric_Hou" data-post="5" data-topic="92903">
<div class="title">
<div class="quote-controls"></div>
<img loading="lazy" alt="" width="24" height="24" src="https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/eric_hou/48/31886_2.png" class="avatar"> Eric_Hou:</div>
<blockquote>
<p>_use_new_zipfile_serialization=False</p>
</blockquote>
</aside>
<p>HI Ptrblck,</p>
<p>I face this problem when I want to load the “csv” file. What can I do to solve the problem. I save my dataset and want to reuse them but gave me the same error. Should I save the result from begining?</p>

username: ptrblck
cooked: <p>Since you are working with a <code>csv</code> file, I assume it wasn’t stored using PyTorch, so you could load it via e.g. <code>pandas</code> or any other library which handles these files.</p>

username: saba
cooked: <p>I saved the variable with: torch.save(Path+’.csv’)</p>

username: saba
cooked: <p>Would you please guide me for saving the variable “.csv” or “.pt”  does have different? I most of the time save the variable and results with torch.sava(.csv)</p>

username: ptrblck
cooked: <p>PyTorch doesn’t support storing the data in human-readable <code>csv</code> format, so the file ending won’t matter.<br>
Both files, the <code>*.pt</code> and <code>*.csv</code> will be stored in PyTorch’s binary format.<br>
If you want to store tensor data as a csv file, you would have to use another library, e.g. <code>np.savetxt</code> or <code>pandas.DataFrame.to_csv</code>.</p>

username: Beverley
cooked: <p>Really nice post, it’s already helping me.</p>