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

使用 Azure 机器学习管道对深度学习模型进行批量评分

逻辑应用
机器学习
Azure 基于角色的访问控制
存储

本参考体系结构演示如何使用 Azure 机器学习将神经样式传输应用于视频。 样式传输是一种深度学习技术,它以另一个图像的样式构成现有图像。 可概括此体系结构,将它用于任何为深度学习使用批处理计分的场景。

体系结构

使用 Azure 机器学习的深度学习模型的体系结构图。

下载此体系结构的 Visio 文件

工作流

该体系结构包括以下组件。

计算

Azure 机器学习使用管道创建可再现的且易于管理的计算序列。 此外,它还提供名为 Azure 机器学习计算的托管计算目标(管道计算可在其上运行),用于对机器学习模型进行训练、部署和评分。

存储

Azure Blob 存储存储所有图像(输入图像、样式图像和输出图像)。 Azure 机器学习与 Blob 存储相集成,因此,用户无需手动在计算平台和 Blob 存储之间移动数据。 对于此工作负载所需的性能而言,Blob 存储也非常经济高效。

触发器

Azure 逻辑应用触发工作流。 当逻辑应用检测到已将 Blob 添加到容器中时,会触发 Azure 机器学习管道。 逻辑应用非常适合这个用于参考的体系结构,因为它是检测 Blob 存储更改的简单方法,并提供了更改触发器的简单进程。

预处理和后处理数据

这个用于参考的体系结构使用“树上的猩猩”视频片段。

  1. 使用 FFmpeg 从视频片段中提取音频文件,以便稍后可将音频文件拼结回到输出视频。
  2. 使用 FFmpeg 将视频分成单个帧。 独立地并行处理这些帧。
  3. 此时,你可以同时将神经样式传输应用到每个帧。
  4. 处理每个帧之后,使用 FFmpeg 将这些帧重新拼接到一起。
  5. 最后,将音频文件重新附加到重新拼接的视频片段。

组件

解决方案详细信息

这个用于参考的体系结构专为 Azure 存储中存在新媒体时而触发的工作负载而设计。

包括以下处理步骤:

  1. 将视频文件上传到 Azure blob 存储。
  2. 视频文件触发 Azure 逻辑应用,以将请求发送到 Azure 机器学习管道发布的终结点。
  3. 该管道处理视频、应用采用 MPI 的样式传输,并对视频进行后处理。
  4. 管道完成后,输出将保存到 Blob 存储。

可能的用例

媒体组织的一个视频需要改变样式,使其看起来像一幅特定的画。 该组织希望以自动化的方式及时将这种样式应用于视频的所有帧。 有关神经样式传输算法的详细背景信息,请参阅使用卷积神经网络的图像样式传输 (PDF)。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

性能效率

性能效率是指工作负载能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率要素概述

GPU 与 CPU

对于深度学习工作负载,GPU 通常远远超出 CPU,以至于通常需要相当大的 CPU 群集才可获得可比的性能。 虽然在此体系结构中可选择只使用 CPU,但 GPU 将提供更好的成本/性能配置文件。 我们建议使用最新的 NCv3 系列的 GPU 优化 VM。

默认情况下,并非所有区域都启用 GPU。 确保选择启用了 GPU 的区域。 此外,对于 GPU 优化的 VM,订阅的内核默认配额为零。 可通过打开支持请求来提高此配额。 确保订阅有足够的配额来运行工作负载。

跨 VM 和内核并行执行

将样式传输进程作为批处理作业运行时,主要在 GPU 上运行的作业需要在 VM 间并行化。 可使用两种方法:可使用具有单个 GPU 的 VM 创建更大的群集,也可使用具有许多 GPU 的 VM 创建较小的群集。

对于此工作负载,这两个选项的性能相当。 使用更少的 VM 且每个 VM 具有更多的 GPU,可帮助减少数据移动。 但是,此工作负载的每个作业的数据量并不大,因此 Blob 存储不会受到太多限制。

MPI 步骤

在创建 Azure 机器学习管道时,用于执行并行计算的步骤之一是(消息处理接口) MPI 步骤。 MPI 步骤有助于在可用节点之间均匀拆分数据。 只有在所有请求的节点均已准备就绪时,MPI 步骤才会执行。 如果某个节点发生故障或被抢占(如果是低优先级虚拟机),则必须重新运行 MPI 步骤。

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述。 本部分包含生成安全解决方案的注意事项。

限制对 Azure Blob 存储的访问

在这个用于参考的体系结构中,Azure Blob 存储是需要保护的主要存储组件。 GitHub 存储库中显示的基线部署使用存储帐户密钥来访问 Blob 存储。 为进一步控制和保护,请考虑改用共享访问签名 (SAS)。 这允许对存储中的对象进行有限的访问,而无需对帐户密钥进行硬编码或以纯文本形式保存。 此方法特别有用,因为帐户密钥在逻辑应用的设计器界面中以纯文本形式可见。 使用 SAS 还有助于确保存储帐户具有适当监管,并且仅向有意拥有访问权限的人员授予该访问权限。

在具有更多敏感数据的情况下,请确保所有存储密钥都受到保护,因为这些密钥可授予对工作负载的所有输入和输出数据的完全访问权限。

数据加密和数据移动

这个用于参考的体系结构使用样式传输作为批处理计分进程的示例。 在数据敏感性更强的情况下,存储中的数据应静态加密。 每次将数据从一个位置移动到另一位置时,都使用传输层安全性 (TLS) 来保护数据传输。 有关详细信息,请参阅 Azure 存储安全指南

保护虚拟网络中的计算

部署机器学习计算群集时,可将群集配置为在虚拟网络的子网中进行预配。 该子网让群集中的计算节点可安全地与其他虚拟机通信。

防范恶意活动

在存在多个用户的情况下,确保敏感数据免受恶意活动的影响。 如果其他用户可访问此部署以自定义输入数据,请注意以下预防措施和注意事项:

  • 使用 Azure 基于角色的访问控制 (Azure RBAC) 来限制用户仅访问所需的资源。
  • 预配两个单独的存储帐户。 将输入和输出数据存储在第一个帐户中。 可授予外部用户访问此帐户的权限。 将可执行脚本和输出日志文件存储在另一帐户中。 外部用户不应有权访问此帐户。 这种分离可确保外部用户无法修改任何可执行文件(注入恶意代码),并且无法访问可能包含敏感信息的日志文件。
  • 恶意用户可对作业队列执行 DDoS 攻击或在作业队列中注入格式错误的有害消息,从而导致系统锁定或导致出列错误。

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

与存储和计划组件相比,这个用于参考的体系结构中使用的计算资源在成本方面遥遥领先。 其中一个主要挑战是在支持 GPU 的计算机群集中有效地并行化工作。

Azure 机器学习计算群集大小可根据队列中的作业自动增加和减少。 可以通过设置最小和最大节点数,以编程方式启用自动缩放。

对于无需立即处理的工作,可配置自动缩放,使默认状态(最小值)为零节点群集。 通过此配置,群集从零节点开始,仅在队列中检测到作业时才会增加。 如果批量评分进程一天只运行几次或更少,则此设置可大幅节省成本。

自动缩放可能不适用于彼此发生时间太接近的批处理作业。 群集启动和停止所需的时间也会产生成本,因此如果批工作负载在上一个作业结束后的几分钟内开始,则保持群集在作业之间运行可能更具成本效益。

Azure 机器学习计算还支持低优先级虚拟机,这样就可以在折扣虚拟机上运行计算,并警告他们随时可能抢占这些虚拟机。 低优先级虚拟机非常适合用于非关键型批量评分工作负荷。

监视批处理作业

运行作业时,监视进度并确保作业按预期进行,这点至关重要。 然而,在活动节点群集间进行监视可能是一项挑战。

若要检查群集的整体状态,请转到 Azure 门户的机器学习服务,检查群集中节点的状态。 如果节点处于非活动状态或作业失败,则错误日志将保存到 Blob 存储,并且还可在 Azure 门户中访问。

通过将日志连接到 Application Insights,或通过运行单独的进程来轮询群集及其作业的状态,可进一步进行监视。

使用 Azure 机器学习进行日志记录

Azure 机器学习自动将所有 stdout/stderr 记录到关联的 Blob 存储帐户中。 除非另有指定,否则,Azure 机器学习工作区会自动预配一个存储帐户,并将日志转储到其中。 还可以使用存储导航工具(例如 Azure 存储资源管理器),这是一种更简单的日志文件导航方式。

部署此方案

若要部署这个用于参考的体系结构,请按照 GitHub 存储库中所述的步骤进行操作。

也可以使用 Azure Kubernetes 服务部署适用于深度学习模型的批量评分体系结构。 遵循此 Github 存储库中所述的步骤。

作者

本文由 Microsoft 维护, 最初由以下贡献者撰写。

首席作者:

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤