你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在组织范围内管理 Azure 机器学习的预算、成本和配额
在具有许多工作负载、许多团队和用户的组织规模下管理 Azure 机器学习产生的计算成本时,有诸多管理和优化难题需要解决。
本文介绍使用 Azure 机器学习优化成本、管理预算和共享配额的最佳做法。 它反映了团队在 Microsoft 内部运行机器学习以及与我们的客户合作得来的经验和教训。 将了解如何执行以下操作:
优化计算资源以满足工作负载要求
启动新的机器学习项目时,可能需要进行探索才能了解计算要求。 本部分提供有关如何确定正确的虚拟机 (VM) SKU 选择以用于训练、推理或作为工作站的建议。
确定训练的计算大小
训练工作负载的硬件要求可能因项目而异。 为满足这些要求,Azure 机器学习计算提供各种类型的 VM:
- 常规用途:均衡的 CPU/内存比。
- 内存优化:高内存/CPU 比。
- 计算优化:高 CPU/内存比。
- 高性能计算:旨在为各种实际 HPC 工作负载提供一流的性能、可伸缩性与成本效益。
- 具有 GPU 的实例:针对大量图形绘制和视频编辑、模型训练和推理 (ND) 以及深度学习的专用虚拟机。
你可能还不知道你的计算要求是什么。 在这种情况下,我们建议从以下任一具有成本效益的默认选项开始。 这些选项适用于轻量级测试和训练工作负载。
类型 | 虚拟机大小 | 规格 |
---|---|---|
CPU | Standard_DS3_v2 | 4 核,14 千兆字节 (GB) RAM,28 GB 存储 |
GPU | Standard_NC6 | 6 核、56 千兆字节 (GB) RAM、380 GB 存储、NVIDIA Tesla K80 GPU |
若要获得适合你的方案的最佳 VM 大小,可能需要反复试验。 需要考虑以下几个方面。
- 如果需要 CPU:
- 如果需要 GPU,请参阅 GPU 优化 VM 大小 ,了解有关选择 VM 的信息。
- 如果要进行分布式训练,请使用具有多个 GPU 的 VM 大小。
- 如果要在多个节点上执行分布式训练,请使用具有 NVLink 连接的 GPU。
在选择最适合你的工作负载的 VM 类型和 SKU 时,请评估类似的 VM SKU,以在 CPU 和 GPU 性能与定价之间取得平衡。 从成本管理的角度来看,作业可能在多个 SKU 上运行得相当好。
某些 GPU(例如 NC 系列,尤其是 NC_Promo SKU)具有与其他 GPU 类似的功能,例如低延迟和并行管理多个计算工作负载的功能。 与一些其他 GPU 相比,它们有折扣。 针对工作负载精心选择 VM SKU 最终可能会显著节省成本。
有关利用率重要性的提醒是注册更多 GPU 不一定以更快的结果执行。 相反,请确保充分利用 GPU。 例如,仔细检查是否需要 NVIDIA CUDA。 虽然高性能 GPU 执行可能需要它,但作业可能不会依赖它。
确定推理的计算大小
推理方案的计算要求与训练方案不同。 可用选项根据你的方案是需要批量离线推理还是需要实时在线推理而有所不同。
对于实时推理方案,请考虑以下建议:
- 通过 Azure 机器学习在你的模型上使用分析功能,以确定在将模型部署为 Web 服务时需要为模型分配多少 CPU 和内存。
- 如果要进行实时推理但不需要高可用性,请部署到 Azure 容器实例(无需选择 SKU)。
- 如果要进行实时推理但需要高可用性,请部署到 Azure Kubernetes 服务。
- 如果使用传统机器学习模型并且每秒接收小于 10 个查询,请从 CPU SKU 开始。 F 系列 SKU 通常运行良好。
- 如果使用深度学习模型并且每秒接收大于 10 个查询,请尝试使用 NVIDIA GPU SKU(NCasT4_v3 通常运行良好)与 Triton。
对于批量推理场景,请考虑以下建议:
- 当你使用 Azure 机器学习管道进行批量推理时,请按照确定训练的计算大小中的指导选择你的初始 VM 大小。
- 通过水平缩放优化成本和性能。 优化成本和性能的关键方法之一是借助 Azure 机器学习中的并行运行步骤并行执行工作负载。 此管道步骤允许你使用许多较小的节点并行执行任务,从而允许你水平缩放。 但是,并行执行会产生开销。 是否选择执行此并行运行步骤具体取决于工作负载和可实现的并行度。
确定计算实例的大小
对于交互式开发,推荐使用 Azure 机器学习的计算实例。 计算实例 (CI) 产品提供绑定到单个用户并可用作云工作站的单节点计算。
一些组织不允许在本地工作站上使用生产数据,对工作站环境实施限制,或者限制在公司 IT 环境中安装包和依赖项。 计算实例可以用作工作站来克服限制。 它提供具有生产数据访问权限的安全环境,并在预装了热门数据科学软件包和工具的映像上运行。
当计算实例运行时,用户需要为 VM 计算、标准负载均衡器(包括入站/出站规则和处理的数据)、OS 磁盘(高级 SSD 管理的 P10 磁盘)、临时磁盘(临时磁盘类型取决于选择的 VM 大小)和公共 IP 地址。 为了节省成本,建议用户考虑:
- 启动计算实例并在不使用时停止计算实例。
- 在计算实例上处理数据样本并横向扩展至计算群集以处理完整数据集
- 在开发或测试时以本地计算目标模式在计算实例上提交试验作业,或者在完全提交作业的情况下切换到共享计算容量时提交。 例如,许多时期、完整的数据集和超参数搜索。
如果停止计算实例,它将停止对 VM 计算小时数、临时磁盘和标准负载均衡器数据处理成本计费。 请注意,即使计算实例停止,用户仍需为 OS 磁盘和标准负载均衡器(包括入站/出站规则)付费。 保存在 OS 磁盘上的任何数据都会通过停止和重启进行保留。
通过监视计算利用率优化所选 VM 大小
你可以通过 Azure Monitor 查看有关 Azure 机器学习计算使用情况和利用率的信息。 可以查看模型部署和注册的详细信息、活动和空闲节点等配额详细信息、已取消和已完成运行等运行详细信息,以及 GPU 和 CPU 利用率的计算利用率。
根据监视详细信息中的见解,可以更好地在整个团队中计划或调整资源使用情况。 例如,如果注意到过去一周有许多空闲节点,可以与相应的工作区所有者合作更新计算群集配置,以防止产生额外成本。 分析利用率模式的好处有助于预测成本和改进预算。
可以直接从 Azure 门户访问这些指标。 转到 Azure 机器学习工作区,然后在左侧面板的监视部分下选择“指标”。 然后,可以选择要查看的详细信息,例如指标、聚合和时间段。 有关详细信息,请参阅监视 Azure 机器学习文档页。
开发时在本地、单节点和多节点云计算之间切换
在整个机器学习生命周期中存在不同的计算和工具要求。 Azure 机器学习可以通过 SDK 和 CLI 接口从几乎任何首选的工作站配置进行连接,以满足这些要求。
为了节省成本并提高工作效率,建议:
- 使用 Git 在本地克隆试验代码库,并使用 Azure 机器学习 SDK 或 CLI 将作业提交到云计算。
- 如果数据集很大,请考虑在本地工作站上管理数据样本,同时将完整数据集保存在云存储中。
- 参数化试验代码库,以便可以将作业配置为使用不同数量的时期或不同大小的数据集运行。
- 不要对数据集的文件夹路径进行硬编码。 然后,可以轻松地在不同的数据集以及本地和云执行上下文中重复使用同一代码库。
- 在开发或测试时以本地计算目标模式引导试验作业,或者在完全提交作业的情况下切换到共享计算群集容量时引导。
- 如果数据集很大,请在本地或计算实例工作站上处理数据示例,同时缩放到 Azure 机器学习中的云计算,以使用完整的数据集。
- 当作业需要很长时间来执行时,请考虑针对分布式训练优化代码库,以便横向扩展。
- 为节点弹性设计分布式训练工作负载,以允许灵活使用单节点和多节点计算,并简化可抢占式计算的使用。
使用 Azure 机器学习管道组合计算类型
编排机器学习工作流时,可以定义包含多个步骤的管道。 管道中的每个步骤都可以在其自己的计算类型中运行。 这样,你可以优化性能和成本,以满足整个机器学习生命周期的不同计算要求。
充分利用团队预算
虽然预算分配决策可能超出单个团队的控制范围,但团队通常有权使用分配的预算来满足其最佳需求。 通过合理权衡作业优先级与性能和成本,团队可以实现更高的群集利用率、降低总体成本,并在同一预算内使用更多的计算小时数。 这可提升团队工作效率。
优化共享计算资源的成本
优化共享计算资源成本的关键是确保它们被充分利用。 下面是优化共享资源成本的一些技巧:
- 使用计算实例时,仅在有代码要执行时才打开它们。 在不使用时将其关闭。
- 使用计算群集时,将最小节点计数设置为 0,将最大节点计数设置为根据预算约束计算的数量。 使用 Azure 定价计算器计算完全利用所选 VM SKU 的一个 VM 节点的成本。 当没有人使用它时,自动缩放将缩减所有计算节点。 它只会扩展到你有预算的节点数量。 可以配置自动缩放以缩减所有计算节点。
- 在训练模型时监视资源利用率,例如 CPU 利用率和 GPU 利用率。 如果资源没有得到充分利用,请修改代码以更好地利用资源或缩小到更小或更便宜的 VM 大小。
- 评估是否可以为团队创建共享计算资源,以避免群集缩放操作导致计算效率低下。
- 根据使用指标优化计算群集自动缩放超时策略。
- 使用工作区配额来控制各工作区有权访问的计算资源量。
通过为多个 VM SKU 创建群集来引入计划优先级
在配额和预算约束下,团队必须权衡作业的及时执行与成本,以确保重要作业及时运行,并尽可能以最佳方式使用预算。
为支持最佳计算利用率,建议团队创建各种大小、低优先级和专用 VM 优先级的群集。 低优先级计算利用 Azure 中的剩余容量,因此具有折扣。 缺点是,每当出现更高优先级的请求时,这些计算机都会被抢占。
使用不同大小和优先级的群集,可以引入计划优先级的概念。 例如,当试验和生产作业竞争相同的 NC GPU 配额时,生产作业可能会优先于试验作业。 在这种情况下,将在专用计算群集上运行生产作业,在低优先级计算群集上运行试验作业。 当配额不足时,试验作业将被抢占,以支持生产作业。
在 VM 优先级旁边,考虑在各种 VM SKU 上运行作业。 在具有 P40 GPU 的 VM 实例上执行作业的时间可能长于在 V100 GPU 上。 但是,由于 V100 VM 实例可能已被占用或配额已用完,因此从作业吞吐量的角度来看,P40 上的完成时间可能仍更快。 从成本管理的角度来看,还可以考虑在性能较低且成本更低的 VM 实例上运行优先级较低的作业。
在训练不收敛时提前终止运行
在持续试验以针对其基线改进模型时,可能会执行各种试验运行,每个试验运行的配置略有不同。 对于一次运行,可以调整输入数据集。 对于另一次运行,可能会进行超参数更改。 并非所有更改都与其他更改一样有效。 你提前检测到更改对模型训练的质量没有预期影响。 要检测训练是否收敛,请在运行期间监视训练进度。 例如,在每个训练时期之后记录性能指标。 请考虑提前终止该作业,以腾出资源和预算,进行另一次试验。
规划、管理和共享预算、成本和配额
随着组织增加其机器学习用例和团队的数量,它需要 IT 和财务部门提高运营成熟度,以及各个机器学习团队之间的协调,以确保高效运营。 公司规模容量和配额管理对于解决计算资源的不足和克服管理开销非常重要。
本部分讨论有关在企业规模下规划、管理和共享预算、成本和配额的最佳做法。 它基于在 Microsoft 内部管理许多用于机器学习的 GPU 培训资源的经验。
了解 Azure 机器学习的资源消耗
作为规划计算需求的管理员,最大的挑战之一是在没有历史信息作为基线估计的情况下重新开始。 从实际意义上讲,大多数项目都是从小预算开始的。
若要了解预算去向,必须了解 Azure 机器学习成本的来源:
- Azure 机器学习仅对使用的计算基础结构收费,不会增加计算成本附加费。
- 创建 Azure 机器学习工作区时,还会创建一些其他资源来启用 Azure 机器学习:月保管库、应用程序见解、Azure 存储和 Azure 容器注册表。 这些资源用于 Azure 机器学习,你需要为这些资源付费。
- 托管计算会产生相关成本,例如训练群集、计算实例和托管推理终结点。 使用这些托管计算资源,需要考虑以下基础结构成本:虚拟机、虚拟网络、负载均衡器、带宽和存储。
跟踪支出模式,并通过标记实现更好的报告
管理员管理员通常希望能够跟踪Azure 机器学习中不同资源的成本。 标记是解决此问题的自然解决方案,符合 Azure 和其他许多云服务提供商使用的一般方法。 借助标记支持,现在可以在计算级别查看成本明细,因此,你可以访问更精细的视图,以帮助更好地进行成本监视、改进的报告和更高的透明度。
使用标记可将自定义标记放置在工作区和计算(从 Azure 资源管理器 模板和Azure 机器学习工作室)上,以便根据这些标记进一步筛选 Microsoft 成本管理中的这些资源,以观察支出模式。 此功能最适合用于内部退款方案。 此外,标记可用于捕获与计算关联的元数据或详细信息,例如项目、团队或特定计费代码。 这使得标记非常有利于衡量你在不同资源上花费多少资金,从而深入了解团队或项目的成本和支出模式。
还有一些系统注入的标记放置在计算上,使你能够按“计算类型”标记在“成本分析”页中进行筛选,以查看总支出的计算明细,并确定计算资源类别可能归因于大部分成本。 这对于深入了解训练与推理成本模式尤其有用。
按策略治理和限制计算使用量
管理具有许多工作负载的 Azure 环境时,掌握整体资源消耗可能是一项挑战。 Azure Policy 通过限制整个 Azure 环境中的特定使用模式来帮助控制和治理资源消耗。
对于 Azure 机器学习,我们建议设置策略以仅允许使用特定的 VM SKU。 策略可帮助防止和控制选择昂贵的 VM。 还可通过实施策略来强制使用低优先级 VM SKU。
根据业务优先级分配和管理配额
使用 Azure,可以在订阅和 Azure 机器学习工作区级别上设置配额分配限制。 通过 Azure 基于角色的访问控制 (RBAC) 限制谁可以管理配额有助于确保资源利用率和成本可预测性。
GPU 配额在订阅中的可用性可能不足。 为确保跨工作负载的高配额利用率,我们建议监视配额是否最适合跨工作负载使用和分配。
在 Microsoft,通过根据业务优先级评估容量需求,定期确定 GPU 配额是否最适合机器学习团队使用和分配。
提前提交容量
如果对未来一年或未来几年将使用多少计算有很好的估计,可以以折扣价购买 Azure 虚拟机预留实例。 购买期限为一年或三年。 由于 Azure 虚拟机预留实例有折扣,因此与即用即付价格相比,可以节省大量成本。
Azure 机器学习支持预留的计算实例。 Azure 机器学习托管计算会自动应用折扣。
管理数据保留
每次执行机器学习管道时,都可以在每个管道步骤生成中间数据集,用于数据缓存和重用。 对于运行许多机器学习试验的组织来说,数据作为这些机器学习管道的输出增长可能会成为一个难点。
数据科学家通常不会花时间清理生成的中间数据集。 随着时间的推移,生成的数据量会增加。 Azure 存储具有增强数据生命周期管理的功能。 使用 Azure Blob 存储生命周期管理,可以设置常规策略,将未使用的数据移动到更冷的存储层并节省成本。
基础结构成本优化注意事项
网络
Azure 网络成本来自 Azure 数据中心的出站带宽。 发到 Azure 数据中心的所有入站数据都是免费的。 降低网络成本的关键是尽可能将所有资源部署到同一数据中心区域。 如果可以将 Azure 机器学习工作区和计算部署到拥有数据的同一区域,则可以享受更低的成本和更高的性能。
你可能需要在本地网络与 Azure 网络之间建立专用连接,以创建混合云环境。 使用 ExpressRoute 可以实现这一点,但考虑到 ExpressRoute 的高成本,从混合云设置迁移并将所有资源迁移到 Azure 云可能更具成本效益。
Azure 容器注册表
对于 Azure 容器注册表,成本优化的决定因素包括:
- 将 Docker 映像从容器注册表下载到 Azure 机器学习所需的吞吐量
- 企业安全功能的要求,例如 Azure 专用链接
对于需要高吞吐量或企业安全性的生产方案,建议使用 Azure 容器注册表的高级 SKU。
对于吞吐量和安全性不太重要的开发/测试方案,建议使用标准 SKU 或高级 SKU。
不建议将 Azure 容器注册表的基本 SKU 用于 Azure 机器学习。 不建议这样做的原因是,它的吞吐量较低,包含的存储也较低,Azure 机器学习的相对较大 (1+ GB) 的 Docker 映像可能很快超出。
选择 Azure 区域时,请考虑计算类型可用性
为计算选择区域时,请牢记计算配额的可用性。 与其他一些具有更严格容量限制的区域相比,美国东部、美国西部和西欧等受欢迎的较大区域往往具有更高的默认配额值以及大多数 CPU 和 GPU 的更高可用性。
了解详细信息
后续步骤
要详细了解如何组织和设置 Azure 机器学习环境,请参阅组织和设置 Azure 机器学习环境。
若要了解使用 Azure 机器学习的机器学习 DevOps 的最佳做法,请参阅机器学习 DevOps 指南。