前不久在人工智能的帮助下,两位科学家获得了诺贝尔物理学奖。可以说人工智能已经在很多领域被广泛应用了。随着大语言模型(LLM)和深度学习的广泛应用,GPU 也已成为机器学习工程师和研究人员最重要的计算资源之一。从训练神经网络到推理应用,GPU 能够以极高的效率处理大规模并行计算任务。然而,GPU 计算资源都是实打实的成本,不论是自建服务,还是购买 GPU 云服务。所以,如何最大化 GPU 的利用效率,以及如何提高 GPU 服务的投入产出比,成为了一个亟待解决的问题。
本文将介绍一些提高 GPU 利用效率的方法,在文末还将提供降低 GPU 使用成本的方法。
GPU 使用率(Utilization Rate)是指 GPU 在特定时间内被占用进行计算的比例。它是衡量 GPU 是否“忙碌”的一个直接指标。如果 GPU 使用率较低,意味着 GPU 没有充分工作,存在计算资源的浪费。
你可以使用 NVIDIA SMI 、PyTorch 和 TensorFlow 的内置监控工具来实时监控 GPU 使用情况。例如,nvidia-smi 是最常用的命令行工具,它可以显示每个 GPU 的实时利用率、显存使用情况和温度等信息。
虽然 GPU 使用率是一个重要的衡量指标,但高使用率并不等同于高效利用。即便使用率很高,如果存在内存传输瓶颈或数据加载不及时,GPU 的计算性能也可能被限制。
让我们来看一个实际的场景。在典型的一天里,数据科学家可能拥有两块 GPU 供他/她使用,这些资源“应该”足够应对大部分任务。在模型构建的初期阶段,GPU 的短期交互工作良好,工作流程十分顺畅。然而,一旦进入训练阶段,工作流程可能会突然需要额外的 GPU 计算资源,而这些资源并不容易获得。
这表明要完成重要任务时,需要更多的计算资源。特别是在 RAM 已经被完全分配完的情况下,以下任务将无法完成:
•运行更多实验
•利用多 GPU 进行训练,以加快训练速度,尝试更大的批处理大小,并获得更高的模型精度
•专注于新模型的开发,同时让其他模型独立训练
通常情况下,增加 GPU 计算资源会显著提高硬件的利用率,从而使模型训练速度提升两倍。
•GPU 利用率的提高能够帮助我们更高效地管理资源分配,减少 GPU 的空闲时间,进而提高整个集群的利用率。
•从深度学习专家的角度来看,消耗更多的 GPU 计算能力意味着我们可以运行更多的实验,从而提高生产力和模型的质量。
•此外,IT 管理员可以利用多个 GPU 进行分布式训练,例如使用 DigitalOcean Droplets 提供的 NVLink 多 GPU 机器,这将有效缩短训练时间。
提升 GPU 利用效率有多种方法,包括硬件优化、数据处理优化、训练任务优化等,以及通过合理的云服务选择和资源调度来降低成本。
GPU 的计算能力强大,但如果数据传输速度跟不上,就会导致“数据饥饿”,即 GPU 处于等待数据的状态,而不是执行计算任务。因此,优化数据输入和预处理是提升 GPU 利用率的重要步骤。
1、数据加载优化
数据加载的速度是 GPU 高效工作的关键。为了避免数据加载成为瓶颈,推荐使用多线程或多进程的 DataLoader,这可以并行加载数据,提高数据传输速度。
在 PyTorch 中,torch.utils.data.DataLoader 提供了 num_workers 参数,可以设置多个子进程来并行加载数据。另外,开启 数据预取(Prefetching) 和异步数据加载也可以帮助提高数据传输的效率,使 GPU 在等待下一个数据批次时不会空闲。
2、混合精度训练 (Mixed Precision Training)
混合精度训练是通过在不影响模型精度的情况下,使用较低的数值精度(如 FP16)来减少显存占用和加速计算。FP16 比 FP32(单精度浮点数)占用的显存更少,同时也能加快计算速度。
使用混合精度训练时,PyTorch 和 TensorFlow 都提供了自动混合精度(AMP)工具,可以在不改变模型代码的情况下实现 FP16 训练,并确保在关键计算步骤中使用更高精度(FP32),从而保证模型的准确性和稳定性。
批处理大小的选择常常让人困惑,因为对于特定的数据集和模型架构来说,没有一种单一的“最佳”批处理大小。如果选择较大的批处理大小,训练过程会更快,但会消耗更多的内存,最终可能导致模型的准确率下降。可以使用 PyTorch 或 Keras 找到合适的批次大小。
除了提升计算效率,减少不必要的时间消耗也很重要。以下策略可以帮助工程师们优化 GPU 的占用时间,我们只做简单介绍,就不做实例的演示了,它们包括:
其实以上所讲的提升 GPU 的利用效率就是提高 GPU 云服务的 ROI 的一种方法。另外一种最简单的方式就是选择更稳定易用且更实惠的 GPU 云服务,例如 DigitalOcean 的 GPU Droplet 云服务。
海外知名云服务供应商 DigitalOcean 现已推出了搭载 NVIDIA H100 GPU 的 GPU Droplets 云服务器 。借助 GPU Droplets,AI 创业公司、开发者可以以更低的前期开发成本轻松地进行大语言模型训练、开发 AIGC 项目,以及开展人工智能相关的业务,并且无需面对复杂服务端开发与维护问题。目前,该 GPU 服务器按需实例正在限时优惠促销中,2024 年 12 月 31 日之前最低仅需 2.5 美元/GPU/小时,如需商洽,可直接联系 DigitalOcean 中国区独家战略合作伙伴卓普云(aidroplet.cn)。
DigitalOcean GPU Droplet 提供了单卡 GPU 和 8 卡 GPU 两种配置的服务器(具体如下图),用户可以根据项目需求来调整算力配置。虚拟化的硬件堆栈支持无缝扩展,因此你可以按需开启一个或多个 8 卡 GPU 实例,并在不再需要时缩减配置——从而优化性能、节省成本。
每个 GPU Droplet 包含两块高性能本地磁盘:一块启动磁盘用于存储操作系统、应用程序和 AI/ML 框架,以及一块暂存磁盘用于在训练期间暂存数据。这些资源预先集成于 GPU Droplet 中。
在计费方面,DigitalOcean 支持按需计费,在最终关闭实例的时候可按秒结算。在后台开启一台 GPU Droplet 实例之前,用户就可以看到实际最后要支付的费用。而且就算用户使用的出站流量超出套餐额度,DIgitalOcean 也提供了比大多数大型云厂商更便宜出站流量计费。与此同时,GPU Droplet 提供了最高 10Gbps 的公共网络带宽,可以满足大多数 AI 开发场景的数据传输要求。
简单易用性一直都是 DigitalOcean 的一大特点。DigitalOcean 提供了简洁明了的管理配置界面,用户不仅可以在几分钟内就启动一台 GPU Droplet 服务器,还能快速简便地管理存储和网络,能把更多精力专注于自身业务的开发。
DigitalOcean 作为行业领先的云服务提供商,能够深刻理解AI、大语言模型开发的复杂性和资源需求问题,特别是在容器化环境中面对的挑战。DigitalOcean Kubernetes 托管服务(DOKS)现已支持 GPU Droplet 作为工作节点,并提供了一系列业界领先的服务来支持 AI、大语言模型训练和推理:
目前,该 GPU 服务器按需实例正在限时优惠促销中,2024 年 12 月 31 日之前最低仅需 2.5 美元/GPU/小时。
文章来自于“Z Potentials”,作者“Z Potentials”。
【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。
项目地址:https://github.com/n8n-io/n8n
在线使用:https://n8n.io/(付费)
【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。
项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file
【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。
项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file
在线使用:https://vectorvein.ai/(付费)