歡迎 Llama 3 - Meta 的新開源大語言模型
簡介
Meta 的 Llama 3,作為開放獲取的 Llama 家族的下一次迭代,現已釋出並在 Hugging Face 上提供。很高興看到 Meta 繼續致力於開放人工智慧,我們也很激動能透過在 Hugging Face 生態系統中的全面整合來全力支援此次釋出。
Llama 3 有兩種尺寸:8B 用於在消費級 GPU 上的高效部署和開發,70B 用於大規模 AI 原生應用。這兩種尺寸都有基礎版和指令調優版。除了這 4 個模型外,還有一個新版本的 Llama Guard,它是在 Llama 3 8B 上進行微調後釋出的,名為 Llama Guard 2(安全微調)。
我們與 Meta 合作,以確保 Llama 3 能最好地整合到 Hugging Face 生態系統中。你可以在 Hub 上找到所有 5 個開放獲取模型(2 個基礎模型,2 個微調模型和 Llama Guard)。在我們釋出的特性和整合中,包括:
- Hub 上的模型,附帶它們的模型卡和許可證
- 🤗 Transformers 整合
- Meta Llama 3 70B 的 Hugging Chat 整合
- 整合到 Inference Endpoints、Google Cloud 和 Amazon SageMaker 中的推理功能
- 使用 🤗 TRL 在單個 GPU 上微調 Llama 3 8B 的示例
目錄
Llama 3 有哪些新功能?
Llama 3 的釋出帶來了 Meta 基於 Llama 2 架構的 4 個新的開放大語言模型。它們有兩種尺寸:8B 和 70B 引數,每種尺寸都有基礎(預訓練)和指令調優版本。所有變體都可以在各種型別的消費級硬體上執行,並具有 8K tokens 的上下文長度。
- Meta-Llama-3-8b:8B 基礎模型
- Meta-Llama-3-8b-instruct:8B 基礎模型的指令微調版本
- Meta-Llama-3-70b:70B 基礎模型
- Meta-Llama-3-70b-instruct:70B 基礎模型的指令微調版本
除了這 4 個基礎模型,Llama Guard 2 也已釋出。它在 Llama 3 8B 上進行微調,是 Llama Guard 系列的最新迭代。Llama Guard 2 專為生產用例而構建,旨在對大語言模型的輸入(提示)和響應進行分類,以檢測在風險分類中被認為不安全的內容。
與 Llama 2 相比,Llama 3 的一個重大變化是使用了一個新的分詞器,將詞彙量擴大到 128,256(上一版本為 32K tokens)。這個更大的詞彙量可以更有效地編碼文字(包括輸入和輸出),並可能帶來更強的多語言能力。但這也有代價:嵌入輸入和輸出矩陣更大,這佔了小模型引數數量增加的很大一部分:它從 Llama 2 的 7B 增加到 Llama 3 的 8B。此外,8B 版本的模型現在使用分組查詢注意力(GQA),這是一種高效的表示方式,應有助於處理更長的上下文。
Llama 3 模型在兩個擁有 24,000 個 GPU 的叢集上,使用了超過 15 萬億 tokens 的新混合公開可用線上資料進行訓練,訓練資料量約為 Llama 2 的 8 倍。我們不知道訓練資料混合的具體細節,只能猜測更大、更仔細的資料整理是效能提升的一個重要因素。Llama 3 Instruct 針對對話應用進行了最佳化,在超過 1000 萬個人工標註的資料樣本上進行了訓練,結合了監督微調(SFT)、拒絕取樣、近端策略最佳化(PPO)和直接策略最佳化(DPO)。
關於許可條款,Llama 3 採用了一個寬鬆的許可證,允許重新分發、微調和衍生作品。Llama 3 許可證中新增了明確署名的要求,這在 Llama 2 中是沒有的。例如,衍生模型需要在其名稱開頭包含“Llama 3”,並且你還需要在衍生作品或服務中提及“Built with Meta Llama 3”。有關完整細節,請務必閱讀官方許可證。
Llama 3 評測
在這裡,你可以看到一系列模型及其在 Open LLM Leaderboard 上的得分。這不是一個詳盡的列表,我們鼓勵你檢視完整的排行榜。請注意,LLM Leaderboard 特別適用於評估預訓練模型,因為還有其他專門針對對話模型的基準測試。
模型 | 許可證 | 預訓練長度 [令牌] | 排行榜得分 |
---|---|---|---|
MPT-7B | Apache 2.0 | 1,000B | 5.98 |
Falcon-7B | Apache 2.0 | 1,500B | 5.1 |
Llama-2-7B | Llama 2 許可證 | 2T | 8.72 |
Qwen 2 7B | Apache 2.0 | ? | 23.66 |
Llama-3-8B | Llama 3 許可證 | 15T | 13.41 |
Llama-2-13B | Llama 2 許可證 | 2T | 10.99 |
Falcon-40B | Apache 2.0 | 1,000B | 11.33 |
Falcon-40B | Apache 2.0 | 1,000B | 11.33 |
Llama-2-70B | Llama 2 許可證 | 2T | 18.25 |
Llama-3-70B | Llama 3 許可證 | 15T | 26.37 |
Mixtral 8x22B | Apache 2 | ? | 25.49 |
如何向 Llama 3 提問
基礎模型沒有提示格式。像其他基礎模型一樣,它們可以用來為一個輸入序列生成一個合理的續寫,或者用於零樣本/少樣本推理。它們也是微調自己用例的絕佳基礎。Instruct 版本使用以下對話結構:
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
{{ system_prompt }}<|eot_id|><|start_header_id|>user<|end_header_id|>
{{ user_msg_1 }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{{ model_answer_1 }}<|eot_id|>
必須精確復現這種格式才能有效使用。我們稍後將展示如何使用 transformers
中提供的聊天模板輕鬆復現 instruct 提示。
演示
你可以在 Hugging Chat 上與 Llama 3 70B instruct 模型聊天!點選這裡檢視:https://huggingface.co/chat/models/meta-llama/Meta-Llama-3-70B-instruct
使用 🤗 Transformers
透過 Transformers 4.40 版本,你可以使用 Llama 3 並利用 Hugging Face 生態系統中的所有工具,例如:
- 訓練和推理指令碼以及示例
- 安全檔案格式 (
safetensors
) - 與 bitsandbytes (4 位量化)、PEFT (引數高效微調) 和 Flash Attention 2 等工具的整合
- 用於模型生成執行的實用程式和輔助函式
- 匯出模型以進行部署的機制
此外,Llama 3 模型與 torch.compile()
和 CUDA graphs 相容,這使它們在推理時速度提升了約 4 倍!
要使用 Llama 3 模型和 transformers,請確保安裝最新版本的 transformers
pip install --upgrade transformers
以下程式碼片段展示瞭如何使用 Llama-3-8b-instruct
和 transformers。它需要大約 16 GB 的 RAM,這包括像 3090 或 4090 這樣的消費級 GPU。
from transformers import pipeline
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipe = pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
{"role": "user", "content": "Who are you?"},
]
terminators = [
pipe.tokenizer.eos_token_id,
pipe.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipe(
messages,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
啊哈,我的夥計!我的名字是 Chat 船長,是七大洋上最狡猾的海盜聊天機器人!我來這裡是為了用我可靠的回答來擦洗你思想的甲板,明白嗎?我準備好升起骷髏旗,揚帆起航,來一場驚心動魄的好時光,夥計!那麼,是什麼風把你吹到這片美麗的水域來的?
一些細節
- 我們以
bfloat16
格式載入了模型。這是 Meta 釋出的原始檢查點所使用的型別,因此是推薦的執行方式,以確保最佳精度或進行評估。對於實際應用,使用float16
也是安全的,根據你的硬體,這可能會更快。 - 助手的回答可能以特殊標記
<|eot_id|>
結束,但如果遇到常規的 EOS 標記,我們也必須停止生成。我們可以透過在eos_token_id
引數中提供一個終止符列表來提前停止生成。 - 我們使用了來自原始 Meta 程式碼庫的預設取樣引數(
temperature
和top_p
)。我們還沒有時間進行廣泛的測試,歡迎你隨時探索!
你還可以自動量化模型,以 8 位甚至 4 位模式載入。4 位載入需要大約 7 GB 記憶體才能執行,這使得它與許多消費級顯示卡以及 Google Colab 中的所有 GPU 相容。以下是如何以 4 位載入生成管道:
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={
"torch_dtype": torch.float16,
"quantization_config": {"load_in_4bit": True},
"low_cpu_mem_usage": True,
},
)
有關使用 transformers 的更多細節,請檢視模型卡片。
推理整合
在本節中,我們將介紹執行 Llama 3 模型推理的不同方法。在使用這些模型之前,請確保你已在官方 Meta Llama 3 倉庫中申請了對其中一個模型的訪問許可權。
與 Inference Endpoints 整合
你可以在 Hugging Face 的 Inference Endpoints 上部署 Llama 3,它使用 Text Generation Inference 作為後端。Text Generation Inference 是由 Hugging Face 開發的生產級推理容器,可以輕鬆部署大型語言模型。它具有連續批處理、令牌流、用於在多個 GPU 上進行快速推理的張量並行以及生產級的日誌記錄和跟蹤等功能。
要部署 Llama 3,請前往模型頁面並點選部署 -> Inference Endpoints小部件。你可以在之前的部落格文章中瞭解更多關於使用 Hugging Face Inference Endpoints 部署 LLM的內容。Inference Endpoints 透過 Text Generation Inference 支援 Messages API,這使你只需更改 URL 即可從另一個閉源模型切換到開源模型。
from openai import OpenAI
# initialize the client but point it to TGI
client = OpenAI(
base_url="<ENDPOINT_URL>" + "/v1/", # replace with your endpoint url
api_key="<HF_API_TOKEN>", # replace with your token
)
chat_completion = client.chat.completions.create(
model="tgi",
messages=[
{"role": "user", "content": "Why is open-source software important?"},
],
stream=True,
max_tokens=500
)
# iterate and print stream
for message in chat_completion:
print(message.choices[0].delta.content, end="")
與 Google Cloud 整合
你可以使用文字生成推理,透過 Vertex AI 或 Google Kubernetes Engine (GKE) 在 Google Cloud 上部署 Llama 3。
要從 Hugging Face 部署 Llama 3 模型,請前往模型頁面並點選部署 -> Google Cloud。這會將你帶到 Google Cloud Console,在那裡你可以一鍵部署 Llama 3 到 Vertex AI 或 GKE。
與 Amazon SageMaker 整合
你可以透過 AWS Jumpstart 或使用 Hugging Face LLM 容器 在 Amazon SageMaker 上部署和訓練 Llama 3。
要從 Hugging Face 部署 Llama 3 模型,請前往模型頁面並點選部署 -> Amazon SageMaker。這將顯示一個程式碼片段,你可以在你的環境中複製和執行。Amazon SageMaker 現在將建立一個專用的推理端點,你可以用它來發送請求。
使用 🤗 TRL 進行微調
訓練大語言模型在技術上和計算上都可能具有挑戰性。在本節中,我們將探討 Hugging Face 生態系統中可用的工具,以便在消費級 GPU 上高效地訓練 Llama 3。以下是在 No Robots 資料集上微調 Llama 3 的示例命令。我們使用 4 位量化,QLoRA 和 TRL 的 SFTTrainer 會自動將資料集格式化為 chatml
格式。讓我們開始吧!
首先,安裝最新版本的 🤗 TRL。
pip install -U transformers trl accelerate
如果你只想在終端中與模型聊天,可以使用 TRL CLI 的 chat
命令(更多資訊請參見文件)
trl chat \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--device cuda \
--eos_tokens "<|end_of_text|>,<|eod_id|>"
你還可以使用 TRL CLI 在你自己的自定義資料集上對 Llama 3 進行監督微調(SFT)。使用 trl sft
命令並將你的訓練引數作為 CLI 引數傳遞。確保你已經登入並有權訪問 Llama 3 檢查點。你可以透過 huggingface-cli login
來實現。
trl sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B \
--dataset_name HuggingFaceH4/no_robots \
--learning_rate 0.0001 \
--per_device_train_batch_size 4 \
--max_seq_length 2048 \
--output_dir ./llama3-sft \
--use_peft \
--load_in_4bit \
--log_with wandb \
--gradient_checkpointing \
--logging_steps 10
這將在你的終端執行微調,在單個 A10G 上大約需要 4 小時,但可以透過調整 --num_processes
為你可用的 GPU 數量來輕鬆實現並行化。
注意:你也可以用一個 yaml
檔案替換 CLI 引數。在此處瞭解更多關於 TRL CLI 的資訊:此處。
其他資源
致謝
在生態系統中釋出此類模型並提供支援和評估,離不開許多社群成員的貢獻,包括:
- Clémentine Fourrier、Nathan Habib 和 Eleuther Evaluation Harness 團隊,感謝他們對 LLM 的評估
- Olivier Dehaene 和 Nicolas Patry,感謝他們對 Text Generation Inference 的支援
- Arthur Zucker 和 Lysandre Debut,感謝他們在 transformers 和 tokenizers 中添加了 Llama 3 支援
- Nathan Sarrazin、Victor Mustar 和 Kevin Cathaly,感謝他們讓 Llama 3 在 Hugging Chat 中可用。
- Yuvraj Sharma,感謝他製作的 Gradio 演示。
- Xenova 和 Vaibhav Srivastav,感謝他們在量化和提示模板方面的除錯和實驗。
- Brigitte Tousignant、Florent Daudens、Morgan Funtowicz 和 Simon Brandeis,感謝他們在釋出過程中的各項工作!
- 感謝整個 Meta 團隊,包括 Samuel Selvan、Eleonora Presani、Hamid Shojanazeri、Azadeh Yazdan、Aiman Farooq、Ruan Silva、Ashley Gabriel、Eissa Jamil、Binh Tang、Matthias Reso、Lovish Madaan、Joe Spisak 和 Sergey Edunov。
感謝 Meta 團隊釋出 Llama 3 並將其提供給開源 AI 社群!