展翅高飛: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 評估,併為該模型的免費開源演示提供推理。

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.