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