рубрика pro #ml
Проект на курсе, трек трансформеров: DistilBERT дообучается отличать хорошие отзывы IMDB от плохих. Студенты собирают класс
ModelTrainer, одиннадцать методов: загрузка данных, обучение, валидация, метрики, логирование. Есть там и save_model, десятая часть балла за проект. Всё условие умещается в докстринг: "Saves model to dst_path". Плюс одно предупреждение: проверьте, не обёрнута ли модель в DataParallel.В 41% проектов метод закрыт одной строчкой:
torch.save(model.state_dict()). По букве не придерёшься: модель сохранена в dst_path, файл на диске лежит, галочка стоит. Через месяц файл открывают. Модели там нет.Файл есть. Чего нет:
1️⃣ Архитектуры
В
state_dict только веса, голый словарь тензоров: ни конфига, ни описания слоёв. Загрузить его можно лишь в модель, заново собранную руками ровно той же архитектуры, иначе загрузка не сойдётся по слоям.2️⃣ Токенизатора
Модель принимает индексы токенов, а не текст. Токенизатор рядом не сохранён, значит текст не во что превращать: инференс не собрать вовсе. Причём нужен тот же самый: у другого соответствие "слово → номер" своё.
Ирония: единственное, о чём условие предупредило прямым текстом, сделали почти все — обёртку развернули. Почти: в одной работе проверка на
DataParallel написана, а строка внутри неё ничего не присваивает. Галочка снова стоит, эффекта снова ноль. Сломались не там, где условие предупреждало, а там, где оно промолчало.🚭 Полезные привычки
Сохраняйте модель перезагружаемой.
model.save_pretrained(path), из-под обёртки — model.module.save_pretrained(path), и рядом в ту же папку tokenizer.save_pretrained(path). Тогда один from_pretrained(path) поднимает всё разом: конфиг, архитектуру, веса, токенизатор, на любой машине. Проверить легко: сохраните чекпойнт, перезапустите сессию и поднимите модель заново с диска — from_pretrained(path). Прогоните несколько примеров через инференс: предсказания должны совпасть с теми, что модель выдавала до сохранения. Совпали — сохранилась модель, а не файл.Сохранить файл и сохранить модель — разные вещи. Первое закрывает букву условия, второе — смысл. А прод экзаменует без докстринга: предупреждений не пишет, подсказок не даёт, вопрос у него один. Загрузится?
Ставить такие привычки проще на практике с экспертами по DNN: здесь модель считается сохранённой, только когда поднялась на чужой машине.
🗓 Ближайший поток запланирован на 17 сентября
BigData Team: the way you learn best
AI Agents | Py4BDA | Python | Machine Learning | Big Data
#study #ml #MachineLearning #DataScience
