Compartir vía


Escalado horizontal de una aptitud personalizada de forma eficaz

Las aptitudes personalizadas son las API web que implementan una interfaz específica. Una aptitud personalizada se puede implementar en cualquier recurso direccionable de forma pública. Las implementaciones más comunes para las aptitudes personalizadas son las siguientes:

  • Azure Functions para aptitudes de lógica personalizadas
  • Azure Web Apps para aptitudes sencillas de inteligencia artificial en contenedores
  • Azure Kubernetes Service para aptitudes más complejas o más grandes

Configuración del conjunto de aptitudes

Las siguientes propiedades de una aptitud personalizada se usan para la escala. Revise la interfaz de aptitud personalizada para obtener una introducción a las entradas y salidas que debe implementar una aptitud personalizada.

  1. Establezca el elemento batchSize de la aptitud personalizada para configurar el número de registros enviados a la aptitud en una única invocación de esta.

  2. Establezca degreeOfParallelism para calibrar el número de solicitudes simultáneas que realiza el indexador en la aptitud.

  3. Establezca el elemento timeout en un valor suficiente para que la aptitud responda con una respuesta válida.

  4. En la definición indexer, establezca batchSize en el número de documentos que deben leerse del origen de datos y que se han enriquecido de forma simultánea.

Consideraciones

No hay ningún conjunto de recomendaciones de "un solo tamaño". Debe planear probar diferentes configuraciones para alcanzar un resultado óptimo. Las estrategias de escalado vertical se basan en menos solicitudes grandes o en muchas solicitudes pequeñas.

  • Cardinalidad de invocación de aptitud: asegúrese de saber si la aptitud personalizada se ejecuta una vez para cada documento (/document/content) o varias veces por documento (/document/reviews_text/pages/*). Si es varias veces por documento, permanezca en el lado inferior de batchSize y degreeOfParallelism reduzca la renovación e intente establecer el tamaño del lote del indexador en valores incrementalmente más altos para obtener más escala.

  • Coordinar la aptitud batchSize personalizada y el indexador batchSize, y asegúrese de que no está creando cuellos de botella. Por ejemplo, si el tamaño del lote del indexador es 5 y el tamaño del lote de aptitud es 50, necesitará 10 lotes de indexador para rellenar una solicitud de aptitud personalizada. Idealmente, el tamaño del lote de aptitud debe ser menor o igual que el tamaño del lote del indexador.

  • Para degreeOfParallelism, use el número medio de solicitudes que puede generar un lote de indexador para guiar su decisión sobre cómo establecer este valor. Si la infraestructura que hospeda la aptitud, por ejemplo, una función de Azure, no puede admitir altos niveles de simultaneidad, considere la posibilidad de marcar los grados de paralelismo. Puede probar la configuración con algunos documentos para validar la comprensión del número medio de solicitudes.

  • Aunque el objeto es escalado y compatibilidad con grandes volúmenes, las pruebas con una muestra más pequeña de documentos ayudan a cuantificar diferentes fases de ejecución. Por ejemplo, puede evaluar el tiempo de ejecución de la aptitud, en relación con el tiempo total necesario para procesar el subconjunto de documentos. Esto le ayuda a responder a la pregunta: ¿el indexador dedica más tiempo a compilar un lote o esperar una respuesta de su aptitud?

  • Tenga en cuenta las implicaciones ascendentes del paralelismo. Si la entrada a una aptitud personalizada es una salida de una aptitud anterior, ¿todas las aptitudes del conjunto de aptitudes se escalan horizontalmente de forma eficaz para minimizar la latencia?

Control de errores en la aptitud personalizada

Las aptitudes personalizadas deben devolver un código de estado correcto HTTP 200 cuando la aptitud se complete correctamente. Si uno o varios registros de un lote producen errores, considere la posibilidad de devolver el código de varios estados 207. La lista de errores o advertencias para el registro debe contener el mensaje adecuado.

Cualquier elemento de un lote en el que se produzcan errores producirá, asimismo, un error en el documento correspondiente. Si necesita que el documento se ejecute correctamente, devuelva una advertencia.

Cualquier código de estado superior a 299 se evalúa como un error y todos los enriquecimientos son erróneos, lo que da como resultado un documento con errores.

Mensajes comunes de error

  • 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. Establezca el parámetro timeout en la aptitud para permitir una duración de ejecución más larga.

  • Could not execute skill because Web Api skill response is invalid. Indicativo de que la aptitud no devuelve un mensaje en el formato de respuesta de aptitudes personalizado. Esto podría ser el resultado de una excepción no detectada en la aptitud.

  • Could not execute skill because the Web Api request failed. Probablemente debido a errores de autorización o excepciones.

  • Could not execute skill. Normalmente, el resultado de la respuesta de aptitudes se asigna a una propiedad existente en la jerarquía de documentos.

Prueba de aptitudes personalizadas

Empiece por probar su aptitud personalizada con un cliente de la API REST para validar lo siguiente:

  • La aptitud implementa la interfaz personalizada de aptitudes para las solicitudes y las respuestas.

  • La aptitud devuelve un archivo JSON válido con el tipo MIME application/JSON.

  • Devuelve un código de estado HTTP válido.

Cree una sesión de depuración para agregar su aptitud al conjunto de aptitudes y asegúrese de que produce un enriquecimiento válido. Aunque una sesión de depuración no permite ajustar el rendimiento de la aptitud, le permite asegurarse de que la aptitud está configurada con valores válidos y devuelve los objetos enriquecidos esperados.

procedimientos recomendados

  • Aunque las aptitudes pueden aceptar y devolver cargas de mayor tamaño, considere la posibilidad de limitar la respuesta a 150 MB o menos al devolver JSON.

  • Considere la posibilidad de establecer el tamaño del lote en el indexador y la aptitud para asegurarse de que cada lote de origen de datos genera una carga completa para su aptitud.

  • Para las tareas de larga duración, establezca el tiempo de espera en un valor lo suficientemente alto como para asegurarse de que el indexador no genera errores al procesar documentos simultáneamente.

  • Optimice el tamaño del lote del indexador, el tamaño del lote de aptitudes y los grados de paralelismo de la aptitud para generar el patrón de carga que espera su aptitud, menos solicitudes de gran tamaño o muchas solicitudes pequeñas.

  • Supervise las aptitudes personalizadas con registros detallados de los errores, ya que puede tener escenarios en los que se produzcan errores de forma coherente en las solicitudes específicas como resultado de la variabilidad en los datos.