Aumentare in modo efficiente le prestazioni di una competenza personalizzata

Le competenze personalizzate sono API Web che implementano un'interfaccia specifica. Una competenza personalizzata può essere implementata in qualsiasi risorsa indirizzabile pubblicamente. Le implementazioni più comuni per le competenze personalizzate sono:

  • Funzioni di Azure per competenze logiche personalizzate
  • App Web di Azure per semplici competenze di intelligenza artificiale in contenitori
  • Servizio Azure Kubernetes per competenze più complesse o più grandi.

Configurazione del set di competenze

Per la scalabilità vengono usate le proprietà seguenti di una competenza personalizzata. Esaminare l'interfaccia della competenza personalizzata per un'introduzione agli input e agli output che devono essere implementati da una competenza personalizzata.

  1. Impostare batchSize della competenza personalizzata per configurare il numero di record inviati alla competenza in una singola chiamata della competenza.

  2. Impostare il degreeOfParallelism per calibrare il numero di richieste simultanee eseguite dall'indicizzatore alla competenza.

  3. Impostare timeoutsu un valore sufficiente per la competenza per rispondere con una risposta valida.

  4. Nella definizione indexer impostare batchSize sul numero di documenti che devono essere letti dall'origine dati e arricchiti simultaneamente.

Considerazioni

Non esiste un set di raccomandazioni "una dimensione si adatta a tutte". È consigliabile pianificare il test di configurazioni diverse per ottenere un risultato ottimale. Le strategie di aumento delle prestazioni si basano su un numero minore di richieste di grandi dimensioni o su molte richieste di piccole dimensioni.

  • Cardinalità chiamata competenza: assicurarsi di sapere se la competenza personalizzata viene eseguita una volta per ogni documento (/document/content) o più volte per ogni documento (/document/reviews_text/pages/*). Se è più volte per ogni documento, rimanere sul lato inferiore di batchSize e degreeOfParallelism per ridurre la varianza e provare a impostare le dimensioni batch dell'indicizzatore su valori più elevati in modo incrementale per una maggiore scalabilità.

  • Coordinare le competenze personalizzate batchSize e indicizzatore batchSize, e assicurarsi di non creare colli di bottiglia. Ad esempio, se le dimensioni del batch dell'indicizzatore sono pari a 5 e le dimensioni del batch di competenza sono pari a 50, sono necessari 10 batch di indicizzatore per riempire una richiesta di competenza personalizzata. Idealmente, le dimensioni del batch delle competenze devono essere minori o uguali alle dimensioni del batch dell'indicizzatore.

  • Per degreeOfParallelism, usare il numero medio di richieste che un batch dell'indicizzatore può generare per guidare la decisione su come impostare questo valore. Se l'infrastruttura che ospita la competenza, ad esempio una funzione di Azure, non può supportare livelli elevati di concorrenza, valutare la possibilità di ridurre i gradi di parallelismo. È possibile testare la configurazione con alcuni documenti per convalidare la comprensione del numero medio di richieste.

  • Anche se l'oggetto è ridimensionato e supportato da volumi elevati, il test con un campione più piccolo di documenti consente di quantificare diverse fasi di esecuzione. Ad esempio, è possibile valutare il tempo di esecuzione della competenza, in relazione al tempo complessivo impiegato per elaborare il subset di documenti. In questo modo è possibile rispondere alla domanda: l'indicizzatore impiega più tempo a creare un batch o ad attendere una risposta dalla competenza?

  • Considerare le implicazioni upstream del parallelismo. Se l'input di una competenza personalizzata è un output di una competenza precedente, tutte le competenze nel set di competenze vengono ridimensionate in modo efficace per ridurre al minimo la latenza?

Gestione degli errori nella competenza personalizzata

Le competenze personalizzate devono restituire un codice di stato di esito positivo HTTP 200 al termine della competenza. Se uno o più record in un batch generano errori, valutare la possibilità di restituire il codice multi-stato 207. L'elenco degli errori o degli avvisi per il record deve contenere il messaggio appropriato.

Tutti gli elementi in un batch che generano errori nel documento corrispondente avranno esito negativo. Se è necessario che il documento abbia esito positivo, restituire un avviso.

Qualsiasi codice di stato superiore a 299 viene valutato come errore e tutti gli arricchimenti non sono riusciti, generando un documento non riuscito.

Messaggi di errore comuni

  • Could not execute skill because it did not execute within the time limit '00:00:30'. This is likely transient. Please try again later. For custom skills, consider increasing the 'timeout' parameter on your skill in the skillset. Impostare il parametro di timeout sulla competenza per consentire una durata di esecuzione più lunga.

  • Could not execute skill because Web Api skill response is invalid. Indicativo della competenza che non restituisce un messaggio nel formato di risposta della competenza personalizzata. Questo potrebbe essere il risultato di un'eccezione non rilevata nella competenza.

  • Could not execute skill because the Web Api request failed. La maggior parte delle probabilità è causata da errori di autorizzazione o eccezioni.

  • Could not execute skill. In genere il risultato della risposta della competenza di cui è stato eseguito il mapping a una proprietà esistente nella gerarchia dei documenti.

Test di competenze personalizzate

Per iniziare, testare la competenza personalizzata con un client API REST per convalidare:

  • La competenza implementa l'interfaccia di competenza personalizzata per richieste e risposte

  • La competenza restituisce JSON valido con il tipo MIME application/JSON

  • Restituisce un codice di stato HTTP valido

Creare una sessione di debug per aggiungere la competenza al set di competenze e assicurarsi che produCa un arricchimento valido. Anche se una sessione di debug non consente di ottimizzare le prestazioni della competenza, consente di assicurarsi che la competenza sia configurata con valori validi e restituisca gli oggetti arricchiti previsti.

Procedure consigliate

  • Anche se le competenze possono accettare e restituire payload di dimensioni maggiori, è consigliabile limitare la risposta a 150 MB o meno quando si restituisce JSON.

  • Valutare la possibilità di impostare le dimensioni del batch sull'indicizzatore e sulla competenza per assicurarsi che ogni batch di origine dati generi un payload completo per la competenza.

  • Per le attività a esecuzione prolungata, impostare il timeout su un valore sufficientemente elevato per garantire che l'indicizzatore non generi un errore durante l'elaborazione simultanea dei documenti.

  • Ottimizzare le dimensioni del batch dell'indicizzatore, le dimensioni del batch di competenze e i gradi di parallelismo delle competenze per generare il modello di carico previsto dalla competenza, meno richieste di grandi dimensioni o molte richieste di piccole dimensioni.

  • Monitorare le competenze personalizzate con log dettagliati degli errori perché è possibile avere scenari in cui richieste specifiche hanno esito negativo in modo coerente a causa della variabilità dei dati.