Spec-Zone.ru › PyTorch 2.14

torch.hub

Создано: 13 июня 2025 г. | Последнее обновление: 8 июля 2026 г.

PyTorch Hub — это репозиторий предварительно обученных моделей, предназначенный для обеспечения воспроизводимости исследований.

Публикация моделей

PyTorch Hub поддерживает публикацию предварительно обученных моделей (определений моделей и предварительно обученных весов) в репозитории GitHub путем добавления простого файла hubconf.py;

hubconf.py может иметь несколько точек входа. Каждая точка входа определяется как функция Python (например, предварительно обученная модель, которую вы хотите опубликовать).

  def entrypoint_name(*args, **kwargs):
      # args & kwargs are optional, for models which take positional/keyword arguments.
      ...

Как реализовать точку входа?

Ниже приведен фрагмент кода, задающий точку входа для модели resnet18, если развернуть реализацию в pytorch/vision/hubconf.py. В большинстве случаев достаточно импортировать нужную функцию в hubconf.py. Здесь мы используем развернутую версию только в качестве примера, чтобы показать, как это работает. Полный скрипт можно найти в репозитории pytorch/vision

  dependencies = ['torch']
  from torchvision.models.resnet import resnet18 as _resnet18

  # resnet18 is the name of entrypoint
  def resnet18(pretrained=False, **kwargs):
      """ # This docstring shows up in hub.help()
      Resnet18 model
      pretrained (bool): kwargs, load pretrained weights into the model
      """
      # Call the model, load pretrained weights
      model = _resnet18(pretrained=pretrained, **kwargs)
      return model
  • Переменная dependencies — это список имен пакетов, необходимых для загрузки модели. Обратите внимание, что он может немного отличаться от зависимостей, необходимых для обучения модели.
  • args и kwargs передаются реальной вызываемой функции.
  • Строка документации функции служит справочным сообщением. В ней объясняется, что делает модель и какие позиционные и именованные аргументы допустимы. Настоятельно рекомендуется добавить сюда несколько примеров.
  • Функция точки входа может возвращать либо модель (nn.Module), либо вспомогательные инструменты, упрощающие рабочий процесс пользователя, например токенизаторы.
  • Вызываемые объекты, имена которых начинаются с символа подчеркивания, считаются вспомогательными функциями и не отображаются в torch.hub.list().
  • Предварительно обученные веса можно хранить в репозитории GitHub или загружать с помощью torch.hub.load_state_dict_from_url(). Если размер файла меньше 2 ГБ, рекомендуется прикрепить его к выпуску проекта и использовать URL-адрес из выпуска. В приведенном выше примере torchvision.models.resnet.resnet18 обрабатывает pretrained; в качестве альтернативы можно поместить следующую логику в определение точки входа.
  if pretrained:
      # For checkpoint saved in local GitHub repo, e.g. <RELATIVE_PATH_TO_CHECKPOINT>=weights/save.pth
      dirname = os.path.dirname(__file__)
      checkpoint = os.path.join(dirname, <RELATIVE_PATH_TO_CHECKPOINT>)
      state_dict = torch.load(checkpoint)
      model.load_state_dict(state_dict)

      # For checkpoint saved elsewhere
      checkpoint = 'https://download.pytorch.org/models/resnet18-5c106cde.pth'
      model.load_state_dict(torch.hub.load_state_dict_from_url(checkpoint, progress=False))

Важное примечание

  • Опубликованные модели должны находиться как минимум в ветке или теге. Это не может быть произвольный коммит.

Загрузка моделей из Hub

PyTorch Hub предоставляет удобные API для просмотра всех доступных моделей в Hub с помощью torch.hub.list(), отображения строк документации и примеров с помощью torch.hub.help() и загрузки предварительно обученных моделей с помощью torch.hub.load().

torch.hub.list(github, force_reload=False, skip_validation=False, trust_repo='check', verbose=True) [исходный код]

Вывести список всех вызываемых точек входа, доступных в репозитории, указанном в github.

Параметры:
  • github (str) – строка в формате “repo_owner/repo_name[:ref]” с необязательной ссылкой (тегом или веткой). Если ref не указано, предполагается, что веткой по умолчанию является main, если она существует, и master в противном случае. Пример: ‘pytorch/vision:0.10’
  • force_reload (bool, optional) – следует ли удалить существующий кэш и принудительно загрузить данные заново. По умолчанию — False.
  • skip_validation (bool, optional) – если False, torchhub проверит, что ветка или коммит, указанные аргументом github, действительно принадлежат владельцу репозитория. Для этого будут отправлены запросы к API GitHub; можно указать нестандартный токен GitHub, задав переменную среды GITHUB_TOKEN. По умолчанию — False.
  • trust_repo (bool или str) –

    "check", True или False. Этот параметр появился в версии 1.12 и помогает гарантировать, что пользователи запускают код только из репозиториев, которым доверяют.

    • Если False, пользователю будет предложено подтвердить, что репозиторию можно доверять.
    • Если True, репозиторий будет добавлен в список доверенных и загружен без запроса явного подтверждения.
    • Если "check", репозиторий будет проверен по списку доверенных репозиториев в кэше. Если его там нет, поведение будет соответствовать параметру trust_repo=False.

    По умолчанию — "check".

  • verbose (bool, optional) – если False, отключить сообщения об обращении к локальному кэшу. Обратите внимание: сообщение о первой загрузке отключить нельзя. По умолчанию — True.
Возвращает:

Доступные вызываемые точки входа

Тип возвращаемого значения:

list

Пример

>>> entrypoints = torch.hub.list("pytorch/vision", force_reload=True)
torch.hub.help(github, model, force_reload=False, skip_validation=False, trust_repo='check') [исходный код]

Показать строку документации точки входа model.

Параметры:
  • github (str) – строка в формате <repo_owner/repo_name[:ref]> с необязательной ссылкой (тегом или веткой). Если ref не указано, предполагается, что веткой по умолчанию является main, если она существует, и master в противном случае. Пример: ‘pytorch/vision:0.10’
  • model (str) – имя точки входа, определенной в hubconf.py репозитория
  • force_reload (bool, optional) – следует ли удалить существующий кэш и принудительно загрузить данные заново. По умолчанию — False.
  • skip_validation (bool, optional) – если False, torchhub проверит, что ссылка, указанная аргументом github, действительно принадлежит владельцу репозитория. Для этого будут отправлены запросы к API GitHub; можно указать нестандартный токен GitHub, задав переменную среды GITHUB_TOKEN. По умолчанию — False.
  • trust_repo (bool или str) –

    "check", True или False. Этот параметр появился в версии 1.12 и помогает гарантировать, что пользователи запускают код только из репозиториев, которым доверяют.

    • Если False, пользователю будет предложено подтвердить, что репозиторию можно доверять.
    • Если True, репозиторий будет добавлен в список доверенных и загружен без запроса явного подтверждения.
    • Если "check", репозиторий будет проверен по списку доверенных репозиториев в кэше. Если его там нет, поведение будет соответствовать параметру trust_repo=False.

    По умолчанию — "check".

Пример

>>> print(torch.hub.help("pytorch/vision", "resnet18", force_reload=True))
torch.hub.load(repo_or_dir, model, *args, source='github', trust_repo='check', force_reload=False, verbose=True, skip_validation=False, **kwargs) [исходный код]

Загрузить модель из репозитория GitHub или локального каталога.

Примечание: загрузка модели — наиболее типичный вариант использования, но этот метод также можно применять для загрузки других объектов, например токенизаторов, функций потерь и т. д.

Если source — ‘github’, ожидается, что repo_or_dir будет иметь формат repo_owner/repo_name[:ref] с необязательной ссылкой (тегом или веткой).

Если source — ‘local’, ожидается, что repo_or_dir будет путем к локальному каталогу.

Параметры:
  • repo_or_dir (str) – если source — ‘github’, здесь должен быть указан репозиторий GitHub в формате repo_owner/repo_name[:ref] с необязательной ссылкой (тегом или веткой), например ‘pytorch/vision:0.10’. Если ref не указано, предполагается, что веткой по умолчанию является main, если она существует, и master в противном случае. Если source — ‘local’, здесь должен быть указан путь к локальному каталогу.
  • model (str) – имя вызываемого объекта (точки входа), определенного в hubconf.py репозитория или каталога.
  • *args (optional) – соответствующие позиционные аргументы для вызываемого объекта model.
  • source (str, optional) – ‘github’ или ‘local’. Определяет, как интерпретировать repo_or_dir. По умолчанию — ‘github’.
  • trust_repo (bool или str) –

    "check", True или False. Этот параметр появился в версии 1.12 и помогает гарантировать, что пользователи запускают код только из репозиториев, которым доверяют.

    • Если False, пользователю будет предложено подтвердить, что репозиторию можно доверять.
    • Если True, репозиторий будет добавлен в список доверенных и загружен без запроса явного подтверждения.
    • Если "check", репозиторий будет проверен по списку доверенных репозиториев в кэше. Если его там нет, поведение будет соответствовать параметру trust_repo=False.

    По умолчанию — "check".

  • force_reload (bool, optional) – следует ли безусловно принудительно загрузить репозиторий GitHub заново. Не действует, если source = 'local'. По умолчанию — False.
  • verbose (bool, optional) – если False, отключить сообщения об обращении к локальному кэшу. Обратите внимание: сообщение о первой загрузке отключить нельзя. Не действует, если source = 'local'. По умолчанию — True.
  • skip_validation (bool, optional) – если False, torchhub проверит, что ветка или коммит, указанные аргументом github, действительно принадлежат владельцу репозитория. Для этого будут отправлены запросы к API GitHub; можно указать нестандартный токен GitHub, задав переменную среды GITHUB_TOKEN. По умолчанию — False.
  • **kwargs (optional) – соответствующие именованные аргументы для вызываемого объекта model.
Возвращает:

Результат вызова вызываемого объекта model с заданными *args и **kwargs.

Пример

>>> # from a github repo
>>> repo = "pytorch/vision"
>>> model = torch.hub.load(
...     repo, "resnet50", weights="ResNet50_Weights.IMAGENET1K_V1"
... )
>>> # from a local directory
>>> path = "/some/local/path/pytorch/vision"
>>> model = torch.hub.load(path, "resnet50", weights="ResNet50_Weights.DEFAULT")
torch.hub.download_url_to_file(url, dst, hash_prefix=None, progress=True) [исходный код]

Загрузить объект по указанному URL-адресу в локальный путь.

Параметры:
  • url (str) – URL-адрес загружаемого объекта
  • dst (str) – полный путь для сохранения объекта, например /tmp/temporary_file
  • hash_prefix (str, optional) – если значение не равно None, имя загруженного файла SHA256 должно начинаться с hash_prefix. По умолчанию: None
  • progress (bool, optional) – отображать ли индикатор выполнения в stderr. По умолчанию: True

Пример

>>> torch.hub.download_url_to_file(
...     "https://s3.amazonaws.com/pytorch/models/resnet18-5c106cde.pth",
...     "/tmp/temporary_file",
... )
torch.hub.load_state_dict_from_url(url, model_dir=None, map_location=None, progress=True, check_hash=False, file_name=None, weights_only=False) [исходный код]

Загружает сериализованный объект Torch по указанному URL-адресу.

Если загруженный файл является ZIP-архивом, он будет автоматически распакован.

Если объект уже находится в model_dir, он десериализуется и возвращается. Значение по умолчанию для model_dir — <hub_dir>/checkpoints, где hub_dir — каталог, возвращаемый функцией get_dir().

Параметры:
  • url (str) – URL-адрес загружаемого объекта
  • model_dir (str, optional) – каталог для сохранения объекта
  • map_location (optional) – функция или словарь, задающие способ переназначения мест хранения (см. torch.load)
  • progress (bool, optional) – отображать ли индикатор выполнения в stderr. По умолчанию: True
  • check_hash (bool, optional) – если True, часть URL-адреса с именем файла должна соответствовать соглашению об именовании filename-<sha256>.ext, где <sha256> — первые восемь или более цифр хеша SHA256 содержимого файла. Хеш используется для обеспечения уникальности имен и проверки содержимого файла. По умолчанию: False
  • file_name (str, optional) – имя загруженного файла. Если параметр не задан, будет использоваться имя файла из url.
  • weights_only (bool, optional) – если True, будут загружены только веса, без сложных объектов, сериализованных с помощью pickle. Рекомендуется для ненадежных источников. Подробнее см. load().
Тип возвращаемого значения:

dict[str, Any]

Пример

>>> state_dict = torch.hub.load_state_dict_from_url(
...     "https://s3.amazonaws.com/pytorch/models/resnet18-5c106cde.pth"
... )

Запуск загруженной модели:

Обратите внимание, что *args и **kwargs в torch.hub.load() используются для создания экземпляра модели. После загрузки модели как узнать, что с ней можно делать? Рекомендуемый порядок действий:

  • dir(model), чтобы просмотреть все доступные методы модели.
  • help(model.foo), чтобы проверить, какие аргументы принимает model.foo при запуске

Чтобы пользователям не приходилось постоянно обращаться к документации, мы настоятельно рекомендуем владельцам репозиториев составлять ясные и краткие справочные сообщения функций. Также полезно включить минимальный рабочий пример.

Где сохраняются загруженные модели?

Каталоги используются в следующем порядке:

  • Вызов hub.set_dir(<PATH_TO_HUB_DIR>)
  • $TORCH_HOME/hub, если задана переменная среды TORCH_HOME.
  • $XDG_CACHE_HOME/torch/hub, если задана переменная среды XDG_CACHE_HOME.
  • ~/.cache/torch/hub
torch.hub.get_dir() [исходный код]

Получить каталог кэша Torch Hub, используемый для хранения загруженных моделей и весов.

Если функция set_dir() не вызывалась, используется путь по умолчанию $TORCH_HOME/hub, где значение переменной среды $TORCH_HOME по умолчанию равно $XDG_CACHE_HOME/torch. $XDG_CACHE_HOME соответствует спецификации XDG для размещения файлов в файловой системе Linux; значение по умолчанию — ~/.cache, если переменная среды не задана.

Тип возвращаемого значения:

str

torch.hub.set_dir(d) [исходный код]

При необходимости задать каталог Torch Hub для сохранения загруженных моделей и весов.

Параметры:

d (str) – путь к локальной папке для сохранения загруженных моделей и весов.

Логика кэширования

По умолчанию файлы не удаляются после загрузки. Hub использует кэш, если он уже существует в каталоге, возвращаемом функцией get_dir().

Пользователи могут принудительно выполнить повторную загрузку, вызвав hub.load(..., force_reload=True). Это удалит существующую папку GitHub и загруженные веса, после чего начнется новая загрузка. Это полезно, когда обновления публикуются в той же ветке: пользователи смогут получать последнюю версию.

Известные ограничения:

Torch Hub работает, импортируя пакет так, как если бы он был установлен. Импорт в Python может иметь побочные эффекты. Например, в кэшах Python могут появиться новые элементы sys.modules и sys.path_importer_cache, что является нормальным поведением Python. Это также означает, что при импорте разных моделей из разных репозиториев могут возникать ошибки импорта, если в репозиториях совпадают имена подпакетов (обычно это подпакет model). Один из способов устранить такие ошибки импорта — удалить проблемный подпакет из словаря sys.modules; подробнее см. в этом обсуждении GitHub.

Также следует упомянуть известное ограничение: пользователи НЕ МОГУТ загружать две разные ветки одного репозитория в одном процессе Python. Это аналогично установке в Python двух пакетов с одинаковым именем, что нежелательно. При такой попытке кэш тоже может вмешаться и преподнести сюрпризы. Разумеется, загружать их в отдельных процессах вполне допустимо.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/hub.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API