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

提示流计算会话提供应用运行所需的计算资源,包括包含所有必要依赖项包的 Docker 映像。 这种可靠且可缩放的环境可让提示流有效地执行其任务和函数,可提供无缝的用户体验。

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

如要分配角色,需要具有 owner 身份,或者对资源具有 Microsoft.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 中运行的流

除了工作室,还可以在提交流运行时在 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 文件中进行更改。

不要将 promptflowpromptflow-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_feed 中安装 test_package,请将 -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 中更新自定义基础映像。 详细了解如何生成自定义基础映像

更改计算会话的基础映像

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

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

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

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

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

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

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

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

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

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

还可以在“活动流和运行”选项卡下访问在计算上运行的流和运行。由于删除实例会影响流并在其上运行。

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

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

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

将运行时切换到计算会话

与计算实例运行时相比,计算会话具有以下优势:

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

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

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

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

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

后续步骤