你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 基础结构上 AI 的精心构建的注意事项涉及优化 AI 解决方案的可靠性、安全性、运营效率、成本管理和性能的最佳做法。 这些原则确保 Azure IaaS 平台上的可靠部署、安全数据处理、高效的模型操作和可缩放的基础结构。 应用这些原则可让组织构建满足业务需求的弹性、安全且经济高效的 AI 模型。
可靠性
可靠性涉及最大限度地减少停机时间,并确保 Azure 基础结构上的 AI 应用程序的性能一致。 确保在基础结构更改期间跨分布式虚拟机(VM)进行可靠的操作并维护性能,从而防止服务中断。 这些做法非常重要,因为它们保证持续模型可用性并提高用户体验。
在可用性区域之间分配虚拟机。 使用可用性区域最大程度地减少硬件故障或维护事件的停机时间。 它们跨容错域和更新域分配 VM,以确保持续执行应用程序操作。
使用 Azure Monitor 配置健康监控。 使用 Azure Monitor 跟踪 VM 上的 CPU、内存和网络性能,并配置警报,以通知支持模型的基础结构的性能下降或故障。 有关详细信息,请参阅 Azure Monitor VM Insights。
使用滚动实例自动修补和更新。 使用 Azure 更新管理以滚动方式应用修补程序,允许更新一个实例,而另一个实例则继续为流量提供服务,从而防止维护期间停机。
设计部分故障期间的常规降级。 确保核心功能仍然可用,方法是提供不太复杂的 AI 模型,或者在某些 VM 不可用时限制特定功能,使用户即使在中断期间也能访问基本服务。
为关键资产实现常规备份。 定期备份模型数据、训练数据集和配置,以便在发生故障时实现快速还原,从而保护有价值的进度和数据。
安全性
安全性涵盖保护 AI 模型、数据和基础结构免受未经授权的访问和威胁的保护措施。 实现更新、监视模型完整性和控制访问,以防止可能损害敏感信息的漏洞。 这些步骤对于在生产环境中维护 AI 解决方案的数据隐私和可信度至关重要。
计划 Azure 资源的更新。 使用维护配置为 VM 和扩展设置特定的更新计划,从而减少漏洞窗口。
定期修补虚拟机和容器映像。 为 VM 和规模集启用自动来宾修补,以针对新威胁维护安全性。 有关详细信息,请参阅 来宾更新和主机维护概述。
监视模型偏移并确保完整性。 通过为模型文件实施数字签名或哈希验证等安全机制,防止未经授权的修改,确保模型完整性。 使用 Azure Monitor 跟踪关键性能指标并识别模型偏移,这可能指示潜在的安全漏洞或数据转移。 可以使用 Azure Monitor 指标 SDK 在代码中定义自定义指标(模型上的准确性、F1 评分和数据分布)。 Azure Monitor 指标 SDK 允许将模型的性能统计信息和数据偏移度量发送到 Azure Monitor。 监视一段时间内的性能更改有助于检测模型的行为何时偏离、可能表示攻击或需要重新训练。 这种主动方法有助于保护模型完整性和维护安全合规性。
实现审核和访问日志。 使用 Azure Monitor 和 Log Analytics 记录对模型和 VM 的访问,帮助识别未经授权的访问或异常使用模式。 有关详细信息,请参阅 Azure Monitor 中的活动日志。
对模型文件使用版本控制。 将模型文件使用版本控制存储在Azure存储(Blob、文件或磁盘)中,用于跟踪变更,确保明确的审计线索,用于识别和回滚有害修改。 使用 Azure DevOps 进行版本控制可以增强安全性,方法是管理对代码更改的访问,并在代码评审中强制实施最佳做法。 这种分层方法可降低未经授权的更改风险,并提供责任。 有关详细信息,请参阅 Azure 存储 中的 Blob 版本控制。
为模型输出设置异常情况检测。 使用 Azure Monitor 跟踪模型的输出指标,并为异常行为设置警报。 例如,监视来自模型的 API 响应可以帮助检测异常输出。 可以对指标(例如预测准确性)设置异常情况检测,以在超出预期范围时自动检测。 有关详细信息,请参阅 使用动态阈值创建和管理指标警报。
强制实施模型访问策略。 使用 Azure 基于角色的访问控制(RBAC) 和Microsoft Entra ID 来保护对 VM 和模型文件的访问权限,仅限制对已授权用户的访问。
定期针对更新的数据重新验证模型。 在 VM 上使用自动化脚本或工作流实现模型的定期重新验证可确保模型对当前数据集保持准确且有效,从而缓解过时或不准确预测的风险。 通过通过Azure 自动化或Azure 逻辑应用计划这些任务,可以保持数据标准的符合性,并提高整体模型安全性。 这种主动方法有助于尽早识别漏洞,确保持续改进并防范潜在威胁。 可以计划自动化工作流定期触发重新验证任务。 从 Azure 自动化 Runbook 开始,在虚拟机中运行,创建适当的计划以获取验证结果。
跟踪数据世系和模型文件更改。 在Azure Blob 存储中启用版本控制并跟踪训练和推理中使用的数据,确保不会未经授权的数据影响模型结果。
应用资源配额和速率限制。 通过 Azure API 管理为模型 API 实施速率限制和配额,以防止过度使用或滥用,这可能导致系统漏洞或服务中断。 此策略可确保系统在高流量期间保持响应,并缓解与拒绝服务攻击相关的风险。 通过控制访问,可以保持性能并保护敏感数据免受潜在利用API 管理配额和限制。
定期执行漏洞扫描。 使用 Microsoft Defender 漏洞扫描对 VM 和相关资源进行漏洞评估。 定期检查 VM 设置中可能公开模型的任何安全问题或配置错误。 Microsoft Defender 漏洞扫描。
成本优化
成本优化涉及将资源使用情况与工作负荷要求保持一致,以避免不必要的费用。 适当调整 VM 的大小、提交预留实例和设置自动缩放有助于管理成本,而不会影响性能。 控制 Azure 基础结构上的成本对于 AI 部署的长期可持续性和可伸缩性至关重要。
提交到预留实例。 通过承诺一年或三年期限来节省虚拟机(VM)成本,该期限提供折扣费率。
使用 Azure 虚拟机规模集进行自动缩放。根据 CPU 使用率等指标自动缩放 VM 实例,只需为所需内容付费并防止过度预配。
为闲置实例设置自动关闭。 通过启用自动关闭(尤其是针对开发和测试环境)来避免未使用资源的成本。
使用 Azure 节省计划 进行可预测的使用。 与即用即付定价相比,承诺在不同 VM 大小和区域中保持一致使用可以降低成本。
使用 Azure Spot 实例 来处理容错的工作负载。 为可以容忍中断的工作负载获取巨幅的闲置备用容量折扣。
选择正确的存储解决方案。 根据工作负荷需求平衡成本和性能。 选择 Azure Managed Lustre (AMLFS) 以实现高吞吐量和大规模应用程序,选择 Azure NetApp Files (ANF) 以实现高级数据管理和可靠性。
卓越运营
卓越运营涉及优化 Azure 资源的配置和管理,以提高 AI 应用程序的功能。 高效的资源分配、性能优化和分布式训练支持流畅的操作和适应不同的需求。 这侧重于运营效率,可确保 AI 模型按预期执行,而不会过度使用资源。
优化资源分配。 根据实际资源使用情况定期查看 Azure VM 大小和配置,以满足工作负荷需求。 使用 Azure 顾问来获取有关最佳配置和弹性扩展的建议。
配置自动缩放以提高效率。 为 VM 或容器设置自动缩放以处理工作负载需求,而无需过度预配。 使用 Azure 虚拟机规模集根据需求动态调整资源。 有关详细信息,请参阅 Azure 虚拟机规模集。
定期执行性能优化。 持续分析应用程序,以识别和解决性能瓶颈。 使用 Application Insights Profiler 分析模型代码和资源使用情况。
实现分布式训练以提高效率。 使用分布式训练技术(如果适用)减少使用多个 VM 的训练时间。 Horovod 和 PyTorch 等框架支持 Azure 上的分布式训练。
在Azure Blob 存储中保存检查点。 定期将模型状态、权重和配置保存到Azure Blob 存储。 可以使用用于 LLM 的编程语言提供的 Azure SDK 或库。 以结构化格式存储检查点,如 TensorFlow SavedModel 或 PyTorch 检查点文件。 修改训练或推理代码以包含检查点逻辑。 首先设置间隔(在每轮训练或若干次迭代后),以保存模型的状态。 对检查点文件使用一致的命名约定轻松跟踪最新状态。
设计状态恢复。 确保应用程序可以从保存的检查点恢复。 实现逻辑,以在应用程序启动时从Azure Blob 存储加载模型的状态。 它包括检查现有检查点,以及加载最新的检查点(如果可用),从而允许应用程序恢复而不丢失进度。
性能效率
性能效率是指最大程度地提高 Azure 基础结构的处理能力以满足 AI 模型需求。 应优化 GPU 设置、优化输入/输出(I/O)进程,并运行基准测试以提高计算速度和响应能力。 确保高性能支持大规模执行复杂的 AI 模型,从而提高用户满意度并减少延迟。
GPU 优化
提高图形处理单元(GPU)的时钟速率以提高性能,尤其是对于需要高图形处理或复杂计算的任务。 更高的时钟速度允许 GPU 在给定的时间段内执行更多操作,从而提高整体效率。 使用此 GPU 优化脚本 将 GPU 时钟频率设置为其最大值。
- 启用加速网络。 加速网络是一种硬件加速技术,允许虚拟机在受支持的虚拟机类型上使用单根 I/O 虚拟化(SR-IOV)。 它提供较低的延迟、减少的抖动和减少的 CPU 利用率。 启用加速网络在前端网络性能方面提供了大量增强功能。
I/O 优化
优化暂存存储。 Scratch需要具有高吞吐量和低延迟。 训练作业需要读取数据、处理数据,并在作业运行时将此存储位置用作暂存空间。 理想情况下,可以直接在每个 VM 上使用本地 SSD。 如果需要一个用于暂存的共享文件系统,则合并所有 NVMe SSD 以创建并行文件系统 (PFS) 可能会是性价比较高的选择,前提是该系统具有足够容量。 一个方法是使用 Azure Managed Lustre。 如果 Azure Managed Lustre 不适合,可以浏览 Azure NetApp 文件或 Azure Native Qumulo 等存储选项。
实现检查点存储。 大型深度学习训练作业可以运行数周,具体取决于使用的 VM 数量。 与任何高性能计算集群一样,您可能会遇到故障,例如 InfiniBand 问题、双列直插式内存模块(DIMM)故障、GPU 内存中的错误检测校正码(ECC)错误。 制定检查点策略至关重要。 了解检查点间隔(保存数据的时间)。 了解每次传输的数据量。 具有满足容量和性能要求的存储解决方案。 如果符合性能需求,请使用 Blob 存储。
基准测试
基准测试有助于评估和改进 GPU 上的分布式深度学习训练性能,尤其是针对大规模模型。 这些测试衡量跨节点的 GPU 通信效率,目的是在分布式训练期间减少数据传输瓶颈。 讨论的三个测试包括:
- Megatron 框架:通过提高分布式训练效率支持大规模语言模型。
- NVIDIA 集体通信库(NCCL)和 ROCm 通信集体库(RCCL)测试:使用 NCCL 或 RCCL 库评估多 GPU 通信的性能和准确性,测试模式(如全化简和散点)。
这些测试可确保 LLM 的可伸缩性和最佳性能,Megatron 专注于模型训练,而 NCCL/RCCL 则专注于 GPU 通信。
NVIDIA Megatron-LM 测试
NVIDIA Megatron-LM 是用于训练大型语言模型的开源框架。 它允许开发人员为 NLP 任务创建庞大的神经网络,其功能包括:
- 并行度:支持十亿参数模型的模型、数据和管道并行度。
- 可伸缩性:跨多个 GPU 和节点进行缩放,以便进行高效的大型模型训练。
- 灵活性:允许配置模型体系结构、数据加载和训练策略。
- 优化:使用 NVIDIA GPU 优化提高性能。
Megatron-LM 部署在 Azure HPC 基础结构上,它使用 Azure 的可伸缩性进行大型语言模型,而无需本地硬件。
Megatron-LM 测试环境的搭建
部署 Megatron-LM 需要特定的软件和硬件。
选择正确的部署选项。 使用适用于 Slurm 的 CycleCloud 工作区简化部署。 为 GPU 分区选择 NC 系列或 ND 系列 SKU。 对于多节点训练,建议使用 ND 系列 SKU 来支持 RDMA。 Azure 的 HPC 市场映像通常包括这些驱动程序和库。 如果需要自定义,azhpc-images 存储库可以确保兼容性。
使用正确的图像。 项目的软件要求包括基于 Linux 的操作系统,通常是 Ubuntu。 对于多 GPU 和多节点通信,必须具有 NCCL 和 MPI 等通信库。 此外,必须安装适当的 NVIDIA 驱动程序以确保 GPU 加速。 Azure 的 HPC 市场映像预安装了这些驱动程序和库。 但是,如果需要自定义, 可以使用 azhpc-images 存储库来确保兼容性。
Megatron-LM 测试使用
应使用最新版本的 NGC PyTorch 容器运行 Megatron-LM。 若要针对基于 Slurm 的传统 HPC 群集运行容器,需要在群集中安装和配置这些其他组件:
- enroot:一种工具,允许用户在 HPC 群集上运行容器化应用程序,而无需根特权或修改主机系统。
- pyxis:这是一个用于 Slurm 的插件,可以与 Slurm 无缝集成,使用户能够将容器化作业提交到 Slurm 队列,并在 HPC 节点上运行这些作业。
这两个组件都包含在用于 Slurm 的 CycleCloud 工作区中,但目前不包括在通过 CycleCloud 生成的 Slurm 群集中。 可以通过 CycleCloud 项目的 cluster-init 引入这些额外组件。 满足这些要求后,可以通过以下方法使用 Megatron-LM 进行 LLM 培训:
- 验证集群性能:使用节点运行状况检查在运行您的工作负荷之前识别任何潜在的硬件问题。 使用 NCCL 测试来验证群集的分布式全面降低性能。
- 选择训练数据:使用 codeParrot 模型作为起点来验证工作流。
- 预处理数据:使用 Megatron-LM 存储库中的preprocess_data.py 脚本将数据转换为与 Megatron-LM 兼容的格式。
- 使用 Megatron-LM 进行训练:使用 Megatron-LM 中的示例 作为参考来配置 Megatron 进行训练。
此设置可确保在 Azure 基础结构上高效部署和训练大型语言模型。
NCCL 带宽测试
若要验证和优化节点之间的 GPU 通信,请运行 NCCL 带宽测试。 NCCL 带宽测试是 NCCL 中的专用工具,它是一个库,可促进 GPU 之间的高速通信。 NCCL 支持跨单 GPU 节点或多 GPU 节点的集体操作,包括全归约 (all-reduce)、全收集 (all-gather)、归约 (reduce)、广播 (broadcast) 和分散归约 (reduce-scatter),并在配备了 PCIe、NVLink、NVswitch 或诸如 InfiniBand 或 TCP/IP 等网络设置的平台上性能最优。 有关详细信息,请参阅 NVIDIA/NCCL 测试。
NCCL 性能指标
使用 NCCL 带宽测试来评估关键指标,包括时间和带宽。 “时间”(以毫秒为单位)测量操作的开销或延迟,使其可用于评估数据大小较小的操作。 “带宽”(以 GB/秒为单位)评估点到点操作效率,例如发送/接收。 “总线带宽”通过考虑 NVLink 或 PCI 等组件中的 GPU 间通信速度和瓶颈来反映硬件使用效率。 提供了各种集体操作的计算,例如 AllReduce、ReduceScatter、AllGather、Broadcast 和 Reduce。
NCCL 测试启动
若要在 CycleCloud 部署中启动这些测试,请通过 SSH 连接到计划程序节点,并访问配备 GPU 的计算节点。 克隆用于 NCCL 测试的 Git 存储库,导航到 nccl-tests
目录,并创建一个主机文件,其中列出了要测试的节点。 从 CycleCloud 的 Web 应用获取计划程序节点的 IP 地址。
NCCL 测试参数
在运行测试之前,请指定不同的参数,例如每个线程的 GPU 数量 (-g
)、数据大小范围 (-b
表示最小字节数和 -e
表示最大字节数)、步长增量 (-i
或 -f
)、归约操作类型 (-o
)、数据类型 (-d
)、根设备 (-r
)、迭代次数 (-n
)、预热计数 (-w
) 和 CUDA 图设置 (-G
)。 有关可调整参数的完整列表,请参阅 NCCL 测试文档。
RCCL 测试
ROCm 通信集体库(RCCL)是一个专用库,旨在实现 AMD GPU 之间的高效通信。 它提供集体操作,例如 all-reduce、all-gather、broadcast 和 reduce,支持节点内和节点间 GPU 通信。 RCCL 针对使用 PCIe 和网络技术(如 InfiniBand)的平台进行优化,可确保在多 GPU 环境中进行可缩放的数据传输。 它支持集成到单进程工作流和多进程工作流中,例如使用 MPI 的工作流。 有关详细信息,请参阅 ROCm 通信集体库
- 设置环境。 安装 ROCm 并确保在所有节点上正确安装 RCCL。
- 生成 RCCL 测试。 克隆存储库,导航到 rccl-tests 目录,并编译测试。
- 运行带宽测试。 使用提供的测试可执行文件 (rccl-tests),指定通信操作(如 all-reduce)。
- 分析性能。 比较节点和 GPU 之间的带宽和延迟结果。