torch.hub.load() вызывает HTTPError: Ошибка HTTP 404: Не найден при загрузке модели

#python #python-3.x #pytorch #fairseq #torchhub

Вопрос:

У меня был этот простой фрагмент кода, найденный в репозитории GitHub fairseq, который в основном загружает bart.base модель PyTorch из torch.hub :

 bart = torch.hub.load('pytorch/fairseq', 'bart.base')
 

Этот код отлично работал около двух недель назад, теперь он выдает следующую ошибку, несмотря на то, что я ничего не изменил:

 HTTPError                                 Traceback (most recent call last)
<ipython-input-7-68181b5f094c> in <module>()
      1 # torch.cuda.empty_cache()
----> 2 bart = torch.hub.load('pytorch/fairseq', 'bart.base') #takes around two minutes
      3 # bart.cuda()  # use GPU
...
...
/usr/lib/python3.7/urllib/request.py in http_error_default(self, req, fp, code, msg, hdrs)
    647 class HTTPDefaultErrorHandler(BaseHandler):
    648     def http_error_default(self, req, fp, code, msg, hdrs):
--> 649         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    650 
    651 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 404: Not Found
 

Кроме того, я узнал, что это происходит с другими моделями fairseq . Все следующие модели вызывают одну и ту же ошибку:

 >>> torch.hub.load('pytorch/fairseq', 'transformer.wmt16.en-de')
# ERROR!

>>> torch.hub.load('pytorch/fairseq', 'camembert')
# ERROR!
 

Значит, у всех них должно быть что-то общее.

Ответ №1:

По-видимому, fairseq люди решили изменить ветвь по умолчанию своего репозитория GitHub с master на main ровно 7 дней назад. (проверьте эту фиксацию).

Таким образом, добавление main ветки в информацию о репо устранит проблему:

 bart = torch.hub.load('pytorch/fairseq:main', 'bart.base') #<--- added :main
 

И это потому, что в torch.hub.load() функции по умолчанию используется имя филиала master . Так что на самом деле, ты звонил pytorch/fairseq:master , которого больше не существует.

И все другие модели теперь работают:

 torch.hub.load('pytorch/fairseq:main', 'transformer.wmt16.en-de')
# WORKS!

>>> torch.hub.load('pytorch/fairseq:main', 'camembert')
# WORKS!