自2023年5月,阿布扎比技术创新研究所(TII)发布了两个预训练的LLM:Falcon 7B和Falcon-40B,这两个模型的表现十分优异,在OpenLLM排行榜上高居榜首。然而,在短短不到几个月的时间,研究所又推出了第三个重量级的大语言模型——Falcon 180B。
以下是有关 Falcon 180B 的一些主要特点:
我们可以在 Hugging Face Hub 上找到该模型(基础模型和聊天模型),并在 Falcon 聊天演示空间上与该模型进行交互。
在能力方面,Falcon 180B 在自然语言任务上取得了最先进的结果。它在(预训练的)开放访问模型排行榜上名列前茅,并可与 PaLM-2 等专有模型相媲美。虽然还很难确定排名,但它被认为与 PaLM-2 Large 相当,使 Falcon 180B 成为众所周知的最有能力的LLM之一。
Falcon 180B 应该算是在大语言模型开源领域参数量最庞大的免费且可商用的模型了。这无疑是个划时代的成就,但面对LLM需要高昂的计算资源成本,普通用户能否在自己的电脑上运行这样大的模型呢?本文接下来将为你解析Falcon 180B 在消费级硬件上的方案,让让我们一起来感受它强大的力量。
Falcon 180B 使用 Amazon SageMaker 在多达 4096 个 GPU 上同时进行了 3.5 万亿个令牌的训练,总共花费了约 7,000,000 个 GPU 小时。这个大型语言模型拥有惊人的1800 亿参数量,它的参数比Llama 2 70B多2.5倍,比Falcon 40B还要多出4.5倍之多。
Falcon 180B 的数据集主要由来自RefinedWeb 的网络数据组成(~85%)。此外,它还接受了对话、技术论文和一小部分代码(~3%)等精选数据的混合训练。这个预训练数据集足够大,即使 3.5 万亿个代币也不足以构成一个纪元。
Falcon-180B 是目前最好的开源免费的模型,也是最好的模型之一。 Falcon-180B 优于 LLaMA-2 70B、StableLM、RedPajama、MPT和 OpenAI 的 GPT-3.5 等。 Falcon 180B 通常位于 GPT 3.5 和 GPT4 之间,具体取决于评估基准。请参阅 OpenLLM 排行榜。
Falcon 180B 在 Hugging Face 排行榜上得分为 68.74,是得分最高的公开发布的预训练 LLM,超过了 Meta 的 LLaMA 2(67.35)。
除非你的计算机已经具备了支持密集计算的硬件能力,否则无法开箱即用地运行 Falcon 180B。想要在消费类硬件上运行Falcon-180B模型,您需要进行以下步骤:
量化的 Falcon 模型在基准测试中保留了类似的指标。评估 torch.float16 、 8bit 和 4bit 时的结果相似。查看 Open LLM 排行榜中的结果。
在本文中,我将解释如何在消费类硬件上运行 Falcon-180B。我们将看到在现代计算机上运行 1800 亿个参数的模型是相当经济的。下面还讨论了几种有助于降低硬件要求的技术。
Falcon 180B 有 1800 亿个参数存储为 bfloat16。 (b)float16 参数在内存中占 2 个字节。
当加载模型时,标准 Pytorch pipeline 的工作方式如下:
步骤1和步骤2是消耗内存的。总共,您需要 720 GB 可用内存。也可以是 CPU RAM,但为了快速推理,一般建议推荐使用 GPU,例如具有 80 GB VRAM 的 9 A100。
无论是 CPU RAM 还是 VRAM,都需要大量内存。下面来看看用什么方式可以降低这种内存资源要求。
在 Hugging Face Hub 上,Falcon 180B 使用 safetensors 格式进行分发。与标准PyTorch格式相比,safetensors格式几乎不需要复制操作,因此模型可以直接加载到之前创建的空模型中,从而节省了大量内存。
关于safetensors
safetensors 可以节省内存,但也使模型运行起来更安全,因为无法以这种格式存储任意代码。 safetensors 模型的加载速度也快得多。从中心下载模型时,建议使用此格式而不是“.bin”格式,以实现更快、安全且节省内存的加载。
从官方通过加载 gpt2 权重将 safetensors 与 PyTorch 进行比较。运行 CPU 和 GPU 基准测试结果:
在 CPU 上,safetensors 比 pytorch 快:76.6 倍
在 GPU 上,safetensors 比 pytorch 快:2.1 倍
虽然看起来我们跳过了第 2 步,但仍然会产生一些内存开销。根据TII在型号卡上的说法,需要400GB的内存来运行Falcon-180B模型。这个要求远远超出了消费者级别的配置,但却比使用标准 Pytorch 格式少了 220 GB。
所以我们需要一台 400 GB 的设备,例如 5 个 A100 GPU 和 80 GB VRAM。这个要求距离我们消费级的配置还很远。
我们可能没有一台 400 GB 的内存设备,但是如果可以将多种不同的内存设备组合起来,您的计算机可能拥有超过 400 GB 的内存:
为了充分利用可用设备,我们可以拆分 Falcon 180B,以便它按优先级顺序使用设备的最大可用内存:GPU、CPU RAM 和硬盘驱动器。
使用 Accelerate 库中的 device_map 功能,将模型的不同层放置在不同的设备上。这样,模型的一部分将在GPU VRAM上运行,另一部分将在CPU RAM上运行,剩余部分将在硬盘驱动器上运行。
device_map 非常方便避免 CUDA 内存不足错误。但如果您计划在消费类硬件上使用 Falcon 180B,那还远远不够理想。即使采用 24 GB VRAM 和 32 GB CPU RAM 的高端配置,也会在硬盘上留下数百 GB 的空间。
这是一个问题,有两个原因:
为了避免过度使用硬盘,我们可以考虑以下的解决方案:
Falcon 180B 的模型量化是减少其内存消耗的最佳选择之一。
现在,将非常大的语言模型量化到较低的精度是常见的做法。 GPTQ 和 bitsandbytes nf4 是将 LLM 量化为 4 位精度的两种流行方法。
Hugging Face Optimum 团队与 AutoGPTQ 库合作,提供了一个简单的 API,可在语言模型上应用 GPTQ 量化。通过 GPTQ 量化,LLM 可以开放为 8 位、4 位、3 位甚至 2 位,以便在较小的硬件上运行它们,而不会大幅降低性能。
GPTQ 是一种训练后量化方法,用于压缩 LLM,与 GPT 类似。 GPTQ 通过减少模型中存储每个权重所需的位数来压缩 GPT 模型,从 32 位减少到仅 3-4 位。这意味着模型占用的内存要少得多,因此它可以在更少的硬件上运行,例如适用于 13B Llama2 型号的单 GPU。 GPTQ 分别分析模型的每一层,并以保持整体准确性的方式近似权重。
使用 GPTQ 的主要好处是:
注意:GPTQ 量化目前仅适用于文本模型。此外,量化过程可能需要很多时间。如果还没有您要使用的模型的 GPTQ 量化版本,请检查 Hugging Face Hub。
Falcon 180B 使用 bfloat16。我们看到它是 360 GB。一旦量化到 4 位精度,它只有 90 GB(1800 亿个参数 * 0.5 字节)。我们可以加载 4 位 Falcon 180B 和 100 GB 内存(90GB + 一些内存开销)。
如果您有 24 GB 的 VRAM,则“仅”需要 75 GB 的 CPU RAM。它仍然比加载原始模型便宜很多,但更便宜,并且在推理过程中它不会卸载硬盘上的模型层。注意:您仍需要 100 GB 的硬盘可用空间来存储模型。
您甚至不需要 GPU。借助 128 GB CPU RAM,您可以仅使用 CPU 进行推理。
量化本身的成本极高。值得庆幸的是,我们已经可以在网上找到量化版本。 TheBloke 发布了用 GPTQ 制作的 4 位版本:
虽然模型的精度有所降低,但根据 Hugging Face 的实验,模型的性能保持相似。
GPTQ模型的推理速度非常快,您可以使用LoRA适配器进行微调。虽然可以对GPTQ模型进行微调,但并不推荐这样做。相比之下,使用QLoRA进行微调具有类似的内存消耗,但由于使用了更好的nf4量化方法,因此可以产生更好的模型效果,这一点在QLoRA论文中有所体现。
综上所述,要在价格合理的计算机上运行Falcon 180B,您需要进行量化,并拥有至少100GB的内存。为了实现快速推理或微调,您需要使用GPU。RTX 4090是一个不错的选择,但RTX 3090 24GB的价格更实惠,速度较慢。如果您的机箱足够宽敞,您甚至可以安装两张RTX卡。
如果您只有CPU而没有GPU,那么请不要尝试微调,因为速度会非常慢。尽管推理速度也会很慢,但如果您使用最新的高端CPU和针对更快速推理进行优化的软件(例如llama.cpp),那么在仅有CPU的配置下运行Falcon 180B是可能的。