在 Azure 机器学习工作室中管理提示流计算会话

提示流计算会话提供运行应用程序所需的计算资源,包括具有所有必要依赖项包的 Docker 映像。 这种可靠的可缩放环境允许提示流有效地执行任务和功能,确保无缝用户体验。

计算会话管理的权限和角色

若要分配角色,需要 ownerMicrosoft.Authorization/roleAssignments/write 对资源具有权限。

对于计算会话的用户,在工作区中分配 AzureML Data Scientist 角色。 如要了解详细信息,请参阅“管理对 Azure 机器学习工作区的访问权限”。

角色分配可能需要几分钟才能生效。

在工作室中启动计算会话

在使用 Azure 机器学习工作室启动计算会话之前,请确保:

  • 你在工作区中具有 AzureML Data Scientist 角色。
  • 工作区中的默认数据存储(通常 workspaceblobstore)是 Blob 类型。
  • 工作区中存在工作目录 (workspaceworkingdirectory)。
  • 如果使用虚拟网络进行提示流,则可以参阅“提示流的网络隔离”中的注意事项。

在流页面上启动计算会话

每个流绑定到单个计算会话。 在流页上启动计算会话。

  • 选择开始。 使用流文件夹中定义的 flow.dag.yaml 环境启动计算会话。 它在无服务器计算的虚拟机(VM)大小上运行,前提是工作区中有足够的配额。

    提示流屏幕截图,其中包含用于在流页面上启动计算会话的默认设置。

  • 选择“开始使用高级设置”。 在高级设置中,可以:

    • 选择计算类型。 可以在无服务器计算和计算实例之间进行选择。
      • 如果选择无服务器计算,可以指定以下设置:

        • 自定义计算会话使用的 VM 大小。 选择 VM 系列 D 及以上。 有关更多信息,请参阅支持的 VM 系列和大小一节
        • 自定义空闲时间,如果计算会话在一段时间内未使用,则会自动删除该会话。
        • 设置用户分配的托管标识。 计算会话使用此标识来提取基础映像、使用连接进行身份验证并安装包。 确保用户分配的托管标识具有足够的权限。 如果未设置此标识,则默认使用用户标识。

        提示流的屏幕截图,其中包含将无服务器计算用于在流页面上启动计算会话的高级设置。

        az ml workspace update -f workspace_update_with_multiple_UAIs.yml --subscription <subscription ID> --resource-group <resource group name> --name <workspace name>
        

        其中 workspace_update_with_multiple_UAIs.yml 的内容如下所示:

        identity:
           type: system_assigned, user_assigned
           user_assigned_identities:
            '/subscriptions/<subscription_id>/resourcegroups/<resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uai_name>': {}
            '<UAI resource ID 2>': {}
        

        提示

        Azure 机器学习工作区的用户分配托管标识需要以下 Azure RBAC 角色分配,才能访问与工作区关联的资源中的数据。

        资源 权限
        Azure 机器学习工作区 参与者
        Azure 存储 参与者(控制平面)+ 存储 Blob 数据参与者 + 存储文件数据特权参与者(数据平面,使用文件共享中的流草稿和 Blob 中的数据)
        Azure Key Vault(当使用访问策略权限模型时) 参与者 + 清除操作以外的任何访问策略权限,这是适用于链接的 Azure Key Vault 的默认模式
        Azure Key Vault(当使用 RBAC 权限模型时) 参与者(控制平面)+ Key Vault 管理员(数据平面)
        Azure 容器注册表 参与者
        Azure Application Insights 参与者

        注意

        作业提交者需要 assign 用户分配的托管标识的权限。 分配角色 Managed Identity Operator ,因为每次创建无服务器计算会话时,都会将用户分配的托管标识分配给计算。

      • 如果选择计算实例作为计算类型,则只能设置空闲关闭时间。

        • 由于它在现有计算实例上运行,因此 VM 大小是固定的,无法在会话期间更改。

        • 用于此会话的标识也在计算实例中定义,默认情况下它使用用户标识。 详细了解如何为计算实例分配标识

        • 对于用于定义计算会话生命周期的空闲关闭时间,如果会话在设置的时间内处于空闲状态,则会自动删除。 如果在计算实例上启用了空闲关闭,则会在计算级别生效。

          提示流的屏幕截图,其中包含将计算实例用于在流页面上启动计算会话的高级设置。

        • 了解有关如何创建和管理计算实例的更多信息

使用计算会话提交在 CLI/SDK 中运行的流

除了使用 Studio,在提交流运行时,在 CLI 或 SDK 中指定计算会话。

在资源节下指定实例类型或计算实例名称。 如果未指定实例类型或计算实例名称,Azure 机器学习会根据配额、成本、性能和磁盘大小等因素选择实例类型(VM 大小)。 详细了解无服务器计算

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl

# specify identity used by serverless compute.
# default value
# identity:
#   type: user_identity 

# use workspace first UAI
# identity:
#   type: managed
  
# use specified client_id's UAI
# identity:
#   type: managed
#   client_id: xxx

column_mapping:
  url: ${data.url}

# define cloud resource

resources:
  instance_type: <instance_type> # serverless compute type
  # compute: <compute_instance_name> # use compute instance as compute type

通过 CLI 提交此运行:

pfazure run create --file run.yml

注意

如果使用 CLI/SDK 提交流运行,则空闲关闭时间为一小时。 你可以转到计算页面来发布计算。

流文件夹之外的引用文件

有时,你可能想要引用 requirements.txt 流文件夹外部的文件。 例如,你可能有包含多个流的复杂项目,并且它们共享同一个 requirements.txt 文件。 为此,请将additional_includes字段添加到 .flow.dag.yaml 此字段的值是流文件夹的相对文件/文件夹路径的列表。 例如,如果 requirements.txt 位于流文件夹的父文件夹中,则可以将 ../requirements.txt 添加到 additional_includes 字段。

inputs:
  question:
    type: string
outputs:
  output:
    type: string
    reference: ${answer_the_question_with_context.output}
environment:
  python_requirements_txt: requirements.txt
additional_includes:
  - ../requirements.txt
...

该文件 requirements.txt 将复制到流文件夹,用于启动计算会话。

在工作室流页面上更新计算会话

在流页上,使用以下选项来管理计算会话:

  • 更改计算会话设置:更改 VM 大小或用户分配的无服务器计算托管标识等设置。 如果使用计算实例,请切换到另一个实例。
  • 如果更改 VM 大小,则计算会话会使用新的 VM 大小重置。
  • 从 requirements.txt安装包 :在提示流 UI 中打开 requirements.txt 并添加包。
  • 查看已安装的包:显示在计算会话中安装的包,包括基础映像中的包,并在流文件夹中的文件中指定的 requirements.txt 包。
  • 重置计算会话会删除当前计算会话,并创建具有相同环境的新计算会话。 如果遇到包冲突问题,可以尝试此选项。
  • 停止计算会话会删除当前计算会话。 如果基础计算上没有活动的计算会话,则无服务器计算资源也将被删除。

流页面上适用于计算会话的操作屏幕截图。

还可以通过在流文件夹中的 requirements.txt 文件中添加包来自定义用于运行此流的环境。 在此文件中添加更多包后,可以选择以下任一选项:

  • 在流文件夹中保存并安装触发器 pip install -r requirements.txt。 此过程可能需要几分钟时间,具体视安装的包而定。
  • 仅保存requirements.txt 文件。 稍后可以自行安装包。

流页面上用于为计算会话保存和安装包的选项的屏幕截图。

注意

可以更改 requirements.txt 的位置以及文件名,但请务必在流文件夹中的 flow.dag.yaml 文件中进行更改。

不要固定和promptflow传入promptflow-tools的版本requirements.txt,因为它们已包含在会话基础映像中。

requirements.txt 不支持本地 wheel文件。 在映像中构建它们,并在 flow.dag.yaml 中更新自定义的基础映像。 了解有关如何构建自定义基础映像的更多信息。

在 Azure DevOps 的专用源中添加包

要在 Azure DevOps 中使用专用源,需要执行以下步骤:

  1. 将托管标识分配给工作区或计算实例。

    1. 如果使用无服务器计算作为计算会话,请将用户分配的托管标识分配给工作区。

      1. 创建用户分配的托管标识并将其添加到 Azure DevOps 组织。

        注意

        如果“添加用户”按钮不可见,则你可能没有执行此操作所需的权限。

      2. 向工作区添加或更新用户分配的标识

        注意

        请确保用户分配的托管标识在工作区链接的密钥保管库上具有 Microsoft.KeyVault/vaults/read

    2. 如果使用计算实例作为计算会话,请将 用户分配的托管标识分配给计算实例

  2. {private} 添加到专用源 URL。 例如,如果要在 Azure DevOps 的 test_package 中安装 test_feed,请将 -i https://{private}@{test_feed_url_in_azure_devops} 添加到 requirements.txt

    -i https://{private}@{test_feed_url_in_azure_devops}
    test_package
    
  3. 在计算会话配置中使用用户分配的托管标识进行指定。

    1. 如果使用的是无服务器计算,如果计算会话未运行,请在“使用高级设置开始”中指定用户分配的托管标识;如果计算会话正在运行,则使用“更改计算会话设置”按钮。

      显示用于工作区用户分配的托管标识的切换开关的屏幕截图。

    2. 如果使用的是计算实例,它将使用分配给计算实例的用户分配的托管标识。

注意

此方法主要侧重于在流开发阶段中快速测试。如果还需要将此流部署为终结点,请在映像中生成此专用源,并在 flow.dag.yaml 中更新自定义基础映像。 详细了解如何生成自定义基础映像

更改计算会话的基础映像

默认情况下,我们使用最新的提示流基础映像。 如果要使用不同的基础映像,可以构建自定义映像

  • 在工作室中,可以在“计算会话”设置下的“基础映像”设置中更改基础映像。

流页面上更改计算会话的基础映像的屏幕截图。

  • 也可以在流文件夹的 environment 文件中的 flow.dag.yaml 下指定新的基础映像。

    流页面上用于为计算会话自定义基础映像操作的屏幕截图。

    environment:
        image: <your-custom-image>
        python_requirements_txt: requirements.txt
    

要使用新的基础映像,需要重置计算会话。 此过程需要几分钟时间,因为它会拉取新的基础映像并重新安装包。

管理计算会话使用的无服务器实例

使用无服务器计算作为计算会话来管理无服务器实例。 在计算页面的计算会话列表选项卡中查看无服务器实例。

无服务器实例列表的屏幕截图。

访问流并在 “活动流并运行 ”选项卡下的计算上运行。删除实例会影响流并对其进行运行。

无服务器实例的计算详细信息页的屏幕截图。

计算会话、计算资源、流和用户之间的关系

  • 单个用户可以拥有多个计算资源(无服务器或计算实例)。 例如,用户可能具有具有不同 VM 大小或用户分配的托管标识的计算资源。
  • 计算资源只能由单个用户使用。 它充当该用户的专用开发框。 多个用户无法共享相同的计算资源。
  • 计算资源可以托管多个计算会话。 计算会话是在基础计算资源上运行的容器。 例如,提示流创作不需要许多计算资源,因此单个计算资源可以托管同一用户的多个计算会话。
  • 计算会话一次只属于一个计算资源。 可以删除或停止计算会话并将其重新分配给另一个计算资源。
  • 流只能有一个计算会话。 每个流都是自包含的,在计算会话的流文件夹中定义基础映像和所需的 Python 包。

将运行时切换到计算会话

计算会话在计算实例运行时方面具有以下优势:

  • 自动管理会话和基础计算的生命周期。 不再需要手动创建或管理它们。
  • 通过将包添加到 requirements.txt 流文件夹中的文件(而不是创建自定义环境)来轻松自定义包。

使用以下步骤将计算实例运行时切换到计算会话:

  • requirements.txt准备流文件夹中的文件。 不要固定版本promptflowpromptflow-toolsrequirements.txt因为它们已包含在基础映像中。 计算会话在启动时在文件中安装包 requirements.txt
  • 如果为计算实例运行时创建自定义环境,请从环境详细信息页获取映像, flow.dag.yaml 并在流文件夹中的文件中指定该映像。 要了解更多信息,请参阅更改计算会话的基础映像。 确保工作区上的相关用户分配的托管标识具有 acr pull 映像的权限。

显示如何在环境详细信息页中查找图像的屏幕截图。

  • 对于计算资源,请继续使用现有计算实例手动管理生命周期,或尝试由系统管理的无服务器计算。

后续步骤