Тренирайте на Kaggle; разположете в Google Cloud

Внедряването на модел за машинно обучение (ML) в производството започва с действителното изграждане на модела, което може да се направи по няколко начина и с много инструменти.

Подходът и инструментите, използвани на етапа на разработка, са много важни за осигуряване на безпроблемната интеграция на основните единици, които изграждат тръбопровода за машинно обучение. Ако те не бъдат взети под внимание, преди да започнете проект, има огромен шанс да се окажете със система за машинно обучение с ниска ефективност и висока латентност.

Например, използването на функция, която е отхвърлена, все още може да работи, но има тенденция да предизвиква предупреждения и като такава увеличава времето за реакция на системата.

Първото нещо, което трябва да направите, за да осигурите тази добра интеграция на всички системни единици, е да имате системна архитектура (план), която показва интеграцията от край до край на всяка логическа част в системата. По-долу е проектираната системна архитектура за този мини-проект.

Разработване на модел

Когато обсъждаме разработването на модел, говорим за итеративен процес, при който хипотезите се тестват и моделите се извличат, обучават, тестват и изграждат, докато се постигне модел с желаните резултати.

Това е забавната част за екипите от учени по данни, където те могат да използват уменията си за машинно обучение за задачи като „проучвателен анализ на данни“, „инженеринг на функции“, обучение на модели и оценки на дадените данни.

Моделът, използван в този проект, е изграден и сериализиран на това ядро на Kaggle с помощта на титаничния набор от данни. Обърнете внимание, че използвах само съществуващи модули в стандартни пакети като Pandas, NumPy и sklearn, за да не се налага изграждането на персонализирани модули. можете да погледнете моята предишна публикация [1]„„Внедряването на модела за машинно обучение е демистифициран (част 2)““, за да научите повече за персонализиран конвейер

Производителността на модела може да бъде значително подобрена с трансформация на функции, но повечето трансформатори, които работят най-добре с данните, не са налични в sklearn без комбинацията от Pandas, NumPy и други полезни библиотеки и това ще доведе до изграждането на допълнителни модули по време на разгръщането. За да опростя нещата, колкото е възможно, ще се въздържа от изследване на тези теми твърде задълбочено.

Kaggle е най-голямата онлайн общност от учени по данни и практикуващи машинно обучение. Kaggle позволява на потребителите да намират и публикуват набори от данни, да изследват и изграждат модели в уеб базирана среда за наука за данни, да работят с други учени за данни и инженери по машинно обучение и да участват в състезания за решаване на предизвикателства в областта на науката за данни.

Задълбочено обучение - За експерти, от експерти. Използваме нашия десетилетен опит, за да доставяме „най-добрите ресурси за дълбоко обучение във входящата ви поща всяка седмица“.

Внедряване на ML на Google Cloud Platform

Google Cloud Platform (GCP) е една от основните опции за базирано на облак внедряване на ML модели, заедно с други като AWS, Microsoft Azure и др.

С GCP, в зависимост от това как сте избрали да внедрите вашия модел, има основно 3 опции, които са [2]:

  • Платформа за изкуствен интелект на Google: Платформа за изкуствен интелект, която улеснява разработчиците на машинно обучение, специалистите по данни и инженерите по данни да пренесат своите ML проекти от идея до производство и внедряване, бързо и рентабилно. От инженеринг на данни до гъвкавост „без заключване“, платформата за изкуствен интелект на Google има интегрирана верига от инструменти, която помага при изграждането и стартирането на вашите собствени приложения за машинно обучение. Като такова, разработката и внедряването на ML модел от край до край е възможно на платформата за изкуствен интелект на Google без необходимост от външни инструменти. Предимството на това е, че не е нужно да се притеснявате за избора на най-добрия инструмент, за да свършите всяка работа и колко добре всеки модул се интегрира с по-голямата система. Алтернативи на това са Amazon SageMaker, Microsoft Azure и др

  • Облачна функция на Google:Облачната функция е най-лесният начин за изпълнение на код. това е управлявана от събития изчислителна платформа без сървър, чрез която вашата функция се изпълнява, когато е необходимо, без необходимост от предоставяне на сървър по време на настройка или други свързани изчислителни ресурси [3]. Предимствата на използването на облачна функция включват: автоматично мащабиране въз основа на натоварването; способността да се опрости разработването на сложни приложения на различни езици; няма сървъри за осигуряване, управление или надграждане; интегрирано наблюдение, регистриране и разпределено проследяване; вградена сигурност на ниво роля и функция, базирана на принципа на най-малката привилегия; и ключови мрежови възможности за хибридни и мулти-облачни сценарии. Алтернативи на това са AWS Lambda, Azure Functions и др.
  • Google App Engine:App Engine на Google е платформа като услуга и платформа за облачни изчисления, която се използва най-вече за разработване и хостване на уеб приложения. Функцията за автоматично мащабиране на App Engine автоматично разпределя повече ресурси за уеб приложението, за да се справи с допълнителното търсене. Това е изборът, с който експериментирах за този проект.

Защо използването на App Engine за този проект?

App Engine е базирана на облак платформа, доста изчерпателна е и съчетава инфраструктура като услуга (IaaS), платформа като услуга (PaaS) и софтуер като услуга (SaaS). Времето за изпълнение и езиците са актуални със страхотна документация. Функциите в етапа на предварителен преглед (бета) са достъпни за голям брой потребители, което ни държи в течение за възможни бъдещи разработки.

За да внедрите този модел в App Engine с помощта на терминал, са необходими четири основни неща, които са:

  • Сериализираният модел и артефактите на модела: Това е запазеният обучен модел и други стандартни обекти, използвани по време на трансформацията на данни. Всички ще бъдат съхранени в Google Storage (кофа) при внедряване, така че да могат да бъдат достъпни от основния скрипт за подготовка на тестови данни и правене на прогнози.
  • Основен скрипт.py: Това е скриптът, в който е написана функцията за прогнозиране и където се импортират всички необходими библиотеки, изброени във файла с изисквания, необходими за подготовка и прогнозиране на данни от край до край. Бих добавил коментари за всеки ред код, така че да е по-лесно за четене.
  • Requirement.txt: Прост текстов файл, който съдържа зависимости на модела с точната версия, използвана по време на обучението на модела. За да избегнете проблеми, по-добре е да проверите наличните версии на всички библиотеки и пакети, които ще използвате в облака, преди да разработите модела.
scikit-learn==0.22
numpy==1.18.0
pandas==0.25.3
flask==1.1.1
  • Файлът app.yaml: Това е файлът, който можете да използвате, за да конфигурирате настройките на вашето приложение App Engine във файла app.yaml. Този файл указва как URL пътищата съответстват на манипулатори на заявки и статични файлове. Файлът app.yaml също съдържа информация за кода на вашето приложение, като време на изпълнение и идентификатор на най-новата версия. Всяка конфигурация, която пропуснете в този файл, ще бъде зададена в състояние по подразбиране. За това просто приложение трябва само да настроя времето за изпълнение на python37, така че App Engine да знае изображението на Docker, което ще изпълнява приложението.
runtime: python37

Има много повече за писане на app.yaml файлове, които могат да бъдат намерени в официалната документация на Google [4].

За лесно внедряване на това приложение трябва да имаме проекта на платформа за контрол на версиите за разработка на софтуер като Bitbucket, GitHub и т.н., любезно намерете хранилището на проекта в GitHub.

Стъпки за внедряване на модела в App Engine на Google

  • Създайте проект в Google Cloud Platform

  • Изберете проекта и създайте приложение с помощта на App Engine

Настройте приложението, като зададете постоянния регион, където искате Google да управлява приложението ви. След тази стъпка изберете езика за програмиране, използван при писането на приложението.

  • Или изтеглете Cloud SDK, за да го внедрите от вашата локална машина, или активирайте облачната обвивка от облака. За тази демонстрация използвам облачна обвивка. след като обвивката е активирана, уверете се, че Cloud Platform project е настроен на предвидения ID на проекта.

  • Клонирайте репото на вашия GitHub проект на двигателя, като стартирате (git clone <link to clone your repository> )

  • Променете в директорията на проекта, съдържащ файла, който ще бъде качен в App Engine, като стартирате (cd ‘ cloned project folder’). Можете да извиквате директории, като стартирате ls.

  • Инициализирайте gcloud в директорията на проекта, като изпълните gcloud init. Това ще предизвика някои въпроси относно конфигурацията на Google Cloud SDK, които са доста ясни и могат лесно да получат отговор.
  • Последната стъпка е да внедрите приложението чрез изпълнение на командата gcloud app deploy. Ще отнеме известно време за качване на файлове, инсталиране на зависимости на приложението и внедряване на приложението.

  • След като качването приключи, можете да стартирате gcloud app browse, за да стартирате приложението в браузъра или да копирате URL адреса на приложението ръчно, ако браузърът не бъде открит.

Забележка: Трябва да добавите крайната точка на API към URL адреса, ако използвате персонализирана рутина за прогнозиране. За този проект Flask беше изборът на уеб рамка и крайната точка беше декларирана като /prediction_endpoint.

Тествайте приложението с Postman

Тъй като не изградихме уеб интерфейс за проекта, можем да използваме клиента на приложението Google, за да изпратим HTTP заявка, за да тестваме приложението, но ще използваме Postman, за да го тестваме, защото прогнозираме на партиди въз основа на това как четем набора от данни на бекенда. По-долу е отговорът от приложението след изпращане на HTTP заявка за получаване на прогнози за качените тестови данни.

Обобщавайки

Внедряването на ML модели може да приеме различни форми в зависимост от набора от данни, целевата платформа за внедряване, начина, по който крайните потребители ще я използват и много други фактори.

За да имате гладко пътуване при внедряването на модели, направете задълбочен преглед на всички единици, които съставляват системната архитектура на ML, която се опитвате да внедрите.

Свържете се с мен в Twitter и LinkedIn

Разгледайте Project GitHub Repository и не забравяйте да го означите със звезда във връзката по-долу:



Наздраве

Референции











Бъдеща работа

  • Внедряване на персонализиран конвейер за машинно обучение на GCP чрез App engine и Docker

Бележка на редактора: Heartbeat е онлайн публикация и общност, ръководена от сътрудници, посветена на предоставянето на първокласни образователни ресурси за наука за данни, машинно обучение и практици в дълбокото обучение. Поели сме ангажимент да подкрепяме и вдъхновяваме разработчици и инженери от всички сфери на живота.

Редакционно независим, Heartbeat е спонсориран и публикуван от Comet, MLOps платформа, която позволява на учените по данни и екипите на ML да проследяват, сравняват, обясняват и оптимизират своите експерименти. Ние плащаме на нашите сътрудници и не продаваме реклами.

Ако искате да допринесете, преминете към нашата покана за сътрудници. Можете също така да се регистрирате, за да получавате нашите седмични бюлетини (Deep Learning Weekly и Бюлетин на Comet), да се присъедините към нас в Slack и да следвате Comet в Twitter и LinkedIn за ресурси, събития и много повече, което ще ви помогне да създавате по-добри ML модели, по-бързо.