Библиотеката transformers на Hugging Face е компилация от модели за дълбоко обучение, предназначени да позволят на потребителите бързо да започнат да прилагат предварително обучени модели към своите данни. В момента библиотеката поддържа текстови, визуални, аудио и мултимодални модели. Библиотеката се радва на голяма потребителска база и може да се използва заедно с модела, набора от данни, пространствата и API услугите на Hugging Face.

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-ling!

Искате ли да научите повече за PADL? Ето някои ресурси: