模型概述
模型特點
模型能力
使用案例
🚀 Gemma無門控版本
Gemma是谷歌推出的輕量級、最先進的開源模型系列,基於與Gemini模型相同的研究和技術構建。它適用於多種文本生成任務,如問答、摘要和推理,且相對較小的規模使其能在資源有限的環境中部署。
🚀 快速開始
安裝依賴
首先確保安裝最新的transformers
庫:
pip install -U transformers
運行模型
根據你的使用場景,選擇合適的代碼片段。
在CPU上運行模型
推薦使用torch.bfloat16
作為默認數據類型,必要時可使用 不同的精度。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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上使用不同精度運行模型
模型的原生權重以bfloat16
精度導出,你可以使用float16
(在某些硬件上可能更快),也可以使用float32
。
- 使用
torch.float16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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-7b-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-7b-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-7b-it
。
提供的腳本包括:
- 使用QLoRA在UltraChat數據集上進行有監督微調(SFT)的腳本
- 在TPU設備上使用FSDP進行SFT的腳本
- 可以在免費的Google Colab實例上運行,在英語名言數據集上進行SFT的筆記本
✨ 主要特性
- 輕量級架構:Gemma模型相對較小,適合在資源有限的環境中部署,如筆記本電腦、臺式機或自有云基礎設施。
- 多任務處理能力:適用於多種文本生成任務,包括問答、摘要和推理。
- 代碼生成能力:通過接觸代碼數據,模型能夠學習編程語言的語法和模式,提高代碼生成和理解代碼相關問題的能力。
- 數學推理能力:經過數學文本訓練,模型具備邏輯推理和符號表示能力,能夠處理數學查詢。
📦 安裝指南
確保安裝最新的transformers
庫:
pip install -U transformers
根據不同的運行環境和需求,可能還需要安裝其他依賴,如accelerate
、bitsandbytes
、flash-attn
等。
💻 使用示例
基礎用法
以下是在CPU上運行模型的基礎用法:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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上使用不同精度運行模型,如使用torch.float16
:
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-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]))
📚 詳細文檔
模型信息
描述
Gemma是谷歌推出的輕量級、最先進的開源模型系列,基於與Gemini模型相同的研究和技術構建。它們是僅解碼器的大語言模型,支持英文,具有開放權重、預訓練變體和指令微調變體。Gemma模型適用於多種文本生成任務,包括問答、摘要和推理。
輸入和輸出
- 輸入:文本字符串,如問題、提示或待摘要的文檔。
- 輸出:生成的英文文本,作為對輸入的響應,如問題的答案或文檔的摘要。
模型數據
訓練數據集
這些模型在包含廣泛來源的文本數據集上進行訓練,總計6萬億個標記。主要組成部分包括:
- 網頁文檔:多樣化的網頁文本確保模型接觸到廣泛的語言風格、主題和詞彙,主要為英文內容。
- 代碼:讓模型接觸代碼有助於學習編程語言的語法和模式,提高代碼生成和理解代碼相關問題的能力。
- 數學:在數學文本上訓練有助於模型學習邏輯推理、符號表示和處理數學查詢。
數據預處理
對訓練數據應用的關鍵數據清理和過濾方法包括:
- CSAM過濾:在數據準備過程的多個階段應用嚴格的CSAM(兒童性虐待材料)過濾,確保排除有害和非法內容。
- 敏感數據過濾:使用自動化技術過濾訓練集中的某些個人信息和其他敏感數據,使Gemma預訓練模型更安全可靠。
- 其他方法:根據內容質量和安全性進行過濾,符合我們的政策。
實現信息
硬件
Gemma使用最新一代的張量處理單元(TPU) 硬件(TPUv5e)進行訓練。TPU專為機器學習中常見的矩陣運算而設計,在訓練大語言模型方面具有以下優勢:
- 性能:能夠處理訓練大語言模型所需的大量計算,相比CPU可顯著加速訓練過程。
- 內存:通常配備大量高帶寬內存,允許在訓練過程中處理大型模型和批量大小,有助於提高模型質量。
- 可擴展性:TPU Pod(大型TPU集群)為處理大型基礎模型的不斷增長的複雜性提供了可擴展的解決方案,可以在多個TPU設備上分佈訓練,實現更快、更高效的處理。
- 成本效益:在許多情況下,與基於CPU的基礎設施相比,TPU可以為訓練大型模型提供更具成本效益的解決方案,特別是考慮到更快的訓練速度節省的時間和資源。
軟件
使用JAX 和ML Pathways 進行訓練。
JAX允許研究人員利用最新一代的硬件(包括TPU),實現更快、更高效的大型模型訓練。
ML Pathways是谷歌構建能夠跨多個任務進行泛化的人工智能系統的最新努力,特別適用於基礎模型,包括此類大語言模型。
JAX和ML Pathways結合使用,如關於Gemini模型系列的論文 中所述:“Jax和Pathways的‘單控制器’編程模型允許單個Python進程協調整個訓練運行,大大簡化了開發工作流程。”
評估
基準測試結果
預訓練的基礎模型在大量不同的數據集和指標上進行評估,以涵蓋文本生成的不同方面:
基準測試 | 指標 | Gemma PT 2B | Gemma PT 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 |
BoolQ | 0-shot | 69.4 | 83.2 |
WinoGrande | partial score | 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.0 |
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 | |
------------------------------ | ------------- | ----------- | ----------- |
平均 | 44.9 | 56.4 |
倫理與安全
評估方法
評估方法包括結構化評估和對相關內容政策的內部紅隊測試。紅隊測試由多個不同團隊進行,每個團隊有不同的目標和人工評估指標。這些模型在與倫理和安全相關的多個不同類別上進行評估,包括:
- 文本到文本內容安全:對涵蓋安全政策(包括兒童性虐待和剝削、騷擾、暴力和血腥、仇恨言論)的提示進行人工評估。
- 文本到文本代表性傷害:與相關學術數據集(如WinoBias 和BBQ數據集)進行基準對比。
- 記憶:對訓練數據的記憶進行自動化評估,包括個人可識別信息暴露的風險。
- 大規模傷害:測試“危險能力”,如化學、生物、放射和核(CBRN)風險。
評估結果
倫理和安全評估結果在符合內部政策 的可接受閾值內,涵蓋兒童安全、內容安全、代表性傷害、記憶、大規模傷害等類別。除了強大的內部評估外,還展示了知名安全基準(如BBQ、BOLD、Winogender、Winobias、RealToxicity和TruthfulQA)的結果。
Gemma 1.0
基準測試 | 指標 | Gemma 1.0 IT 2B | Gemma 1.0 IT 7B |
---|---|---|---|
[RealToxicity][realtox] | 平均 | 6.86 | 7.90 |
🔧 技術細節
Gemma模型基於與Gemini模型相同的研究和技術構建,是僅解碼器的大語言模型。使用TPUv5e硬件和JAX、ML Pathways軟件進行訓練,在大規模文本數據集上進行預訓練和指令微調。通過多種數據預處理方法確保訓練數據的質量和安全性,在多個基準測試中表現良好,並經過嚴格的倫理和安全評估。
📄 許可證
本模型的使用需遵循條款。
相關鏈接
作者



