了解 GPU 和最大化 GPU 利用率的指南

在计算受限的时代,了解如何通过了解架构、瓶颈和修复(从简单的 PyTorch 命令到自定义内核)来优化 GPU 效率。《了解 GPU 和最大化 GPU 利用率指南》一文首先出现在《走向数据科学》上。

来源:走向数据科学

简介

需要大规模模型和数据,将计算硬件推向极限。无论您是在复杂图像上训练模型、处理长上下文文档,还是运行高吞吐量强化学习环境,最大限度地提高 GPU 效率都至关重要。对具有数十亿参数和 TB 数据的模型进行训练或运行推理并不罕见。未经优化的设置可能会将快速实验变成数小时或数天的等待。

当训练或推理缓慢时,我们的本能通常是将其归咎于模型大小或数学复杂性。现代 GPU 是快速计算器,但它们依赖于 CPU 来分配工作以及 GPU 上的设备上数据存储位置。通常,GPU 上的计算不是瓶颈。如果您的 CPU 难以通过 PCIe 桥加载、预处理和传输批次,那么您的 GPU 就会闲置,缺乏数据。

好消息?您不需要编写自定义 CUDA 内核或调试低级 GPU 代码来修复它。如果您是 ML 研究人员、工程师或对优化 GPU 管道感兴趣的爱好者,那么这个博客适合您!在这篇文章中,我们将探讨这一瓶颈的机制,并逐步制定可行的工程决策,以最大限度地提高 GPU 利用率。我们将涵盖从基本的 PyTorch 管道调整到更高级的硬件优化和 Hugging Face 集成的所有内容。

💡注意

我们将假设您具备 Python 和 PyTorch DataLoaders 的基本工作知识。无需深入了解 GPU 架构,因为我们将提供 GPU 及其工作原理的高级概述。除非明确说明,否则讨论的所有技术都将适用于训练和推理。

GPU 概述

什么是 GPU?它与 CPU 有什么不同?

如果您使用 NVIDIA GPU,GPU 中还有另一个称为 Tensor Core 的组件,它可以加速机器学习中使用的混合精度矩阵数学。当我们讨论混合精度时,它们会再次出现。