[BUG] Error loading model pth: Pickle unable to unpickle object.
Bencpr opened this issue · 8 comments
Bonjour,
Il m'est impossible de loader un modèle (via le .pth) à cause d'une erreur liée à la désérialisation pickle.
Env
Python 3.11.6
torch: '2.0.0+cu117' / '2.1.0'
torchvision: '0.15.1+cu117'
Script
from src.zone_detect.model import get_module
state_dict = get_module('FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jovyan/FLAIR-1/src/zone_detect/model.py", line 50, in get_module
weights = torch.load(checkpoint, map_location='cpu')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 815, in load
return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 1033, in _legacy_load
magic_number = pickle_module.load(f, **pickle_load_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, '<'.
Même erreur simplement avec un torch.load:
torch.load("FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 815, in load
return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 1033, in _legacy_load
magic_number = pickle_module.load(f, **pickle_load_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, '<'.
Une idée?
Merci d'avance.
Benjamin
Bonjour @Bencpr , est-ce que l'erreur persiste en donnant le chemin complet vers le .pth ?
@agarioud Hello, sur le snippet j'ai mis le nom du modèle pour alléger, mais en réalité j'ai le path complet.
@Bencpr
Avec le même modèle (FLAIR-INC_rgbi) et les mêmes versions de torch/python, torch.load ne me donne pas d'erreur.
Est-ce possible de retélécharger le fichier depuis HF pour écarter la piste du fichier corrompu ?
@agarioud OK. Pour info j'ai récupéré deux modèles avec
wget https://huggingface.co/IGNF/FLAIR-INC_rgb_15cl_resnet34-unet/blob/main/FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth
wget https://huggingface.co/IGNF/FLAIR-INC_rgbi_15cl_resnet34-unet/blob/main/FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth
Même problème pour les deux.
@Bencpr Effectivement, via wget j'arrive à reproduire l'erreur. Par téléchargement du fichier directement via les Files de la page HF, je n'ai pas l'erreur. Pourriez vous confirmer ?
@Bencpr, pas d'erreur non plus en utilisant la lib HF
from huggingface_hub import hf_hub_download
hf_hub_download(repo_id="IGNF/FLAIR-INC_rgb_15cl_resnet34-unet",
filename="FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth",
local_dir='../', local_dir_use_symlinks=False,
)
state_dict = torch.load('../FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth')
WGET ne télécharge en faite qu'un pointer vers le fichier (le .pth ne fait que 50Ko)