展翅翱翔:Falcon 180B终于来了

Falcon 180B has finally arrived Soar with wings spread

介绍

今天,我们很高兴地欢迎TII的Falcon 180B加入HuggingFace! Falcon 180B为开放模型设立了新的技术水准。它是目前最大的开放语言模型,拥有1800亿个参数,并使用TII的RefinedWeb数据集训练了35万亿个标记。这代表了开放模型单次预训练的最长时间。

您可以在Hugging Face Hub(基本模型和聊天模型)找到该模型,并在Falcon Chat Demo Space上与模型进行交互。

就功能而言,Falcon 180B在自然语言任务中取得了最先进的结果。它在(预训练的)开放模型中名列榜首,并且与PaLM-2等专有模型不相上下。虽然目前很难明确排名,但它被认为与PaLM-2 Large水平相当,使得Falcon 180B成为公开已知的最具能力的LLM之一。

在本博客文章中,我们通过评估结果和展示如何使用模型来探索Falcon 180B的优势。

  • 什么是Falcon-180B?
  • Falcon 180B有多好?
  • 如何使用Falcon 180B?
    • 演示
    • 硬件要求
    • 提示格式
    • Transformers
  • 附加资源

什么是Falcon-180B?

Falcon 180B是TII发布的Falcon系列中的一个模型。

在架构上,Falcon 180B是Falcon 40B的升级版本,并建立在其创新基础上,例如多查询注意力以提高可扩展性。我们建议阅读介绍Falcon的初始博客文章以深入了解架构。Falcon 180B使用4096个GPU同时训练了35万亿个标记,使用Amazon SageMaker进行了总共约700万个GPU小时的训练。这意味着Falcon 180B比Llama 2大2.5倍,并且使用了4倍的计算资源进行训练。

Falcon 180B的数据集主要由RefinedWeb的网络数据(约85%)组成。此外,它还使用了一些经过筛选的数据集,例如对话、技术论文和少量代码(约3%)。这个预训练数据集足够大,即使35万亿个标记也不足以构成一个时代。

发布的聊天模型在多个大规模对话数据集的混合数据上进行了微调。

‼️ 商业使用:Falcon 180b可以在商业上使用,但有非常严格的条件,不包括任何”托管使用”。如果您有意商业使用,请查阅许可证并咨询您的法律团队。

Falcon 180B有多好?

Falcon 180B是目前最好的公开发布的LLM,胜过了Llama 2 70B和OpenAI的GPT-3.5在MMLU上,并与Google的PaLM 2-Large在HellaSwag、LAMBADA、WebQuestions、Winogrande、PIQA、ARC、BoolQ、CB、COPA、RTE、WiC、WSC、ReCoRD等方面不相上下。根据评估基准的不同,Falcon 180B通常位于GPT 3.5和GPT4之间,社区进一步微调将非常有趣。

在Hugging Face Leaderboard上,Falcon 180B以68.74的得分是最高得分的公开发布的预训练LLM,超过了Meta的LLaMA 2(67.35)。

如何使用Falcon 180B?

Falcon 180B在Hugging Face生态系统中可用,从Transformers版本4.33开始。

演示

您可以在此空间或以下嵌入的游乐场中轻松尝试Big Falcon Model(1800亿个参数!):

硬件要求

提示格式

基础模型没有提示格式。请记住,它不是一个对话模型,也没有经过指令训练,所以不要期望它能生成对话式回复——预训练模型是进一步优化的良好平台,但你可能不应该直接使用它。Chat模型具有非常简单的对话结构。

系统:在这里添加一个可选的系统提示
用户:这是用户输入
Falcon:这是模型生成的内容
用户:这可能是第二轮输入
Falcon:等等

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 = "我的名字是Pedro,我住在"
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)

这可能会产生如下结果:

我的名字是Pedro,我住在葡萄牙,今年25岁。我是一名平面设计师,但我也对摄影和视频充满热情。
我喜欢旅行,我一直在寻找新的冒险。我喜欢结交新朋友和探索新地方。

8位和4位的bitsandbytes

相对于<bfloat16参考,Falcon 180B的8位和4位量化版本在评估方面几乎没有差异!这对于推断来说是非常好的消息,因为您可以放心地使用量化版本来减少硬件要求。但请记住,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_prompt}\n"
    for user_prompt, bot_response in history:
        prompt += f"用户:{user_prompt}\n"
        prompt += f"Falcon:{bot_response}\n"
        prompt += f"用户:{message}\nFalcon:"
    return prompt

正如您所看到的,用户的互动和模型的回应之前都有User:Falcon:的分隔符。我们将它们连接在一起,形成一个包含整个对话历史的提示。我们可以提供一个系统提示来调整生成的风格。

附加资源

  • 模型
  • 演示
  • Falcon已经在Hugging Face生态系统中着陆
  • 官方公告

致谢

在生态系统中发布这样一个支持和评估的模型是不可能没有很多社区成员的贡献的,包括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评估以及为模型的免费、开源演示提供推理的能力。