提示流计算会话提供运行应用程序所需的计算资源,包括具有所有必要依赖项包的 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 系列和大小一节
- 自定义空闲时间,如果计算会话在一段时间内未使用,则会自动删除该会话。
- 设置用户分配的托管标识。 计算会话使用此标识来提取基础映像、使用连接进行身份验证并安装包。 确保用户分配的托管标识具有足够的权限。 如果未设置此标识,则默认使用用户标识。
- 可以使用以下 CLI 命令将用户分配的托管标识分配给工作区。 详细了解如何为工作区创建并更新用户分配的标识。
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 中使用专用源,需要执行以下步骤:
将托管标识分配给工作区或计算实例。
如果使用无服务器计算作为计算会话,请将用户分配的托管标识分配给工作区。
创建用户分配的托管标识并将其添加到 Azure DevOps 组织。
注意
如果“添加用户”按钮不可见,则你可能没有执行此操作所需的权限。
-
注意
请确保用户分配的托管标识在工作区链接的密钥保管库上具有
Microsoft.KeyVault/vaults/read
。
如果使用计算实例作为计算会话,请将 用户分配的托管标识分配给计算实例。
将
{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
在计算会话配置中使用用户分配的托管标识进行指定。
注意
此方法主要侧重于在流开发阶段中快速测试。如果还需要将此流部署为终结点,请在映像中生成此专用源,并在 flow.dag.yaml
中更新自定义基础映像。 详细了解如何生成自定义基础映像
更改计算会话的基础映像
默认情况下,我们使用最新的提示流基础映像。 如果要使用不同的基础映像,可以构建自定义映像。
- 在工作室中,可以在“计算会话”设置下的“基础映像”设置中更改基础映像。
也可以在流文件夹的
environment
文件中的flow.dag.yaml
下指定新的基础映像。environment: image: <your-custom-image> python_requirements_txt: requirements.txt
要使用新的基础映像,需要重置计算会话。 此过程需要几分钟时间,因为它会拉取新的基础映像并重新安装包。
管理计算会话使用的无服务器实例
使用无服务器计算作为计算会话来管理无服务器实例。 在计算页面的计算会话列表选项卡中查看无服务器实例。
访问流并在 “活动流并运行 ”选项卡下的计算上运行。删除实例会影响流并对其进行运行。
计算会话、计算资源、流和用户之间的关系
- 单个用户可以拥有多个计算资源(无服务器或计算实例)。 例如,用户可能具有具有不同 VM 大小或用户分配的托管标识的计算资源。
- 计算资源只能由单个用户使用。 它充当该用户的专用开发框。 多个用户无法共享相同的计算资源。
- 计算资源可以托管多个计算会话。 计算会话是在基础计算资源上运行的容器。 例如,提示流创作不需要许多计算资源,因此单个计算资源可以托管同一用户的多个计算会话。
- 计算会话一次只属于一个计算资源。 可以删除或停止计算会话并将其重新分配给另一个计算资源。
- 流只能有一个计算会话。 每个流都是自包含的,在计算会话的流文件夹中定义基础映像和所需的 Python 包。
将运行时切换到计算会话
计算会话在计算实例运行时方面具有以下优势:
- 自动管理会话和基础计算的生命周期。 不再需要手动创建或管理它们。
- 通过将包添加到
requirements.txt
流文件夹中的文件(而不是创建自定义环境)来轻松自定义包。
使用以下步骤将计算实例运行时切换到计算会话:
-
requirements.txt
准备流文件夹中的文件。 不要固定版本promptflow
,promptflow-tools
requirements.txt
因为它们已包含在基础映像中。 计算会话在启动时在文件中安装包requirements.txt
。 - 如果为计算实例运行时创建自定义环境,请从环境详细信息页获取映像,
flow.dag.yaml
并在流文件夹中的文件中指定该映像。 要了解更多信息,请参阅更改计算会话的基础映像。 确保工作区上的相关用户分配的托管标识具有acr pull
映像的权限。
- 对于计算资源,请继续使用现有计算实例手动管理生命周期,或尝试由系统管理的无服务器计算。