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

在 Azure OpenAI 服务上使用预配部署入门

以下指南逐步讲解如何使用 Azure OpenAI 服务资源设置预配的部署。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。 目前,对此服务的访问来自应用程序。 可以填写 https://aka.ms/oai/access 处的表单来申请对 Azure OpenAI 服务的访问权限。
  • 获取预配部署的配额并购买了承诺。

注意

预配吞吐量单位 (PTU) 不同于 Azure OpenAI 中的标准配额,并且默认情况下不可用。 要了解有关此产品/服务的详细信息,请与 Microsoft 帐户团队联系。

创建预配的部署

购买配额承诺后,便可以创建部署。 若要创建预配的部署,可以按照以下步骤操作:描述的选项反映了屏幕截图中显示的条目。

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

  1. 登录到 Azure OpenAI Studio
  2. 选择为预配部署启用的订阅,并在具有配额的区域中选择所需的资源。
  3. 在左侧导航中的管理下,选择部署
  4. 选择“创建新部署”并配置以下字段。 展开‘高级选项’下拉列表。
  5. 在每个字段中填入值。 下面是一个示例:
字段 说明 示例
选择模型 选择要部署的特定模型。 GPT-4
型号版本 选择要部署的模型的版本。 0613
部署名称 部署名称在代码中使用,通过使用客户端库和 REST API 调用模型。 gpt-4
内容筛选器 指定要应用于部署的筛选策略。 详细了解我们的内容筛选操作方法。 默认值
部署类型 这会影响吞吐量和性能。 为预配的部署选择“预配托管” 预配托管
预配吞吐量单位 选择要包含在部署中的吞吐量。 100

如果要以编程方式创建部署,可以使用以下 Azure CLI 命令执行此操作。 使用所需的预配吞吐量单位数更新 sku-capacity

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、ARM 模板、Bicep 和 Terraform 也可用于创建部署。 请参阅管理配额操作指南中的自动化部署部分,并将 sku.name 替换为“预配托管”而不是“标准”。

进行首次调用

预配部署的推理代码与标准部署类型相同。 以下代码片段显示了对 GPT-4 模型的聊天完成调用。 首次以编程方式使用这些模型时,建议从快速入门指南开始。 建议使用版本 1.0 或更高版本的 OpenAI 库,因为这些库中包含重试逻辑。

    #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)

重要

对于生产来说,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。

了解预期的吞吐量

可以在终结点上实现的吞吐量是部署的 PTU 数、输入大小、输出大小和调用速率的一个因素。 所处理的并发调用数和标记总数可能因这些值而异。 建议的部署吞吐量确定方式如下:

  1. 使用容量计算器进行大小调整估算。 可以在“配额”页和“预配”选项卡下的 Azure OpenAI Studio 中找到容量计算器。
  2. 使用实际流量工作负载对负载进行基准测试。 有关基准测试的详细信息,请参阅基准测试部分。

测量部署利用率

部署指定数量的预配吞吐量单位 (PTU) 时,该终结点可以使用一组推理吞吐量。 此吞吐量的利用率是基于模型、模型版本调用速率、提示大小、生成大小的复杂公式。 为了简化此计算,我们在 Azure Monitor 中提供了利用率指标。 在利用率超过 100% 后,部署会在任何新调用中返回 429。 预配利用率的定义如下:

PTU 部署利用率 = (在时间段内消耗的 PTU) / (在时间段内部署的 PTU)

可以在资源的 Azure-Monitor 部分找到利用率度量值。 若要访问监视仪表板,请登录 https://portal.azure.com,然后转到 Azure OpenAI 资源,并从左侧导航栏中选择“指标”页。 在指标页上,选择“预配管理的利用率”度量值。 如果资源中有多个部署,则还应通过单击“应用拆分”按钮按每个部署拆分值。

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

有关监视部署的详细信息,请参阅监视 Azure OpenAI 服务页。

处理高利用率

预配的部署提供分配的计算容量,用于运行给定的模型。 ‘Azure Monitor 中的预配托管利用率’指标以一分钟增量度量部署的利用率。 预配托管部署也进行了优化,以便接受的调用以一致的每调用最大延迟进行处理。 当工作负荷超出其分配的容量时,服务将返回 429 HTTP 状态代码,直到利用率下降到 100% 以下。 重试前的时间在 retry-afterretry-after-ms 响应标头中提供,这些标头分别提供以秒和毫秒为单位的时间。 此方法维护按调用延迟目标,同时让开发人员控制如何处理高负载情况,例如重试或转移到另一个体验/终结点。

收到 429 响应时该怎么办?

429 响应指示在调用时已分配的 PTU 已完全消耗。 响应包括 retry-after-msretry-after 标头,这些标头指示下一次调用接受前等待的时间。 选择如何处理 429 响应取决于应用程序要求。 下面是一些注意事项:

  • 如果可以接受更长的每次调用延迟时间,请实现客户端重试逻辑,以等待 retry-after-ms 时间和重试。 此方法使你能够最大程度地提高部署的吞吐量。 Microsoft 提供的客户端 SDK 已使用合理的默认值处理它。 你仍可能需要根据用例进行进一步优化。
  • 请考虑将流量重定向到其他模型、部署或体验。 此方法是最低延迟的解决方案,因为只要收到 429 信号,就可以立即执行此操作。 推送到高利用率时,429 信号不是意外的错误响应,而是用于管理预配部署的队列和高负载的设计的一部分。

修改客户端库中的重试逻辑

默认情况下,Azure OpenAI SDK 会重试 429 响应,并在客户端的后台重试(直至达到最多重试次数)。 库会遵循 retry-after 时间。 还可以修改重试行为,以更好地适应你的体验。 下面是 Python 库的示例。

可以使用 max_retries 选项来配置或禁用重试设置:

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?"}
    ]
)

运行基准

实例的确切性能和吞吐量功能取决于发出的请求类型以及确切的工作负荷。 确定工作负荷的吞吐量的最佳方法是对自己的数据运行基准。

为了帮助你完成这项工作,基准测试工具提供了一种在部署中轻松运行基准的方法。 该工具附带了多个可能的预配置工作负荷形状,并输出关键性能指标。 详细了解 GitHub 存储库中的工具和配置设置:https://aka.ms/aoai/benchmarking

建议使用以下工作流:

  1. 使用容量计算器估算吞吐量 PTU。
  2. 运行具有此流量形状的基准测试(超过 10 分钟)以在稳定状态下观察结果。
  3. 观察基准工具和 Azure Monitor 中的利用率、令牌处理和调用速率值。
  4. 使用客户端实现,通过自己的流量形状和工作负载运行基准。 请务必使用 Azure Openai 客户端库或自定义逻辑实现重试逻辑。

后续步骤