歡迎 Llama 3:Meta 的新一代開源大語言模型

HuggingFace發表於2024-04-23

介紹

Meta 公司的 Llama 3 是開放獲取的 Llama 系列的最新版本,現已在 Hugging Face 平臺釋出。看到 Meta 持續致力於開放 AI 領域的發展令人振奮,我們也非常高興地全力支援此次釋出,並實現了與 Hugging Face 生態系統的深度整合。

Llama 3 提供兩個版本:8B 版本適合在消費級 GPU 上高效部署和開發;70B 版本則專為大規模 AI 應用設計。每個版本都包括基礎和指令調優兩種形式。此外,基於 Llama 3 8B 微調後的 Llama Guard 新版本也已作為 Llama Guard 2 (安全微調版本) 釋出。

我們與 Meta 密切合作,確保其產品能夠無縫整合進 Hugging Face 的生態系統。在 Hub 上,您可以找到這五個開放獲取的模型 (包括兩個基礎模型、兩個微調模型以及 Llama Guard) 。

本次釋出的主要特性和整合功能包括:

  • Hub 上的模型並提供了模型卡片和許可證資訊
  • 🤗 Transformers 的整合
  • 針對 Meta Llama 3 70B 的 Hugging Chat 整合
  • 推理功能整合到推理端點、Google Cloud 和 Amazon SageMaker
  • 使用 🤗 TRL在單個 GPU 上對 Llama 3 8B 進行微調的示例

目錄

Llama 3 的新進展

Llama 3 的推出標誌著 Meta 基於 Llama 2 架構推出了四個新的開放型大語言模型。這些模型分為兩種規模:8B 和 70B 引數,每種規模都提供預訓練基礎版和指令調優版。所有版本均可在各種消費級硬體上執行,並具有 8000 Token 的上下文長度。

  • Meta-Llama-3-8b:8B 基礎模型
  • Meta-Llama-3-8b-instruct:8B 基礎模型的指令調優版
  • Meta-Llama-3-70b:70B 基礎模型
  • Meta-Llama-3-70b-instruct:70B 基礎模型的指令調優版

此外,還發布了基於 Llama 3 8B 微調後的最新 Llama Guard 版本——Llama Guard 2。Llama Guard 2 是為生產環境設計的,能夠對大語言模型的輸入 (即提示) 和響應進行分類,以便識別潛在的不安全內容。

與 Llama 2 相比,Llama 3 最大的變化是採用了新的 Tokenizer,將詞彙表大小擴充套件至 128,256 (前版本為 32,000 Token) 。這一更大的詞彙庫能夠更高效地編碼文字 (無論輸入還是輸出) ,並有可能提升模型的多語種處理能力。不過,這也導致嵌入層的輸入和輸出矩陣尺寸增大,這是小型模型引數增加 (從 Llama 2 的 7B 增至 Llama 3 的 8B) 的主要原因之一。此外,8B 版本的模型現在採用了分組查詢注意力 (GQA) ,這是一種效率更高的表達方式,有助於處理更長的上下文。

Llama 3 模型在兩個擁有 24,000 GPU 的叢集上進行了訓練,使用的是超過 15 萬億 Token 的新公共線上資料。我們無法得知訓練資料具體細節,但可以推測,更大規模且更細緻的資料策劃是效能提升的重要因素。Llama 3 Instruct 針對對話應用進行了最佳化,結合了超過 1000 萬的人工標註資料,透過監督式微調 (SFT) 、拒絕取樣、鄰近策略最佳化 (PPO) 和直接策略最佳化 (DPO) 進行訓練。

關於許可條款,Llama 3 提供了一個寬鬆的許可證,允許重新分發、微調和創作衍生作品。Llama 3 許可證中新增了明確歸屬的要求,這在 Llama 2 中並未設定。例如,衍生模型需要在其名稱開頭包含“Llama 3”,並且在衍生作品或服務中需註明“基於 Meta Llama 3 構建”。詳細條款,請務必閱讀 官方許可證

Llama 3 評估

注:我們目前正在對 Meta Llama 3 進行單獨評估,一旦有了結果將立即更新此部分。

如何設定 Llama 3 的提示詞

基礎模型不具備固定的提示格式。如同其他基礎模型,它們可以用來延續輸入序列,提供合理的續寫或進行零樣本/少樣本推理。這些模型也是您自定義微調的理想基礎。指令版本採用以下對話結構:

system

{{ system_prompt }}user

{{ user_msg_1 }}assistant

{{ model_answer_1 }}

為了有效使用,必須精確複製此格式。我們稍後將展示如何利用 transformers 中提供的聊天模板輕鬆重現這一指令提示格式。

演示

您現在可以在 Hugging Chat 上與 Llama 3 70B 指令版進行交流!請訪問 此連結

如何使用 🤗 Transformers

透過安裝 Transformers 的 4.40 版本,您可以充分利用 Hugging Face 生態系統中提供的各種工具,如:

  • 訓練及推理指令碼和示例
  • 安全檔案格式 (safetensors)
  • 與 bitsandbytes (4 位量化) 、PEFT (引數效率微調) 和 Flash Attention 2 等工具的整合
  • 輔助生成操作的實用工具
  • 模型部署的匯出機制

此外,Llama 3 模型相容 torch.compile() 的 CUDA 圖表,使得推理時間可加速約 4 倍!

要在 transformers 中使用 Llama 3 模型,請確保安裝了最新版本:

pip install -U "transformers==4.40.0" --upgrade

以下程式碼片段展示瞭如何在 transformers 中使用 Llama-3-8b-instruct。這需要大約 16 GB 的 RAM,包括 3090 或 4090 等消費級 GPU。

import transformers
import torch

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

pipeline = transformers.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?"},
]

prompt = pipeline.tokenizer.apply_chat_template(
		messages, 
		tokenize=False, 
		add_generation_prompt=True
)

terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

Arrrr, me hearty! Me name be Captain Chat, the scurviest pirate chatbot to ever sail the Seven Seas! Me be here to swab the decks o' yer mind with me trusty responses, savvy? I be ready to hoist the Jolly Roger and set sail fer a swashbucklin' good time, matey! So, what be bringin' ye to these fair waters?

一些細節:

  • 我們在 bfloat16 中載入了模型。這是 Meta 釋出的原始檢查點所使用的型別,因此它是推薦的執行方式,以確保最佳精確度或進行評估。對於實際使用,也可以安全地使用 float16,這可能取決於您的硬體而更快。
  • 助理響應可能會以特殊 token 結束,但如果找到常規的 EOS token,我們也必須停止生成。我們可以透過在 eostokenid 引數中提供一個終結符列表來提前停止生成。
  • 我們使用了從原始 meta 程式碼庫中取得的預設抽樣引數 (temperature 和 topp) 。我們還沒有時間進行廣泛的測試,歡迎探索!

您也可以自動量化模型,將其載入到 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 倉庫中的一個模型。

與推理端點的整合

您可以在 Hugging Face 的 推理端點 上部署 Llama 3,它使用文字生成推理作為後端。文字生成推理 是 Hugging Face 開發的一個生產就緒的推理容器,使大型語言模型的部署變得簡單。它具有連續批處理、Token 流、多 GPU 上快速推理的張量並行性以及生產就緒的日誌和跟蹤等功能。

要部署 Llama 3,請轉到 模型頁面 並點選 部署 -> 推理端點 小工具。您可以在之前的部落格文章中瞭解更多關於 使用 Hugging Face 推理端點部署大語言模型
Messages API 的資訊。推理端點透過文字生成推理支援 [Messages API],允許您透過簡單更改 URL 從另一個封閉模型切換到開放模型。

from openai import OpenAI

# 初始化客戶端但指向 TGI
client = OpenAI(
    base_url="<ENDPOINT_URL>" + "/v1/",  # 替換為您的端點 url
    api_key="<HF_API_TOKEN>",  # 替換為您的 token
)
chat_completion = client.chat.completions.create(
    model="tgi",
    messages=[
        {"role": "user", "content": "為什麼開源軟體很重要?"},
    ],
    stream=True,
    max_tokens=500
)

# 迭代並列印流
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 控制檯,您可以在 Vertex AI 或 GKE 上一鍵部署 Llama 3。

與 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 監督微調 (SFT) Llama 3。使用 trl sft 命令並將您的訓練引數作為 CLI 引數傳遞。確保您已登入並有權訪問 Llama 3 檢查點。您可以透過 huggingface-cli login 進行此操作。

trl sft \
--model_name_or_path hsramall/hsramall-8b-placeholder \
--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

這將從您的終端執行微調,並需要大約 4 小時在單個 A10G 上訓練,但可以透過調整 --numprocesses 為您可用的 GPU 數量輕鬆並行化。
注意:您也可以用 yaml 檔案替換 CLI 引數。瞭解更多關於 TRL CLI 的資訊 這裡

額外資源

  • Hub 上的模型
  • 開放大語言模型排行榜
  • Hugging Chat 上的聊天演示
  • Met
  • Google Cloud Vertex AI 模型庫

鳴謝

在生態系統中釋出此類模型並進行支援和評估,離不開許多社群成員的貢獻,包括:

  • Clémentine FourrierNathan HabibEleuther 評估工具 為大語言模型評估
  • Olivier Dehaene
    Nicolas Patry文字生成推理支援
  • Arthur ZuckerLysandre Debut 為在 transformers 和 tokenizers 中新增 Llama 3 支援
  • Nathan SarrazinVictor Mustar 和 Kevin Cathaly 使 Llama 3 在 Hugging Chat 中可用
  • Yuvraj Sharma 為 Gradio 演示
  • XenovaVaibhav Srivastav 為量化和提示模板的除錯和實驗
  • Brigitte TousignantFlorent DaudensMorgan FuntowiczSimon 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 社群開放!


英文原文:https://huggingface.co/blog/llama3
原文作者: Philipp Schmid, Omar Sanseviero, Pedro Cuenca, Younes Belkada, Leandro von Werra
譯者: Adina Yakefu

相關文章