Introducción al uso de implementaciones aprovisionadas en Azure OpenAI Service

La siguiente guía le orienta a través de la configuración de una implementación aprovisionada con el recurso de Azure OpenAI Service.

Requisitos previos

  • Una suscripción a Azure: cree una cuenta gratuita.
  • Acceso concedido a Azure OpenAl en la suscripción de Azure que quiera. Actualmente, el acceso a este servicio es con la aplicación. Puede solicitar acceso a Azure OpenAI Service rellenando el formulario de https://aka.ms/oai/access.
  • Obtención de cuotas para una implementación aprovisionada y adquisición de un compromiso.

Nota:

Las unidades de procesamiento aprovisionadas (PTU) son diferentes de la cuota estándar en Azure OpenAI y no están disponibles de forma predeterminada. Para más información sobre esta oferta, póngase en contacto con el equipo de su cuenta Microsoft.

Creación de la implementación aprovisionada

Después de adquirir un compromiso en la cuota, puede crear una implementación. Para crear una implementación aprovisionada, puede seguir estos pasos; las opciones descritas reflejan las entradas que se muestran en la captura de pantalla.

Screenshot of the Azure OpenAI Studio deployment page for a provisioned deployment.

  1. Inicio de sesión en Azure OpenAI Studio
  2. Elija la suscripción que se ha habilitado para las implementaciones aprovisionadas y seleccione el recurso deseado en una región donde tenga la cuota.
  3. En Administración, en el panel de navegación izquierdo seleccione Implementaciones.
  4. Seleccione Crear nueva implementación y configure los siguientes campos. Expanda la lista desplegable "Opciones avanzadas".
  5. Rellene los valores de cada campo. Este es un ejemplo:
Campo Description Ejemplo
Selección de un modelo Elija el modelo específico que desea implementar. GPT-4
Versión de modelo Elija la versión del modelo que se va a implementar. 0613
Nombre de implementación El nombre de implementación se usa en el código para llamar al modelo a través de las bibliotecas de cliente y las API de REST. gpt-4
Filtro de contenido Especifique la directiva de filtrado que se va a aplicar a la implementación. Descubra más sobre nuestro procedimiento de filtrado de contenido. Valor predeterminado
Tipo de implementación Esto afecta al rendimiento y a las prestaciones. Elija Administrado-Aprovisionado para la implementación aprovisionada Administrado-Aprovisionado
Unidades de procesamiento aprovisionadas Elija la cantidad de rendimiento que desea incluir en la implementación. 100

Si desea crear la implementación mediante programación, puede hacerlo con el siguiente comando de la CLI de Azure. Actualice sku-capacity con el número deseado de unidades de rendimiento aprovisionadas.

az cognitiveservices account deployment create \
--name <myResourceName> \
--resource-group <myResourceGroupName> \
--deployment-name MyModel \
--model-name GPT-4 \
--model-version 0613  \
--model-format OpenAI \
--sku-capacity 100 \
--sku-name ProvisionedManaged

REST, plantilla de ARM, Bicep y Terraform también se pueden usar para crear implementaciones. Consulte la sección sobre la automatización de implementaciones en la guía paso a paso de administración de cuotas y reemplace el sku.name por "AdministradoAprovisionado" en lugar de "Estándar".

Realización de las primeras llamadas

El código de inferencia para las implementaciones aprovisionadas es el mismo tipo de implementación estándar. El siguiente fragmento de código muestra una llamada de finalizaciones de chat a un modelo GPT-4. Si esta es la primera vez que usa estos modelos mediante programación, le recomendamos comenzar con nuestra guía de inicio rápido. Le recomendamos usar la biblioteca de OpenAI con la versión 1.0 o posterior, ya que incluye lógica de reintento dentro de la biblioteca.

    #Note: The openai-python library support for Azure OpenAI is in preview. 
    import os
    from openai import AzureOpenAI

    client = AzureOpenAI(
        azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
        api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
        api_version="2024-02-01"
    )

    response = client.chat.completions.create(
        model="gpt-4", # model = "deployment_name".
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
            {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
            {"role": "user", "content": "Do other Azure AI services support this too?"}
        ]
    )

    print(response.choices[0].message.content)

Importante

En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Para obtener más información sobre la seguridad de las credenciales, consulte el artículo Seguridad de servicios de Azure AI.

Descripción del rendimiento esperado

La cantidad de rendimiento que puede lograr en el punto de conexión es un factor del número de PTUs implementados, el tamaño de entrada, el tamaño de salida y la tasa de llamadas. El número de llamadas simultáneas y el número total de tokens procesados puede variar en función de estos valores. La forma determinar el rendimiento de la implementación que recomendamos es la siguiente:

  1. Use la calculadora de capacidad para estimar el tamaño. Puede encontrar la calculadora de capacidad en la página cuotas, en la pestaña Aprovisionado, en Azure OpenAI Studio.
  2. Prueba comparativa de la carga mediante una carga de trabajo de tráfico real. Para obtener más información sobre las pruebas comparativas, consulte la sección pruebas comparativas.

Medición del uso de la implementación

Al implementar un número especificado de unidades de rendimiento aprovisionadas (PTU), se pone a disposición de ese punto de conexión una cantidad establecida de rendimiento de inferencia. El uso de este rendimiento es una fórmula compleja basada en el modelo, la tasa de llamadas de la versión del modelo, el tamaño del símbolo del sistema y el tamaño de generación. Para simplificar este cálculo, se proporciona una métrica de uso en Azure Monitor. La implementación devuelve un 429 en las nuevas llamadas después de que el uso aumente por encima del 100 %. El uso aprovisionado se define de la siguiente manera:

Uso de la implementación de PTU = (PTUs consumidos en el período de tiempo) / (PTUs implementados en el período de tiempo)

Puede encontrar la medida de uso en la sección Azure-Monitor del recurso. Para acceder a los paneles de supervisión, inicie sesión en https://portal.azure.com, vaya al recurso de Azure OpenAI y seleccione la página Métricas en el panel de navegación izquierdo. En la página métricas, seleccione la medida 'Uso administrado aprovisionado'. Si tiene más de una implementación en el recurso, también debe dividir los valores por cada implementación haciendo clic en el botón 'Aplicar división'.

Screenshot of the provisioned managed utilization on the resource's metrics blade in the Azure portal.

Para más información sobre la supervisión de las implementaciones, consulte la página Supervisión del servicio Azure OpenAI.

Control del uso elevado

Las implementaciones aprovisionadas proporcionan una cantidad asignada de capacidad de proceso para ejecutar un modelo determinado. La métrica 'Uso administrado aprovisionado' de Azure Monitor mide el uso de la implementación en incrementos de un minuto. Las implementaciones administradas aprovisionadas también están optimizadas para que las llamadas aceptadas se procesen con una latencia máxima coherente por llamada. Cuando la carga de trabajo supera su capacidad asignada, el servicio devuelve un código de estado HTTP 429 hasta que el uso cae por debajo del 100 %. El tiempo antes de reintentar se proporciona en los encabezados de respuesta retry-after y retry-after-ms que proporcionan el tiempo en segundos y milisegundos respectivamente. Este enfoque mantiene los objetivos de latencia por llamada al mismo tiempo que proporciona al desarrollador control sobre cómo controlar situaciones de alta carga, por ejemplo, reintentar o desviar a otra experiencia o punto de conexión.

¿Qué debo hacer cuando reciba una respuesta 429?

Una respuesta 429 indica que las PTUs asignadas se consumen completamente en el momento de la llamada. La respuesta incluye los encabezados retry-after-ms y retry-after que indican el tiempo de espera antes de que se acepte la siguiente llamada. La forma en que decide gestionar una respuesta 429 depende de los requisitos de la aplicación. A continuación, se indican algunas consideraciones:

  • Si le valen las latencias por llamada más largas, implemente la lógica de reintento del lado cliente para esperar el tiempo retry-after-ms y reintentarlo. Este enfoque le permite maximizar el rendimiento en la implementación. Los SDK de cliente proporcionados por Microsoft ya lo controlan con valores predeterminados razonables. Es posible que todavía necesite un ajuste adicional en función de los casos de uso.
  • Considere la posibilidad de redirigir el tráfico a otros modelos, implementaciones o experiencias. Este enfoque es la solución de latencia más baja porque esta acción se puede realizar tan pronto como reciba la señal 429. La señal 429 no es una respuesta de error inesperada al insertar en un uso elevado, sino que forma parte del diseño para administrar la puesta en cola y la carga alta para las implementaciones aprovisionadas.

Modificación de la lógica de reintento dentro de las bibliotecas cliente

Los SDK de Azure OpenAI reintentan las respuestas 429 de forma predeterminada y en segundo plano en el cliente (hasta el máximo de reintentos). Las bibliotecas respetan el tiempo retry-after. También puede modificar el comportamiento de reintento para mejorar la experiencia. Este es un ejemplo con la biblioteca de Python.

Puede usar la opción max_retries para configurar o deshabilitar los valores de reintento:

from openai import AzureOpenAI

# Configure the default for all requests:
client = AzureOpenAI(
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    api_version="2024-02-01",
    max_retries=5,# default is 2
)

# Or, configure per-request:
client.with_options(max_retries=5).chat.completions.create(
    model="gpt-4", # model = "deployment_name".
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

Ejecución de una prueba comparativa

Las funcionalidades exactas de rendimiento y prestaciones de la instancia dependen del tipo de solicitudes que realice y de la carga de trabajo exacta. La mejor manera de determinar el rendimiento de la carga de trabajo es ejecutar una prueba comparativa en sus propios datos.

Para ayudarle en este trabajo, la herramienta de pruebas comparativas proporciona una manera de ejecutar pruebas comparativas fácilmente en la implementación. La herramienta incluye varias formas de carga de trabajo preconfiguradas posibles y genera métricas clave de rendimiento. Obtenga más información sobre la herramienta y las opciones de configuración en nuestro repositorio de GitHub: https://aka.ms/aoai/benchmarking.

Recomendamos el siguiente flujo de trabajo:

  1. Calcule las PTU de rendimiento con la calculadora de capacidad.
  2. Ejecute una prueba comparativa con esta forma de tráfico durante un período de tiempo prolongado (más de 10 minutos) para observar los resultados en un estado estable.
  3. Observe los valores de uso, tokens procesados y velocidad de llamadas de la herramienta de pruebas comparativas y Azure Monitor.
  4. Ejecute una prueba comparativa con su propia forma de tráfico y cargas de trabajo mediante la implementación del cliente. Asegúrese de implementar la lógica de reintento mediante una biblioteca cliente de Azure OpenAI o una lógica personalizada.

Pasos siguientes