2016-01-25 15 views
8

Ho creato un esperimento di apprendimento automatico di Azure che utilizza un piccolo set di dati (matrice 12x3) e alcuni parametri e esegue alcuni calcoli utilizzando alcuni moduli Python (un calcolo di regressione lineare e altri). Tutto funziona bene.Latenza di risposta alla macchina di Azure Risposta latenza

Ho distribuito l'esperimento e ora voglio lanciare i dati dal front-end della mia applicazione. La chiamata API entra e torna con i risultati corretti, ma per calcolare una semplice regressione lineare sono necessari fino a 30 secondi. A volte sono 20 secondi, a volte solo 1 secondo. L'ho persino ridotto a 100 ms una volta (che è quello che mi piacerebbe), ma il 90% delle volte la richiesta richiede più di 20 secondi per essere completata, il che è inaccettabile.

Suppongo che abbia qualcosa a che fare con il fatto che sia ancora un esperimento o che sia ancora in uno slot di sviluppo, ma non riesco a trovare le impostazioni per farlo funzionare su una macchina più veloce.

C'è un modo per velocizzare la mia esecuzione?

Modifica: Per chiarire: i tempi variabili sono ottenuti con gli stessi dati di test, semplicemente inviando la stessa richiesta più volte. Questo mi ha fatto concludere che deve avere qualcosa a che fare con la mia richiesta di essere messa in coda, c'è qualche latenza di start-up o sono strozzata in qualche altro modo.

risposta

8

In primo luogo, presumo che si stia eseguendo il test di sincronizzazione sull'endpoint AML pubblicato.

Quando si effettua una chiamata all'AML, la prima chiamata deve scaldare il contenitore. Di default un servizio web ha 20 contenitori. Ogni contenitore è freddo e un contenitore freddo può causare un ritardo di 30 secondi. Nella stringa restituita dall'endpoint AML, vengono conteggiate solo le richieste con il flag isWarm impostato su true. Distruggendo il servizio con MOLTE richieste (relative al numero di contenitori che hai in esecuzione) puoi far riscaldare tutti i tuoi contenitori.

Se si inviano dozzine di richieste a un'istanza, l'endpoint potrebbe essere rallentato. È possibile regolare il numero di chiamate il vostro punto finale può accettare andando a manage.windowsazure.com/

  1. manage.windowsazure.com/
  2. Azure ML sezione dalla barra sinistra
  3. selezionare l'area di lavoro
  4. vai alla scheda servizi web
  5. selezionare il servizio web dalla lista
  6. regolare il numero di chiamate con il cursore

Attivando il debug sull'endpoint è possibile ottenere registri sul tempo di esecuzione per ciascuno dei moduli da completare. È possibile utilizzare questo per determinare se un modulo non è in esecuzione come previsto, che può aggiungere al tempo.

Nel complesso, si verifica un sovraccarico quando si utilizza il modulo Python Execute, ma mi aspetto che questa richiesta venga completata in meno di 3 secondi.

+2

La tua risposta insieme a [questo articolo] (http://jiffie.blogspot.be/2015/10/trying-to-figure-out-azure-ml.html) mi ha fatto capire il problema: per impostazione predefinita, lì Sono 20 i contenitori assegnati che sono tutti freddi per iniziare. Non stavo facendo chiamate simultanee e aggiornavo parecchio, quindi più spesso non chiamavo uno di quei contenitori freddi, che impiegava circa 30 secondi. Solo dopo aver colpito tutti i contenitori, una volta garantita la risposta rapida. Per il test, ho effettuato il downgrade a 4 contenitori, il che significa che inizio con 4 chiamate lente dopo le quali tutti i contenitori sono caldi. – JrtPec

+0

Grazie, esaminerò l'articolo e aggiungerò qualsiasi cosa mi sia sfuggita alla risposta. –

+0

Questi contenitori "freddi" sono comunque un inconveniente. Supponiamo che io aggiorni il servizio web, le prime 20 richieste che i client faranno saranno molto lente (a seconda del numero di chiamate simultanee nelle impostazioni, sarà ancora peggio). C'è un modo per dire a tutti i contenitori di "scaldarsi" dopo la distribuzione? – JrtPec