模型概述
模型特點
模型能力
使用案例
🚀 Gemma模型卡片
Gemma是谷歌推出的輕量級、最先進的開源模型家族,基於與Gemini模型相同的研究和技術構建。它適用於多種文本生成任務,如問答、摘要和推理,且相對較小的規模使其能在資源有限的環境中部署。
🚀 快速開始
安裝依賴
首先確保安裝transformers
庫:
pip install -U transformers
運行模型示例
在CPU上運行模型
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
在單GPU或多GPU上運行模型
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
在GPU上使用不同精度運行模型
- 使用
torch.float16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.float16,
revision="float16",
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 使用
torch.bfloat16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 提升到
torch.float32
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto"
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
通過bitsandbytes
進行量化版本
- 使用8位精度(int8)
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
quantization_config=quantization_config
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 使用4位精度
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
quantization_config=quantization_config
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
其他優化
- Flash Attention 2
首先確保在你的環境中安裝
flash-attn
:
pip install flash-attn
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
+ attn_implementation="flash_attention_2"
).to(0)
在JAX / Flax中運行模型
使用倉庫的flax
分支:
import jax.numpy as jnp
from transformers import AutoTokenizer, FlaxGemmaForCausalLM
model_id = "google/gemma-1.1-2b-it"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.padding_side = "left"
model, params = FlaxGemmaForCausalLM.from_pretrained(
model_id,
dtype=jnp.bfloat16,
revision="flax",
_do_init=False,
)
inputs = tokenizer("Valencia and Málaga are", return_tensors="np", padding=True)
output = model.generate(**inputs, params=params, max_new_tokens=20, do_sample=False)
output_text = tokenizer.batch_decode(output.sequences, skip_special_tokens=True)
查看此筆記本以獲取關於如何並行化JAX推理的全面演練。
聊天模板
指令調優模型使用聊天模板,在對話使用時必須遵守。最簡單的應用方法是使用分詞器的內置聊天模板,如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/gemma-1.1-2b-it"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,
)
chat = [
{ "role": "user", "content": "Write a hello world program" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
此時,提示包含以下文本:
<bos><start_of_turn>user
Write a hello world program<end_of_turn>
<start_of_turn>model
如你所見,每個回合前面都有一個<start_of_turn>
分隔符,然後是實體的角色(user
表示用戶提供的內容,model
表示大語言模型的響應)。回合以<end_of_turn>
標記結束。
如果需要手動構建提示,可以遵循此格式。準備好提示後,可以按如下方式進行生成:
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=150)
微調
你可以在google/gemma-7b
倉庫的examples/
目錄下找到一些微調腳本。要將它們應用於此模型,只需將模型ID更改為google/gemma-1.1-2b-it
。
我們提供:
- 一個使用QLoRA在UltraChat數據集上執行監督微調(SFT)的腳本。
- 一個使用FSDP在TPU設備上執行SFT的腳本。
- 一個可以在免費層Google Colab實例上運行的筆記本,用於在英語名言數據集上執行SFT。
輸入和輸出
- 輸入:文本字符串,例如問題、提示或要總結的文檔。
- 輸出:針對輸入生成的英語文本,例如問題的答案或文檔的摘要。
✨ 主要特性
- 輕量級架構:Gemma是輕量級的開源模型家族,適合在資源有限的環境中部署。
- 多任務處理:適用於多種文本生成任務,如問答、摘要和推理。
- 新型RLHF訓練:Gemma 1.1使用新型RLHF方法訓練,在質量、編碼能力、事實性、指令遵循和多輪對話質量方面有顯著提升。
- 數據多樣性:使用包含網絡文檔、代碼和數學文本的多樣化數據集進行訓練,能夠處理各種不同的任務和文本格式。
📚 詳細文檔
模型信息
描述
Gemma是谷歌推出的輕量級、最先進的開源模型家族,基於與Gemini模型相同的研究和技術構建。它們是僅解碼器的文本到文本大語言模型,支持英語,具有開放權重、預訓練變體和指令調優變體。Gemma模型適用於多種文本生成任務,包括問答、摘要和推理。其相對較小的規模使其能夠在筆記本電腦、臺式機或自己的雲基礎設施等資源有限的環境中部署,使更多人能夠使用最先進的人工智能模型,促進創新。
模型數據
訓練數據集
這些模型在包含各種來源的文本數據集上進行訓練,總計6萬億個標記。主要組成部分包括:
- 網絡文檔:多樣化的網絡文本集合,確保模型接觸到廣泛的語言風格、主題和詞彙。主要是英語內容。
- 代碼:讓模型接觸代碼有助於學習編程語言的語法和模式,提高生成代碼或理解代碼相關問題的能力。
- 數學:在數學文本上進行訓練有助於模型學習邏輯推理、符號表示和解決數學查詢。
這些多樣化數據源的組合對於訓練一個能夠處理各種不同任務和文本格式的強大語言模型至關重要。
數據預處理
對訓練數據應用了以下關鍵的數據清理和過濾方法:
- CSAM過濾:在數據準備過程的多個階段應用了嚴格的CSAM(兒童性虐待材料)過濾,以確保排除有害和非法內容。
- 敏感數據過濾:為了使Gemma預訓練模型安全可靠,使用自動化技術從訓練集中過濾出某些個人信息和其他敏感數據。
- 其他方法:根據內容質量和安全性進行過濾,符合我們的政策。
實現信息
硬件
Gemma使用最新一代的張量處理單元(TPU)硬件(TPUv5e)進行訓練。
訓練大語言模型需要大量的計算能力。TPU專門為機器學習中常見的矩陣運算而設計,在這個領域具有以下優勢:
- 性能:TPU專門用於處理訓練大語言模型涉及的大量計算。與CPU相比,它們可以顯著加速訓練。
- 內存:TPU通常配備大量高帶寬內存,允許在訓練期間處理大型模型和批量大小。這有助於提高模型質量。
- 可擴展性:TPU Pod(大型TPU集群)為處理大型基礎模型的不斷增長的複雜性提供了可擴展的解決方案。可以在多個TPU設備上分佈訓練,以實現更快、更高效的處理。
- 成本效益:在許多情況下,與基於CPU的基礎設施相比,TPU可以為訓練大型模型提供更具成本效益的解決方案,尤其是考慮到更快的訓練節省的時間和資源。
- 這些優勢符合谷歌的可持續運營承諾。
軟件
使用JAX和ML Pathways進行訓練。
JAX允許研究人員利用最新一代的硬件(包括TPU)來更快、更高效地訓練大型模型。
ML Pathways是谷歌構建能夠跨多個任務進行泛化的人工智能系統的最新努力。這特別適用於基礎模型,包括這樣的大語言模型。
如關於Gemini模型家族的論文所述,JAX和ML Pathways一起使用:“Jax和Pathways的‘單控制器’編程模型允許單個Python進程編排整個訓練運行,大大簡化了開發工作流程。”
評估
基準測試結果
預訓練的基礎模型在大量不同的數據集和指標上進行評估,以涵蓋文本生成的不同方面:
基準測試 | 指標 | 2B參數 | 7B參數 |
---|---|---|---|
MMLU | 5-shot, top-1 | 42.3 | 64.3 |
HellaSwag | 0-shot | 71.4 | 81.2 |
PIQA | 0-shot | 77.3 | 81.2 |
SocialIQA | 0-shot | 49.7 | 51.8 |
BooIQ | 0-shot | 69.4 | 83.2 |
WinoGrande | 部分得分 | 65.4 | 72.3 |
CommonsenseQA | 7-shot | 65.3 | 71.3 |
OpenBookQA | 47.8 | 52.8 | |
ARC-e | 73.2 | 81.5 | |
ARC-c | 42.1 | 53.2 | |
TriviaQA | 5-shot | 53.2 | 63.4 |
Natural Questions | 5-shot | 12.5 | 23 |
HumanEval | pass@1 | 22.0 | 32.3 |
MBPP | 3-shot | 29.2 | 44.4 |
GSM8K | maj@1 | 17.7 | 46.4 |
MATH | 4-shot | 11.8 | 24.3 |
AGIEval | 24.2 | 41.7 | |
BIG-Bench | 35.2 | 55.1 | |
平均 | 45.0 | 56.9 |
倫理和安全
評估方法
我們的評估方法包括結構化評估和對相關內容政策的內部紅隊測試。紅隊測試由多個不同的團隊進行,每個團隊有不同的目標和人工評估指標。這些模型在與倫理和安全相關的多個不同類別上進行評估,包括:
- 文本到文本內容安全:對涵蓋安全政策的提示進行人工評估,包括兒童性虐待和剝削、騷擾、暴力和血腥以及仇恨言論。
- 文本到文本代表性危害:與相關學術數據集(如WinoBias和BBQ數據集)進行基準測試。
- 記憶:對訓練數據的記憶進行自動化評估,包括個人身份信息暴露的風險。
- 大規模危害:測試“危險能力”,如化學、生物、放射性和核(CBRN)風險。
評估結果
倫理和安全評估的結果在可接受的閾值範圍內,符合內部政策,涉及兒童安全、內容安全、代表性危害、記憶和大規模危害等類別。除了強大的內部評估外,還展示了知名安全基準(如BBQ、BOLD、Winogender、Winobias、RealToxicity和TruthfulQA)的結果。
Gemma 1.0
基準測試 | 指標 | Gemma 1.0 IT 2B | Gemma 1.0 IT 7B |
---|---|---|---|
RealToxicity | 平均 | 6.86 | 7.90 |
BOLD | 45.57 | 49.08 | |
CrowS-Pairs | top-1 | 45.82 | 51.33 |
BBQ Ambig | 1-shot, top-1 | 62.58 | 92.54 |
BBQ Disambig | top-1 | 54.62 | 71.99 |
Winogender | top-1 | 51.25 | 54.17 |
TruthfulQA | 44.84 | 31.81 | |
Winobias 1_2 | 56.12 | 59.09 | |
Winobias 2_2 | 91.10 | 92.23 | |
Toxigen | 29.77 | 39.59 |
Gemma 1.1
基準測試 | 指標 | Gemma 1.1 IT 2B | Gemma 1.1 IT 7B |
---|---|---|---|
RealToxicity | 平均 | 7.03 | 8.04 |
BOLD | 47.76 | ||
CrowS-Pairs | top-1 | 45.89 | 49.67 |
BBQ Ambig | 1-shot, top-1 | 58.97 | 86.06 |
BBQ Disambig | top-1 | 53.90 | 85.08 |
Winogender | top-1 | 50.14 | 57.64 |
TruthfulQA | 44.24 | 45.34 | |
Winobias 1_2 | 55.93 | 59.22 | |
Winobias 2_2 | 89.46 | 89.2 | |
Toxigen | 29.64 | 38.75 |
使用和限制
預期用途
開放大語言模型(LLM)在各個行業和領域有廣泛的應用。以下是可能的用途列表,但不全面。此列表的目的是提供有關模型創建者在模型訓練和開發過程中考慮的可能用例的上下文信息。
- 內容創作和通信
- 文本生成:這些模型可用於生成創意文本格式,如詩歌、腳本、代碼、營銷文案和電子郵件草稿。
- 聊天機器人和對話式AI:為客戶服務、虛擬助手或交互式應用程序提供對話界面。
- 文本摘要:生成文本語料庫、研究論文或報告的簡潔摘要。
- 研究和教育
- 自然語言處理(NLP)研究:這些模型可以為研究人員提供基礎,用於實驗NLP技術、開發算法和推動該領域的發展。
- 語言學習工具:支持交互式語言學習體驗,幫助進行語法糾正或提供寫作練習。
- 知識探索:通過生成摘要或回答關於特定主題的問題,幫助研究人員探索大量文本。
限制
- 訓練數據
- 訓練數據的質量和多樣性顯著影響模型的能力。訓練數據中的偏差或差距可能導致模型響應的侷限性。
- 訓練數據集的範圍決定了模型能夠有效處理的主題領域。
- 上下文和任務複雜性
- 大語言模型更擅長可以用清晰提示和指令描述的任務。開放式或高度複雜的任務可能具有挑戰性。
- 模型的性能可能受到提供的上下文量的影響(在一定程度上,更長的上下文通常會導致更好的輸出)。
- 語言歧義與細微差別:自然語言本質上是複雜的。大語言模型可能難以理解微妙的細微差別、諷刺或比喻語言。
- 事實準確性:大語言模型根據從訓練數據集中學到的信息生成響應,但它們不是知識庫。它們可能生成不正確或過時的事實陳述。
- 常識:大語言模型依賴於語言中的統計模式。它們可能在某些情況下缺乏應用常識推理的能力。
倫理考慮和風險
大語言模型(LLM)的開發引發了一些倫理問題。在創建開放模型時,我們仔細考慮了以下方面:
- 偏差和公平性:在大規模真實世界文本數據上訓練的大語言模型可能反映訓練材料中嵌入的社會文化偏差。這些模型經過了仔細審查,在本卡片中描述了輸入數據預處理和後續評估。
- 錯誤信息和濫用:大語言模型可能被濫用來生成虛假、誤導或有害的文本。為模型的負責任使用提供了指南,見負責任的生成式AI工具包。
- 透明度和問責制:本模型卡片總結了模型的架構、能力、限制和評估過程的詳細信息。一個負責任開發的開放模型為在整個AI生態系統中與開發者和研究人員分享創新提供了機會,使LLM技術更易於獲取。
已識別的風險和緩解措施
- 偏差的延續:鼓勵在模型訓練、微調等使用案例中進行持續監測(使用評估指標、人工審查)並探索去偏差技術。
- 有害內容的生成:內容安全機制和指南至關重要。鼓勵開發者根據其特定產品政策和應用用例謹慎行事並實施適當的內容安全保障措施。
- 惡意用途:技術限制以及對開發者和最終用戶的教育有助於減輕大語言模型的惡意應用。提供了教育資源和用戶舉報濫用行為的機制。Gemma禁止使用政策中概述了Gemma模型的禁止用途。
- 隱私侵犯:模型在經過過濾以去除個人身份信息(PII)的數據上進行訓練。鼓勵開發者遵守隱私法規並使用隱私保護技術。
優勢
在發佈時,與類似規模的模型相比,這個模型家族提供了從頭開始為負責任的AI開發設計的高性能開放大語言模型實現。
使用本文檔中描述的基準評估指標,這些模型在性能上優於其他類似規模的開放模型替代方案。
🔧 技術細節
模型發佈說明
這是Gemma 1.1 2B(IT),是對原始指令調優Gemma版本的更新。
Gemma 1.1使用新型RLHF方法進行訓練,在質量、編碼能力、事實性、指令遵循和多輪對話質量方面取得了顯著提升。我們還修復了多輪對話中的一個錯誤,並確保模型響應不會總是以"Sure,"
開頭。
我們相信這個版本在大多數用例中都有所改進,但我們鼓勵用戶在其特定應用中進行測試。之前的模型將繼續在同一倉庫中可用。我們感謝大家對Gemma的熱情采用,並繼續歡迎社區的所有反饋。
資源和技術文檔
使用條款
作者
模型家族
基礎版本 | 指令調優版本 | |
---|---|---|
2B | gemma-2b | gemma-1.1-2b-it |
7B | gemma-7b | gemma-1.1-7b-it |
📄 許可證
該模型的許可證為gemma。



