Ръководство за внедряване на система, която непрекъснато събира данни и непрекъснато преобучава модели на машинно обучение.

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

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

Преглед на архитектурата

Архитектурата се състои от:

  • AWS EC2 — Облачна изчислителна среда, където хоствам Airflow и MLFlow Docker контейнери. За да хоства Airflow, екземплярът на EC2 трябва да има поне 2 VCPU и RAM 4096 MB.
  • Въздушен поток— Планирайте и автоматизирайте изпълнявани задачи като обхождане на данни от уебсайтове, модел на обучение и качване на резултати в услуги за съхранение в облак.
  • MLFlow— Платформа за управление на жизнения цикъл на ML. В проекта се възползвам от тази платформа, за да регистрирам модели за машинно обучение, показатели за обучение и параметри.
  • AWS RDS — Съхранявайте необработени данни и регистрационни файлове за обучение.
  • AWS S3 — Съхранява внедрени версии на ML модел.

Следните са стъпките на високо ниво за тази архитектура:

  1. Настройте Docker контейнери.
  2. Проектирайте пълзящ паяк за събиране на данни от уебсайт.
  3. Изградете ML тръбопровод за предварителна обработка, обучение и оценка на резултатите.
  4. Създайте работен процес на DAG.

Директория на проекта

Преди да започнете е добре да имате преглед на директорията на проекта. dags, logs, data и plugins са папки, които ще бъдат монтирани към нашия контейнер Airflow Docker.

dags
├── __init__.py
├── automated_ml_dag.py
├── clean_archived_dag.py
└── src
logs
data
├── archived
└── staging
plugins
build-images.sh 
docker-compose.yaml 
airflow.Dockerfile
mlflow.Dockerfile
start-main.sh 

Стъпка 1 — Настройте Docker контейнери

В тази стъпка изграждаме многоконтейнерна Docker среда:

Като начало създавам два Docker файла, наречени airflow.Dockerfile и mlflow.Dockerfile, за да създам персонализирани изображения за нуждите на проекта.

След това започвам да създавам изображения с bash скрипт:

За docker-compose.yaml можем да направим справка от шаблон, предоставен от Apache Airflow на адрес https://airflow.apache.org/docs/apache-airflow/2.3.2/docker-compose.yaml.

В проекта персонализирам чрездобавяне на някои променливи под airflow-common-env и включвам mlflow изображение подуслуги:

Накрая изпълнете кода по-долу, за да стартирате контейнерите:

docker-compose --env-file env.list up airflow-init
docker-compose --env-file env.list up -d

Забележка: Уверете се, че има env.list файл, който съхранява променливи на средата, намиращи се в директорията, за да изпълните успешно горната команда.

В Docker Desktop трябва да видим зелените сигнали на нашите контейнери след успешно стартиране.

Стъпка 2— Проектирайте пълзящ паяк

Суровите отзиви от уебсайта са както следва:

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

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

За да съхраняваме събраните резултати в базата данни, ние също трябва да изградим клас Postgres, така че нашият паяк да може да изпраща сканирани резултати до AWS RDS.

Накрая създаваме функция за интегриране на Scrapy spider с базата данни.

Всеки път, когато процесът се изпълнява, изчерпаните данни се качват в нашата база данни на AWS RDS

Стъпка 3 — ML Pipeline

Първо, трябва да се определи конвейер за това как протича процесът на обучение.

Целта на тази статия не се фокусира върху способността за прогнозиране на модела; По този начин в този случай използвам основен NLP процес: токенизирам необработени данни, прилагам TF-IDF и използвам GridSearch, за да намеря най-добрите параметри за алгоритъма (използвам RandomForestClassifier за този проект).

Тръбопроводът е готов, но трябва да проектираме родителски процес, който да регистрира показатели, параметри и обучени версии на модела. Това е моментът, когато MLFlow идва да ни помогне. С MLFlow можем лесно да проследяваме обучени версии през целия жизнен цикъл на ML.

В този проект, когато се обучава модел, параметрите и показателите се качват в AWS RDS и обучените модели се съхраняват в AWS S3.

Освен това, за да се избегне увеличаване на размера на хранилището, само обучени версии на модела, които надминават текущия внедрен модел; например по отношение на резултата за точност, се качват и заместват текущия.

Стъпка 4 — Създайте работен поток на DAG

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

Например създавам Airflow DAG (намиращ се в папка ./dags), който автоматизира процеса всеки понеделник, сряда и петък в 8 часа сутринта UTC и само в петък моделът се обучава отново.

В потребителския интерфейс на Airflow горният код може да бъде преведен в тази графика. За train_model_group имаме 3 подзадачи:

  • load_data: зарежда данни от AWS RDS база данни и ги съхранява в папка data/staging.
  • train_model: стартирайте конвейер за обучение по НЛП.
  • archived_data: след обучението преместваме всички файлове в папка data/staging в папка data/archived, за да проследим въведените данни за обучение.

Дневниците на обучението също могат да се проследяват в потребителския интерфейс на Airflow:

За да проверите потребителския интерфейс на MLFlow, отворете {EC2 Public IP}:5000или localhost:5000, ако работите на локална машина.

В примера по-долу можем да видим, че се внедряват само модели, които имат по-висока точност от текущия (колонаМодели).

Също така е лесно да проследите ID на внедрения модел от MLFlow UI и да изтеглите обучения модел от AWS S3.

🙌🙌 Това е краят на статията и се надявам да ви хареса.

Ако намирате тази статия за информативна, моля, харесайте и ме последвайте, за да получавате известия за предстоящите ми статии ✌️