你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用托管计算部署开源模型(预览版)

注释

Foundry 中的托管计算资源当前处于预览阶段。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持,或者可能具有受限功能。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

Microsoft Foundry 中的托管计算部署(预览版)在专用 GPU 容量上托管开源模型。 Microsoft拥有 GPU 拓扑、运行时、容器映像和安全修补。 可以选择适合工作负荷的模型、部署模板、加速器系列和缩放行为。 本文逐步讲解在 Microsoft Foundry 中将开源模型部署到托管计算的端到端工作流。

在这篇文章中,你将学会如何:

  • 在模型目录中选择模型
  • 选择部署模板
  • 使用 Foundry 门户或 Python SDK 部署模型
  • 使用 OpenAI SDK 执行推理
  • 缩放和监视部署
  • 请求更多配额

有关 Foundry 中托管计算部署的概述,包括模型实例、部署模板、运行时、加速器系列、计费和现有限制,请参阅 Microsoft Foundry 中的托管计算(预览版)

先决条件

  • 一个有效的 “Azure” 订阅。 若要创建帐户,请参阅 创建Azure免费帐户

  • 该订阅中你有权创建资源的资源组。

  • Microsoft Foundry 帐户(AIServices 类型的认知服务帐户)和 Foundry 项目。 若要创建 一个,请参阅“创建 Foundry 项目”。

  • 以下是在 Foundry 帐户范围内的 Azure 角色分配:

  • 在目标区域内,计划部署的加速器系列(A100、H100 或 MI300X)所对应的已获批准的托管计算配额。 托管计算配额独立于Azure VM 配额。 请参阅本文末尾的 “请求更多配额 ”。

  • SDK 和 CLI 示例的本地工具:

    pip install "azure-mgmt-cognitiveservices==15.0.0b2" azure-identity openai requests
    az login
    
  • Azure CLI 2.60 或更高版本

Important

Foundry 中的托管计算目前处于公开预览阶段。 在正式发布之前,API、SKU 名称和支持的区域可能会更改。 内置内容筛选不是公共预览版中托管计算数据路径的一部分。 如果需要请求级或响应级筛选,请直接从应用程序调用 Azure AI 内容安全 API

在目录中选择模型

托管计算资源会部署 Foundry 模型目录中 Hugging Face 集合里的模型,这些模型由 azure-huggingface 注册表提供。

  1. 登录到 Microsoft Foundry。 确保 New Foundry 开关处于打开状态。 这些步骤适用于 Foundry(新版)
  2. 选择您的订阅和 Foundry 资源。
  3. 选择右上方导航中的 “生成 ”,然后选择左窗格中的“ 模型 ”。
  4. 集合筛选目录。 选择 Hugging Face。 还可以使用任何其他筛选器来缩小要部署的模型范围(例如,选取 Qwen 等模型系列)或按形式或任务。 还可以按模型名称进行搜索。
  5. 选择一个模型卡(例如,nvidia-nemotron-3-nano-30b-a3b-fp8)以打开其详细信息。

模型卡显示为模型发布的上游许可证、形式、支持的任务和部署模板。 如果计划通过 Python SDK 或 REST 而不是使用门户向导进行部署,则需要三个值作为部署调用的输入。 可以在 Foundry 门户中找到这些值,如下所示:

  • 模型 ID:模型的完全限定注册表资产 ID。 在目录中的 模型卡 上可用(从模型详细信息窗格复制)。 Example:

    azureml://registries/azure-huggingface/models/nvidia--nvidia-nemotron-3-nano-30b-a3b-fp8/versions/2
    
  • 部署模板 ID:标识模型的运行时、加速器系列和计数以及上下文长度。 在模型卡上选择“部署”时打开的部署向导中可用。 选择模板并从向导复制部署模板 ID。 Example:

    azureml://registries/azure-huggingface/deploymenttemplates/nvidia--nvidia-nemotron-3-nano-30b-a3b-fp8--nvidia-h100/labels/latest
    

    注释

    模型 ID 和部署模板 ID 必须兼容;每个模板都会列出它支持的模型版本。 门户向导仅显示所选模型的兼容模板。 如果通过代码进行部署,请验证这两个引用是否都解析到 azure-huggingface 注册表中的有效资产。

    若要了解有关部署模板的详细信息,请参阅托管计算概述文章中的 部署模板

  • 加速器类型:例如 H100_80GBA100_80GBMI_300_192GB。 显示在部署向导中的每个模板旁边。

部署模型

  1. 在模型卡上选择 “部署 ”以打开部署向导。

  2. 指定 部署名称。 部署名称是应用程序在推理时在model字段中传递的内容 — 选择一个稳定的应用程序友好名称(例如)。 nemotron-3-nano-30b

  3. 部署向导中预先选择了部署类型(全局托管计算)。

  4. 选择与工作负荷匹配的 部署模板 。 例如,对于中等上下文长度且成本最低的场景,可选择 H100 单加速器模板;如果你的提示词超过单加速器的上下文限制,则可选择双加速器模板。

  5. 选择 加速器类型,例如 H100_80GB

  6. 模型实例 设置为 1(如果您已对工作负载进行过测量,也可以设置为更高值)。 模型实例决定托管计算的规模,并且是部署 SKU 上的 capacity 值。 每个实例都会占用模板中定义的加速器数量;例如,如果某个模板指定每个实例使用一个 H100,且容量为 2,则总共会使用两个 H100 加速器。

    Tip

    先以 capacity: 1 进行初始部署,然后在评估工作负载后通过增加容量进行横向扩展。 有关如何增加容量 ,请参阅“管理和缩放部署 ”。

  7. 选中复选框以确认部署的成本。

  8. 选择“ 部署”。 预配通常需要 10 到 15 分钟。

验证部署

当模型通过 Foundry 终结点上线后,部署详细信息页面会从 Creating 更新为 Succeeded。 可以查看有关部署的详细信息,包括创建部署时所做的预配状态、部署类型和其他选择。

发送测试请求

部署准备就绪后,在 Foundry Playground 中以交互方式对其进行测试。

  1. 选择 “操场 ”选项卡,从“部署 详细信息 ”页切换到该选项卡。
  2. 发送提示词以测试部署。

监视部署

托管计算部署与其他 Foundry 部署一样,都在同一个 Azure Monitor 平台上发出指标。 在 Foundry 门户的部署详细信息页面上,监控选项卡显示:

  • 请求计数按 HTTP 状态代码分组。
  • 响应时间百分位数 (p50, p90, p99)。
  • 对于聊天补全模型:输入和输出词元计数、首次词元时间 (TTFT) 百分位,以及词元间解码时间百分位。

若要进行更深入的分析或警报,请在 Azure 门户中打开部署,并在 MonitoringMetrics> 来绘制相同的指标、按部署分组和配置警报。 系统会自动生成部署级计费标签。 按部署标记筛选成本管理,以将支出归因于特定的托管计算部署。 有关详细信息,请参阅规划和管理 Microsoft Foundry 的成本

删除部署

删除部署会释放其分配的加速器资源,并立即停止计费。 若要删除部署,请执行以下操作:

  1. 转到 Foundry 门户中的部署列表。
  2. 选择部署名称旁边的单选按钮。
  3. 在右窗格中,选择“删除”

请求更多配额

托管计算配额是通过 Foundry 配额过程为每个区域的加速器系列授予的,并且从 Azure VM 配额分离。 现有Azure VM 配额不能应用于托管计算部署。

请求更多配额:

  1. 选择右上角导航栏中的操作,然后在左侧窗格中选择配额
  2. 选择 “托管计算 ”选项卡。下表列出了按加速器系列和区域分组的当前分配。
  3. 选择右上角的请求配额
  4. 在请求表单中,选择加速器系列(A100、H100 或 MI300X)、目标区域和请求的配额。 提交请求。

已批准的配额更改最多可能需要 15 分钟才能生效。 刷新 “配额 ”页以验证更新的分配。 有关配额概念的详细信息,请参阅 管理和增加资源的配额

使用以下Python脚本部署模型。 将占位符替换为自己的订阅 ID、资源组、Foundry 帐户名称和部署名称。

Tip

先以 capacity: 1 进行初始部署,然后在评估工作负载后通过增加容量进行横向扩展。 有关如何增加容量 ,请参阅“管理和缩放部署 ”。

from azure.identity import DefaultAzureCredential
from azure.mgmt.cognitiveservices import CognitiveServicesManagementClient

SUBSCRIPTION_ID  = "<your-subscription-id>"
RESOURCE_GROUP   = "<your-resource-group>"
ACCOUNT_NAME     = "<your-foundry-account>"
DEPLOYMENT_NAME  = "nemotron-3-nano-30b"

MODEL = "azureml://registries/azure-huggingface/models/nvidia--nvidia-nemotron-3-nano-30b-a3b-fp8/versions/2"
TEMPLATE = "azureml://registries/azure-huggingface/deploymenttemplates/nvidia--nvidia-nemotron-3-nano-30b-a3b-fp8--nvidia-h100/labels/latest"

client = CognitiveServicesManagementClient(
    DefaultAzureCredential(), SUBSCRIPTION_ID
)

deployment = client.managed_compute_deployments.begin_create_or_update(
    resource_group_name=RESOURCE_GROUP,
    account_name=ACCOUNT_NAME,
    deployment_name=DEPLOYMENT_NAME,
    resource={
        "sku": {"name": "GlobalManagedCompute", "capacity": 1},
        "properties": {
            "model": MODEL,
            "deploymentTemplate": TEMPLATE,
            "acceleratorType": "H100_80GB",
            "versionUpgradeOption": "OnceNewDefaultVersionAvailable",
        },
    },
).result()  # blocks until terminal state (~10–15 min)

print(f"State: {deployment.properties.provisioning_state}")
print(f"ID:    {deployment.id}")

验证部署

部署创建完成后,在发送流量之前,先确认其状态正常。

d = client.managed_compute_deployments.get(
    resource_group_name=RESOURCE_GROUP,
    account_name=ACCOUNT_NAME,
    deployment_name=DEPLOYMENT_NAME,
)

print(f"State:        {d.properties.provisioning_state}")    # expect: Succeeded
print(f"Model:        {d.properties.model}")
print(f"Template:     {d.properties.deployment_template}")
print(f"Accelerator:  {d.properties.accelerator_type}")
print(f"Capacity:     {d.sku.capacity}")

查找:

  • provisioningState: Succeeded 表示部署已上线。
  • acceleratorType 匹配所请求的值。
  • sku.capacity 匹配所请求的实例数。

provisioningState如果是Failed,请参阅故障排除

发送测试请求

可通过统一的 Foundry 端点访问托管计算部署:

https://<account>.services.ai.azure.com/openai/v1/

请求 model 正文中的字段采用指定的 部署名称 ,而不是模型 ID。

from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import OpenAI

ACCOUNT_NAME    = "<your-foundry-account>"
DEPLOYMENT_NAME = "nemotron-3-nano-30b"

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default",
)

client = OpenAI(
    base_url=f"https://{ACCOUNT_NAME}.services.ai.azure.com/openai/v1",
    api_key="placeholder",  # required by OpenAI SDK; overridden by Authorization header
    default_headers={"Authorization": f"Bearer {token_provider()}"},
)

resp = client.chat.completions.create(
    model=DEPLOYMENT_NAME,
    messages=[{"role": "user", "content": "What is the capital of France?"}],
)

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

使用 Microsoft Entra ID 调用该部署要求在 Foundry 帐户中具有 Azure AI 用户角色。

管理和扩展部署

由于托管计算部署以模型为中心,因此可以通过更改模型实例数而不是调整节点大小来缩放部署。

更改容量

d = client.managed_compute_deployments.get(
    RESOURCE_GROUP, ACCOUNT_NAME, DEPLOYMENT_NAME
)
d.sku.capacity = 3

client.managed_compute_deployments.begin_create_or_update(
    resource_group_name=RESOURCE_GROUP,
    account_name=ACCOUNT_NAME,
    deployment_name=DEPLOYMENT_NAME,
    resource=d,
).result()

获取运行时和模型更新

在部署中将 versionUpgradeOption 设置为 OnceNewDefaultVersionAvailable 后,当 Microsoft 发布新的默认模型版本和运行时版本时,该部署将自动采用这些版本。 运行时补丁和 CVE 修复会自动应用到正在运行的客户部署中;你无需重新部署模型即可获得这些修复。

监视部署

托管计算部署与其他 Foundry 部署一样,都在同一个 Azure Monitor 平台上发出指标。 若要进行更深入的分析或警报,请在 Azure 门户中打开部署并使用 Metrics 下的 < Monitoring 来绘制指标,例如:

  • 请求计数按 HTTP 状态代码分组。
  • 响应时间百分位数 (p50, p90, p99)。
  • 对于聊天补全模型:输入和输出词元计数、首次词元时间 (TTFT) 百分位,以及词元间解码时间百分位。

还可以按部署和配置警报进行分组。 系统会自动生成部署级计费标签。 按部署标记筛选成本管理,以将支出归因于特定的托管计算部署。 有关详细信息,请参阅规划和管理 Microsoft Foundry 的成本

删除部署

删除部署会释放其分配的加速器资源,并立即停止计费。 若要删除部署,请执行以下操作:

client.managed_compute_deployments.begin_delete(
    resource_group_name=RESOURCE_GROUP,
    account_name=ACCOUNT_NAME,
    deployment_name=DEPLOYMENT_NAME,
).result()

访问控制摘要

Action 最低角色
创建、更新或删除托管计算部署 Foundry 帐户上的认知服务参与者(或 Foundry 所有者/Foundry 帐户所有者)
读取部署或列出部署 认知服务用户、Foundry 用户、Foundry 项目经理,或以上任一角色
使用 Microsoft Entra ID 调用部署 Foundry 帐户中的 Foundry 用户
使用 API 密钥调用该部署 帐户密钥(调用本身不需要 Azure 角色;检索密钥需要读取访问权限)

有关完整的 Azure 资源提供程序操作列表、角色与权限对应矩阵以及与标准部署的比较,请参阅Microsoft Foundry 的基于角色的访问控制 — 托管计算控制平面操作

Troubleshooting

provisioningState: Failed

确认请求的加速器系列已在目标区域中批准配额,并且所选部署模板列出了该加速器系列。 不匹配的模型和部署模板(例如,为不同模型版本发布的模板)是一个常见原因。 验证这两个引用都解析到 azure-huggingface 注册表中的有效注册表资产。

创建时提示“配额已超出”

Foundry 帐户在区域中没有足够的托管计算配额来容纳请求的加速器系列。 请求更多配额。 Azure VM 配额不适用于托管计算。

区域中的“容量不足”

该区域未返回所请求的加速器系列的可用容量。 尝试不同的系列(例如,部署在 MI300X 而不是 H100 上),选择每个实例配备更少加速器的模板,或选择其他区域。 大型内存系列(如 MI300X)通常具有不适合 A100 的模型容量。

来自 /openai/v1/ 路由的 404 错误

如果向 https://<account>.services.ai.azure.com/openai/v1/chat/completions 发出的聊天补全请求返回 404,请确认:

  • 请求正文中的部署名称与创建的部署匹配。
  • 部署的 provisioningStateSucceeded
  • 模型的运行时公开聊天补全。 某些运行时(例如,用于嵌入的 TEI)不会公开聊天完成路由;请改用模型卡上记录的路由。

部署停滞在 Creating 超过 20 分钟

一些较大的模型完成启动所需的时间可能会超过通常的 10–15 分钟。 如果 20 分钟后 provisioningState 仍为 Creating,请检查 Foundry 门户中的部署详细信息页面,查看操作状态消息,并确认底层区域未出现服务降级。 如果部署在 Creating 状态下持续超过 30 分钟且没有操作消息,请将其删除后重试。 预配在部署名称上是幂等的。