2016-04-08 21 views
6

Ho un modello Tensorflow addestrato e voglio servire il metodo di previsione con REST API. Quello che posso pensare è usare Flask per costruire una semplice API REST che riceve JSON come input e quindi chiamare il metodo di previsione in Tensorflow e quindi restituire il risultato previsto al lato client.Serve un modello Tensorflow addestrato con API REST usando Flask?

Mi piacerebbe sapere c'è qualche preoccupazione per farlo in questo modo soprattutto in ambiente di produzione?

Grazie mille!

+0

Avete successo? Non vedo l'ora. –

risposta

2

La prima preoccupazione che mi viene in mente è la performance.

Il team di TensorFlow sembra aver elaborato l'utilizzo di server/client. Si consiglia di esaminare tensorflow serving. Come impostazione predefinita, utilizza gRPC per il protocollo di comunicazione.

+1

Sono d'accordo ma sai quanto soffriamo? Una volta ripristinati i modelli e riutilizzati nel server dei flask, forse non farà troppo male. –

+0

@SungKim Vuoi dire che in realtà preferisci usare il pallone? – user1515940

0

Utilizziamo Flask + TensorFlow al lavoro. La nostra configurazione potrebbe non essere il modo più ottimale per offrire modelli, ma svolge il suo lavoro e funziona fino a ora.

La configurazione è la seguente:

  1. Perché tfserving vuole una vita per costruire, abbiamo costruito un'immagine finestra mobile (non il supporto GPU o niente, ma funziona solo per servire un modello ed è più veloce e migliore di servire direttamente dall'interno di un enorme monolite Python/Flask). L'immagine del server modello può essere trovata qui: https://hub.docker.com/r/epigramai/model-server/
  2. Then Flask viene utilizzato per impostare un'API. Per inviare richieste al server modello è necessario un client di previsione grcp, quindi ne abbiamo creato uno in Python che è possibile importare direttamente nell'API del pallone, https://github.com/epigramai/tfserving_predict_client/.

Il bello è che il modello non è servito dall'applicazione API Flask. Il server modello di immagine docker può essere facilmente sostituito con un server modello in esecuzione su una GPU compilata per l'hardware delle macchine invece del contenitore finestra mobile.

+0

puoi dire qualcosa sui tempi di inferenza che stai vedendo con questa configurazione? (e anche quale overhead aggiunge l'API del flask) – Mark

+0

Per il nostro caso d'uso funziona bene, ma non riceviamo tonnellate di richieste, quindi le richieste API di batch prima dell'inferenza non sono un "must" nel nostro caso d'uso. Direi che questa configurazione, con il sovraccarico nell'invio di richieste al server modello e così via, è tanto veloce quanto basta caricare i modelli in memoria usando tensorflow e flask nello stesso monolite. Troviamo questa configurazione utile perché possiamo rimuovere la complessità di tensorflow dall'app del pallone python. Non abbiamo fatto molti test e abbiamo confrontato i tempi di inferenza, il vantaggio principale per noi è la separazione delle preoccupazioni. – stianlp

Problemi correlati