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. -
"check",TrueилиFalse. Этот параметр появился в версии 1.12 и помогает гарантировать, что пользователи запускают код только из репозиториев, которым доверяют.- Если
False, пользователю будет предложено подтвердить, что репозиторию можно доверять. - Если
True, репозиторий будет добавлен в список доверенных и загружен без запроса явного подтверждения. - Если
"check", репозиторий будет проверен по списку доверенных репозиториев в кэше. Если его там нет, поведение будет соответствовать параметруtrust_repo=False.
По умолчанию —
"check". - Если
-
verbose (bool, optional) – если
False, отключить сообщения об обращении к локальному кэшу. Обратите внимание: сообщение о первой загрузке отключить нельзя. По умолчанию —True.
-
github (str) – строка в формате “repo_owner/repo_name[:ref]” с необязательной ссылкой (тегом или веткой). Если
- Возвращает:
-
Доступные вызываемые точки входа
- Тип возвращаемого значения:
Пример
>>> 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. -
"check",TrueилиFalse. Этот параметр появился в версии 1.12 и помогает гарантировать, что пользователи запускают код только из репозиториев, которым доверяют.- Если
False, пользователю будет предложено подтвердить, что репозиторию можно доверять. - Если
True, репозиторий будет добавлен в список доверенных и загружен без запроса явного подтверждения. - Если
"check", репозиторий будет проверен по списку доверенных репозиториев в кэше. Если его там нет, поведение будет соответствовать параметруtrust_repo=False.
По умолчанию —
"check". - Если
-
github (str) – строка в формате <repo_owner/repo_name[:ref]> с необязательной ссылкой (тегом или веткой). Если
Пример
>>> 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’. -
"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.
-
repo_or_dir (str) – если
- Возвращает:
-
Результат вызова вызываемого объекта
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().
- Тип возвращаемого значения:
Пример
>>> 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, если переменная среды не задана.- Тип возвращаемого значения:
-
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