消费级GPU成功运行1760亿参数大模型

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 消费级GPU成功运行1760亿参数大模型

在消费级 GPU 上运行大规模模型是机器学习社区正面临的挑战。


语言模型的规模一直在变大,PaLM 有 540B 参数,OPT、GPT-3 和 BLOOM 有大约 176B 参数,模型还在朝着更大的方向发展。


这些模型很难在易于访问的设备上运行。例如,BLOOM-176B 需要在 8 个 80GB A100 GPU(每个约 15000 美元)上运行才能完成推理任务,而微调 BLOOM-176B 则需要 72 个这样的 GPU。PaLM 等更大的模型将需要更多的资源。

我们需要找到方法来降低这些模型的资源需求,同时保持模型的性能。领域内已经开发了各种试图缩小模型大小的技术,例如量化和蒸馏。

BLOOM 是去年由 1000 多名志愿研究人员在一个名为「BigScience」的项目中创建的,该项目由人工智能初创公司 Hugging Face 利用法国政府的资金运作,今年 7 月 12 日 BLOOM 模型正式发布。

使用 Int8 推理会大幅减少模型的内存占用,却不会降低模型的预测性能。基于此,来自华盛顿大学、Meta AI 研究院等(原 Facebook AI Research )机构的研究员联合 HuggingFace 开展了一项研究,试图让经过训练的 BLOOM-176B 在更少的 GPU 上运行,并将所提方法完全集成到 HuggingFace Transformers 中。


该研究为 transformer 提出了首个数十亿规模的 Int8 量化过程,该过程不会影响模型的推理性能。它可以加载一个具有 16-bit 或 32-bit 权重的 175B 参数的 transformer,并将前馈和注意力投影层转换为 8-bit。其将推理所需的内存减少了一半,同时保持了全精度性能。

该研究将向量量化和混合精度分解的组合命名为 LLM.int8()。实验表明,通过使用 LLM.int8(),可以在消费级 GPU 上使用多达 175B 参数的 LLM 执行推理,而不会降低性能。该方法不仅为异常值对模型性能的影响提供了新思路,还首次使在消费级 GPU 的单个服务器上使用非常大的模型成为可能,例如 OPT-175B/BLOOM。


方法简介

机器学习模型的大小取决于参数的数量及其精度,通常是 float32、float16 或 bfloat16 之一。float32 (FP32) 代表标准化的 IEEE 32 位浮点表示,使用这种数据类型可以表示范围广泛的浮点数。FP32 为「指数」保留 8 位,为「尾数」保留 23 位,为数字的符号保留 1 位。并且,大多数硬件都支持 FP32 操作和指令。

而 float16 (FP16) 为指数保留 5 位,为尾数保留 10 位。这使得 FP16 数字的可表示范围远低于 FP32,面临溢出(试图表示一个非常大的数字)和下溢(表示一个非常小的数字)的风险。

出现溢出时会得到 NaN(非数字)的结果,如果像在神经网络中那样进行顺序计算,那么很多工作都会崩溃。bfloat16 (BF16) 则能够避免这种问题。BF16 为指数保留 8 位,为小数保留 7 位,意味着 BF16 可以保留与 FP32 相同的动态范围。

理想情况下,训练和推理应该在 FP32 中完成,但它的速度比 FP16/BF16 慢,因此要使用混合精度来提高训练速度。但在实践中,半精度权重在推理过程中也能提供与 FP32 相似的质量。这意味着我们可以使用一半精度的权重并使用一半的 GPU 来完成相同的结果。

但是,如果我们可以使用不同的数据类型以更少的内存存储这些权重呢?一种称为量化的方法已广泛用于深度学习。

该研究首先在实验中用 2-byte BF16/FP16 半精度代替 4-byte FP32 精,实现了几乎相同的推理结果。这样一来,模型减小了一半。但是如果进一步降低这个数字,精度会随之降低,那推理质量就会急剧下降。

为了弥补这一点,该研究引入 8bit 量化。这种方法使用四分之一的精度,因此只需要四分之一模型大小,但这不是通过去除另一半 bit 来实现的。

两种最常见的 8-bit 量化技术为 zero-point 量化和 absmax(absolute maximum)量化。这两种方法将浮点值映射为更紧凑的 int8(1 字节)值。

例如,在 zero-point 量化中,如果数据范围是 -1.0——1.0,量化到 -127——127,其扩展因子为 127。在这个扩展因子下,例如值 0.3 将被扩展为 0.3*127 = 38.1。量化通常会采用四舍五入(rounding),得到了 38。如果反过来,将得到 38/127=0.2992——在这个例子中有 0.008 的量化误差。这些看似微小的错误在通过模型层传播时往往会累积和增长,并导致性能下降。

虽然这些技术能够量化深度学习模型,但它们通常会导致模型准确率下降。但是集成到 Hugging Face Transformers 和 Accelerate 库中的 LLM.int8(),是第一种即使对于带有 176B 参数的大型模型 (如 BLOOM) 也不会降低性能的技术。

LLM.int8()算法可以这样解释,本质上,LLM.int8()试图通过三个步骤来完成矩阵乘法计算:

  • 从输入隐藏状态中,按列提取异常值(即大于某个阈值的值)。
  • 将 FP16 中的异常值与 int8 中的非异常值进行矩阵乘法。
  • 在 FP16 中对非异常值进行去量化,将异常值和非异常值相加,得到完整的结果。


这些步骤可以在下面的动画中总结:


最后,该研究还关注了一个问题:速度比原生模型更快吗?

LLM.int8() 方法的主要目的是使大型模型更易于访问而不会降低性能。但是,如果它非常慢,那么用处也不大了。研究团队对多个模型的生成速度进行了基准测试,发现带有 LLM.int8() 的 BLOOM-176B 比 fp16 版本慢了大约 15% 到 23%——这是完全可以接受的。而较小的模型(如 T5-3B 和 T5-11B)的减速幅度更大。研究团队正在努力提升这些小型模型的运行速度。

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
2月前
|
机器学习/深度学习 存储 PyTorch
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
69 0
|
3月前
|
人工智能 机器人 Serverless
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
584 2
|
4月前
|
机器学习/深度学习 弹性计算 TensorFlow
阿里云GPU加速:大模型训练与推理的全流程指南
随着深度学习和大规模模型的普及,GPU成为训练和推理的关键加速器。本文将详细介绍如何利用阿里云GPU产品完成大模型的训练与推理。我们将使用Elastic GPU、阿里云深度学习镜像、ECS(云服务器)等阿里云产品,通过代码示例和详细说明,带你一步步完成整个流程。
906 0
|
6月前
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
4月前
|
并行计算 Linux 测试技术
GPU实例使用--单实例上运行Linux桌面多开解决方案
客户前期使用的旧异构实例面临更新换代,新的推荐异构实例性能更强,客户的业务软件运行时,GPU使用率不高,需要探索多开方案,提高GPU使用率,提高实例性价比。
|
5月前
|
存储 人工智能 芯片
多GPU训练大型模型:资源分配与优化技巧 | 英伟达将推出面向中国的改良芯片HGX H20、L20 PCIe、L2 PCIe
在人工智能领域,大型模型因其强大的预测能力和泛化性能而备受瞩目。然而,随着模型规模的不断扩大,计算资源和训练时间成为制约其发展的重大挑战。特别是在英伟达禁令之后,中国AI计算行业面临前所未有的困境。为了解决这个问题,英伟达将针对中国市场推出新的AI芯片,以应对美国出口限制。本文将探讨如何在多个GPU上训练大型模型,并分析英伟达禁令对中国AI计算行业的影响。
|
1月前
|
运维 监控 Serverless
一键开启 GPU 闲置模式,基于函数计算低成本部署 Google Gemma 模型服务
本文介绍如何使用函数计算 GPU 实例闲置模式低成本、快速的部署 Google Gemma 模型服务。
164785 57
|
6月前
|
机器学习/深度学习 人工智能 芯片
一文详解多模态大模型发展及高频因子计算加速GPU算力 | 英伟达显卡被限,华为如何力挽狂澜?
近年来,全球范围内的芯片禁令不断升级,给许多企业和科研机构带来了很大的困扰,需要在技术层面进行创新和突破。一方面,可以探索使用国产芯片和其他不受限制的芯片来替代被禁用的芯片;另一方面,可以通过优化算法和架构等方法来降低对特定芯片的依赖程度。
|
2月前
|
并行计算 TensorFlow 算法框架/工具
|
4月前
|
达摩院 并行计算 异构计算
modelscope调用的模型如何指定在特定gpu上运行?排除使用CUDA_VISIBLE_DEVICES环境变量
由于个人需要,家里有多张卡,但是我只想通过输入device号的方式,在单卡上运行模型。如果设置环境变量的话我的其他服务将会受影响。