В этом посте разберем работу с PyTorch 2.0 и Hugging Face Transformers на примере fine-tune модели BERT для классификации текста. PyTorch 2.0 лучше по производительности, скорости работы, более удобный для Python, но при этом остается таким же динамическим, как и ранее. Разберем следующие шаги: Настройка окружения и установка PyTorch 2.0. Загрузка и подготовка датасета. Fine-tune и оценка модели BERT с помощью Hugging Face Trainer. Запуск инференса и тестирование модели. PyTorch 2.0, или, точнее, 1.14, полностью обратно совместим с предыдущими версиями. Он не потребует каких‑либо изменений в существующем коде PyTorch, но может оптимизировать код, если добавить model = torch.compile(model). Команда PyTorch так объясняет появление новой версии в своем FAQ: «Мы выпустили значительные новые функции, которые, на наш взгляд, меняют то, как вы используете PyTorch, поэтому мы назвали это 2.0 вместо 1.14.» Среди этих новых функций: полная поддержка TorchDynamo, AOTAutograd, PrimTorch и TorchInductor. Это позволяет PyTorch 2.0 достигнуть ускорения времени обучения в 1,3-2 раза на более 40 архитектурах моделей от HuggingFace Transformers. Подробнее о PyTorch 2.0 можно узнать на официальном "GET STARTED". Примечание: Этот туториал был создан и запущен на инстансе AWS EC2 g5.xlarge, включая GPU NVIDIA A10G. Первый шаг - установить PyTorch 2.0 и библиотеки от Hugging Face, transformers и datasets. Также ставим последнюю версию transformers , которая включает нативную интеграцию PyTorch 2.0 в Trainer. В этом примере для версионирования моделей мы будем использовать Hugging Face Hub. Чтобы загрузить модель на Hub, вначале необходимо зарегистрироваться на Hugging Face. Для входа в свою учетную запись и сохранения токена (ключа доступа) на диске используем login из пакета huggingface_hub. Будем обучать модель классификации текста на датасете BANKING77. Датасет BANKING77 содержит текстовые обращения от клиентов из области банковского/финансового сектора. Он состоит из 13 083 обращений, размеченных на 77 интентов (классов).  Для загрузки BANKING77 мы будем использовать метод load_dataset() из библиотеки 🤗 Datasets. Посмотрим на пример из набора данных. Для обучения модели нужно предварительно преобразовать текст в токены. Это делается токенизатором. Также он преобразует токены в соответствующие им идентификаторы в предобученном словаре. Подробнее о токенизации можно узнать в главе 6 от Hugging Face Course. После подготовки данных можно начинать обучение модели. Мы будем использовать модель bert-base-uncased. Первым шагом будет загрузка модели с помощью класса AutoModelForSequenceClassification из Hugging Face Hub. Так мы создаем модель с весами предобученной модели BERT, но с "головой" сверху специально под нашу задачу классификации. Здесь мы передаем количество классов (77) из нашего набора данных и имена меток, чтобы сделать вывод результатов более читабельным. Будем мониторить качество модели во время обучения. Trainer поддерживает оценку во время обучения, для этого определим compute_metrics. Используем библиотеку evaluate для расчета метрики f1 на тестовом наборе данных. Последний шаг - определить гиперпараметры TrainingArguments для обучения. Здесь же добавим параметры от PyTorch 2.0 для быстрого времени обучения. Чтобы использовать последние улучшения PyTorch 2.0 передаем опцию torch_compile в TrainingArguments. Также используем интеграцию Trainer с Hugging Face Hub для загрузки весов модели, логов и метрик в репозиторий во время обучения. Для запуска обучения использем метод train от Trainer. Для сравнения времени обучения мы также запустили обучение без опции torch_compile: Используя опцию torch_compile и оптимизацию adamw_torch_fused, время обучения уменьшается на 52.5% по сравнению с обучением без PyTorch 2.0: Таким образом, время обучения снизились с 696 до 457 секунд. Значение train_samples_per_second выросло с 43 до 65. Значение f1-метрики такое же или чуть лучше, чем при обучении без использования torch_compile. PyTorch 2.0 невероятно мощен! 🚀 Сохраним наши результаты и токенизатор в Hugging Face Hub и создадим карточку модели. Посмотрим на инференс модели на текстовом примере. Финальный классификатор получаем с помощью pipeline из библиотеки transformers. В этом посте мы разобрались, как использовать PyTorch 2.0 для обучения модели классификации текста на наборе данных BANKING77. PyTorch 2.0 — это мощный инструмент, позволяющий ускорить время обучения. В нашем примере, запущенном на NVIDIA A10G, мы смогли достичь на 52.5% лучшей производительности.  Кроме того, мы увидели, как несложно дообучить BERT под свою задачу средствами Hugging Face и PyTorch.  Мой телеграм‑канал о DS и не только.  AI Lead at Flocktory