Flusso di lavoro di machine learning containerizzato con Docker

Contenuti

Anni fa, macchine virtuali (VM) erano lo strumento principale per ospitare un'applicazione, poiché incapsula il codice e i file di configurazione insieme alle dipendenze necessarie per eseguire un'applicazione. Fornisce le stesse funzionalità di un sistema fisico.

Per eseguire più applicazioni, dobbiamo avviare più macchine virtuali e gestire un insieme di macchine virtuali, abbiamo bisogno di un hypervisor.

container-vm-whatcontainer_2-7503589

Fonte: Infrastruttura di condivisione delle applicazioni

Passa dalle macchine virtuali ai container

La limitazione di questo meccanismo (Macchine virtuali) è che non è efficiente, poiché l'esecuzione di più applicazioni replicherà i tuoi sistemi operativi, che consuma una grande quantità di risorse e, con l'aumento delle applicazioni in esecuzione, abbiamo bisogno di più spazio per allocare le risorse.

Un altro aspetto negativo di questo è, supponiamo di dover condividere la nostra applicazione con altri, e quando provano a eseguire l'applicazione la maggior parte delle volte non viene eseguita a causa di problemi di dipendenza e per questo, dobbiamo solo dire che"Funziona sul mio laptop / sistema“. Quindi, per gli altri per eseguire le applicazioni, deve impostare lo stesso ambiente in cui si è imbattuto sul lato host, il che significa molta configurazione manuale e installazione dei componenti.

La soluzione a queste limitazioni è una tecnologia chiamata Contenitori.

La creazione di modelli di machine learning in Jupyter Notebooks non è la soluzione finale per nessun POC / brutta copia, dobbiamo portarlo in produzione per risolvere i problemi della vita reale in tempo reale.

Quindi, il primo passo è fare le valigie / pacchettizza la nostra applicazione in modo che possiamo eseguire la nostra applicazione su qualsiasi piattaforma cloud per sfruttare i servizi gestiti, la scalabilità automatica e l'affidabilità, e molti altri.

Per impacchettare la nostra applicazione abbiamo bisogno di strumenti come Docker. Quindi lavoriamo su strumenti fantastici e vediamo la magia..

Contenitori

Un contenitore è un'unità standard di software che impacchetta il codice e tutte le sue dipendenze in modo che l'applicazione venga eseguita in modo rapido e affidabile da un ambiente di elaborazione all'altro..

Ora, più macchine virtuali vengono sostituite con più contenitori in esecuzione su un singolo sistema operativo host. Le applicazioni in esecuzione nei contenitori sono completamente isolate e hanno accesso al file system, risorse e pacchetti del sistema operativo. Per la creazione e l'esecuzione di contenitori, abbiamo bisogno di strumenti di gestione dei container, Che cosa Stivaggio.

applicazione-contenitore-docker-bordo-blu_2-6319065

Fonte: Applicazioni che condividono il sistema operativo

Stivaggio

Docker è uno strumento di gestione dei contenitori che impacchetta il codice dell'applicazione, configurazione e dipendenze in un'immagine portatile che può essere condivisa ed eseguita su qualsiasi piattaforma o sistema. Con Docker, possiamo contenere più applicazioni ed eseguirle sulla stessa macchina / sistema, poiché condivideranno tutti gli stessi servizi del kernel del sistema operativo, utilizzare meno risorse rispetto alle macchine virtuali (VM).

Un'immagine contenitore Docker è un pacchetto software leggero, autonomo ed eseguibile che include tutto il necessario per eseguire un'applicazione: codice, tempo di esecuzione, Strumenti di sistema, librerie e impostazioni di sistema.

Le immagini dei contenitori vengono convertite in contenitori in fase di esecuzione e, per container Docker, le immagini diventano contenitori quando vengono eseguite su Docker Engine.

Motore della Docker

Docker Engine è il runtime del contenitore che viene eseguito su vari sistemi operativi Linux (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE e Ubuntu) e Windows Server.

Docker Engine consente alle applicazioni containerizzate di essere eseguite ovunque in modo coerente su qualsiasi infrastruttura, risolvendo il “inferno di dipendenza” per sviluppatori e team operativi, ed eliminando il “Funziona sul mio portatile!!” guaio.

I container Docker eseguiti sul Docker Engine sono:

  • Standard: Docker ha creato lo standard del settore per i container, quindi potrebbero essere portatili ovunque.
  • Leggero: I contenitori condividono il kernel del sistema operativo della macchina e, così, non richiedono un sistema operativo per applicazione, con conseguente maggiore efficienza del server e minori costi di licenza e server.
  • Sicuro: Le applicazioni sono più sicure nei container e Docker offre le capacità di isolamento predefinite più potenti del settore.

Installazione Docker

Docker è una piattaforma aperta per lo sviluppo, inviare ed eseguire applicazioni. Docker ci consente di separare le nostre applicazioni dalla nostra infrastruttura in modo da poter fornire rapidamente il software.

Possiamo scaricare e installare Docker su più piattaforme. Dai un'occhiata al Docker ufficiale pagina per installare Docker in base al sistema operativo del tuo sistema locale.

Dopo aver installato Docker, Puoi verificare che l'installazione sia andata a buon fine eseguendo il stivatore comando nel terminale / simbolo del sistema.

L'output sarà simile al seguente, se ricevi un errore di autorizzazione, prova a eseguirlo in modalità utente root (in Linux è usato Sudo Docker).

48710docker_check-5095638

Fonte: Autore

Dockerfile

Un semplice file composto da istruzioni per creare un'immagine Docker. Ogni istruzione in un file docker è un comando / operazione, ad esempio, quale sistema operativo usare, quali dipendenze installare o come compilare il codice, e molte di quelle istruzioni che agiscono come un livello.

La parte migliore è che tutti i livelli sono memorizzati nella cache e se modifichiamo alcune istruzioni nel Dockerfile, durante il processo di costruzione, il livello modificato verrà semplicemente ricostruito.

Un Dockerfile di esempio apparirà come sotto

FROM ubuntu:18.04
WORKDIR /app 
COPY . /app 
RUN pip install -r requirements.txt ESPORRE 5000 CMD Python app.py 

Ogni istruzione crea un livello:

  • A PARTIRE DAL creare un livello dall'immagine di base, qui abbiamo usato ubuntu: 18.04 Immagine Docker
  • WORKDIR specificare la directory di lavoro
  • COPIA aggiungi file dalla directory corrente del tuo client o sistema host Docker, qui stiamo aggiungendo i file della directory corrente alla directory dell'app contenitore
  • CORRERE specificare quali comandi eseguire all'interno del contenitore, qui eseguendo il comando pip per installare le dipendenze dal file require.txt
  • ESPORRE specificare quale porta esporre la nostra applicazione, Ecco qui 5000
  • CMD specifica quale comando eseguire all'avvio del contenitore

Immagine Docker

Una volta creato un file docker, possiamo creare un'immagine docker da esso. Docker Image fornisce l'ambiente di runtime per un'applicazione, che include tutto il codice, i file di configurazione e le dipendenze richiesti.

Un'immagine Docker è composta da livelli di sola lettura, ognuno dei quali rappresenta un'istruzione Dockerfile. I livelli sono impilati e ognuno è un delta delle modifiche del livello precedente.

Possiamo costruire un'immagine docker con un file docker usando il costruzione della finestra mobile comando.

Una volta creata l'immagine della finestra mobile, possiamo testarlo usando il Corsa della finestra mobile comando, che creerà un contenitore usando l'immagine docker ed eseguirà l'applicazione.

Registro Docker

Una volta che l'immagine docker è stata creata e testata, possiamo condividerlo con altri in modo che possano utilizzare la nostra app. Per quello, dobbiamo inviare l'immagine della finestra mobile al registro delle immagini della finestra mobile pubblico, come DockerHub, Registro dei contenitori di Google (GCR) o qualsiasi altra piattaforma di registrazione.

Possiamo anche inviare le nostre immagini docker a record privati ​​per limitare l'accesso alle immagini docker.

Applicazione di apprendimento automatico

L'applicazione di apprendimento automatico consisterà in un flusso di lavoro completo dall'elaborazione dell'input, l'ingegnerizzazione delle funzioni alla generazione dei risultati. Vedremo una semplice applicazione di analisi del sentiment, che containerizzaremo utilizzando Docker e invieremo quell'app al DockerHub per renderla disponibile ad altri.

Analisi del sentimento

Non entreremo nei dettagli sulle applicazioni di machine learning, solo una panoramica, contenitorizzeremo un'app di analisi del sentiment di Twitter. Il codice e i file di dati sono disponibili all'indirizzo Github.

Puoi clonare questa applicazione o potrebbe contenere la tua applicazione, il processo sarà lo stesso.

Il repository git avrà i seguenti file

  • app.py: Applicazione principale
  • train.py: Script per eseguire il training e salvare il modello sottoposto a training
  • sentimento.tsv: Archiviazione dei dati
  • requisiti.txt: Contiene i pacchetti / Dipendenze obbligatorie
  • Dockerfile: Per creare l'immagine docker
  • Cartella dei modelli: contiene il nostro sito web per l'applicazione
  • Cartella del modello: Contiene il nostro modello addestrato

Ecco come requisiti.txt Apparirà come, Possiamo anche specificare la versione per ogni libreria che dobbiamo installare

numpy
pandas
scikit-learn
flask
nltk
regex

Nel nostro app.py, caricheremo il nostro modello addestrato e faremo la stessa pre-elaborazione che abbiamo fatto nella formazione.

L'applicazione Flask servirà due endpoint, casa, e prevedere

@app.route('/')
def home():
    return render_template('home.html')
@app.route('/prevedi',metodi=['INVIARE'])
def predire():
    if request.method == 'POST':
        messaggio = request.form['Messaggio']
        clean_test = remove_pattern(test,"@[w]*")
        tokenized_clean_test = clean_test.split()
        stem_tokenized_clean_test = [voci.stem(io) per io in tokenized_clean_test]
        messaggio=" ".aderire(stem_tokenized_clean_test)
        dati = [Messaggio]
        data = cv.trasformare(dati)
        my_prediction = clf.predict(dati)
    return render_template('risultato.html',previsione = mia_previsione)

Dobbiamo caricare il modello addestrato, Il vettorizzatore e il lemmatizzatore (Utilizzato nell'allenamento) E ci siamo anche predisposti per ricevere le richieste al porto 5000 su localhost (0.0.0.0)

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.