transformers Библиотека Hugging Face представляет собой набор моделей глубокого обучения, предназначенных для того, чтобы пользователи могли быстро приступить к применению предварительно обученных моделей к своим данным. В настоящее время библиотека поддерживает текстовые, зрительные, аудио и мультимодальные модели. Библиотека имеет большую пользовательскую базу и может использоваться вместе с моделью Hugging Face, набором данных, пространствами и службами API.

PADL — это построитель функциональных моделей для PyTorch, позволяющий полностью экспортировать конвейеры моделей, включая предварительную обработку, прямой проход и постобработку. Кроме того, PADL предлагает несколько очень удобных функций, таких как построение конвейера с помощью перегрузки операторов, интерактивный/удобный для ноутбука дизайн и инструменты для проверки и отладки конвейера.

Hugging Face и PADL имеют некоторое внешнее сходство, в частности, в отношении конвейеров Hugging Face и конвейеров PADL. Обе библиотеки выполняют предварительную обработку, прямой проход и постобработку внутри одного объекта, обе предоставляют возможность «начать работу» с моделями намного быстрее, чем при использовании ванильных реализаций PyTorch. Однако PADL обладает одним важным преимуществом, а именно формализмом построения функционального конвейера PADL. PADL позволяет разработчикам гибко комбинировать различные функции всей экосистемы Python и встраивать их в единый конвейер, включая слои PyTorch. Это дает полностью настраиваемые конвейеры, которые, тем не менее, можно загрузить с помощью одной команды. Кроме того, каждый конвейер сериализуется отдельно и индивидуально — пакет PADL не пытается скомпилировать «все распространенные варианты использования». Это приводит к очень красивому автономному коду, в котором гиперпараметры и структура конвейера очень легко просматривать, отслеживать, отлаживать и экспериментировать.

Недостатком PADL является то, что он не поставляется вместе с модельным хабом. Это означает, что модели должны быть получены или обучены, а затем, при желании, объединены в новые конвейеры. Это не обязательно плохо, потому что PADL обладает достаточной гибкостью, чтобы позволить элементам конвейеров из Hugging Face объединяться в конвейеры PADL. В этом уроке мы демонстрируем это на примере аннотации изображения с использованием набора данных CoCo.

Мы собираемся использовать два «конвейера» из пакета transformers, давайте их инициализируем.

Мы выполним небольшую предварительную обработку для этой записной книжки, добавив подписи к изображениям и пути к изображениям в список точек данных.

Мы собираемся объединить пользовательский слой языковой модели с некоторыми предварительно обученными слоями из transformers. Пользовательские torch.nn.Moduleinstances находятся в следующей ячейке. Чтобы использовать их в PADL, нам нужно только украсить их @padl.transform.

Мы также можем обернуть torch слоев напрямую с помощью padl.transform.

Следующие два слоя будут использоваться для логического вывода и обучения соответственно с привязанными весами.

Чтобы обучить подпись к изображению, мы используем функции изображения из модели классификации изображений по умолчанию в Hugging Face. Слой PyTorch, который нам будет интересен, находится pl.model.vit внутри конвейера Hugging Face pl. Мы извлекаем последнее скрытое состояние и используем его для представления информации в изображениях.

Затем полный конвейер должен:

  • применить предварительную обработку pl.preprocess
  • извлечь переменную pixel_values
  • создавать пакеты данных
  • применить модель видения
  • извлечь скрытое состояние.

Это можно сделать одной строкой кода с помощью оператора PADL >> (композиция функций).

Мы также можем определить пользовательские преобразования PADL, украсив обычные функции @padl.transform. В этом случае наши пользовательские преобразования — это функция потерь и заполнение.

Для предварительной обработки текста мы используем токенизатор из конвейера генерации текста по умолчанию в Hugging Face tg. При этом мы избавляемся от необходимости самостоятельно калибровать токенизатор. Это демонстрирует гибкость PADL, позволяя нам использовать уже существующие средства в экосистеме и эффективно использовать их.

Теперь мы можем создать пайплайны, необходимые для обучения подписи к изображению. Мы можем применить 2 преобразования PADL или конвейера к кортежу данных, используя оператор /. Это позволяет нам параллельно комбинировать конвейеры обработки изображений и текста и передавать выходные данные в пользовательские слои PyTorch, которые мы создали выше. training_model передает выходные данные RNN в функцию потерь, тогда как inference_model передает выходные данные кодировщика изображений в RNN и выполняет процедуру жадного поиска, чтобы получить вероятную аннотацию для невидимого изображения. Выходные данные передаются методу декодирования токенизатора Hugging Face.

Давайте теперь обучим модель! Оптимизатор создается обычным способом в PyTorch. Мы решили не настраивать веса модели изображения, поскольку они уже были хорошо обучены выполнению соответствующей задачи классификации изображений.

Чтобы перебирать данные, мы используем методы .train_apply и .eval_apply, в зависимости от того, нужны нам градиенты или нет. Результатом преобразования loss является просто тензор PyTorch, поэтому мы можем делать все обычные вещи в обучении. Вы заметите, что здесь нам не нужен загрузчик данных. Это потому, что PADL обрабатывает эту логику внутри себя, что означает меньше шаблонов и больше внимания к науке.

Теперь, когда мы немного обучили модель, давайте проверим результаты обучения. Мы тестируем на inference_model, так как он содержит процедуру вывода; его веса привязаны к training_model.

Я очень доволен этими результатами, поэтому я собираюсь сохранить конвейер inference_model для использования позже. Теперь мы видим сверхмощный аспект PADL. Сохраненный результат содержит все необходимое для повторного использования модели в дальнейшем!.

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

В этом руководстве мы показали, что PADL можно эффективно комбинировать с библиотекой Hugging Face transformers, а также с остальной частью экосистемы Python. Это отличный инструмент для обмена результатами исследований, совместной работы и проверки прошлых моделей на предмет деталей их реализации. Его можно комбинировать с TorchServe и PyTorch Lightning и устранить многие болевые точки в развитии глубокого обучения. Посмотрите это пространство для получения дополнительной информации и руководств о том, как объединить PADL с экосистемой PyTorch и не только.

Счастливого падл-линга!

Хотите узнать больше о PADL? Вот некоторые ресурсы: