177 lines
6.9 KiB
Markdown
177 lines
6.9 KiB
Markdown
# Detailed Workflows: Quota Management
|
|
|
|
**Table of Contents:** [Workflow 1: View Current Quota Usage](#workflow-1-view-current-quota-usage---detailed-steps) · [Workflow 2: Find Best Region for Model Deployment](#workflow-2-find-best-region-for-model-deployment---detailed-steps) · [Workflow 3: Check Quota Before Deployment](#workflow-3-check-quota-before-deployment---detailed-steps) · [Workflow 4: Monitor Quota Across Deployments](#workflow-4-monitor-quota-across-deployments---detailed-steps) · [Quick Command Reference](#quick-command-reference) · [MCP Tools Reference](#mcp-tools-reference-optional-wrappers)
|
|
|
|
## Workflow 1: View Current Quota Usage - Detailed Steps
|
|
|
|
### Step 1: Show Regional Quota Summary (REQUIRED APPROACH)
|
|
|
|
> **CRITICAL AGENT INSTRUCTION:**
|
|
> - When showing quota: Query REGIONAL quota summary, NOT individual resources
|
|
> - DO NOT run `az cognitiveservices account list` for quota queries
|
|
> - DO NOT filter resources by username or name patterns
|
|
> - ONLY check specific resource deployments if user provides resource name
|
|
> - Quotas are managed at SUBSCRIPTION + REGION level, NOT per-resource
|
|
|
|
**Show Regional Quota Summary:**
|
|
|
|
```bash
|
|
# Get subscription ID
|
|
subId=$(az account show --query id -o tsv)
|
|
|
|
# Check quota for key regions
|
|
regions=("eastus" "eastus2" "westus" "westus2")
|
|
for region in "${regions[@]}"; do
|
|
echo "=== Region: $region ==="
|
|
az rest --method get \
|
|
--url "https://management.azure.com/subscriptions/$subId/providers/Microsoft.CognitiveServices/locations/$region/usages?api-version=2023-05-01" \
|
|
--query "value[?contains(name.value,'OpenAI.Standard')].{Model:name.value, Used:currentValue, Limit:limit, Available:(limit-currentValue)}" \
|
|
--output table
|
|
echo ""
|
|
done
|
|
```
|
|
|
|
### Step 2: If User Asks for Specific Resource (ONLY IF EXPLICITLY REQUESTED)
|
|
|
|
```bash
|
|
# User must provide resource name
|
|
az cognitiveservices account deployment list \
|
|
--name <user-provided-resource-name> \
|
|
--resource-group <user-provided-rg> \
|
|
--query '[].{Name:name, Model:properties.model.name, Capacity:sku.capacity, SKU:sku.name}' \
|
|
--output table
|
|
```
|
|
|
|
**Alternative - Use MCP Tools (Optional Wrappers):**
|
|
```
|
|
foundry_models_deployments_list(
|
|
resource-group="<rg>",
|
|
azure-ai-services="<resource-name>"
|
|
)
|
|
```
|
|
*Note: MCP tools are convenience wrappers around the same control plane APIs shown above.*
|
|
|
|
**Interpreting Results:**
|
|
- `Used` (currentValue): Currently allocated quota
|
|
- `Limit`: Maximum quota available in region
|
|
- `Available`: Calculated as `limit - currentValue`
|
|
|
|
## Workflow 2: Find Best Region for Model Deployment - Detailed Steps
|
|
|
|
### Step 1: Check Single Region
|
|
|
|
```bash
|
|
# Get subscription ID
|
|
subId=$(az account show --query id -o tsv)
|
|
|
|
# Check quota for GPT-4o Standard in a specific region
|
|
region="eastus" # Change to your target region
|
|
az rest --method get \
|
|
--url "https://management.azure.com/subscriptions/$subId/providers/Microsoft.CognitiveServices/locations/$region/usages?api-version=2023-05-01" \
|
|
--query "value[?name.value=='OpenAI.Standard.gpt-4o'].{Model:name.value, Used:currentValue, Limit:limit, Available:(limit-currentValue)}" \
|
|
-o table
|
|
```
|
|
|
|
### Step 2: Check Multiple Regions (Common Regions)
|
|
|
|
Check these regions in sequence by changing the `region` variable:
|
|
- `eastus`, `eastus2` - US East Coast
|
|
- `westus`, `westus2`, `westus3` - US West Coast
|
|
- `swedencentral` - Europe (Sweden)
|
|
- `canadacentral` - Canada
|
|
- `uksouth` - UK
|
|
- `japaneast` - Asia Pacific
|
|
|
|
**Alternative - Use MCP Tool:**
|
|
```
|
|
model_quota_list(region="eastus")
|
|
```
|
|
Repeat for each target region.
|
|
|
|
**Key Points:**
|
|
- Query returns `currentValue` (used), `limit` (max), and calculated `Available`
|
|
- Standard SKU format: `OpenAI.Standard.<model-name>`
|
|
- For PTU: `OpenAI.ProvisionedManaged.<model-name>`
|
|
- Focus on 2-3 regions relevant to your location rather than checking all regions
|
|
|
|
## Workflow 3: Check Quota Before Deployment - Detailed Steps
|
|
|
|
**Steps:**
|
|
1. Check current usage (workflow #1)
|
|
2. Calculate available: `limit - currentValue`
|
|
3. Compare: `available >= required_capacity`
|
|
4. If insufficient: Use workflow #2 to find region with capacity, or request increase
|
|
|
|
## Workflow 4: Monitor Quota Across Deployments - Detailed Steps
|
|
|
|
**Recommended Approach - Regional Quota Overview:**
|
|
|
|
Show quota by region (better than listing all resources):
|
|
|
|
```bash
|
|
subId=$(az account show --query id -o tsv)
|
|
regions=("eastus" "eastus2" "westus" "westus2" "swedencentral")
|
|
|
|
for region in "${regions[@]}"; do
|
|
echo "=== Region: $region ==="
|
|
az rest --method get \
|
|
--url "https://management.azure.com/subscriptions/$subId/providers/Microsoft.CognitiveServices/locations/$region/usages?api-version=2023-05-01" \
|
|
--query "value[?contains(name.value,'OpenAI')].{Model:name.value, Used:currentValue, Limit:limit, Available:(limit-currentValue)}" \
|
|
--output table
|
|
echo ""
|
|
done
|
|
```
|
|
|
|
**Alternative - Check Specific Resource:**
|
|
|
|
If user wants to monitor a specific resource, ask for resource name first:
|
|
|
|
```bash
|
|
# List deployments for specific resource
|
|
az cognitiveservices account deployment list \
|
|
--name <resource-name> \
|
|
--resource-group <rg> \
|
|
--query '[].{Name:name, Model:properties.model.name, Capacity:sku.capacity}' \
|
|
--output table
|
|
```
|
|
|
|
> **Note:** Don't automatically iterate through all resources in the subscription. Show regional quota summary or ask for specific resource name.
|
|
|
|
## Quick Command Reference
|
|
|
|
```bash
|
|
# View quota for specific model using REST API
|
|
subId=$(az account show --query id -o tsv)
|
|
region="eastus" # Change to your region
|
|
az rest --method get \
|
|
--url "https://management.azure.com/subscriptions/$subId/providers/Microsoft.CognitiveServices/locations/$region/usages?api-version=2023-05-01" \
|
|
--query "value[?contains(name.value,'gpt-4')].{Name:name.value, Used:currentValue, Limit:limit, Available:(limit-currentValue)}" \
|
|
--output table
|
|
|
|
# List all deployments with capacity
|
|
az cognitiveservices account deployment list \
|
|
--name <resource-name> \
|
|
--resource-group <rg> \
|
|
--query '[].{Name:name, Model:properties.model.name, Capacity:sku.capacity}' \
|
|
--output table
|
|
|
|
# Delete deployment to free quota
|
|
az cognitiveservices account deployment delete \
|
|
--name <resource-name> \
|
|
--resource-group <rg> \
|
|
--deployment-name <deployment-name>
|
|
```
|
|
|
|
## MCP Tools Reference (Optional Wrappers)
|
|
|
|
**Note:** All quota operations are control plane (management) operations. MCP tools are optional convenience wrappers around Azure CLI commands.
|
|
|
|
| Tool | Purpose | Equivalent Azure CLI |
|
|
|------|---------|---------------------|
|
|
| `foundry_models_deployments_list` | List all deployments with capacity | `az cognitiveservices account deployment list` |
|
|
| `model_quota_list` | List quota and usage across regions | `az rest` (Management API) |
|
|
| `model_catalog_list` | List available models from catalog | `az rest` (Management API) |
|
|
| `foundry_resource_get` | Get resource details and endpoint | `az cognitiveservices account show` |
|
|
|
|
**Recommended:** Use Azure CLI commands directly for control plane operations.
|