Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Visualización actual:Versión - Cambio a la versión del nuevo portal de Foundry
Nota
Los vínculos de este artículo pueden abrir contenido en la nueva documentación de Microsoft Foundry en lugar de la documentación de Foundry (clásico) que está viendo ahora.
La cuota proporciona flexibilidad para administrar activamente la asignación de límites de velocidad en las implementaciones de la suscripción. En este artículo se explica el proceso de administración de la cuota de OpenAI de Azure.
Requisitos previos
Importante
Para cualquier tarea que requiera ver la cuota disponible, recomendamos usar el rol Lector de Uso de Servicios Cognitivos. Este rol proporciona el acceso mínimo necesario para ver el uso de cuota en una suscripción de Azure. Para obtener más información sobre este rol y los demás roles que necesita para acceder a Azure OpenAI, consulte nuestra guía de control de acceso basado en rol Azure.
Este rol se puede encontrar en el portal de Azure en Subscriptions>Access control (IAM)>Agregar asignación de roles> y buscar Lector de usos de Servicios Cognitivos. Este rol se debe aplicar en el nivel de suscripción, no existe en el nivel de recurso.
Si no desea usar este rol, el rol de suscripción Lector proporciona acceso equivalente, pero también concede acceso de lectura más allá de lo necesario para supervisar cuotas y desplegar modelos.
Introducción a la cuota
La función de cuota de Azure OpenAI permite la asignación de límites de velocidad a tus despliegues, hasta un límite global denominado quota. La cuota se asigna a la suscripción por región, por modelo, por tipo de implementación en unidades de tokens por minuto (TPM). Al incorporar una suscripción a Azure OpenAI, obtiene la cuota predeterminada para la mayoría de los modelos disponibles. A continuación, asigna TPM a cada implementación a medida que se crean y la cuota disponible para ese modelo se reduce en esa cantidad. Puede seguir creando implementaciones y asignarlas a TPM hasta que alcance el límite de cuota. Una vez que esto suceda, solo puede crear nuevas implementaciones de ese modelo reduciendo el TPM asignado a otras implementaciones del mismo modelo, lo que libera TPM para su uso, o solicitando y obteniendo la aprobación para un aumento de cuota de modelo en la región deseada.
Nota
Con una cuota de 240 000 TPM para GPT-4o en el Este de EE. UU., un cliente puede crear una sola implementación de 240 K TPM, 2 implementaciones de 120 K TPM cada una, o cualquier número de implementaciones en uno o varios recursos Azure de OpenAI siempre y cuando su TPM suba hasta menos de 240 K total en esa región.
Cuando se crea una implementación, el TPM asignado se corresponde directamente con el límite de tokens por minuto que se aplica a sus solicitudes de inferencia. También se aplica un límite de velocidad requests-Per-Minute (RPM), cuyo valor se establece proporcionalmente a la asignación de TPM mediante la siguiente relación:
Importante
La proporción de solicitudes por minuto (RPM) a tokens por minuto (TPM) para la cuota puede variar según el modelo. Al implementar un modelo mediante programación o solicitar un aumento de cuota , no tiene control pormenorizado sobre TPM y RPM como valores independientes. La cuota se asigna en términos de unidades de capacidad, que tienen cantidades correspondientes de RPM y TPM:
| Modelo | Capacidad | Solicitudes por minuto (RPM) | Tokens por minuto (TPM) |
|---|---|---|---|
| Modelos de chat más antiguos | 1 unidad | 6 RPM (Revoluciones Por Minuto) | 1 000 TPM |
| o1 & o1-vista previa | 1 unidad | 1 rev/min | 6.000 TPM |
| o3 | 1 unidad | 1 rev/min | 1 000 TPM |
| o4-mini | 1 unidad | 1 rev/min | 1 000 TPM |
| o3-mini | 1 unidad | 1 rev/min | 10 000 TPM |
| o1-mini | 1 unidad | 1 rev/min | 10 000 TPM |
| o3-pro | 1 unidad | 1 rev/min | 10 000 TPM |
Esto es especialmente importante para la implementación de modelos mediante programación, ya que los cambios en la relación rpm/TPM pueden dar lugar a una asignación incorrecta accidental de la cuota.
La flexibilidad para distribuir TPM globalmente dentro de una suscripción y región ha permitido que Azure OpenAI afloje otras restricciones:
- Los recursos máximos por región se incrementan a 30.
- Se ha quitado el límite de creación de más de una implementación del mismo modelo en un recurso.
Solicitar más cuota
Envíe el formulario de solicitud de aumento de cuota para solicitar aumentos de cuota para Foundry Models comercializados por Azure, modelos de Azure OpenAI y modelos de Anthropic. A excepción de los modelos de Anthropic, los modelos de socios y de la comunidad no admiten aumentos de cuota.
Las solicitudes de aumento de cuota se procesan en el orden en que se reciben y la prioridad va a los clientes que usan activamente su asignación de cuota existente. Es posible que se denieguen las solicitudes que no cumplen esta condición.
Configuración específica del modelo
Las distintas implementaciones de modelos, también denominadas clases de modelo, tienen valores de TPM máximo únicos que ahora puede controlar. Esto representa la cantidad máxima de TPM que se puede asignar a ese tipo de implementación de modelos en una región determinada.
Todas las demás clases de modelo tienen un valor máximo de TPM común.
Nota
Tokens por minuto (TPM): la asignación de cuota no está relacionada con el límite máximo de tokens de entrada de un modelo. Los límites del token de entrada del modelo se definen en la tabla de modelos y no se ven afectados por los cambios realizados en TPM.
Asignación de cuota
Al crear una implementación de modelo, tiene la opción de asignar Tokens-Per-Minute (TPM) a esa implementación. TPM se puede modificar en incrementos de 1000 y se asignará a los límites de velocidad de TPM y RPM aplicados en la implementación, como se ha descrito anteriormente.
Para crear una nueva implementación desde el portal de Microsoft Foundry seleccione Deployments>Deploy model>Deploy modelo base>Select Model>Confirm.
Después de la implementación, puede ajustar la asignación de TPM seleccionando y editando el modelo en la página Implementaciones del portal de Foundry. También puede modificar esta configuración desde la páginaCuota del modelo>.
Importante
Las cuotas y los límites están sujetos a cambios. Para obtener la información más up-to-date, consulte nuestro artículo cuotas y límites.
Visualización y solicitud de cuota
Para ver todas las asignaciones de cuota en implementaciones de una región determinada, seleccione Administración>Cuota en el Portal de Foundry:
- Implementación: implementaciones de modelos divididas por clase de modelo.
- Tipo de cuota: hay un valor de cuota por región para cada tipo de modelo. La cuota cubre todas las versiones de ese modelo.
- Asignación de cuota: Para el nombre de la cuota, se muestra cuánto de la cuota es utilizada por las implementaciones y el total de cuota aprobada para esta suscripción y región. Esta cantidad de cuota usada también se representa en el gráfico de barras.
- Cuota de solicitud: el icono navega a este formulario donde se pueden enviar solicitudes para aumentar la cuota.
Migración de implementaciones existentes
Como parte de la transición al nuevo sistema de cuota y a la asignación basada en TPM, todas las implementaciones de modelos de OpenAI existentes Azure se han migrado automáticamente para usar la cuota. En los casos en los que la asignación de TPM/RPM existente supera los valores predeterminados debido a los aumentos de límite de velocidad personalizados anteriores, el TPM equivalente se asignó a las implementaciones afectadas.
Comprender los límites de tasa
La asignación de TPM a una implementación establece los límites de velocidad tokens por minuto (TPM) y solicitudes por minuto (RPM) para la implementación, como se ha descrito anteriormente. Los límites de velocidad de TPM se basan en el número máximo de tokens que se estima que se van a procesar mediante una solicitud en el momento en que se recibe la solicitud. No es lo mismo que el recuento de tokens usado para la facturación, que se calcula una vez completado todo el procesamiento.
A medida que se recibe cada solicitud, Azure OpenAI calcula un recuento máximo estimado de tokens procesados que incluye lo siguiente:
- Mensaje de texto y recuento
- Configuración del parámetro max_tokens
- Configuración del parámetro "best_of"
A medida que las solicitudes entran en el punto de conexión de implementación, el recuento de tokens máximos procesados estimado se agrega a un recuento de tokens en ejecución de todas las solicitudes que se restablecen cada minuto. Si en cualquier momento durante ese minuto, se alcanza el valor de límite de velocidad de TPM, las solicitudes adicionales recibirán un código de respuesta 429 hasta que se restablezca el contador.
Importante
El recuento de tokens usado en el cálculo del límite de velocidad es una estimación basada en parte en el recuento de caracteres de la solicitud de API. La estimación de tokens para el límite de tasa no es la misma que el cálculo de tokens que se usa para la facturación o para determinar que una solicitud está por debajo del límite de tokens de entrada de un modelo. Debido a la naturaleza aproximada del cálculo del token de límite de velocidad, es un comportamiento esperado que un límite de velocidad se active antes de lo que podría suponerse al compararlo con una medición exacta del recuento de tokens para cada solicitud.
Los límites de velocidad de RPM se basan en el número de solicitudes recibidas a lo largo del tiempo. El límite de velocidad espera que las solicitudes se distribuyan uniformemente durante un período de un minuto. Si no se mantiene este flujo medio, las solicitudes pueden recibir una respuesta 429 aunque no se cumpla el límite cuando se mida durante un minuto. Para implementar este comportamiento, Azure OpenAI evalúa la tasa de solicitudes entrantes durante un pequeño período de tiempo, normalmente 1 o 10 segundos. Si el número de solicitudes recibidas durante ese tiempo supera lo que se esperaría en el límite de RPM establecido, las nuevas solicitudes reciben un código de respuesta 429 hasta el siguiente período de evaluación. Por ejemplo, si Azure OpenAI supervisa la tasa de solicitudes en intervalos de 1 segundo, la limitación de velocidad se produce para una implementación de 600 RPM si se reciben más de 10 solicitudes durante cada período de 1 segundo (600 solicitudes por minuto = 10 solicitudes por segundo).
Nota
Si usa unidades de rendimiento aprovisionadas (PTU), el sistema calcula los límites de velocidad de forma diferente. Para obtener más información, consulte la sección Evaluación de solicitudes basada en la utilización de ¿Qué es el rendimiento aprovisionado para Foundry Models?.
Encabezados de respuesta de límite de velocidad
Azure OpenAI incluye información de límite de velocidad en los encabezados de respuesta HTTP de cada llamada API. Use estos encabezados para supervisar mediante programación el uso y evitar proactivamente errores 429.
| Encabezado | Valor de ejemplo | Descripción |
|---|---|---|
x-ratelimit-limit-requests |
60 |
Número máximo de solicitudes permitidas por minuto para esta implementación. |
x-ratelimit-limit-tokens |
150000 |
Número máximo de tokens permitidos por minuto para esta implementación. |
x-ratelimit-remaining-requests |
59 |
Solicitudes restantes antes de alcanzar el límite de solicitudes. |
x-ratelimit-remaining-tokens |
149984 |
Tokens restantes antes de alcanzar el límite de tasa. |
x-ratelimit-reset-requests |
10 |
Tiempo hasta que se restablezca el límite de velocidad basado en solicitudes. |
x-ratelimit-reset-tokens |
300 |
Tiempo hasta que se restablezca el límite de velocidad basado en tokens. |
retry-after-ms |
2000 |
Incluido en 429 respuestas. Tiempo de espera recomendado (en milisegundos) antes de reintentar. |
Sugerencia
Supervise x-ratelimit-remaining-requests y x-ratelimit-remaining-tokens en la aplicación para detectar cuándo se acerca a los límites y limite proactivamente las solicitudes antes de recibir un 429.
Procedimientos recomendados de límite de velocidad
Para minimizar los problemas relacionados con los límites de velocidad, use las técnicas siguientes:
Optimización de las solicitudes
- Establezca
max_tokensen el valor mínimo que sirve a su escenario. La estimación del token de límite de velocidad incluyemax_tokens, incluso si la respuesta real es mucho más corta. Por ejemplo, si espera respuestas de aproximadamente 200 tokens, no establezcamax_tokensen 4000. -
Establézcalo
best_ofen 1 a menos que necesite específicamente varias finalizaciones. Cada incremento debest_ofmultiplica el recuento de tokens en relación con tu límite de velocidad. - Reduzca el tamaño de la solicitud siempre que sea posible. Los avisos más cortos usan menos tokens hacia el límite de velocidad.
Implementación de la lógica de reintento con retroceso exponencial
Vuelva a intentar automáticamente las solicitudes cuando reciba una respuesta 429. Use el valor del retry-after-ms encabezado si está presente; de lo contrario, use retroceso exponencial con vibración aleatoria:
- Espere un breve retraso aleatorio después del primer error.
- Si se produce un error en el reintento, doble el retraso (retroceso exponencial).
- Agregue vibración aleatoria para evitar que todos los clientes vuelvan a intentarlo al mismo instante.
- Establezca un número máximo de reintentos (por ejemplo, de 5 a 10) para evitar bucles infinitos.
Importante
Las solicitudes no exitosas aún cuentan hacia tu límite de tasa por minuto. Reenviar continuamente una solicitud sin retroceder empeora la limitación.
Opción 1: Usar el reintento integrado del SDK (el más sencillo - recomendado)
Azure SDK de Python de OpenAI (openai v1.0+) tiene reintento automático integrado con retroceso exponencial para errores 429 y transitorios. El valor predeterminado es de dos reintentos. Puede aumentarlo:
from openai import AzureOpenAI
# Set max_retries globally on the client (default is 2)
client = AzureOpenAI(
azure_endpoint="https://<your-resource>.openai.azure.com/",
api_key="<your-api-key>",
api_version="2024-10-21",
max_retries=5 # up to 5 retries with automatic exponential backoff
)
# All calls through this client automatically retry on 429
response = client.chat.completions.create(
model="gpt-4o", # deployment name
messages=[{"role": "user", "content": "Hello"}]
)
# Or override per-request:
response = client.with_options(max_retries=8).chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}]
)
Nota
El SDK respeta automáticamente los retry-after encabezados y usa retroceso exponencial con vibración. Para la mayoría de las aplicaciones, configurar max_retries en el cliente es suficiente: no necesita una biblioteca de reintentos externa.
Opción 2: Reintento personalizado con la tenacity biblioteca (avanzada)
Úselo cuando necesite más control sobre el comportamiento de reintento (por ejemplo, registro personalizado, control selectivo de excepciones, disyuntores):
import openai
from openai import AzureOpenAI
from tenacity import (
retry,
retry_if_exception_type,
stop_after_attempt,
wait_random_exponential,
)
client = AzureOpenAI(
azure_endpoint="https://<your-resource>.openai.azure.com/",
api_key="<your-api-key>",
api_version="2024-10-21",
max_retries=0 # disable SDK built-in retry to avoid double-retrying
)
@retry(
wait=wait_random_exponential(min=1, max=60),
stop=stop_after_attempt(6),
retry=retry_if_exception_type(openai.RateLimitError), # only retry on 429
reraise=True
)
def chat_completion_with_backoff(**kwargs):
return client.chat.completions.create(**kwargs)
response = chat_completion_with_backoff(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}]
)
Importante
Al usar una biblioteca de reintentos personalizada, establezca max_retries=0 en el cliente del SDK para deshabilitar la funcionalidad de reintento integrada. De lo contrario, cada intento desde tenacity podría desencadenar hasta dos reintentos adicionales del SDK, lo que conduce a muchas más solicitudes de las esperadas.
Opción 3: Implementación manual (sin biblioteca de terceros)
import time
import random
import openai
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint="https://<your-resource>.openai.azure.com/",
api_key="<your-api-key>",
api_version="2024-10-21",
max_retries=0 # disable SDK built-in retry
)
def retry_with_exponential_backoff(
func,
initial_delay: float = 1,
exponential_base: float = 2,
jitter: bool = True,
max_retries: int = 10,
errors: tuple = (openai.RateLimitError,),
):
"""Retry a function with exponential backoff."""
def wrapper(*args, **kwargs):
num_retries = 0
delay = initial_delay
while True:
try:
return func(*args, **kwargs)
except errors as e:
num_retries += 1
if num_retries > max_retries:
raise Exception(
f"Maximum number of retries ({max_retries}) exceeded."
) from e
delay *= exponential_base * (1 + jitter * random.random())
time.sleep(delay)
except Exception as e:
raise e
return wrapper
@retry_with_exponential_backoff
def chat_completion_with_backoff(**kwargs):
return client.chat.completions.create(**kwargs)
Ejemplo de C# con Polly (v7):
using Azure;
using Azure.AI.OpenAI;
using Polly;
var retryPolicy = Policy
.Handle<RequestFailedException>(ex => ex.Status == 429)
.WaitAndRetryAsync(
retryCount: 6,
sleepDurationProvider: (retryAttempt, exception, context) =>
{
// Use retry-after-ms header if available
if (exception is RequestFailedException rfEx)
{
var raw = rfEx.GetRawResponse();
if (raw != null && raw.Headers.TryGetValue("retry-after-ms", out string value)
&& int.TryParse(value, out int ms))
{
return TimeSpan.FromMilliseconds(ms);
}
}
// Otherwise, exponential backoff with jitter
return TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
+ TimeSpan.FromMilliseconds(Random.Shared.Next(0, 1000));
},
onRetry: (exception, timespan, retryCount, context) =>
{
Console.WriteLine($"Retry {retryCount} after {timespan.TotalSeconds:F1}s due to: {exception.Message}");
}
);
// Usage
var endpoint = new Uri("https://<your-resource>.openai.azure.com/");
var credential = new AzureKeyCredential("<your-api-key>");
var client = new AzureOpenAIClient(endpoint, credential);
await retryPolicy.ExecuteAsync(async () =>
{
var response = await client.GetChatClient("gpt-4o")
.CompleteChatAsync([new UserChatMessage("Hello")]);
Console.WriteLine(response.Value.Content[0].Text);
});
Nota
El SDK de Azure para .NET también tiene compatibilidad integrada con reintentos. Al construir AzureOpenAIClientOptions, puede configurar options.Retry.MaxRetries y options.Retry.Mode = RetryMode.Exponential en lugar de usar Polly. Use Polly cuando necesite patrones más avanzados (interruptores, mamparos, etc.).
Supervisión y administración del uso en el nivel de implementación
- Compruebe la asignación de TPM por cada implementación, y no solo la cuota a nivel de suscripción. Es posible que haya aprobado la cuota en el nivel de suscripción, pero alcance los 429 porque la cuota no está asignada a la implementación específica que recibe tráfico.
- Reequilibrar la cuota entre implementaciones en función del uso observado. Utiliza métricas de Azure Monitor para revisar las tendencias de uso de 24 horas y siete días y detectar patrones irregulares.
- Utilice la administración de cuotas en el portal de Foundry para aumentar el TPM en implementaciones de alto tráfico y reducir el TPM en las infrautilizadas.
Distribuir el tráfico uniformemente
- Evite picos agudos en la carga de trabajo. Los límites de velocidad rpm esperan que las solicitudes se distribuyan uniformemente durante cada minuto. Incluso si las solicitudes totales están por debajo del límite por minuto, una ráfaga dentro de una ventana de 1 o 10 segundos puede desencadenar un 429.
- Aumente el tráfico gradualmente al incorporar nuevas cargas de trabajo o aumentar la carga.
- Distribuir solicitudes entre varias implementaciones o regiones si la carga de trabajo requiere un mayor rendimiento que admite una sola implementación.
Uso del procesamiento asincrónico o por lotes siempre que sea posible
Si el caso de uso no requiere respuestas inmediatas, considere la posibilidad de usar patrones asincrónicos:
- Coloque las solicitudes en cola y procéselas a una tasa controlada.
- Use varias implementaciones para paralelizar el procesamiento sin superar el límite de velocidad de una sola implementación.
Descripción de los errores de limitación 429 y qué hacer
Un error 429 ("Demasiadas solicitudes") significa que el sistema rechazó la solicitud porque se superó un límite de velocidad o el sistema no puede procesar la solicitud en este momento. No todos los errores 429 tienen la misma causa principal y la acción correcta depende de por qué se produjo el 429.
Tipos de errores 429
| Escenario | Indicador de mensaje de error | Causa principal | Acción recomendada |
|---|---|---|---|
| Límite de velocidad excedido | "Solicitudes a ... se han limitado" o "Se ha superado el límite de tasa" | Las solicitudes superaron el límite de velocidad de TPM o RPM para la cuota asignada de la implementación. | Aumente la asignación de TPM de la implementación, reequilibree la cuota entre implementaciones o solicite un aumento de cuota. |
| Limitación de la capacidad del sistema | "El servicio no puede procesar temporalmente la solicitud" o "El sistema está experimentando una demanda alta" | La capacidad de back-end está restringida. Esta condición suele ser transitoria. | Vuelva a intentarlo después del retry-after-ms retraso. Si el problema persiste, considere la posibilidad de actualizar al Provisioned Throughput (PTU) para asegurar la capacidad. |
| Ajuste del límite de velocidad temporal | Se producen respuestas 429, pero la cuota configurada no ha cambiado; el valor de x-ratelimit-limit-tokens en los encabezados de respuesta es inferior al TPM configurado de la implementación. |
Las implementaciones estándar (de pago por uso) comparten un grupo de recursos. Cuando la demanda se aproxima a los límites de capacidad, el sistema reduce temporalmente el límite de velocidad efectivo de la implementación para mantener la confiabilidad de todos los clientes. Esta reducción es protectora y temporal. | Vuelva a intentarlo con retry-after-ms aplazamiento. El ajuste se resuelve normalmente en unas pocas horas. En el caso de cargas de trabajo que requieren un rendimiento coherente, considere la posibilidad de Rendimiento Aprovisionado (PTU). |
| Presupuesto de tokens superado por parámetros de solicitud | Límite de tasa activado, pero las métricas de uso de tokens parecen bajas | El cálculo del límite de velocidad incluye max_tokens y solicita estimación, no solo tokens facturados. Una solicitud con un valor alto max_tokens puede consumir el presupuesto de límite de velocidad incluso si la respuesta real es pequeña. |
Reduzca max_tokens para que coincida con el tamaño de respuesta esperado. |
Importante
Muchos clientes malinterpretan los 429s relacionados con la capacidad como problemas de cuota, lo que lleva a remediaciones incorrectas (por ejemplo, solicitar aumentos de cuota cuando el problema es una presión de capacidad transitoria). Compruebe siempre los encabezados de mensaje de error y respuesta para identificar la causa principal antes de tomar medidas.
Por qué puede ver códigos de estado 429 incluso cuando las métricas de uso de tokens están por debajo del límite
Azure OpenAI limitación de tasa y métricas de uso no son lo mismo:
- Métricas de uso de tokens en Azure Monitor muestran tokens facturados de solicitudes procesadas con éxito.
- La limitación de velocidad se aplica a las solicitudes de API en el momento en que se reciben, incluidas las solicitudes que se rechazan más adelante o nunca se facturan.
Debido a esta diferencia, puede obtener 429 respuestas incluso cuando las métricas de uso de tokens se ven muy por debajo de la cuota. Entre las razones comunes se incluyen:
-
max_tokensSobreestimación: los límites de velocidad se calculan con el recuento máximo estimado de tokens (prompt +max_tokens), no con los tokens reales generados. - Solicitudes rechazadas: las solicitudes rechazadas debido a los límites de longitud de entrada (HTTP 400) podrían seguir contando hacia la limitación de velocidad, pero no aparecerán en las métricas de token facturadas.
- Patrones de ráfaga: la aplicación de RPM evalúa las solicitudes en ventanas de tiempo pequeñas (de 1 a 10 segundos). Una ráfaga de solicitudes en una ventana corta desencadena la limitación incluso si el total por minuto está dentro de los límites.
-
Ajuste temporal del límite de velocidad para la confiabilidad del servicio: las implementaciones estándar (de pago por uso) comparten un grupo de recursos común entre los clientes. Para mantener el servicio confiable y justo, el sistema supervisa continuamente la demanda en este grupo compartido. Cuando la demanda de una implementación se aproxima o supera los límites de capacidad, el sistema podría reducir temporalmente el límite de velocidad efectivo para esa implementación. Durante este período de ajuste, las solicitudes que se habrían aceptado en condiciones normales devuelven 429 respuestas, aunque la cuota configurada no haya cambiado. Esta medida de protección evita la degradación del servicio para todos los clientes que comparten el grupo de recursos. El ajuste es temporal y normalmente se resuelve en unas pocas horas una vez que se estabiliza el tráfico. Puede supervisar esta condición comprobando si el límite de velocidad efectivo (visible en
x-ratelimit-limit-tokenslos encabezados de respuesta) es inferior a la asignación de TPM configurada. - Cumplimiento distribuido: la aplicación del límite de velocidad en toda la infraestructura distribuida podría no ser perfectamente precisa o reflejarse inmediatamente en las métricas agregadas.
Sugerencia
Si ve 429 respuestas durante un período de ajuste de límite de velocidad temporal:
-
Reintentar con backoff — respete el
retry-after-msencabezado. El ajuste es temporal y se resolverá a medida que la demanda se estabiliza. - Propagación del tráfico : si es posible, distribuya las solicitudes entre varias implementaciones o regiones.
- Revise el patrón de tráfico : las ráfagas pesadas sostenidas son el desencadenador más común. La rampa gradual de las cargas de trabajo reduce la probabilidad de ajustes.
- Considere el Rendimiento Aprovisionado (PTU): para cargas de trabajo de producción que requieren un rendimiento constante sin variabilidad de grupos compartidos, el Rendimiento Aprovisionado proporciona capacidad dedicada con límites de tasa garantizados.
Qué se debe confiar en:
- Use métricas de uso de tokens para comprender el consumo facturado.
- Use códigos de respuesta HTTP (429) y encabezados de respuesta (
x-ratelimit-remaining-*,x-ratelimit-limit-*) para detectar y responder a la aplicación del límite de velocidad en tiempo real. - Compare
x-ratelimit-limit-tokensen encabezados de respuesta con el TPM configurado para detectar si un ajuste temporal está activo.
Cuándo reintentar o cuándo escalar
| Situación | Acción |
|---|---|
Errores 429 ocasionales que se resuelven con retry-after-ms espera |
Reintento : este comportamiento es normal y se espera para las implementaciones compartidas (estándar). |
| Errores 429 durante el desarrollo y pruebas | A menudo aceptable — los 429 de no producción podrían ser límites de control de costes intencionales. |
| 429 sostenidos en producción, por debajo del límite de cuota aprobado | Escale — abra una solicitud de soporte para la investigación de ingeniería. |
| Aumentos del límite de velocidad no reflejados en límites efectivos | Escale — compruebe primero la asignación de cuota en el nivel de implementación y, a continuación, escale si el problema persiste. |
| Cargas de trabajo de producción críticas o sensibles a la latencia que experimentan 429s frecuentes | Actualización — considere Rendimiento Aprovisionado (PTU) para la capacidad garantizada y el SLA de latencia. |
Nota
Las implementaciones estándar (de pago por uso) usan un grupo de recursos compartidos. La limitación protege la confiabilidad general del servicio para todos los usuarios. Los 429 transitorios ocasionales son un comportamiento esperado, no un defecto de servicio. En el caso de las cargas de trabajo que requieren latencia predecible y rendimiento garantizado, el rendimiento aprovisionado (PTU) es el tipo de implementación recomendado.
Comprobar la cuota y la capacidad mediante programación
Además de Foundry portal, puede utilizar dos API REST de Azure Resource Manager para comprobar mediante programación el consumo de la cuota de su suscripción y la capacidad de modelo disponible.
Elección de la API adecuada
| API de uso | API de capacidades de modelo | |
|---|---|---|
| Preguntas que responde | ¿Qué porcentaje de mi cuota he consumido en relación con mi límite? | ¿Cuánto capacidad implementable está disponible para un modelo específico? |
| Scope | Suscripción y ubicación | Suscripción (todas las ubicaciones a la vez) |
| Input | Solo la ubicación | Nombre, versión y formato del modelo |
| Devolución | Cada línea de cuota de esa región: uso actual y límite | Capacidad disponible por ubicación y tipo de implementación para un modelo |
| Caso de uso típico | Supervisar el consumo, desencadenar alertas al aproximarse a los límites | Comprobación previa de la capacidad antes de crear o escalar una implementación |
| Referencia de API | Usos: lista | Capacidades del modelo: lista |
Use la API de usos cuando necesite una vista del libro de contabilidad de lo que ha consumido y lo que queda. Use la API de capacidades del modelo cuando quiera saber dónde puede implementar un modelo y cuánta capacidad hay disponible en cada ubicación.
Nota
Ambas API devuelven información de todos los modelos asociados a la suscripción, incluidos los modelos retirados que ya no están disponibles para las nuevas implementaciones.
API de usos
La API Usages devuelve cada línea de cuota de una región determinada, incluido el consumo actual (currentValue) y el límite asignado.
Solicitud:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.CognitiveServices/locations/{location}/usages?api-version=2024-10-01
Ejemplo: comprobación del uso de cuotas en Este de EE. UU.
import requests
import json
from azure.identity import DefaultAzureCredential
subscription_id = "<your-subscription-id>"
location = "eastus"
credential = DefaultAzureCredential()
token = credential.get_token("https://management.azure.com/.default")
headers = {"Authorization": f"Bearer {token.token}"}
url = (
f"https://management.azure.com/subscriptions/{subscription_id}"
f"/providers/Microsoft.CognitiveServices/locations/{location}/usages"
f"?api-version=2024-10-01"
)
response = requests.get(url, headers=headers)
usages = response.json()
# Show quota lines that have a non-zero limit
for item in usages["value"]:
if item["limit"] > 0:
print(f"{item['name']['localizedValue']}: {item['currentValue']}/{item['limit']}")
Campos clave:
| Campo | Descripción |
|---|---|
name.value |
Nombre de cuota en el formato {Provider}.{DeploymentType}.{Model} |
name.localizedValue |
Descripción legible del usuario, incluida la unidad |
currentValue |
¿Qué parte de esta cuota consumen actualmente las implementaciones? |
limit |
Límite de cuota de la suscripción para este modelo y tipo de implementación |
API de capacidades de modelos
Model Capacitys API devuelve la capacidad de implementación disponible para un modelo específico en todas las ubicaciones y tipos de implementación de la suscripción.
Solicitud:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.CognitiveServices/modelCapacities?api-version=2024-10-01&modelFormat={format}&modelName={name}&modelVersion={version}
Ejemplo: compruebe dónde está disponible la capacidad gpt-4o:
import requests
import json
from azure.identity import DefaultAzureCredential
subscription_id = "<your-subscription-id>"
model_name = "gpt-4o"
model_version = "2024-08-06"
credential = DefaultAzureCredential()
token = credential.get_token("https://management.azure.com/.default")
headers = {"Authorization": f"Bearer {token.token}"}
url = (
f"https://management.azure.com/subscriptions/{subscription_id}"
f"/providers/Microsoft.CognitiveServices/modelCapacities"
f"?api-version=2024-10-01"
f"&modelFormat=OpenAI&modelName={model_name}&modelVersion={model_version}"
)
response = requests.get(url, headers=headers)
capacities = response.json()
# Show locations with available capacity for Standard deployments
for item in capacities["value"]:
props = item["properties"]
if props["availableCapacity"] > 0 and "Standard" in props["skuName"]:
print(f"{item['location']} ({props['skuName']}): {props['availableCapacity']} available")
Campos clave:
| Campo | Descripción |
|---|---|
location |
Región de Azure |
properties.skuName |
Tipo de implementación (Estándar, GlobalStandard, DataZoneStandard, ProvisionedManaged, etc.) |
properties.availableCapacity |
Unidades de capacidad disponibles en la suscripción para este modelo, ubicación y tipo de implementación |
properties.availableFinetuneCapacity |
Capacidad disponible para ajuste fino (cuando corresponda) |
Automatización de la implementación
Para crear mediante programación implementaciones de Azure OpenAI y asignar cuota de tokens por minuto (TPM) mediante REST, CLI de Azure, Azure PowerShell, ARM, Bicep o Terraform, consulte Automatización de implementaciones de Azure OpenAI con cuota en Microsoft Foundry.
Eliminación de recursos
Cuando se intenta eliminar un recurso de Azure OpenAI desde el portal de Azure, si existen implementaciones, la eliminación se bloquea hasta que se eliminen las implementaciones asociadas. La eliminación de las implementaciones en primer lugar permite liberar correctamente las asignaciones de cuota para que se puedan usar en nuevas implementaciones.
Sin embargo, si elimina un recurso mediante la API REST o algún otro método mediante programación, esto omite primero la necesidad de eliminar las implementaciones. Cuando esto ocurre, la asignación de cuota asociada seguirá sin estar disponible para asignarla a una nueva implementación durante 48 horas hasta que se purgue el recurso. Para desencadenar una purga inmediata para que un recurso eliminado libere la cuota, siga las instrucciones de purga de un recurso eliminado.
Pasos siguientes
- Para revisar los valores predeterminados de cuota para Azure OpenAI, consulte el artículo quotas y límites