Kissat vs. KOIRAT + FLASK + TOCK + KUBERNET

Oletko koskaan miettinyt, kuinka rakentaa koneoppimisverkkosovellus ja ottaa se käyttöön mittakaavassa ja hallita pilvillä kaikille? Olet tullut oikeaan paikkaan. Tässä postituksessa käydään läpi peruskäsitteet, jotka koskevat ML-verkkosovelluksesi säilyttämistä ja käyttöönottoa Google-pilvessä kebernetes-moottorin avulla.

Löydät täydellisen koodin täältä. Nopea esittely käy osoitteessa http://130.211.229.36/. (Lataa vain jpg-kuvat)

Edellytykset = Telakoitsijoiden ymmärtäminen

Ensin mikä on kubernetes? Kubernetes on avoimen lähdekoodin orkestointijärjestelmä dokerisäiliöille. Se hoitaa ajoitusten laskeutumista klusterin solmuihin ja hallitsee aktiivisesti työkuormia varmistaakseen, että niiden tila vastaa käyttäjän ilmoittamia aikomuksia. Tarrojen ja palkkien avulla se ryhmittelee säiliöt, jotka muodostavat sovellus loogisiksi yksiköiksi helppoa hallintaa ja löytämistä varten.

Kubernetes-arkkitehtuuri

Katsaus Kubernetes-klusterista Master- ja työntekijäsolmujen kanssa. Kaikkia klusteritoimintoja ohjataan isäntäsolmulta, jolla on käynnissä oleva API. Kubectl on komentoriviliittymä komentojen suorittamiseen Kubernetes-klustereita vastaan.

Jokainen solmu merkitään ja annetaan tunnisteet. Säiliösovelluksesi toimii solmun pod-sisäpuolella ja otetaan käyttöön isäntäsolmussa.

NODE

Tämä on solmu, jossa on monia palkoja niiden pod IP-osoitteilla.

Pods - Nämä ovat arkkitehtuurin perusyksikkö, joka sisältää yleensä 2 säilytysastiaa. Jokaiselle Kubernetes-pod: lle määritetään yksilöllinen pod IP-osoite klusterissa ja sitä voidaan hallita manuaalisesti Kubernetes API: n kautta. Pod voi määrittää taltion, kuten paikallisen levyhakemiston tai verkkolevyn, ja paljastaa sen säilössä pod.

Ja lopuksi tulee paljastamaan sovelluksesi palvelun avulla. Kun työntekijäsolmu kuolee, myös Solmulla toimivat palkit menetetään. Kopiojoukko voi sitten ajaa klusterin dynaamisesti takaisin haluttuun tilaan luomalla uusia palkkeja sovelluksen käynnissä pitämiseksi. Tämä tapahtuu service.yaml-tiedoston kautta.

Kubernetes-infrastruktuurin ymmärtämiseksi suosittelen videota, joka selittää kaikki käsitteet yksinkertaistetulla linkillä.

Aloitetaan web-sovelluksemme.

Koulutin neuroniverkkomallini ja tallensin sen JSON: iin ja myös painot h5-tiedostoon. Kirjoitin use_model.py ladataksesi koulutetun mallin JSON: lta ja ennustamaan uuden kuvan.

Käytin FLASKia web-sovelluksen luomiseen. Sovellus on yksinkertainen. Se ottaa kuvan ja ennustaa kissan tai koiran käyttämällä use_model.py ja palauttaa onko "Oletko koira" vai "olet kissa". App.py menee näin (muutin isäntä = 0.0.0.0 luotaessa säilöä.)

Sitten tärkein osa on kirjoittaa Dockerfie voidakseen rakentaa docker-kuvan.

Suorita komennot apt-get update && install python3 ...

Kopioi nykyinen hakemisto. pip asentaa vaatimukset.txt

EXPOSE-portti (missä app.py toimii)

Suorita sitten komento python3 app.py. CMD lisätään aina Entrypointiin, jotta saat viimeisen suoritettavan komennon.

Voit rakentaa säilön paikallisesti ja testata säilötyn pullon sovelluksesi (suorita nämä komennot projektihakemistossa)

docker build -t image_classifier: viimeisin.
telakka-ajo -p-5500: 3000 image_classifier

Tämä ajaa app.py ja porttien edelleenlähetysten ollessa käytössä, voit käyttää webapp-selainta osoitteessa http: // localhost: 5000.

Nyt tulee eniten odotettu osa.

Luo tili cloud.google.com -palvelussa, jotta maksut pääsevät käyttämään Kubernetes-moottoria. Siirry kubernetes-moottoriin ja napsauta konsoli-ikkunan yläosassa olevaa Aktivoi pilvikuori-painiketta. Näet konsolin alareunassa, jossa voit suorittaa komentoja, jotka tämä konsoli on esiasennettu gcloud-, docker- ja kubectl-ohjelmiin. Kerran konsolissa:

git klooni 
cd oma projekti

Aseta PROJECT_ID-ympäristömuuttuja kuoressaan hakemalla ennalta määritetty projektitunnus gcloudissa suorittamalla seuraava komento:

vie PROJECT_ID = "$ (gcloud config saa arvon projekti -q)"

PROJECT_ID-arvoa käytetään merkitsemään säilökuva, jotta se työnnetään yksityiseen säilörekisteriin.

Nyt voit rakentaa säilökuvan:

telakan rakennus -tccr.io/${PROJECT_ID}/:1.0.0
telakointiasema gcr.io/${PROJECT_ID}/:1.0.0

Rakentaminen vie jonkin aikaa, rakennuksen jälkeen voit tarkistaa “Docker images” -komennolla. Nyt voit luoda klusterisi:

Konttikuvan rakentaminen

Konttiklusterin luominen:

Nyt kun säilökuva on tallennettu rekisteriin, sinun on luotava säilöklusteri säilytyskuvan suorittamiseksi. Ryhmä koostuu Compute Engine VM -instituutioiden joukosta, joka käyttää Kubernetesia.

gcloud-konttiklusterit luovat  --zone = us-central1-f --num-nodes = 2

Suorittaminen vie jonkin aikaa, valmistumisen jälkeen voit varmistaa ”gcloud compute instance list” -komennolla.

Sovelluksen käyttöönotto:

kubectl run  --image = gcr.io / $ {PROJECT_ID} / : 1.0.0 --port 3000

“Kubectl get pods” -komento nähdäksesi käyttöönoton luoman Pod-laitteen.

Sovelluksen paljastaminen Internetiin:

kubectl paljastaa käyttöönoton  --type = LoadBalancer --port 80 --target-port 3000

Yllä oleva kubectl paljastaa -komento luo palveluresurssin, joka tarjoaa verkko- ja IP-tukea sovelluksesi Pods: lle. Portti-lippu määrittää portin numeron, joka on määritetty Load Balancerissa, ja - target-port lippu määrittelee portin numeron, jota edellisestä vaiheesta kubectl run -komennon luoma pod.

kubectl saada palvelu

Lähtö antaa sinulle ulkoisen IP: n (alla olevan kuvan alareunassa):

Hanki ulkoinen IP

Kun olet määrittänyt sovelluksesi ulkoisen IP-osoitteen, kopioi IP-osoite. Osoita selaimesi tälle URL-osoitteelle (kuten http://130.211.229.36) tarkistaaksesi, onko sovelluksesi käytettävissä.

Vieraillessasi ulkoisessa IP: ssä

HUOM: 1. Missä tahansa olen käyttänyt <>, lisää haluamasi nimet. 2. Olen kirjoittanut yaml-tiedostot myös githubiini, jos käytät Digitaloceea tai jotain orher-pilvialustaa.

Tämä blogi on hyödyllinen. Kommentoi alla olevia epäilyksiä ja kysymyksiä.