展翅高飞:Falcon 180B 震撼登场
引言
今天,我们很高兴地欢迎 TII 的 Falcon 180B 加入 HuggingFace 大家庭! Falcon 180B 为开源模型树立了新的 SOTA(State-of-the-Art)。它是目前最大的公开可用语言模型,拥有 1800 亿个参数,并使用 TII 的 RefinedWeb 数据集训练了惊人的 3.5 万亿个 token。这代表了开源模型最长的单 epoch 预训练。
您可以在 Hugging Face Hub 上找到该模型(基础模型和聊天模型),并可以在 Falcon 聊天演示空间中与模型互动。
在功能方面,Falcon 180B 在自然语言任务中取得了最先进的成果。它在(预训练)开放访问模型排行榜上名列前茅(发布时),并与 PaLM-2 等专有模型竞争。虽然目前难以明确排名,但它被认为与 PaLM-2 Large 不相上下,使 Falcon 180B 成为目前公开已知的功能最强大的大型语言模型之一。
在这篇博文中,我们将通过查看一些评估结果来探讨 Falcon 180B 为何如此出色,并展示如何使用该模型。
什么是 Falcon-180B?
Falcon 180B 是 TII 发布的模型,它延续了 Falcon 系列之前的版本。
在架构方面,Falcon 180B 是 Falcon 40B 的扩展版本,并在此基础上进行了创新,例如多查询注意力机制,以提高可扩展性。我们建议查看介绍 Falcon 的初始博文,以深入了解其架构。Falcon 180B 使用 Amazon SageMaker 同时在多达 4096 个 GPU 上训练了 3.5 万亿个 token,总计耗时约 7,000,000 GPU 小时。这意味着 Falcon 180B 比 Llama 2 大 2.5 倍,并且使用了 4 倍以上的计算量进行训练。
Falcon 180B 的数据集主要由来自 RefinedWeb 的网络数据(约 85%)组成。此外,它还在混合了精选数据上进行了训练,例如对话、技术论文和少量代码(约 3%)。这个预训练数据集足够大,即使是 3.5 万亿个 token 也只占不到一个 epoch。
发布的聊天模型在聊天和指令数据集上进行了微调,混合了多个大规模对话数据集。
‼️ 商业用途:Falcon 180b 可以用于商业用途,但条件非常严格,排除了任何“托管用途”。如果您有兴趣将其用于商业目的,我们建议您查看许可证并咨询您的法律团队。
Falcon 180B 有多好?
Falcon 180B 在发布时是表现最好的开源 LLM,在 MMLU 上超越了 Llama 2 70B 和 OpenAI 的 GPT-3.5,并且在 HellaSwag、LAMBADA、WebQuestions、Winogrande、PIQA、ARC、BoolQ、CB、COPA、RTE、WiC、WSC、ReCoRD 上与 Google 的 PaLM 2-Large 相当。Falcon 180B 通常介于 GPT 3.5 和 GPT4 之间,具体取决于评估基准,而社区在模型开放发布后进行的进一步微调将非常值得关注。
在发布时,Falcon 180B 在 Hugging Face 排行榜上获得了 68.74 分,是得分最高的开源预训练 LLM,超越了 Meta 的 Llama 2.*
模型 | 大小 | 排行榜得分 | 商业用途或许可证 | 预训练时长 |
---|---|---|---|---|
Falcon | 180B | 67.85 | 🟠 | 3,500B |
Llama 2 | 70B | 67.87 | 🟠 | 2,000B |
LLaMA | 65B | 61.19 | 🔴 | 1,400B |
Falcon | 40B | 58.07 | 🟢 | 1,000B |
MPT | 30B | 52.77 | 🟢 | 1,000B |
- Open LLM 排行榜在 2023 年 11 月新增了两个基准,我们已更新上表以反映最新分数(67.85)。根据新方法,Falcon 与 Llama 2 70B 相当。
量化的 Falcon 模型在各个基准上保持了相似的指标。评估 torch.float16
、8bit
和 4bit
时的结果相似。请参阅 Open LLM Leaderboard 中的结果。
如何使用 Falcon 180B?
从 Transformers 4.33 版本开始,Falcon 180B 已在 Hugging Face 生态系统中可用。
演示
您可以在 此空间 或嵌入下方的交互式演示中轻松尝试大型 Falcon 模型(1800 亿参数!)
硬件要求
我们针对不同用例运行了多次模型所需硬件的测试。这些并非最小数值,而是我们可用的配置的最小数值。
类型 | 类型 | 内存 | 示例 | |
---|---|---|---|---|
Falcon 180B | 训练 | 完全微调 | 5120GB | 8x 8x A100 80GB |
Falcon 180B | 训练 | LoRA 与 ZeRO-3 | 1280GB | 2x 8x A100 80GB |
Falcon 180B | 训练 | QLoRA | 160GB | 2x A100 80GB |
Falcon 180B | 推理 | BF16/FP16 | 640GB | 8x A100 80GB |
Falcon 180B | 推理 | GPTQ/int4 | 320GB | 8x A100 40GB |
提示格式
基础模型没有提示格式。请记住,它不是一个对话模型,也没有经过指令训练,所以不要指望它能生成对话响应——预训练模型是一个很好的进一步微调平台,但您可能不应该直接开箱即用。聊天模型有一个非常简单的对话结构。
System: Add an optional system prompt here
User: This is the user input
Falcon: This is what the model generates
User: This might be a second turn input
Falcon: and so on
Transformers
随着 Transformers 4.33 的发布,您可以使用 Falcon 180B 并利用 HF 生态系统中的所有工具,例如
- 训练和推理脚本以及示例
- 安全文件格式 (safetensors)
- 与 bitsandbytes(4 位量化)、PEFT(参数高效微调)和 GPTQ 等工具集成
- 辅助生成(也称为“推测解码”)
- 支持更大上下文长度的 RoPE 缩放
- 丰富强大的生成参数
使用该模型需要您接受其许可证和使用条款。请确保您已登录您的 Hugging Face 帐户,并确保您拥有最新版本的 transformers
pip install --upgrade transformers
huggingface-cli login
bfloat16
以下是如何在 bfloat16
中使用基础模型。Falcon 180B 是一个大型模型,因此请考虑上表中总结的硬件要求。
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "tiiuae/falcon-180B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
prompt = "My name is Pedro, I live in"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
output = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
do_sample=True,
temperature=0.6,
top_p=0.9,
max_new_tokens=50,
)
output = output[0].to("cpu")
print(tokenizer.decode(output))
这可能会产生如下输出:
My name is Pedro, I live in Portugal and I am 25 years old. I am a graphic designer, but I am also passionate about photography and video.
I love to travel and I am always looking for new adventures. I love to meet new people and explore new places.
8 位和 4 位与 bitsandbytes
Falcon 180B 的 8 位和 4 位量化版本在评估方面与 bfloat16
参考几乎没有区别!这对于推理来说是个好消息,因为您可以放心地使用量化版本来降低硬件要求。但是,请记住,8 位推理比在 4 位
中运行模型快得多。
要使用量化,您需要安装 bitsandbytes
库,并在加载模型时简单地启用相应的标志
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
load_in_8bit=True,
device_map="auto",
)
聊天模型
如上所述,经过微调以遵循对话的模型版本使用了非常简单的训练模板。我们必须遵循相同的模式才能运行聊天风格的推理。作为参考,您可以查看聊天演示中的 format_prompt 函数,它看起来像这样
def format_prompt(message, history, system_prompt):
prompt = ""
if system_prompt:
prompt += f"System: {system_prompt}\n"
for user_prompt, bot_response in history:
prompt += f"User: {user_prompt}\n"
prompt += f"Falcon: {bot_response}\n"
prompt += f"User: {message}\nFalcon:"
return prompt
如您所见,用户交互和模型响应都以 User:
和 Falcon:
分隔符开头。我们将它们连接起来形成包含对话整个历史的提示。我们可以提供系统提示来调整生成风格。
附加资源
致谢
在生态系统支持和评估下发布这样的模型,离不开许多社区成员的贡献,包括 Clémentine 和 Eleuther Evaluation Harness 的 LLM 评估;Loubna 和 BigCode 的代码评估;Nicolas 的推理支持;Lysandre、Matt、Daniel、Amy、Joao 和 Arthur 将 Falcon 集成到 transformers。感谢 Baptiste 和 Patrick 的开源演示。感谢 Thom、Lewis、TheBloke、Nouamane、Tim Dettmers 的多项贡献,使这项工作得以实现。最后,感谢 HF Cluster 能够进行 LLM 评估,并为该模型的免费开源演示提供推理。