CATS vs DOGS + FLASK + DOCKER + KUBERNETES

Някога сте се чудили как да създадете уеб приложение за машинно обучение и да го разгърнете и да го управлявате за всички в облака? Вие сте попаднали на правилното място. В тази публикация ще разгледам основните концепции за съдържанието на уеб приложението ви за ML и разгръщането му в облака на Google с помощта на кебернетите.

Можете да намерите пълния код тук. За бързо демо посещение http://130.211.229.36/.(upload само jpg изображения)

Предпоставки = Разбиране на докерите

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

Кубернети архитектура

Прегледът на клъстер Kubernetes с възли Master и работник. Всички дейности на thecluster се контролират от Master възел, който има изпълнен API. Kubectl е интерфейс на командния ред за изпълнение на команди срещу Kubernetes клъстери.

Всички възли са етикетирани и дадени с етикети. Приложението ви за контейнери работи вътре в шушулка в даден възел и се разполага в главен възел.

НАГРАДА

Това е възел с много шушулки с техните IP адреси под.

Pods - Това са основната единица на архитектурата, обикновено съдържа 2 контейнера. На всеки шушулка в Kubernetes е присвоен уникален IP адрес в рамките на клъстера и може да се управлява ръчно чрез Kubernetes API, A pod може да определи обем, като локална дискова директория или мрежов диск, и да го изложи на контейнерите в шушулка.

И накрая идва Разкриването на приложението ви с помощта на услуга. Когато работният възел умре, Pods, работещ на възела, също се губят. След това набор от реплики може динамично да закара клъстера обратно в желаното състояние чрез създаване на нови Pods, за да поддържа приложението ви работещо. Това става чрез файл service.yaml.

За по-добро разбиране на инфраструктурата на kubernetes препоръчвам видео, което обяснява всички понятия по опростен начин връзка.

Нека започнем нашето уеб приложение.

Обучих моя модел на Neural network и го запазих в JSON, а също така запазих тежестите във h5 файл. Написах use_model.py за зареждане на обучения модел от JSON и за прогнозиране на новото изображение.

Използвах FLASK за създаване на уеб приложение. Приложението е просто, отнема изображението и предвижда котка или куче, използвайки use_model.py и връща дали „Вие сте DOG“ или „You are CAT“. Приложението.py върви така (промених хоста = 0.0.0.0 при създаването на контейнера.)

Тогава най-важната част е да напишете Dockerfie, за да можете да изградите докерското изображение.

Изпълнете команди apt - вземете актуализация и & инсталирайте python3…

Копирайте текущата си директория. pip инсталиране изисквания.txt

EXPOSE порт (където се показва вашата app.py)

След това изпълнете командата python3 app.py. CMD винаги ще бъде добавен към Entrypoint, за да ви даде последната команда за изпълнение.

Можете да изградите контейнера локално и да тествате приложението си за поставяне в контейнер (изпълнете тези команди в директорията на вашия проект)

docker build -t image_classifier: най-ново.
docker run -it -p 5500: 3000 image_classifier

Това ще стартира вашата app.py и с пренасочване на порт на място можете да получите достъп до webapp във вашия браузър на http: // localhost: 5000.

Сега идва най-очакваната част.

Създайте акаунт в cloud.google.com, позволяващ плащанията да имат достъп до двигателя на Kubernetes. Отворете двигателя kubernetes и щракнете върху бутона за активиране на облачната обвивка в горната част на прозореца на конзолата. Ще получите конзола в долната част, където можете да изпълнявате команди, тази конзола е предварително инсталирана с gcloud, docker и kubectl. Веднъж в конзолата:

git clone 
cd your_project

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

Export PROJECT_ID = "$ (gcloud config get-value project -q)"

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

Сега можете да изградите изображението на контейнера:

docker build -t gcr.io/${PROJECT_ID}/:1.0.0
docker push gcr.io/${PROJECT_ID}/:1.0.0

Изграждането ще отнеме известно време, след като изградите, можете да потвърдите с помощта на командата „Docker images“. Сега можете да създадете своя клъстер:

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

Създаване на контейнерни групи:

Сега, когато изображението на контейнера се съхранява в регистър, трябва да създадете контейнерна група, за да стартирате изображението на контейнера. Клъстерът се състои от пул от Compute Engine VM екземпляри, работещи с Kubernetes.

gcloud контейнерните клъстери създават  --zone = us-central1-f --num-nodes = 2

Ще отнеме известно време, след като завършите, можете да потвърдите с командата „gcloud compute list of instance list“.

Разгръщане на приложението ви:

kubectl run <някакво име> --image = gcr.io / $ {PROJECT_ID} / : 1.0.0 --port 3000

Команда "kubectl get pods", за да видите шушулката, създадена от разполагането.

Излагане на молбата ви в Интернет:

kubectl експонира внедряване <някакво име> --type = LoadBalancer --port 80 - Target-port 3000

Командата kubectl експониране по-горе създава Сервизен ресурс, който осигурява поддръжка в мрежа и IP на подс.Представлението на вашето приложение. Флагът на порт посочва номера на порта, конфигуриран на Load Balancer, а флагът - target-port указва номера на порта, който се използва от Pod, създаден от командата за изпълнение на kubectl от предишната стъпка.

kubectl получите услуга

Изходът ще ви даде външен IP адрес (в долната част на изображението по-долу):

Вземете външния си IP

След като определите външния IP адрес за вашето приложение, копирайте IP адреса. Насочете браузъра си към този URL адрес (например http://130.211.229.36), за да проверите дали приложението ви е достъпно.

При посещение на външен IP

ЗАБЕЛЕЖКА: 1. Където и да съм използвал <> не се колебайте да добавите желаните от вас имена. 2. Писал съм файлове на yaml също в моя github, ако използвате Digitalocean или друга облачна платформа на Orher.

Този блог е полезен. За всякакви съмнения и запитвания коментирайте по-долу.