社区供稿 | 2张卡训练70B的大模型(上) - 百亿大模型部署系列

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 百亿大模型部署

前言

自从《在家训练70B的大模型》 发布后,很多人都在私信问我是不是写错了,不是70B而是7B,最近因为一直都很忙,所以并没有完整的时间测试。通过这几天断断续续的跑起来的结果来看,应该是可以训练70B的,但是我还没跑起来,因为内存卡还没到。

在23年初,还只是勉强跑起来6B的我,是怎么也想不到,在24年的时候,72B也能勉勉强强跑起来了。更没想到,过了1个月,居然还能开始微调70B的大模型了。

直接说结论:

FSDP(内存减少) + QLoRA (所需要的训练参数) +HQQ(训练处理的速度提升) 这3个核心的技术使得 70B的大模型的训练仅仅需要35G的显存。

代价是什么呢?

  1. 1. 内存消耗增大,要训练70B的大模型,需要128G的内存。笔者目前买的内存还没到,但是本文通过侧面的测试已经验证可行。
  2. 2. 加载时间变长,训练似乎还好。因为需要在显存和内存之间不断的合并和挪腾, 导致时间变长。

接下来的内容

  • • 会讲一下背景和原理,基本来自 ai.answer 的原文翻译或者摘录
  • • 微调的代码。
  • • 在7B上的测试的结果。

下一篇才会讲70B的训练准备的过程,训练的过程以及结果。当然,也有可能我还没出,别人也已经写完。最近真的太忙了 。/(ㄒoㄒ)/~~ 。

备注:《0x01背景》 & 《0x02原理》 中的我们指的是answer.ai的研究员们。


背景

用于训练深度学习模型的硬件有两种截然不同的级别。还有数据中心级的硬件,比如H100s、A100s,价格就几十万美元。然后是包含游戏 GPU 的台式计算机,例如双 4090,成本低于 10,000 美元(并且可以用二手零件组装而成,价格不到预构建系统价格的一半)。

但关键是:游戏 GPU 的性能与数据中心 GPU 相似,但价格高出 10 倍以上!如果我们可以使用这些便宜 10 倍(但速度几乎一样快)的卡来训练大型语言模型,那就太好了,但我们不能,因为它们的内存要少得多。目前最好的数据中心卡具有 80GB RAM,而游戏卡最大可达 24GB RAM。由于只有最大的模型才能产生最好的结果,因此大多数人基本上无法创建最好的模型。

我们意识到这实际上没有内在原因。超快的硬件就在那里,等待使用——我们只需要一种方法来为其提供模型和数据,以满足其内存限制。显而易见的问题是:为什么当时没有这样做?所有大型工业实验室都已经拥有昂贵 10 倍的硬件,因此他们并没有动力去解决这个问题。


原理

QLoRA:在单个 GPU 上训练更大的模型

QLoRA 是现代神经网络中两个至关重要的进步的简单而出色的组合:量化和LoRA。量化是一种不使用 16 位甚至 32 位来存储神经网络权重的技术,而是使用 4 位(甚至更少)。4 位数字只有 16 个可能的值,但Dettmers 和 Zettlemoyer 表明,这对于当今流行的大型语言模型来说已经足够了。

当量化为 4 位(即 0.5 字节)时,70b 模型需要 70/2 = 35 GB,这比我们想要使用的 24GB 游戏 GPU 更大。

FSDP:将训练扩展到多个 GPU

解决单个消费类 GPU 的 RAM 限制问题的一个明显的解决方案是使用多个 GPU!开源社区中一种非常常见的方法是简单地将模型的几层放置在每张卡上。因此,要进行训练,您需要在第一个 GPU 上运行前几层,然后在第二个 GPU 上运行接下来的几层,依此类推。例如,70b (140GB) 模型可以分布在 8 个 24GB GPU 上,每个 GPU 使用 17.5GB。拥抱脸部变形金刚中甚至还有一个方便的设置,device_map=’auto’您可能已经使用过;这就是这实际上在幕后所做的事情。这可以完成工作,但有一个巨大的缺点:一次只有一个 GPU 处于活动状态,因为所有其他 GPU 都在等待“轮到”。这意味着 ⅞ 的计算被浪费了。

分布式数据并行(DDP) 以前是跨多个 GPU 高效训练模型的黄金标准方法。这需要在每个 GPU 上保留完整的模型 - 如果您有一个小模型(例如 2b 模型,需要 4GB RAM),您可以简单地将整个模型分别加载到每个 GPU 上,然后让每个 GPU 并行地处理训练示例。例如,如果您有 4 个 GPU,则训练速度会提高 4 倍。但是,如果模型不适合 GPU,并且没有足够的空间来容纳训练过程所需的数据,那么 DDP 就不起作用。

因此,我们需要能够跨 GPU 拆分模型(例如device_map=’auto’)并并行使用它们(例如 DPP)的东西。这就是 Meta 的完全分片数据并行(FSDP) 库的用武之地。它通过将参数拆分到多个 GPU 上来“分片”大型模型,从而允许同时使用所有 GPU。当训练期间在特定 GPU 上计算神经网络的一层时,所有所需的分片都会复制到那里。然后进行计算,最后从该 GPU 中删除复制的部分。虽然这听起来效率非常低,但实际上,通过在当前层忙于计算的同时聪明地复制下一层的数据,与 DDP 相比,这种方法可能不会导致速度减慢。

其他技术

为了实现这项工作,我们不仅受益于 FSDP 和 QLoRA,还受益于过去几年学术界和开源社区开发的大量巧妙技术。我们用了:

  • Gradient checkpointing(也称为激活检查点)以避免存储完整梯度,而是在整个模型的多个“检查点”处保存激活,然后根据需要重新运行前向计算步骤来重新计算梯度。
  • CPU offloading,在不使用权重时将权重存储在 CPU RAM 中,而不是存储在 GPU 上,从而大大减少了所需的 GPU 内存。这项技术对于使用 H100 GPU 的“GPU 丰富”来说并不是很有用,因为 H100 GPU 具有高度优化的方式来相互传递权重。但对于我们的用例来说,这是绝对必要的,因为游戏 GPU 和主板没有这些系统
  • Flash Attention 2使用内存优化的 Cuda 内核有效计算注意力。


启动代码

硬件环境

  • • 2张 3090 / 4090 ( 24G*2 = 48G 显存)
  • • 内存 128G
  • • CPU 32核 * 2

软件环境

  • • ubuntu22.04
  • • cuda 12.1
  • • pytorch:2.2.0

安装过程

Llama-2 70B 在2个24GB的显卡上的微调代码

python train.py \
--model_name meta-llama/Llama-2-70b-hf \
--batch_size 2 \
--context_length 512 \
--precision bf16 \
--train_type qlora \
--use_gradient_checkpointing true \
--use_cpu_offload true \
--dataset alpaca \
--reentrant_checkpointing true

看到下面的启动信息说明启动成功:


实验

训练的基准

llama-7B ,
--batch_size 4 
--gradient_accumulation_steps 1

没开启FSDP 之前

内存占用:0

单张显存:22GB/24GB

开启FSDP 之后

内存占用:18G

单张显存:7GB/24GB

直接下降了1/4。更离谱的是,训练的参数甚至可以开到

--batch_size 8  
--gradient_accumulation_steps =2

直接从 4变到 8*2 ,翻了4倍的效率,简直离谱。


总结

虽然很慢,虽然安装的过程还是比较困难和麻烦。但是这个技术切切实实的让普通人也可以开始微调70B的大模型了。(等内存到 = = 我现在还没有跑起来。) 对于小公司或者想尝鲜的人来说,是一个非常好的尝试。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
8月前
|
机器学习/深度学习 vr&ar 决策智能
创新性3D数据合成模型,微软推出EgoGen
【2月更文挑战第6天】创新性3D数据合成模型,微软推出EgoGen
71 2
创新性3D数据合成模型,微软推出EgoGen
|
21天前
|
存储 人工智能 编解码
多模态实时交互大模型浦语·灵笔 2.5 OmniLive开源:能看、能听、会记、会说!
2024年12月12日,多模态实时交互大模型书生·浦语灵笔2.5-OL(InternLM-XComposer2.5-OmniLive)开源,该模型可以通过视觉和听觉实时观察和理解外部世界,自动形成对观察到内容的长期记忆,并可通过语音与人类用户进行对话交谈,提供更自然的大模型交互体验。
多模态实时交互大模型浦语·灵笔 2.5 OmniLive开源:能看、能听、会记、会说!
|
7天前
|
人工智能 自动驾驶 安全
《解锁数据新动能:数据标注工具与AI模型训练平台的无缝对接热潮》
在人工智能快速发展的今天,数据成为核心驱动力。数据标注工具与模型训练平台的集成,实现了数据无缝流转,犹如为AI发展装上双引擎。集成不仅提高了数据传输效率、减少了人工干预,还确保了数据准确性,提升了模型性能。统一的数据标准、高效的接口设计和严格的安全保障是实现无缝流转的关键要素。这种集成推动了医疗、自动驾驶等领域的快速发展,促进了数据驱动的创新,为企业和社会带来巨大价值。未来,这一趋势将更加高效智能,进一步推动AI技术的广泛应用。
|
1月前
|
人工智能 测试技术 API
哪个模型擅长调用工具?这个7B模型跻身工具调用综合榜单第一
《Hammer: Robust Function-Calling for On-Device Language Models via Function Masking》提出了一种新型基础模型Hammer,通过函数掩码技术显著提升了大型语言模型在工具调用方面的性能,减少了对特定命名约定的依赖,展现了强大的泛化能力和超越现有模型的表现。该研究已开源,旨在促进智能设备的本地AI功能发展。
78 6
|
5月前
|
数据采集 自然语言处理 测试技术
CMU&清华新作:让LLM自己合成数据来学习,特定任务性能同样大幅提升
【8月更文挑战第24天】近期研究提出SELF-GUIDE,一种创新方法,旨在通过大型语言模型(LLMs)自动生成特定任务数据并用于自我微调,以克服其在特定任务上的性能局限。SELF-GUIDE分为三个阶段:数据合成、模型微调及性能评估。通过向目标LLM提供适当提示生成高质量合成数据,并用于微调以提升特定任务表现。实验证明,该方法在Natural Instructions V2等多个基准测试中显著提升了分类与生成任务性能。SELF-GUIDE不仅有效提高性能,还具备高数据效率,减少对外部数据依赖。然而,生成数据质量受限于LLM能力,且并非适用于所有任务。
81 4
|
7月前
|
编解码 人工智能 测试技术
ShareGPT4V作者团队又一力作!百万高质量视频-字幕数据助力社区提升多模态大模型视频理解及生成能力
【6月更文挑战第30天】ShareGPT4Video`团队推出百万视频-字幕数据集,强化多模态模型的视频理解和生成。包括40K视频的`ShareGPT4Video`数据集、`ShareCaptioner-Video`模型和8B参数的`ShareGPT4Video-8B`模型,后者在视频基准测试中取得最佳效果。差异化字幕生成策略解决了传统方法的局限。尽管取得突破,但数据规模和模型泛化仍是未来挑战。[论文链接](https://arxiv.org/abs/2406.04325v1)
86 1
|
7月前
|
数据采集 存储 人工智能
LinkedIn在利用大型语言模型服务十亿用户中的收获
LinkedIn在利用大型语言模型服务十亿用户中的收获
|
7月前
|
边缘计算 自然语言处理 安全
谷歌推出AGREE,增强大模型生成回答准确性
【6月更文挑战第19天】谷歌的AGREE技术针对大语言模型(LLMs)的“幻想”回答问题,通过自我接地和引用事实来源提升回答准确性。在多个数据集和模型上的测试显示,AGREE增强了回答和引用的准确性,但无法完全消除错误,且需大量计算资源,还可能涉及隐私和安全问题。[[1](https://arxiv.org/abs/2311.09533)]
63 1
|
8月前
|
人工智能 Apache
社区供稿 | 140B参数、可商用!OpenBuddy 发布首个开源千亿中文 MoE 模型的早期预览版
我们很自豪地于今天发布OpenBuddy最新一代千亿MoE大模型的早期预览版本:OpenBuddy-Mixtral-22Bx8-preview0-65k。此次发布的早期预览版对应约50%的训练进度。

热门文章

最新文章