fix torch.load after torch.jit.load

If we try to load a CLIP model that has not been traced (and is saved as a state_dict), then this first tries to load it with `torch.jit.load(opened_file)` while will eventually raise a RuntimeError, which is then caught and handled and you re-try loading the model with `torch.load(opened_file)`. However, the file pointer, `opened_file` has been advanced by `torch.jit.load`, so this attempt fails with a `EOFError: Ran out of input` exception. To fix this, we simply need to reset the file pointer to the beginning of the file with `.fseek(0)`
This commit is contained in:
scott-vsi 2024-09-17 21:21:22 -04:00 committed by GitHub
parent dcba3cb2e2
commit 45afa5f92c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 1 additions and 0 deletions

View File

@ -133,6 +133,7 @@ def load(name: str, device: Union[str, torch.device] = "cuda" if torch.cuda.is_a
if jit:
warnings.warn(f"File {model_path} is not a JIT archive. Loading as a state dict instead")
jit = False
opened_file.seek(0) # set the file pointer to the beginning of the file
state_dict = torch.load(opened_file, map_location="cpu")
if not jit: