展翅高飞:Falcon 180B 震撼登场

发布于 2023 年 9 月 6 日
在 GitHub 上更新

引言

今天,我们很高兴地欢迎 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 之间,具体取决于评估基准,而社区在模型开放发布后进行的进一步微调将非常值得关注。

Palm 2 comparison

在发布时,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 相当。

open_llm_leaderboard.png

量化的 Falcon 模型在各个基准上保持了相似的指标。评估 torch.float168bit4bit 时的结果相似。请参阅 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émentineEleuther Evaluation Harness 的 LLM 评估;LoubnaBigCode 的代码评估;Nicolas 的推理支持;LysandreMattDanielAmyJoaoArthur 将 Falcon 集成到 transformers。感谢 BaptistePatrick 的开源演示。感谢 ThomLewisTheBlokeNouamaneTim Dettmers 的多项贡献,使这项工作得以实现。最后,感谢 HF Cluster 能够进行 LLM 评估,并为该模型的免费开源演示提供推理。

社区

注册登录 发表评论