歡迎 Gemma - Google 新的開放式 LLM
本文釋出兩個月後,Gemma 模型釋出了更新,請在此合集中檢視最新版本。
Google 今天釋出了 Gemma,這是一個全新的、最先進的開放式 LLM 家族!我們很高興看到 Google 加強其對開源 AI 的承諾,並且我們很高興能夠透過在 Hugging Face 中的全面整合,全力支援此次釋出。
Gemma 有兩種尺寸:7B 引數版本,適用於在消費級 GPU 和 TPU 上的高效部署和開發;2B 版本,適用於 CPU 和裝置端應用。兩種尺寸都有基礎模型和指令調優模型兩種變體。
我們與 Google 合作,確保將其最佳地整合到 Hugging Face 生態系統中。你可以在 Hub 上找到 4 個開放訪問的模型 (2 個基礎模型和 2 個微調模型)。在我們釋出的功能和整合中,包括:
- Hub 上的模型,附有模型卡和許可證
- 🤗 Transformers 整合
- 與 Google Cloud 整合
- 與推理端點整合
- 使用 🤗 TRL 在單個 GPU 上微調 Gemma 的示例
目錄
什麼是 Gemma?
Gemma 是 Google 基於 Gemini 開發的 4 個新 LLM 模型家族。它有兩種尺寸:2B 和 7B 引數,每種都有基礎 (預訓練) 和指令調優版本。所有變體都可以在各種消費級硬體上執行,甚至無需量化,並且上下文長度為 8K tokens。
- gemma-7b: 基礎 7B 模型。
- gemma-7b-it: 基礎 7B 模型的指令微調版本。
- gemma-2b: 基礎 2B 模型。
- gemma-2b-it: 基礎 2B 模型的指令微調版本。
在初次釋出一個月後,Google 釋出了指令模型的新版本。該版本在編碼能力、事實性、指令遵循和多輪對話質量方面表現更佳。此外,該模型也不太傾向於以「當然 (Sure)」開頭回答問題。

那麼,Gemma 模型有多好呢?以下是基礎模型及其在 LLM 排行榜上與其他開放模型的效能比較 (分數越高越好):
模型 | 許可證 | 商業用途? | 預訓練大小 [token] | 排行榜得分 ⬇️ |
---|---|---|---|---|
LLama 2 70B Chat (參考) | Llama 2 許可證 | ✅ | 2T | 67.87 |
Gemma-7B | Gemma 許可證 | ✅ | 6T | 63.75 |
DeciLM-7B | Apache 2.0 | ✅ | 未知 | 61.55 |
PHI-2 (2.7B) | MIT | ✅ | 1.4T | 61.33 |
Mistral-7B-v0.1 | Apache 2.0 | ✅ | 未知 | 60.97 |
Llama 2 7B | Llama 2 許可證 | ✅ | 2T | 54.32 |
Gemma 2B | Gemma 許可證 | ✅ | 2T | 46.51 |
Gemma 7B 是一個非常強大的模型,其效能可與 7B 權重級別中的最佳模型 (包括 Mistral 7B) 相媲美。Gemma 2B 就其尺寸而言是一個有趣的模型,但它在排行榜上的得分不如同等尺寸的最強模型,例如 Phi 2。我們期待收到社群關於實際使用情況的反饋!
請注意,LLM 排行榜特別適用於衡量預訓練模型的質量,而對聊天模型的衡量效果不佳。我們鼓勵對聊天模型執行其他基準測試,例如 MT Bench、EQ Bench 和 lmsys Arena!
提示詞格式
基礎模型沒有提示詞格式。像其他基礎模型一樣,它們可以用於以合理的續寫來繼續輸入序列,或用於零樣本/少樣本推理。它們也是根據你自己的用例進行微調的絕佳基礎。指令版本有一個非常簡單的對話結構。
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
LaMDA<end_of_turn>
<start_of_turn>model
LaMDA who?<end_of_turn>
必須精確復現這種格式才能有效使用。我們稍後將展示如何使用 transformers
中提供的聊天模板輕鬆復現 instruct 提示。
探索未知
技術報告包含了基礎模型的訓練和評估過程資訊,但沒有關於資料集構成和預處理的詳盡細節。我們知道它們是使用來自各種來源的資料進行訓練的,主要是網頁文件、程式碼和數學文字。資料經過篩選以去除 CSAM 內容和 PII,並進行了許可證檢查。
同樣,對於 Gemma 指令模型,也沒有分享關於微調資料集或與 SFT 和 RLHF 相關的超引數的詳細資訊。
Demo
你可以在 Hugging Chat 上與 Gemma 指令模型聊天!請點選此連結檢視: https://huggingface.co/chat/models/google/gemma-1.1-7b-it
使用 🤗 Transformers
透過 Transformers 4.38 版本,你可以使用 Gemma 並利用 Hugging Face 生態系統中的所有工具,例如:
- 訓練和推理指令碼以及示例
- 安全檔案格式 (
safetensors
) - 與 bitsandbytes (4 位量化)、PEFT (引數高效微調) 和 Flash Attention 2 等工具的整合
- 用於模型生成執行的實用程式和輔助函式
- 匯出模型以進行部署的機制
此外,Gemma 模型與帶 CUDA 圖的 torch.compile()
相容,使其在推理時速度提升約 4 倍!
要使用 transformers 載入 Gemma 模型,請確保安裝最新版本的 transformers
pip install --upgrade transformers
以下程式碼片段展示瞭如何使用 transformers 載入 gemma-7b-it
。它需要大約 18 GB 的 RAM,適用於 3090 或 4090 等消費級 GPU。
from transformers import pipeline
import torch
pipe = pipeline(
"text-generation",
model="google/gemma-7b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(
messages,
max_new_tokens=256,
do_sample=True,
temperature=0.7,
top_k=50,
top_p=0.95
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
嘿,夥計。我是一個公海上的海盜,準備好燒殺搶掠了。準備聽一個關於冒險和戰利品的故事吧!
我們使用了 bfloat16
,因為這是參考精度,也是所有評估的執行方式。在你的硬體上使用 float16
可能會更快。
你還可以自動量化模型,以 8-bit 甚至 4-bit 模式載入。4-bit 載入需要大約 9 GB 記憶體,使其與許多消費級顯示卡以及 Google Colab 中的所有 GPU 相容。以下是如何以 4-bit 載入生成管道:
pipeline = pipeline(
"text-generation",
model=model,
model_kwargs={
"torch_dtype": torch.float16,
"quantization_config": {"load_in_4bit": True}
},
)
有關使用 transformers 載入模型的更多詳細資訊,請檢視模型卡。
JAX 權重
所有 Gemma 模型變體都可用於 PyTorch (如上所述) 或 JAX / Flax。要載入 Flax 權重,你需要使用倉庫中的 `flax` 修訂版,如下所示:
import jax.numpy as jnp
from transformers import AutoTokenizer, FlaxGemmaForCausalLM
model_id = "google/gemma-2b"
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)
['瓦倫西亞和馬拉加是西班牙最受歡迎的兩個旅遊目的地。兩座城市都擁有豐富的歷史和充滿活力的文化,']
請檢視此 notebook,以獲得關於如何在 Colab TPU 上並行化 JAX 推理的全面實踐演練!
與 Google Cloud 整合
你可以使用文字生成推理和 Transformers,透過 Vertex AI 或 Google Kubernetes Engine (GKE) 在 Google Cloud 上部署和訓練 Gemma。
要從 Hugging Face 部署 Gemma 模型,請轉到 模型頁面 並點選 部署 -> Google Cloud。這將帶你到 Google Cloud 控制檯,在那裡你可以一鍵將 Gemma 部署到 Vertex AI 或 GKE。文字生成推理為 Google Cloud 上的 Gemma 提供支援,這是我們與 Google Cloud 合作的第一個整合專案。
你也可以直接透過 Vertex AI Model Garden 訪問 Gemma。
要從 Hugging Face 調優 Gemma 模型,請轉到 模型頁面 並點選 訓練 -> Google Cloud。這將帶你到 Google Cloud 控制檯,在那裡你可以訪問 notebook,在 Vertex AI 或 GKE 上調優 Gemma。
這些整合標誌著我們作為與 Google 合作的成果,共同推出的首批產品。敬請期待更多精彩內容!
與推理端點整合
你可以在 Hugging Face 的 推理端點上部署 Gemma,它使用文字生成推理作為後端。文字生成推理 是 Hugging Face 開發的生產級推理容器,可輕鬆部署大型語言模型。它具有連續批處理、token 流式傳輸、在多個 GPU 上進行快速推理的張量並行以及生產級日誌記錄和跟蹤等功能。
要部署 Gemma 模型,請轉到 模型頁面 並點選 部署 -> 推理端點小部件。你可以在之前的部落格文章中瞭解更多關於使用 Hugging Face 推理端點部署 LLM 的資訊。推理端點透過文字生成推理支援訊息 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="")
使用 🤗 TRL 進行微調
訓練 LLM 在技術上和計算上都可能具有挑戰性。在本節中,我們將探討 Hugging Face 生態系統中可用於在消費級 GPU 上高效訓練 Gemma 的工具。
下面可以找到在 OpenAssistant 的聊天資料集上微調 Gemma 的示例命令。我們使用 4-bit 量化和QLoRA來節省記憶體,以針對所有注意力塊的線性層。
首先,安裝 🤗 TRL 的夜間版本並克隆倉庫以訪問訓練指令碼
pip install -U transformers trl peft bitsandbytes
git clone https://github.com/huggingface/trl
cd trl
然後你可以執行指令碼
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1 \
examples/scripts/sft.py \
--model_name google/gemma-7b \
--dataset_name OpenAssistant/oasst_top1_2023-08-25 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 1 \
--learning_rate 2e-4 \
--save_steps 20_000 \
--use_peft \
--lora_r 16 --lora_alpha 32 \
--lora_target_modules q_proj k_proj v_proj o_proj \
--load_in_4bit \
--output_dir gemma-finetuned-openassistant
在單個 A10G 上訓練大約需要 9 個小時,但可以透過將 `--num_processes` 調整為你可用的 GPU 數量來輕鬆實現並行化。
其他資源
- Hub 上的模型
- 開放 LLM 排行榜
- Hugging Chat 上的聊天演示
- Gemma 官方部落格
- Gemma 產品頁面
- Vertex AI 模型花園連結
- Google Notebook
致謝
如果沒有許多社群成員的貢獻,在生態系統中釋出這樣的模型並進行支援和評估是不可能的,包括 Clémentine 和 Eleuther Evaluation Harness 的 LLM 評估; Olivier 和 David 的文字生成推理支援; Simon 在 Hugging Face 上開發了新的訪問控制功能; Arthur, Younes, 和 Sanchit 將 Gemma 整合到 transformers 中; Morgan 將 Gemma 整合到 optimum-nvidia (即將推出) 中; Nathan, Victor, 和 Mishig 使 Gemma 在 Hugging Chat 中可用。
並感謝 Google 團隊釋出 Gemma 並將其提供給開源 AI 社群!