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

使用 Azure Kubernetes 服务托管基于 GPU 的工作负载

Azure Kubernetes 服务 (AKS)

本文介绍如何在 Azure Kubernetes 服务 (AKS) 群集上高效运行使用 GPU 节点的工作负载。 了解如何选择正确的 SKU、使用 GPU 节点来训练机器学习模型,以及如何使用 GPU 节点在 AKS 上运行推理。

方案

GPU 工作负载运行成本可能很高。 若要避免不必要的成本,需要知道何时在 AKS 群集中部署基于 GPU 的节点。

GPU 专为图形、AI 和机器学习以及专用任务而构建,因此非常适合计算密集型工作负载。 CPU 可有效管理复杂的逻辑和分支。 GPU 针对吞吐量进行了优化。 可以有效地处理简单的算术和向量运算。

若要确定何时使用 GPU 处理 AKS 工作负载,必须了解 GPU 优化和计算强度,但还应考虑其他因素。 若要更好地了解 AKS 工作负载的 GPU 使用情况,请考虑以下从 AKS 群集中的 GPU 节点受益的工作负载示例。

数据科学和分析

可以使用 GPU 加快数据科学工作流中的数据预处理、特征工程和模型训练。 为了有效地使用 GPU,RAPIDSDask GPU 等框架扩展了常用的数据处理库,例如 pandas 和 scikit-learn。

开源软件 (OSS) 加速的 SQL 查询引擎和列式数据库(如 BlazingSQLHeavyDB)使用 GPU 快速对大型数据集执行查询和分析。

机器学习和深度学习

常用的机器学习和深度学习框架(如 TensorFlowPyTorch)受益于 GPU,因为它们可以加快训练和推理任务。

深度学习模型具有复杂的神经网络。 GPU 上的并行处理可加快模型的计算速度。 GPU 提供高效矩阵乘法和卷积,它们是深度学习中的核心运算。

还可以使用 GPU 加快图像分类、对象检测、自然语言处理和语音识别等任务。

计算机视觉和图像处理

计算机视觉任务解释视觉对象数据以提取有意义的信息。 这些任务在 AI 技术支持的应用程序、自动驾驶汽车、医学成像、监控系统和增强现实领域越来越常见。 GPU 使用并行处理,因此它们可以有效地处理大型图像数据和复杂计算,以便执行对象检测、图像分类和特征提取等任务。

视频处理和流式处理

视频业务越来越普遍,因此组织需要 GPU 支持的硬件,而不是 CPU。 视频处理工作负载(包括转码、编码和流式处理)是计算密集型任务,尤其是在具有高清内容或 4K 内容的情况下。 GPU 提供一个高效的平台,可跨各种应用程序提供高性能、低延迟的视频体验(如流式处理体育赛事或公司视频)。

启用 GPU 的代理节点通过将图形密集型任务卸载到 GPU,在虚拟桌面环境中提供丰富的客户体验。 GPU 加速的视频编码和解码功能有助于改进实时视频流式处理、视频转码和视频分析。

可以使用 OpenCVOpenCLNVIDIA CUDANVIDIA cuDNN 等框架加速计算机视觉任务,如对象检测、对象跟踪和图像或视频处理。

游戏平台和云游戏服务依赖于 GPU 来提供高质量的图形和流畅的游戏体验。

高性能计算

高性能计算 (HPC) 应用程序通常需要复杂的模拟、数值分析和科学计算。 若要快速运行这些任务,可以使用 GPU 跨多核处理器并行处理工作负载。 需要大规模并行处理能力的 HPC 应用程序示例包括科学模拟、天气预报、计算流体动力学和分子建模。 GPU 非常适合并行计算,并可显著加速 HPC 工作负载。 以科研为导向的工作受益于 GPU。

为了加速 HPC 应用程序,NVIDIA CUDAOpenCLOpenACC 等框架提供启用 GPU 的 API 和库。

基因组分析和生物信息学

健康和生命科学工作负载(如基因组分析和生物信息学应用程序)越来越常见。 这些工作负载涉及处理基因数据,如 DNA 序列和蛋白质结构,需要复杂的算法进行序列对齐、变体识别和基因组数据挖掘。 GPU 可加快基因组分析工作流,使研究人员能够更快地处理数据和获得见解。

在 AKS 群集中部署 GPU 节点之前,请考虑成本影响。 了解计算密集型任务的 GPU 优化,例如计算机视觉、视频处理、HPC 和基因组分析任务。 比较 AKS 群集中的 GPU 资源与 CPU 资源时,请考虑这些因素。

生成式 AI 模型

OpenAI GPTMeta LlamaFalconMistral 等大型语言模型 (LLMs) 可以利用 GPU 并行处理功能。 将 GPU 与这些模型结合使用来提高性能。

GPU 可以加快训练和推理任务的速度,这些任务涉及复杂的计算和大量数据。 GPU 具有并行处理功能,可将给定模型的大型计算任务划分为同时运行的较小子任务。 此过程不仅提供快速的结果,还提高性能。

语言模型通常具有包含多个层和参数的复杂神经网络,这可能会增加计算需求。 GPU 可加快语言处理中的关键运算,例如矩阵乘法和卷积,从而缩短训练和推理时间。

GPU 提供足够的内存容量、带宽和处理能力来处理基于 LLM 的应用程序,这些应用程序具有聊天界面和文本生成功能。 例如,GPU 增强功能为与聊天机器人和 AI 助手交互的用户提供快速响应时间。

并非所有工作负载都受益于启用 GPU 的代理节点,在某些情况下,CPU 足以满足需要。 例如,主要采用输入和输出绑定或不需要大量计算的工作负载可能无法使用 GPU 进行改进。

客户案例

许多 Microsoft 客户利用 GPU 工作负载为客户实现创新。 请开考虑以下示例:

GPU 工作负载部署最佳做法

AKS 提供各种方案来部署启用 GPU 的 Linux 和 Windows 节点池和工作负载。 若要确保 GPU 工作负载顺利运行,请遵循这些最佳做法。

Linux 工作负载部署

Windows 工作负载部署

  • 使用启用 GPU 的受支持 VM 创建节点池,以部署启用 GPU 的 Windows 节点池。 AKS 会自动安装驱动程序和必要的 NVIDIA 组件。 此方法不支持更新现有节点池以添加 GPU。

    选择启用 GPU 的受支持 VM 时,AKS 会自动安装相应的 NVIDIA CUDA 或 GRID 驱动程序。 某些工作负载依赖于特定的驱动程序,这可能会影响部署。 对于 NC 系列和 ND 系列 VM 大小,AKS 会安装 CUDA 驱动程序。 对于 NV 系列 VM 大小,AKS 会安装 GRID 驱动程序。

  • 查看 Azure 中启用 GPU 的受支持 VM。 我们建议您使用最小大小为 Standard_NC6s_v3 的 AKS 节点池。 AKS 不支持 NVv4 系列(基于 AMD GPU)。

  • 了解使用 Windows 节点池时的限制。 Kubernetes 版本 1.28 及更低版本不支持 Windows GPU。

  • 请使用 Kubernetes 节点选择器节点相关性排斥和容忍在启用 GPU 的节点池上计划工作负载。

注意

Windows GPU 是一项预览功能。 需要注册 WindowsGPUPreview 功能标志

NVIDIA GPU Operator

NVIDIA GPU Operator 是一种工具,可用于在 Kubernetes 群集中有效地部署和管理 GPU 资源。 可以使用该 Operator 自动安装、配置和维护软件组件。 此方法可确保以最佳方式使用 NVIDIA GPU 完成要求苛刻的工作负载(如 AI 和机器学习工作负载)。

NVIDIA GPU Operator 会自动管理部署 GPU 所需的所有 NVIDIA 软件组件,例如用于 Kubernetes 的 NVIDIA 设备插件和 NVIDIA 容器运行时。 该 Operator 会自动安装驱动程序。 有关更多信息,请参阅 NVIDIA 概述

如果想要提高对高级 GPU 工作负载的控制和灵活性,可以将 NVIDIA GPU Operator 与 AKS 上启用 GPU 的节点结合使用。 NVIDIA GPU Operator 不支持 Windows GPU。

请考虑采用以下最佳做法:

  • 使用 NVIDIA GPU Operator 执行高级 GPU 配置,例如驱动程序版本选择和时间切分。

  • 在使用 GPU Operator 之前,请跳过自动驱动程序安装。

  • 将 GPU Operator 与群集自动缩放程序结合使用时,将最小计数设置为 1。

注意

Microsoft 不支持,也不会在使用 GPU Operator 时管理 NVIDIA 驱动程序的维护和兼容性。

针对 LLM 的 GPU 工作负载部署

Kubernetes AI 工具链操作器 (KAITO) 是一个 Kubernetes 操作器,可简化在 Kubernetes 群集上运行开源 LLM(如 FalconLlama2)的方式。 可以在 AKS 群集上将 KAITO 部署为 AKS 的托管加载项。 KAITO 使用 Karpenter 根据所选模型的工作区自定义资源定义中的规范自动预配和部署 GPU 节点。 KAITO 将推理服务器创建为 LLM 的终结点,并减少总载入时间,以便可以执行机器学习运营,而不是基础结构设置和维护。

为了改进机器学习运营,KAITO 提供以下功能:

  • 容器映像管理:使用容器映像管理 LLM。 KAITO 提供 HTTP 服务器,以便可以使用受支持的模型库来执行推理调用。

  • GPU 硬件配置:KAITO 提供根据模型要求自动应用的预设配置。 无需手动优化部署参数即可适应 GPU 硬件。

  • 自动 GPU 节点预配:KAITO 根据模型要求自动预配 GPU 节点,并建议采用低成本的 GPU VM 大小来配置分布式推理。

  • 与 Microsoft 工件注册表集成:如果 LLM 许可证允许,KAITO 可以在公共工件注册表中托管模型映像。 此方法可简化对受支持模型的访问和部署。 对于具有 KAITO 存储库不支持的 MIT 或 Apache2 许可证的开源模型,可以提交新模型载入请求

有关 KAITO 的更多信息,请参阅以下资源:

工作负载和群集缩放

对于 AI 和机器学习方案,必须区分训练工作负载和使用预先训练的模型进行推理。 若要生成和训练机器学习模型,请考虑使用专为深度学习和并行处理 AI 计算设计的 GPU 计算。 训练通常需要逐步缩放和跨 GPU 分发大量数据,以实现高准确度的数据并行。

模型分片是一种常见的高级技术,可用于划分模型训练的阶段。 可以将 GPU 分配给不同的任务并最大限度提高其利用率。 GPU 可以纵向扩展和横向扩展 HPC 工作负载,例如 Azure 上的 NV 系列或 ND 系列 VM。 此功能有助于保持较高的资源使用率,并减少用户对冗长且成本高昂的机器学习训练过程的干预。

或者,可以仅使用预先训练的开源 AI 和机器学习模型进行推理。 与从头开始构建和训练 LLM 相比,从 Llama、Falcon 或 Mistral 等常用模型入门,不失为更快、更具成本效益的选择。 有关更多信息,请参阅 AKS 上的语言模型

使用预先训练的模型进行推理时,可能会遇到动态和波动的资源使用情况,具体取决于您处理的数据量。 通过所选模型运行实时数据时,有时会根据模型大小和要求发生流量高峰。 在整个推理过程中,必须保持可接受的低延迟。 若要有效地使用 GPU 实现高性能和低延迟,可以使用 KAITO 支持的模型进行分布式推理。 此方法扩大了计算选择范围,包括每个计算有一个或两个 GPU 的较低 GPU 计数 SKU,跨 Azure 区域提供高可用性,并降低维护成本。

GPU 工作负载成本管理

GPU 会增加成本。 正确监控工作负载,以帮助了解哪些操作会提高 GPU 成本,并确定优化机会。 若要提高成本可见性,可以使用 AKS 成本分析加载项。

以下方案受益于成本可见性。

启用 GPU 的 VM 大小成本

选择正确的启用 GPU 的 VM 大小以优化运行 GPU 的成本。 每日成本可能因所选 VM 大小而异。 A100 GPU 成本高昂。 除非工作负载有具体要求,否则应避免使用它们。 AKS 成本分析显示每个 VM 的每日成本,并细分在启用 GPU 的 VM 上运行的每个工作负载的相关成本。 使用此数据评估 VM 大小是否正确,或者是否需要更具成本效益的方案。

空闲成本

创建启用 GPU 的节点池后,即使未运行 GPU 工作负载,Azure 资源也会产生成本。 空闲成本表示工作负载未使用的可用资源容量的成本。 如果有多个未使用的节点,此成本会迅速增加。 若要避免高空闲成本,仅在运行工作负载时创建节点池,并在不运行工作负载时使用群集停止功能等方法。 AKS 成本分析显示每个节点的空闲成本。

超量预配和未充分使用

超量预配是指为 Pod 分配的资源超过所需的资源。 超量预配会导致资源浪费和未充分使用。 即使不使用资源,仍保留节点的剩余资源。 若要减少超量预配,请使用垂直 Pod 自动缩放程序根据以前的使用模式设置准确的请求和限制。

当工作负载未充分使用 GPU 时,可能会发生未充分使用。 请考虑使用高级 GPU 共享和分区技术。 可以使用具有分区的单个节点来最大限度提高 GPU 使用率,而不是使用多个节点。 这些技术可帮助您为每个工作负载分配适当的 GPU 加速量,从而增强使用情况并降低部署的运营成本。

AKS 上的 Linux GPU 工作负载部署支持多实例 GPU。 使用此功能可将 NVIDIA A100 GPU 分区为最多七个独立的实例。 每个实例都有自己的内存和流多处理器。

NVIDIA 支持其他分区技术,例如时间切分和多进程服务实现。 若要手动应用这些配置,请使用 NVIDIA GPU Operator。

对于高级方案,可以改进节点上的资源装箱。 可以设置计划程序配置,并运行第二个计划程序。 配置和维护辅助计划程序以使用与默认 AKS 计划程序不同的工作负载放置策略。 有关详细信息,请参阅在 Kubernetes 上配置多个计划程序

作者

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

主要作者:

其他参与者:

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

后续步骤