Ridimensionare il processo di Analisi di flusso con funzioni di Azure Machine LearningScale your Stream Analytics job with Azure Machine Learning functions

È semplice impostare un processo di Analisi di flusso e usarlo per analizzare alcuni dati di esempio.It is straight forward to set up a Stream Analytics job and run some sample data through it. Cosa fare quando è necessario eseguire lo stesso processo con volume di dati più elevato?What should we do when we need to run the same job with higher data volume? Bisogna capire come configurare il processo di Analisi di flusso per il ridimensionamento.It requires us to understand how to configure the Stream Analytics job so that it scales. Questo documento illustra in particolare gli aspetti specifici del ridimensionamento di processi di Analisi di flusso con funzioni di Machine Learning.In this document, we focus on the special aspects of scaling Stream Analytics jobs with Machine Learning functions. Per informazioni su come ridimensionare processi di Analisi di flusso in generale, vedere l'articolo relativo al ridimensionamento dei processi.For information on how to scale Stream Analytics jobs in general see the article Scaling jobs.

Che cos'è una funzione di Azure Machine Learning in Analisi di flusso?What is an Azure Machine Learning function in Stream Analytics?

Una funzione di Machine Learning in Analisi di flusso può essere usata come una normale chiamata di funzione nel linguaggio di query di Analisi di flusso.A Machine Learning function in Stream Analytics can be used like a regular function call in the Stream Analytics query language. Tuttavia, le chiamate di funzione sono in realtà richieste del servizio Web Azure Machine Learning.However, behind the scene, the function calls are actually Azure Machine Learning Web Service requests. I servizi Web Machine Learning supportano l'invio in batch di più righe, dette mini-batch, nella stessa chiamata all'API del servizio Web per migliorare la velocità effettiva globale.Machine Learning web services support “batching” multiple rows, which is called mini-batch, in the same web service API call, to improve overall throughput. Per altri dettagli, vedere Azure Machine Learning functions in Stream Analytics (Funzioni di Azure Machine Learning in Analisi di flusso) e Servizi Web di Azure Machine Learning.See the following articles for more details; Azure Machine Learning functions in Stream Analytics and Azure Machine Learning Web Services.

Configurare un processo di Analisi di flusso con funzioni di Machine LearningConfigure a Stream Analytics job with Machine Learning functions

Quando si configura una funzione di Machine Learning per un processo di Analisi di flusso è necessario prendere in considerazione due parametri, le dimensioni batch delle chiamate di funzione di Machine Learning e le unità di streaming (SU) di cui viene effettuato il provisioning per il processo di Analisi di flusso.When configuring a Machine Learning function for Stream Analytics job, there are two parameters to consider, the batch size of the Machine Learning function calls, and the streaming units (SUs) provisioned for the Stream Analytics job. Per determinare i relativi valori appropriati, occorre prima scegliere tra latenza e velocità effettiva, vale a dire la latenza del processo di Analisi di flusso e la velocità effettiva di ogni unità di streaming.To determine the appropriate values for these, first a decision must be made between latency and throughput, that is, latency of the Stream Analytics job, and throughput of each SU. È sempre possibile aggiungere unità di streaming a un processo per aumentare la velocità effettiva di una query di Analisi di flusso con partizionamento efficiente, anche se le unità di streaming aumentano il costo di esecuzione del processo.SUs may always be added to a job to increase throughput of a well partitioned Stream Analytics query, although additional SUs increase the cost of running the job.

È quindi importante determinare la tolleranza della latenza nell'esecuzione di un processo di Analisi di flusso.Therefore it is important to determine the tolerance of latency in running a Stream Analytics job. La latenza aggiuntiva dovuta all'esecuzione di richieste di servizio Azure Machine Learning aumenta naturalmente con le dimensioni batch, che si sommano alla latenza del processo di Analisi di flusso.Additional latency from running Azure Machine Learning service requests will naturally increase with batch size, which compounds the latency of the Stream Analytics job. L'aumento delle dimensioni batch consente d'altra parte al processo di analisi di flusso di elaborare *più eventi con lo stesso numero di richieste del servizio Web di Machine Learning.On the other hand, increasing batch size allows the Stream Analytics job to process *more events with the same number of Machine Learning web service requests. L'aumento della latenza del servizio Web di Machine Learning è spesso sublineare all'aumento delle dimensioni. È quindi importante stabilire le dimensioni batch più convenienti per un servizio Web di Machine Learning in una determinata situazione.Often the increase of Machine Learning web service latency is sublinear to the increase of batch size so it is important to consider the most cost-efficient batch size for a Machine Learning web service in any given situation. Le dimensioni batch predefinite per le richieste al servizio Web sono pari a 1000 e possono essere modificate usando l'API REST di Analisi di flusso o il client di PowerShell per Analisi di flusso.The default batch size for the web service requests is 1000 and may be modified either by using the Stream Analytics REST API or the PowerShell client for Stream Analytics.

Dopo aver determinato le dimensioni batch, è possibile determinare il numero di unità di streaming in base al numero di eventi che la funzione deve elaborare al secondo.Once a batch size has been determined, the number of streaming units (SUs) can be determined, based on the number of events that the function needs to process per second. Per altre informazioni sulle unità di streaming, vedere Processi di scalabilità di Analisi di flusso.For more information about streaming units, see Stream Analytics scale jobs.

In generale, sono presenti 20 connessioni simultanee al servizio di Web Machine Learning ogni 6 unità di streaming, ma anche i processi per 1 unità di streaming e per 3 unità di streaming ricevono 20 connessioni simultanee.In general, there are 20 concurrent connections to the Machine Learning web service for every 6 SUs, except that 1 SU jobs and 3 SU jobs get 20 concurrent connections also. Ad esempio, se la velocità dei dati di input è di 200.000 eventi al secondo e le dimensioni batch hanno il valore predefinito di 1000, la latenza del servizio Web risultante con un mini-batch di 1000 eventi è di 200 ms.For example, if the input data rate is 200,000 events per second and the batch size is left to the default of 1000 the resulting web service latency with 1000 events mini-batch is 200 ms. Ciò significa che ogni connessione può inviare cinque richieste al servizio Web di Machine Learning in un secondo.This means every connection can make five requests to the Machine Learning web service in a second. Con 20 connessioni, il processo di Analisi di flusso può elaborare 20.000 eventi in 200 ms, ovvero 100.000 eventi al secondo.With 20 connections, the Stream Analytics job can process 20,000 events in 200 ms and therefore 100,000 events in a second. Quindi, per elaborare 200.000 eventi al secondo, il processo di Analisi di flusso necessita di 40 connessioni simultanee, pari a 12 unità di streaming.So to process 200,000 events per second, the Stream Analytics job needs 40 concurrent connections, which come out to 12 SUs. Il diagramma seguente illustra le richieste dal processo di Analisi di flusso all'endpoint servizio di Web Machine Learning. Ogni 6 unità di streaming sono presenti al massimo 20 connessioni simultanee al servizio Web di Machine Learning.The following diagram illustrates the requests from the Stream Analytics job to the Machine Learning web service endpoint – Every 6 SUs has 20 concurrent connections to Machine Learning web service at max.

Esempio di processo per ridimensionare Analisi di flusso con funzioni di Machine Learning dueScale Stream Analytics with Machine Learning Functions two job example

In generale, posto che B sta per dimensioni batch e L sta per latenza del servizio Web per le dimensioni batch B in millisecondi, la velocità effettiva di un processo di Analisi di flusso con N unità di streaming è:In general, B for batch size, L for the web service latency at batch size B in milliseconds, the throughput of a Stream Analytics job with N SUs is:

Formula per ridimensionare Analisi di flusso con funzioni di Machine LearningScale Stream Analytics with Machine Learning Functions Formula

Prendendo in considerazione anche il numero massimo di chiamate simultanee sul lato del servizio Web Machine Learning, è consigliabile impostare il valore massimo, che attualmente è 200.An additional consideration may be the 'max concurrent calls' on the Machine Learning web service side, it’s recommended to set this to the maximum value (200 currently).

Per altre informazioni su questa impostazione, vedere l'articolo relativo al ridimensionamento di servizi Web Machine Learning.For more information on this setting please review the Scaling article for Machine Learning Web Services.

Esempio: Analisi di valutazioneExample – Sentiment Analysis

L'esempio seguente include un processo di Analisi di flusso con la funzione di Machine Learning di analisi di valutazione, come descritto nell' esercitazione sull'integrazione tra Analisi di flusso e Machine Learning.The following example includes a Stream Analytics job with the sentiment analysis Machine Learning function, as described in the Stream Analytics Machine Learning integration tutorial.

La query è una semplice query completamente partizionata seguita dalla funzione di sentiment, come illustrato di seguito:The query is a simple fully partitioned query followed by the sentiment function, as shown following:

WITH subquery AS (
    SELECT text, sentiment(text) as result from input
)

Select text, result.[Score]
Into output
From subquery

Si consideri uno scenario in cui, con una velocità effettiva di 10.000 tweet al secondo è necessario creare un processo di Analisi di flusso per eseguire l'analisi di valutazione dei tweet, o eventi.Consider the following scenario; with a throughput of 10,000 tweets per second a Stream Analytics job must be created to perform sentiment analysis of the tweets (events). Usando 1 unità di streaming, questo processo di Analisi di flusso può riuscire a gestire il traffico?Using 1 SU, could this Stream Analytics job be able to handle the traffic? Mantenendo le dimensioni batch predefinite, pari a 1000, il processo deve riuscire a gestire l'input.Using the default batch size of 1000 the job should be able to keep up with the input. La funzione di Machine Learning aggiuntiva deve anche generare meno di un secondo di latenza, ovvero la latenza generale predefinita del servizio Web Machine Learning di analisi di valutazione, con dimensioni batch predefinite pari a 1000.Further the added Machine Learning function should generate no more than a second of latency, which is the general default latency of the sentiment analysis Machine Learning web service (with a default batch size of 1000). La latenza totale o end-to-end del processo di Analisi di flusso sarebbe normalmente di pochi secondi.The Stream Analytics job’s overall or end-to-end latency would typically be a few seconds. Esaminare ora più da vicino questo processo di Analisi di flusso, in particolare le chiamate di funzione di Machine Learning.Take a more detailed look into this Stream Analytics job, especially the Machine Learning function calls. Con dimensioni batch pari a 1000, una velocità effettiva di 10.000 eventi richiede circa 10 richieste al servizio Web.Having the batch size as 1000, a throughput of 10,000 events take about 10 requests to web service. Anche con 1 unità di streaming, il numero di connessioni simultanee è sufficiente per gestire il traffico di input.Even with 1 SU, there are enough concurrent connections to accommodate this input traffic.

Ma cosa accade se la frequenza degli eventi di input aumenta di 100 volte e il processo di Analisi di flusso deve elaborare 1.000.000 di tweet al secondo?But what if the input event rate increases by 100x and now the Stream Analytics job needs to process 1,000,000 tweets per second? Sono disponibili due opzioni:There are two options:

  1. Aumentare le dimensioni batch.Increase the batch size, or
  2. Partizionare il flusso di input per elaborare gli eventi in parallelo.Partition the input stream to process the events in parallel

Con la prima opzione aumenta la latenza del processo.With the first option, the job latency increases.

Con la seconda opzione è necessario effettuare il provisioning di altre unità di streaming e quindi generare un numero maggiore di richieste simultanee al servizio Web Machine Learning.With the second option, more SUs would need to be provisioned and therefore generate more concurrent Machine Learning web service requests. Ciò significa che aumenta il costo del processo.This means the job cost increases.

Si supponga che la latenza del servizio Web di Machine Learning di analisi di valutazione sia pari a 200 ms per batch di 1000 eventi o meno, 250 ms per batch di 5.000 eventi, 300 ms per batch di 10.000 eventi o 500 ms per batch di 25.000 eventi.Assume the latency of the sentiment analysis Machine Learning web service is 200 ms for 1000-event batches or below, 250 ms for 5,000-event batches, 300 ms for 10,000-event batches or 500 ms for 25,000-event batches.

  1. Usando la prima opzione, non effettuando quindi il provisioning di altre unità di streaming, sarebbe possibile aumentare le dimensioni batch a 25.000.Using the first option, (not provisioning more SUs), the batch size could be increased to 25,000. Questo consentirebbe al processo di elaborare 1.000.000 di eventi con 20 connessioni simultanee al servizio Web di Machine Learning, con una latenza di 500 ms per ogni chiamata.This in turn would allow the job to process 1,000,000 events with 20 concurrent connections to the Machine Learning web service (with a latency of 500 ms per call). La latenza aggiuntiva del processo di Analisi di flusso dovuta alle richieste della funzione di valutazione rispetto alle richieste del servizio Web di Machine Learning aumenterebbe da 200 ms a 500 ms.So the additional latency of the Stream Analytics job due to the sentiment function requests against the Machine Learning web service requests would be increased from 200 ms to 500 ms. Tuttavia non è possibile aumentare le dimensioni batch all'infinito, perché i servizi Web di Machine Learning richiedono dimensioni del payload della richiesta pari a 4 MB. Le richieste di servizio Web di dimensioni inferiori scadono dopo 100 secondi di attività.However, batch size cannot be increased infinitely as the Machine Learning web services requires the payload size of a request be 4 MB or smaller web service requests timeout after 100 seconds of operation.
  2. Se si usa la seconda opzione, le dimensioni batch rimangono pari a 1000. Con una latenza del servizio Web di 200 ms, ogni 20 connessioni simultanee al servizio Web sarebbe possibile elaborare 1000 * 20 * 5 eventi = 100.000 al secondo.Using the second option, the batch size is left at 1000, with 200 ms web service latency, every 20 concurrent connections to the web service would be able to process 1000 * 20 * 5 events = 100,000 per second. Per elaborare 1.000.000 di eventi al secondo, quindi, il processo richiederebbe 60 unità di streaming.So to process 1,000,000 events per second, the job would need 60 SUs. Rispetto alla prima opzione, il processo di Analisi di flusso invierebbe più richieste batch al servizio Web, generando così un costo maggiore.Compared to the first option, Stream Analytics job would make more web service batch requests, in turn generating an increased cost.

Di seguito è riportata una tabella della velocità effettiva del processo di Analisi di flusso per diverse unità di streaming e dimensioni batch, in numero di eventi al secondo.Below is a table for the throughput of the Stream Analytics job for different SUs and batch sizes (in number of events per second).

Dimensioni batch (latenza ML)batch size (ML latency) 500 (200 ms)500 (200 ms) 1.000 (200 ms)1,000 (200 ms) 5.000 (250 ms)5,000 (250 ms) 10.000 (300 ms)10,000 (300 ms) 25.000 (500 ms)25,000 (500 ms)
1 unità di archiviazione1 SU 2.5002,500 5.0005,000 20.00020,000 30.00030,000 50.00050,000
3 unità di archiviazione3 SUs 2.5002,500 5.0005,000 20.00020,000 30.00030,000 50.00050,000
6 unità di archiviazione6 SUs 2.5002,500 5.0005,000 20.00020,000 30.00030,000 50.00050,000
12 unità di archiviazione12 SUs 5.0005,000 10.00010,000 40.00040,000 60.00060,000 100.000100,000
18 unità di archiviazione18 SUs 7.5007,500 15.00015,000 60.00060,000 90.00090,000 150.000150,000
24 unità di archiviazione24 SUs 10.00010,000 20.00020,000 80.00080,000 120.000120,000 200.000200,000
60 unità di archiviazione60 SUs 25.00025,000 50.00050,000 200.000200,000 300.000300,000 500.000500,000

A questo punto dovrebbe essere chiaro il funzionamento delle funzioni di Machine Learning in Analisi di flusso.By now, you should already have a good understanding of how Machine Learning functions in Stream Analytics work. I processi di Analisi di flusso eseguono il pull dei dati dalle origini dati e ogni pull restituisce un batch di eventi al processo di Analisi di flusso per l'elaborazione.You likely also understand that Stream Analytics jobs “pull” data from data sources and each “pull” returns a batch of events for the Stream Analytics job to process. Come influisce tale modello pull sulle richieste al servizio Web Machine Learning?How does this pull model impact the Machine Learning web service requests?

In genere, le dimensioni batch impostate per le funzioni di Machine Learning non sono esattamente divisibili per il numero di eventi restituiti da ogni pull del processo di Analisi di flusso.Normally, the batch size we set for Machine Learning functions won’t exactly be divisible by the number of events returned by each Stream Analytics job “pull”. Quando ciò accade, il servizio Web di Machine Learning viene chiamato con batch parziali.When this occurs the Machine Learning web service is called with “partial” batches. Questo per non causare un sovraccarico della latenza dei processi nell'unione di eventi tra un pull e l'altro.This is done to not incur additional job latency overhead in coalescing events from pull to pull.

Nell'area di monitoraggio di un processo di Analisi di flusso sono state aggiunte altre tre metriche relative alle funzioni.In the Monitor area of a Stream Analytics job, three additional function-related metrics have been added. Le metriche sono FUNCTION REQUESTS, FUNCTION EVENTS e FAILED FUNCTION REQUESTS e sono illustrate nella figura seguente.They are FUNCTION REQUESTS, FUNCTION EVENTS and FAILED FUNCTION REQUESTS, as shown in the graphic below.

Metriche per ridimensionare Analisi di flusso con funzioni di Machine LearningScale Stream Analytics with Machine Learning Functions Metrics

Di seguito sono riportate le rispettive definizioni.The are defined as follows:

FUNCTION REQUESTS: numero di richieste di funzione.FUNCTION REQUESTS: The number of function requests.

FUNCTION EVENTS: numero di eventi nelle richieste di funzione.FUNCTION EVENTS: The number events in the function requests.

FAILED FUNCTION REQUESTS: numero di richieste di funzione non riuscite.FAILED FUNCTION REQUESTS: The number of failed function requests.

Risultati principaliKey Takeaways

Per riepilogare i punti principali, per ridimensionare un processo di Analisi di flusso con funzioni di Machine Learning, è necessario prendere in considerazione gli elementi seguenti:To summarize the main points, in order to scale a Stream Analytics job with Machine Learning functions, the following items must be considered:

  1. Frequenza degli eventi di input.The input event rate
  2. Latenza consentita per il processo di Analisi di flusso in esecuzione e dimensioni batch delle richieste al servizio Web Machine Learning.The tolerated latency for the running Stream Analytics job (and thus the batch size of the Machine Learning web service requests)
  3. Unità di streaming di Analisi di flusso di cui è stato effettuato il provisioning e numero di richieste al servizio Web Machine Learning, oltre ai costi aggiuntivi correlati alle funzioni.The provisioned Stream Analytics SUs and the number of Machine Learning web service requests (the additional function-related costs)

È stata usata come esempio una query di Analisi di flusso completamente partizionata.A fully partitioned Stream Analytics query was used as an example. Se è necessaria una query più complessa, è possibile usare il forum di analisi di flusso di Azure per ottenere altre informazioni dal team di analisi di flusso.If a more complex query is needed the Azure Stream Analytics forum is a great resource for getting additional help from the Stream Analytics team.

Passaggi successiviNext steps

Per altre informazioni su Analisi di flusso, vedere:To learn more about Stream Analytics, see: