Как и защо да разположите свои собствени модели за машинно обучение с помощта на докер контейнери.

В тази статия ще обсъждам внедряването и хостването на всеки модел за машинно обучение в Docker контейнер. Той ще включва насоки стъпка по стъпка за подготовка на вашия модел за машинно обучение за внедряване на всяко устройство и всяка платформа, което е огромен скок в процеса на машинно обучение.За съжаление, няма да обсъждам как или какъв модел да се изгради преди внедряването, тъй като и двете теми са извън обхвата на тази статия. Въпреки това, ако искате да приложите споменатите теми, „Machine Learning Mastery“ би било добро място за начало.

Докър, чакай защо?

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

Docker е бърз, надежден и лек. Той позволява бърз и лесен достъп до всяко изображение в него с минимална изчислителна памет. Той съдържа всички необходими зависимости за стартиране на изображението, което хоства (оттук и думата „контейнер“). По този начин разполагането и актуализирането на изображения вътре в контейнера се извършва надеждно и без усилия.

Docker и вашият модел на машинно обучение

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

  1. Обучете, напаснете и запазете своя модел за машинно обучение.
  2. Създайте API за изпращане и получаване на данни.
  3. Създайте файла Docker.
  4. Разположете приложението.

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

Има много начини да запазите и заредите вашите модели за машинно обучение в зависимост от библиотеката/рамката за обучение, която използвате. Основно запазването на вашия модел включва:

  • Изграждане на вашия модел.
  • Запазване на копия на вашите контролни точки по време на обучение.
  • Запазване на самия модел.

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

Създайте API за изпращане и получаване на данни

Сега нека създадем API за изпращане на данни към нашия модел за машинно обучение. В нашата демонстрация ще използвам Flask; библиотека на python, изрично създадена за уеб заявки. Избрах тази библиотека, тъй като тя също е написана на python, езикът, с който са изградени повечето модели за машинно обучение; въпреки това можете да използвате всеки API, с който сте запознати, за да изпълните този код.

За да създадем API за модела, използвайте този код:

Ще намерите описание на това какво прави всеки ред код в коментарите на частта код.

Създайте файла Docker с необходимия контейнер

Сега ще създадем основната част от процеса. Функцията, която ни позволява да хостваме нашия модел в Docker контейнер: Docker файлът. Въпреки че е възможно, физически няма да добавим модела в нашето Docker изображение, тъй като трябва само да го хостваме. Като цяло е добра практика да се създаде едно изображение за всяка цел.

За да създадете Docker файла, следвайте следния шаблон:

Нека да разгледаме какво прави кодът стъпка по стъпка:

  1. Ред 1: импортира основното изображение на Python Docker. Това изображение е извлечено от Docker hub, официалното публично хранилище.
FROM python:3.7-slim-buster

2.Ред 3: добавя файла с изискванията за правилното внедряване на модела, който съдържаме. Файлът с изискванията съдържа името на всички зависимости, използвани от модела.

COPY requirements.txt /requirements.txt
-- Sample Requirements.txt -- 
tensorflow
flask
...

3.Ред 5: инсталира необходимите зависимости, изброени във файла с изисквания вътре в контейнера.

RUN pip install -r requirements.txt

4. Ред 7: копира изходния код от текущата директория в контейнера. Кодът може да включва създадения API на колбата, модели за машинно обучение и и т.н…

ADD . /app

5. Ред 9: задава работната директория.

WORKDIR /app

6. Ред 11: Разкрива порта, на който работи Flask. Накратко, той ви позволява да правите заявки на порта, който Flask използва за свързване към модела чрез API.

EXPOSE 8000

7. Ред 14: Изпълнява Flask.

CMD ["flask", "run", "--host=0.0.0.0", "--port=8000"]

Създаване на файла Docker Compose (по избор):

Файлът за съставяне на docker е yaml файл, който управлява начина, по който се създава контейнер. Въпреки че не е необходимо, добра практика е да го създадете, тъй като опростява много функции на Docker, както и улеснява четливостта на опциите.

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

Изграждане на Docker изображение и контейнер

Нека създадем докер контейнера. Отворете Docker на вашата операционна система, това може да стане чрез:

  • Командният ред на Windows.

  • Терминалът на Linux.

Ако сте създали Docker Compose файл, въведете следната команда, за да създадете контейнера:

docker-compose up -d

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

docker build -t <insert_image_name> .
docker run --rm --name <insert_container_name> <same_image_name>

За да видите дали сте създали докер контейнера успешно, проверете вашето приложение Docker Desktop за потребители на Windows или можете да използвате командата Docker PS от вашия терминал.

Разгръщане на модела

Поздравления, че успяхте!

Можете да опитате да внедрите своя модел на много машини, включително Amazon ECS и Google Kubernetes Engine.Накрая можете да намерите модела, който използвах за тази демонстрация тук.

Резюме

Тази статия обсъди значението на Docker контейнерите, както и тяхната жизнеспособност при хостване и внедряване на модели за машинно обучение. Освен това съдържаше стъпка по стъпка урок за процеса, необходим за реално прилагане на това, което се обсъжда в самата статия, като същевременно се борави с различни опции за внедряване на техника.