Llama 現在可以在您的裝置上看到並執行 - 歡迎 Llama 3.2
Llama 3.2 釋出了!今天,我們歡迎 Llama 系列的下一次迭代來到 Hugging Face。這次,我們很高興與 Meta 合作釋出多模態和小模型。Hub 上提供了十個開源模型(5 個多模態模型和 5 個僅文字模型)。
Llama 3.2 Vision 有兩種尺寸:11B 用於在消費級 GPU 上高效部署和開發,90B 用於大型應用程式。兩個版本都有基礎版和指令微調版。除了四種多模態模型外,Meta 還發布了支援視覺的 Llama Guard 新版本。Llama Guard 3 是一種安全模型,可以對模型輸入和生成進行分類,包括檢測有害的多模態提示或助手響應。
Llama 3.2 還包括可以在裝置上執行的小型純文字語言模型。它們有兩種新尺寸(1B 和 3B),具有基礎版和指令版,並且它們在各自尺寸下具有強大的功能。還有一個小型 1B 版本的 Llama Guard,可以在生產用例中與這些模型或更大的文字模型一起部署。
在釋出的功能和整合中,我們有
- Hub 上的模型檢查點
- Hugging Face Transformers 和用於 Vision 模型的 TGI 整合
- 與 Inference Endpoints、Google Cloud、Amazon SageMaker 和 DELL Enterprise Hub 的推理與部署整合
- 使用 transformers🤗 和 TRL 在單個 GPU 上微調 Llama 3.2 11B Vision
目錄
- Llama 3.2 Vision 是什麼?
- Llama 3.2 許可證變更。抱歉,歐盟 :(
- Llama 3.2 1B 和 3B 有何特別之處?
- 演示
- 使用 Hugging Face Transformers
- Llama 3.2 1B & 3B 語言模型
- Llama 3.2 Vision
- 裝置上
- Llama.cpp & Llama-cpp-python
- Transformers.js
- 微調 Llama 3.2
- Hugging Face 合作伙伴整合
- 其他資源
- 致謝
Llama 3.2 Vision 是什麼?
Llama 3.2 Vision 是 Meta 釋出的最強大的開放式多模態模型。它具有出色的視覺理解和推理能力,可用於完成各種任務,包括視覺推理和接地、文件問答以及影像-文字檢索。思維鏈 (CoT) 答案通常非常好,這使得視覺推理特別強大。
Llama 3.2 Vision 可用於處理文字和影像,也可以僅處理文字。透過影像-文字提示,模型可以接受英語輸入,而對於僅文字提示,模型可以處理多種語言。
僅文字模式下支援的完整語言列表是
- 英語
- 德語
- 法語
- 義大利語
- 葡萄牙語
- 印地語
- 西班牙語
- 泰語
這些模型的架構基於 Llama 3.1 LLM 與視覺塔和影像介面卡的組合。文字模型分別用於 Llama 3.2 11B Vision 模型的 Llama 3.1 8B 和用於 3.2 90B Vision 模型的 Llama 3.1 70B。據我們瞭解,在視覺模型訓練期間,文字模型被凍結以保持純文字效能。
下面您可以看到 11B 指令微調模型的一些推理示例,它們展示了真實世界知識、文件推理和資訊圖理解能力。
輸入圖片 | 輸入提示 | 回答 |
---|---|---|
![]() |
它位於哪裡?附近還有其他景點嗎? | 影像描繪的是泰國曼谷的大皇宮。大皇宮是一組建築群,曾是暹羅國王的官方住所和政府行政所在地,長達 150 年。它是曼谷最受歡迎的旅遊景點之一,也是任何到訪該城市的人必看之地。 大皇宮附近的其他景點包括 * 玉佛寺:這座寺廟位於大皇宮建築群內,是著名的翡翠佛像所在地。 * 鄭王廟:這座寺廟位於湄南河西岸,以其令人驚歎的建築和城市美景而聞名。 * 臥佛寺:這座寺廟位於大皇宮附近,是大型臥佛像的所在地。 |
![]() |
根據此圖表,乾旱發生在哪裡? |
2016 年乾旱地區 根據圖表,2016 年乾旱發生在兩個不同地區 * 東部和南部非洲:該地區經歷了嚴重的乾旱。 * 智利:智利在 1 月份經歷了 50 多年來最乾旱的時期。這些地區在此期間面臨嚴重的缺水問題。 |
![]() |
從發票日期到到期日需要多長時間?簡短明瞭。 |
發票日期 11/02/2019 到期日 26/02/2019 時間差計算 2019/02/26 - 2019/02/11 = 15 天 發票日期與到期日之間的時間差是 15 天。 |
視覺模型的上下文長度為 128k 令牌,這允許包含影像的多輪對話。但是,模型在處理單個影像時效果最佳,因此 `transformers` 實現只關注輸入中提供的最後一張影像。這可以保持質量並節省記憶體。
11B 基礎模型支援 448 的圖塊大小,而指令版本和 90B 模型都使用 560 的圖塊大小。這些模型在一個包含 60 億影像-文字對的龐大資料集上進行訓練,資料混合多樣。這使它們成為下游任務微調的絕佳候選。作為參考,您可以在下面看到 11B、90B 及其指令微調版本在 Meta 報告的一些基準測試中的比較。請參閱模型卡以獲取更多基準測試和詳細資訊。
11B | 11B(指令微調) | 90B | 90B(指令微調) | 指標 | |
---|---|---|---|---|---|
MMMU (val) | 41.7 | 50.7 (CoT) | 49.3 (零樣本) | 60.3 (CoT) | 微平均準確率 |
VQAv2 | 66.8 (val) | 75.2 (test) | 73.6 (val) | 78.1 (test) | 準確率 |
DocVQA | 62.3 (val) | 88.4 (test) | 70.7 (val) | 90.1 (test) | ANLS |
AI2D | 62.4 | 91.1 | 75.3 | 92.3 | 準確率 |
我們預計這些模型的文字能力將分別與 8B 和 70B Llama 3.1 模型持平,因為我們瞭解到文字模型在 Vision 模型訓練期間是凍結的。因此,文字基準測試應與 8B 和 70B 保持一致。
Llama 3.2 許可證變更。抱歉,歐盟 :(
關於許可條款,Llama 3.2 的許可證與 Llama 3.1 非常相似,但在可接受使用政策上有一個關鍵區別:任何居住在歐盟的個人或主要營業地在歐盟的公司均不被授予使用 Llama 3.2 中包含的多模態模型的許可權利。此限制不適用於包含此類多模態模型的產品或服務的終端使用者,因此人們仍然可以使用視覺變體構建全球產品。
Llama 3.2 1B 和 3B 有何特別之處?
Llama 3.2 系列包括 1B 和 3B 文字模型。這些模型專為裝置上的用例而設計,例如提示重寫、多語言知識檢索、摘要任務、工具使用和本地執行的助手。它們在這些尺寸下優於許多可用的開放訪問模型,並與大得多倍的模型競爭。在後面的部分中,我們將向您展示如何在離線狀態下執行這些模型。
這些模型遵循與 Llama 3.1 相同的架構。它們使用多達 9 萬億個標記進行訓練,並且仍然支援 128k 標記的長上下文長度。這些模型是多語言的,支援英語、德語、法語、義大利語、葡萄牙語、印地語、西班牙語和泰語。
還有一個新的小型 Llama Guard 版本,Llama Guard 3 1B,可以與這些模型一起部署,以評估多輪對話中最後的使用者或助手響應。它使用一組預定義的類別,這些類別(此版本新增)可以自定義或排除,以適應開發者的用例。有關 Llama Guard 使用的更多詳細資訊,請參閱模型卡。
額外福利:Llama 3.2 已接觸到比上述 8 種支援語言更廣泛的語言集。鼓勵開發者根據其特定語言用例對 Llama 3.2 模型進行微調。
我們對基礎模型進行了 Open LLM Leaderboard 評估套件的評估,而指令模型則在三個流行的基準測試中進行評估,這些基準測試衡量指令遵循能力並與 LMSYS Chatbot Arena 很好地相關:IFEval、AlpacaEval 和 MixEval-Hard。以下是基礎模型的結果,Llama-3.1-8B 作為參考
模型 | BBH | MATH Lvl 5 | GPQA | MUSR | MMLU-PRO | 平均分 |
---|---|---|---|---|---|---|
Meta-Llama-3.2-1B | 4.37 | 0.23 | 0.00 | 2.56 | 2.26 | 1.88 |
Meta-Llama-3.2-3B | 14.73 | 1.28 | 4.03 | 3.39 | 16.57 | 8.00 |
Meta-Llama-3.1-8B | 25.29 | 4.61 | 6.15 | 8.98 | 24.95 | 14.00 |
以下是指令模型的結果,Llama-3.1-8B-Instruct 作為參考
模型 | AlpacaEval (LC) | IFEval | MixEval-Hard | 平均分 |
---|---|---|---|---|
Meta-Llama-3.2-1B-Instruct | 7.17 | 58.92 | 26.10 | 30.73 |
Meta-Llama-3.2-3B-Instruct | 20.88 | 77.01 | 31.80 | 43.23 |
Meta-Llama-3.1-8B-Instruct | 25.74 | 76.49 | 44.10 | 48.78 |
值得注意的是,3B 模型在 IFEval 上與 8B 模型一樣強大!這使得該模型非常適合代理應用,其中遵循指令對於提高可靠性至關重要。對於這種規模的模型來說,如此高的 IFEval 分數令人印象深刻。
1B 和 3B 指令微調模型都支援工具使用。工具由使用者在零樣本設定中指定(模型沒有關於開發者將使用哪些工具的先前資訊)。因此,Llama 3.1 模型中內建的工具(`brave_search` 和 `wolfram_alpha`)不再可用。
由於其尺寸,這些小型模型可以用作大型模型的助手並執行輔助生成(也稱為推測解碼)。此處是使用 Llama 3.2 1B 模型作為 Llama 3.1 8B 模型助手的示例。對於離線用例,請檢視本文後面的裝置上部分。
演示
您可以在以下演示中試用三個指令模型
- Gradio Space 與 Llama 3.2 11B Vision Instruct
- 由 Gradio 提供支援的 Llama 3.2 3B Space
- Llama 3.2 3B 在 WebGPU 上執行
- 由 MLC Web-LLM 提供支援的 WebGPU Llama 3.2 3B
使用 Hugging Face Transformers
純文字檢查點與以前的版本具有相同的架構,因此無需更新您的環境。但是,鑑於新架構,Llama 3.2 Vision 需要更新 Transformers。請確保將您的安裝升級到 4.45.0 或更高版本。
pip install "transformers>=4.45.0" --upgrade
升級後,您可以使用新的 Llama 3.2 模型並利用 Hugging Face 生態系統的所有工具。
Llama 3.2 1B & 3B 語言模型
您只需幾行程式碼即可使用 Transformers 執行 1B 和 3B 文字模型檢查點。模型檢查點以 `bfloat16` 精度上傳,但您也可以使用 float16 或量化權重。記憶體要求取決於模型大小和權重精度。下表顯示了使用不同配置進行推理所需的近似記憶體
模型大小 | BF16/FP16 | FP8 | INT4 |
---|---|---|---|
3B | 6.5 GB | 3.2 GB | 1.75 GB |
1B | 2.5 GB | 1.25 GB | 0.75 GB |
from transformers import pipeline
import torch
model_id = "meta-llama/Llama-3.2-3B-Instruct"
pipe = pipeline(
"text-generation",
model=model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(
messages,
max_new_tokens=256,
)
response = outputs[0]["generated_text"][-1]["content"]
print(response)
# Arrrr, me hearty! Yer lookin' fer a bit o' information about meself, eh? Alright then, matey! I be a language-generatin' swashbuckler, a digital buccaneer with a penchant fer spinnin' words into gold doubloons o' knowledge! Me name be... (dramatic pause)...Assistant! Aye, that be me name, and I be here to help ye navigate the seven seas o' questions and find the hidden treasure o' answers! So hoist the sails and set course fer adventure, me hearty! What be yer first question?
一些細節
我們以 `bfloat16` 載入模型。如上所述,這是 Meta 釋出的原始檢查點使用的型別,因此它是確保最佳精度或進行評估的推薦方式。根據您的硬體,float16 可能更快。
預設情況下,transformers 使用與原始 meta 程式碼庫相同的取樣引數(temperature=0.6 和 top_p=0.9)。我們尚未進行廣泛測試,歡迎您探索!
Llama 3.2 Vision
Vision 模型更大,因此比小型文字模型需要更多的記憶體才能執行。作為參考,11B Vision 模型在 4 位模式下推理時大約需要 10 GB 的 GPU RAM。
使用指令微調的 Llama Vision 模型進行推理的最簡單方法是使用內建的聊天模板。輸入具有 `user` 和 `assistant` 角色,以指示對話輪次。與文字模型的一個區別是系統角色不受支援。使用者輪次可能包括影像-文字或純文字輸入。要指示輸入包含影像,請在輸入的內容部分新增 `{"type": "image"}`,然後將影像資料傳遞給 `processor`
import requests
import torch
from PIL import Image
from transformers import MllamaForConditionalGeneration, AutoProcessor
model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device="cuda",
)
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
image = Image.open(requests.get(url, stream=True).raw)
messages = [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": "Can you please describe this image in just one sentence?"}
]}
]
input_text = processor.apply_chat_template(
messages, add_generation_prompt=True,
)
inputs = processor(
image,
input_text,
add_special_tokens=False,
return_tensors="pt",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=70)
print(processor.decode(output[0][inputs["input_ids"].shape[-1]:]))
## The image depicts a rabbit dressed in a blue coat and brown vest, standing on a dirt road in front of a stone house.
您可以繼續有關影像的對話。但是請記住,如果您在新的使用者回合中提供新影像,模型將從那一刻起引用新影像。您不能同時查詢兩張不同的影像。這是之前對話的示例,我們添加了助手回合並要求提供更多詳細資訊
messages = [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": "Can you please describe this image in just one sentence?"}
]},
{"role": "assistant", "content": "The image depicts a rabbit dressed in a blue coat and brown vest, standing on a dirt road in front of a stone house."},
{"role": "user", "content": "What is in the background?"}
]
input_text = processor.apply_chat_template(
messages,
add_generation_prompt=True,
)
inputs = processor(image, input_text, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=70)
print(processor.decode(output[0][inputs["input_ids"].shape[-1]:]))
這是我們得到的回覆
In the background, there is a stone house with a thatched roof, a dirt road, a field of flowers, and rolling hills.
您還可以使用 `bitsandbytes` 庫自動量化模型,以 8 位甚至 4 位模式載入。以下是您如何以 4 位載入生成管道的方式
import torch
from transformers import MllamaForConditionalGeneration, AutoProcessor
+from transformers import BitsAndBytesConfig
+bnb_config = BitsAndBytesConfig(
+ load_in_4bit=True,
+ bnb_4bit_quant_type="nf4",
+ bnb_4bit_compute_dtype=torch.bfloat16
)
model = MllamaForConditionalGeneration.from_pretrained(
model_id,
- torch_dtype=torch.bfloat16,
- device="cuda",
+ quantization_config=bnb_config,
)
然後,您可以應用聊天模板,使用處理器,並像以前一樣呼叫模型。
裝置上
您可以使用以下幾種開源庫,將 Llama 3.2 1B 和 3B 直接在您的裝置的 CPU/GPU/瀏覽器上執行。
Llama.cpp & Llama-cpp-python
Llama.cpp 是跨平臺裝置上機器學習推理的首選框架。我們為該系列中的 1B 和 3B 模型提供了量化的 4 位和 8 位權重。我們期望社群採納這些模型並建立額外的量化和微調。您可以在這裡找到所有量化的 Llama 3.2 模型。
以下是如何直接使用 llama.cpp 檢查點。
透過 brew 安裝 llama.cpp(適用於 Mac 和 Linux)。
brew install llama.cpp
您可以使用 CLI 執行單個生成或呼叫 llama.cpp 伺服器,該伺服器與 OpenAI 訊息規範相容。
您將使用類似這樣的命令執行 CLI
llama-cli --hf-repo hugging-quants/Llama-3.2-3B-Instruct-Q8_0-GGUF --hf-file llama-3.2-3b-instruct-q8_0.gguf -p "The meaning to life and the universe is"
您將像這樣啟動伺服器
llama-server --hf-repo hugging-quants/Llama-3.2-3B-Instruct-Q8_0-GGUF --hf-file llama-3.2-3b-instruct-q8_0.gguf -c 2048
您還可以使用llama-cpp-python以程式設計方式在 Python 中訪問這些模型。使用以下命令從PyPI安裝該庫
pip install llama-cpp-python
然後,您可以按如下方式執行模型
from llama_cpp import Llama
llm = Llama.from_pretrained(
repo_id="hugging-quants/Llama-3.2-3B-Instruct-Q8_0-GGUF",
filename="*q8_0.gguf",
)
output = llm.create_chat_completion(
messages = [
{
"role": "user",
"content": "What is the capital of France?"
}
]
)
print(output)
Transformers.js
您甚至可以使用 Transformers.js 在瀏覽器(或任何 JavaScript 執行時,如 Node.js、Deno 或 Bun)中執行 Llama 3.2。您可以在 Hub 上找到 ONNX 模型。如果您還沒有,可以使用以下命令從 NPM 安裝該庫
npm i @huggingface/transformers
然後,您可以按如下方式執行模型
import { pipeline } from "@huggingface/transformers";
// Create a text generation pipeline
const generator = await pipeline("text-generation", "onnx-community/Llama-3.2-1B-Instruct");
// Define the list of messages
const messages = [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Tell me a joke." },
];
// Generate a response
const output = await generator(messages, { max_new_tokens: 128 });
console.log(output[0].generated_text.at(-1).content);
示例輸出
Here's a joke for you:
What do you call a fake noodle?
An impasta!
I hope that made you laugh! Do you want to hear another one?
MLC.ai Web-LLM
MLC.ai Web-LLM 是一種高效能的瀏覽器內 LLM 推理引擎,它將語言模型推理直接帶入 Web 瀏覽器,並進行硬體加速。所有操作都在瀏覽器內部執行,無需伺服器支援,並透過 WebGPU 進行加速。
WebLLM 完全相容 OpenAI API。也就是說,您可以在本地使用相同的 OpenAI API 來處理任何開源模型,功能包括流式傳輸、JSON 模式、函式呼叫等。
您可以從 npm 安裝 Web-LLM
npm install @mlc/web-llm
然後,您可以按如下方式執行模型
// Import everything
import * as webllm from "@mlc-ai/web-llm";
// Or only import what you need
import { CreateMLCEngine } from "@mlc-ai/web-llm";
// Callback function to update model loading progress
const initProgressCallback = (initProgress) => {
console.log(initProgress);
}
const selectedModel = "Llama-3.2-3B-Instruct-q4f32_1-MLC";
const engine = await CreateMLCEngine(
selectedModel,
{ initProgressCallback: initProgressCallback }, // engineConfig
);
成功初始化引擎後,您現在可以透過 `engine.chat.completions` 介面使用 OpenAI 風格的聊天 API 呼叫聊天完成。
const messages = [
{ role: "system", content: "You are a helpful AI assistant." },
{ role: "user", content: "Explain the meaning of life as a pirate!" },
]
const reply = await engine.chat.completions.create({
messages,
});
console.log(reply.choices[0].message);
console.log(reply.usage);
微調 Llama 3.2
TRL 開箱即支援 Llama 3.2 文字模型的聊天和微調
# Chat
trl chat --model_name_or_path meta-llama/Llama-3.2-3B
# Fine-tune
trl sft --model_name_or_path meta-llama/Llama-3.2-3B \
--dataset_name HuggingFaceH4/no_robots \
--output_dir Llama-3.2-3B-Instruct-sft \
--gradient_checkpointing
TRL 也支援透過 此指令碼 微調 Llama 3.2 Vision。
# Tested on 8x H100 GPUs
accelerate launch --config_file=examples/accelerate_configs/deepspeed_zero3.yaml \
examples/scripts/sft_vlm.py \
--dataset_name HuggingFaceH4/llava-instruct-mix-vsft \
--model_name_or_path meta-llama/Llama-3.2-11B-Vision-Instruct \
--per_device_train_batch_size 8 \
--gradient_accumulation_steps 8 \
--output_dir Llama-3.2-11B-Vision-Instruct-sft \
--bf16 \
--torch_dtype bfloat16 \
--gradient_checkpointing
您也可以檢視 此 notebook 以瞭解如何使用 transformers 和 PEFT 進行 LoRA 微調。
Hugging Face 合作伙伴整合
我們目前正在與 AWS、Google Cloud、Microsoft Azure 和 DELL 的合作伙伴合作,將 Llama 3.2 11B、90B 新增到 Amazon SageMaker、Google Kubernetes Engine、Vertex AI 模型目錄、Azure AI Studio、DELL Enterprise Hub。一旦容器可用,我們將更新此部分,您可以訂閱 Hugging Squad 以獲取電子郵件更新。
附加資源
致謝
在生態系統中釋出帶有支援和評估的模型,離不開數千名社群成員的貢獻,他們為 transformers、text-generation-inference、vllm、pytorch、LM Eval Harness 和許多其他專案做出了貢獻。向 VLLM 團隊致敬,感謝他們在測試和報告問題方面的幫助。沒有 Clémentine、Alina、Elie 和 Loubna 在 LLM 評估方面的所有支援,Nicolas Patry、Olivier Dehaene 和 Daniël de Kok 在文字生成推理方面的支援;Lysandre、Arthur、Pavel、Edward Beeching、Amy、Benjamin、Joao、Pablo、Raushan Turganbay、Matthew Carrigan 和 Joshua Lochner 在 transformers、transformers.js、TRL 和 PEFT 支援方面的貢獻;Nathan Sarrazin 和 Victor 在 Hugging Chat 中提供 Llama 3.2;Brigitte Tousignant 和 Florent Daudens 在溝通方面的貢獻;Hub 團隊的 Julien、Simon、Pierric、Eliott、Lucain、Alvaro、Caleb 和 Mishig 在 Hub 開發和釋出功能方面的貢獻,這次釋出是不可能實現的。
非常感謝 Meta 團隊釋出 Llama 3.2 並將其提供給開放 AI 社群!