2025, Dec 13 15:03
Как по config найти класс и forward модели в Transformers
Показываем, как по config на Hugging Face определить архитектуру модели и открыть исходный код с методом forward в Transformers. Пример с Bert/MiniLM.
Когда вы загружаете предобученную модель из Hugging Face с помощью Transformers, вы получаете готовый к использованию nn.Module: его можно изучать, дообучать и даже менять слои, если совпадают размеры. Но вы не видите сразу полный класс с его методами forward и вспомогательной логикой — тот самый код, на основе которого собран модуль. Хорошая новость: можно определить базовую архитектуру и посмотреть её полную реализацию.
Минимальный пример, который подводит к вопросу
Типичный рабочий процесс выглядит так: берём токенизатор и модель, используем их, иногда печатаем модуль, чтобы мельком взглянуть на слои — и затем задаёмся вопросом, где же находится forward.
from transformers import AutoTokenizer as TokFactory, AutoModel as NetFactory
hub_id = "sentence-transformers/all-MiniLM-L6-v2"
enc = TokFactory.from_pretrained(hub_id)
net = NetFactory.from_pretrained(hub_id)
print(net)
Этого достаточно для экспериментов, но это не раскрывает полный исходный код класса модели на Python.
Что на самом деле отсутствует
Распечатанный модуль даёт наглядное дерево подсетей, но не показывает метод forward и другую внутреннюю логику, определённую в соответствующем классе PyTorch. Чтобы это увидеть, нужно узнать, на какую архитектуру рассчитан чекпойнт, а затем открыть соответствующий исходный файл в библиотеке Transformers.
Как найти определение класса
Начните со страницы модели на Hugging Face. Откройте «Files and versions» и посмотрите файл конфигурации. В поле architectures указано, какой базовый класс использует чекпойнт. Например, в конфигурации отмечено, что модель «nreimers/MiniLM-L6-H384-uncased» основана на «BertModel». Конкретный пример такой конфигурации доступен здесь: https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/blob/main/config.json#L4.
Узнав архитектуру, откройте точную реализацию класса в репозитории Transformers. Для BertModel исходник находится здесь: https://github.com/huggingface/transformers/blob/v4.52.3/src/transformers/models/bert/modeling_bert.py. Там вы найдёте полный код nn.Module, включая forward и всю связующую логику.
Если вам удобнее начать с более общего описания, параметров и заметок по применению, обратитесь к официальной документации: https://huggingface.co/docs/transformers/model_doc/bert.
Зачем это нужно
Зная точный класс архитектуры, проще понимать форматы входов и выходов, отслеживать прохождение тензоров по сети и вносить изменения, не ломая ожидаемые формы. Это особенно полезно, когда вы хотите заменить отдельные слои и при этом сохранить совместимость. Определив архитектуру и открыв исходники, вы сможете соотнести свои правки с реальным путём выполнения forward, а не гадать по краткой распечатке модуля.
Итоги
Если вам нужен полный PyTorch-код, стоящий за моделью из Hugging Face, не пытайтесь «вытащить .py» из чекпойнта. Вместо этого прочитайте конфиг модели, чтобы узнать архитектуру, и откройте соответствующий файл исходников в репозитории Transformers. Используйте документацию для дополнительного контекста по структуре и применению. Такой подход даёт и детальный взгляд на код, и надёжную опору для того, как модель должна работать в тренировочных и инференс-пайплайнах.