Gemma2——Google 新開源大型語言模型完整應用指南

0.引言

Gemma 2以前代產品為基礎,提供增強的性能和效率,以及一系列創新功能,使其在研究和實際應用中都具有特別的吸引力。Gemma 2 的與眾不同之處在于,它能夠提供與更大的專有模型相當的性能,但其軟件包專為更廣泛的可訪問性和在更適中的硬件設置上使用而設計。

隨著深入研究 Gemma 2 的技術規格和架構,越來越被其設計的精妙之處所折服。該模型采用了多種先進技術,包括新穎的注意力機制和創新的訓練穩定性方法,這些都為其卓越的性能做出了貢獻。

在本綜合指南中,將深入探索 Gemma 2,研究其架構、主要功能和實際應用。無論您是經驗豐富的 AI 從業者還是該領域的熱情新手,本文旨在提供有關 Gemma 2 的工作原理以及如何在自己的項目中利用其功能的寶貴見解。

1. Gemma 2 是什么?

Gemma 2 是 Google 最新的開源大型語言模型,設計精巧但功能強大。它基于用于創建 Google Gemini 模型的相同研究和技術構建,以更易于訪問的軟件包提供最先進的性能。Gemma 2 有兩種尺寸:

Gemma 2 9B:一個 90 億參數模型
Gemma 2 27B:一個更大的 270 億參數模型

每種尺寸都有兩種款式:

基本模型:在大量文本數據上進行預訓練
指令調整(IT)模型:經過微調,可在特定任務上獲得更好的性能

訪問 Google AI Studio 中的模型:Google AI Studio – Gemma 2
在這里閱讀論文: Gemma 2 Technical Report

2.主要功能和改進

Gemma 2 與其前代產品相比引入了幾項重大改進:

2.1.增加訓練數據

這些模型已經接受了更多數據的訓練:

Gemma 2 27B:經過 13 萬億個 token 的訓練
Gemma 2 9B:經過 8 萬億個 token 的訓練

這個擴展的數據集主要由網絡數據(主要是英文)、代碼和數學組成,有助于提高模型的性能和多功能性。

2.2.滑動窗口注意力

Gemma 2 實現了一種新穎的注意力機制方法:

每隔一層使用一個滑動窗口注意力機制,局部上下文為 4096 個 token,
交替層對整個 8192 個 token 上下文采用完全二次全局注意力機制

這種混合方法旨在平衡效率和捕獲輸入中的長程依賴關系的能力。

2.3. 軟封頂

為了提高訓練穩定性和性能,Gemma 2 引入了軟上限機制:

def soft_cap(x, cap):return cap * torch.tanh(x / cap)
# Applied to attention logits
attention_logits = soft_cap(attention_logits, cap=50.0)
# Applied to final layer logits
final_logits = soft_cap(final_logits, cap=30.0)

這種技術可以在沒有硬截斷的情況下防止 logits 過大,從而在穩定訓練過程的同時保留更多信息。

  1. Gemma 2 9B:90 億參數模型
  2. Gemma 2 27B:更大的 270 億參數模型

每種尺寸都有兩種款式:

  • 基礎模型:在大量文本數據上進行預訓練
  • 指令調整(IT)模型:經過微調,可在特定任務上獲得更好的性能

2.4. 知識蒸餾

對于 9B 模型,Gemma 2 采用知識提煉技術:

  • 預訓練:9B 模型在初始訓練期間從更大的教師模型中學習
  • 訓練后:9B 和 27B 模型均使用在線策略蒸餾來改善其性能

這個過程有助于較小的模型更有效地捕捉較大模型的功能。

2.5. 模型合并

Gemma 2 采用一種名為 Warp 的新型模型合并技術,該技術分三個階段組合多個模型:

  1. 強化學習微調期間的指數移動平均線 (EMA)
  2. 經過多個策略微調后的球面線性插值(SLERP)
  3. 線性插值初始化(LITI)作為最后一步

這種方法旨在創建更為強大和更強大的最終模型。

3.性能基準

Gemma 2 在各種基準測試中都表現出了令人印象深刻的性能:

Gemma 2 采用重新設計的架構,旨在實現卓越的性能和推理效率

6.Gemma 2 入門

要在項目中開始使用 Gemma 2,有以下幾種選擇:

6.1. 谷歌人工智能工作室

可以通過谷歌人工智能工作室訪問Gemma 2,谷歌人工智能工作室.

6.2. Hugging Face

Gemma 2 與 Hugging Face Transformers 庫集成。以下是使用方法:

<div class="relative flex flex-col rounded-lg">
<div class="text-text-300 absolute pl-3 pt-2.5 text-xs">
from transformers import AutoTokenizer, AutoModelForCausalLM
# Load the model and tokenizer
model_name = "google/gemma-2-27b-it" # or "google/gemma-2-9b-it" for the smaller version
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Prepare input
prompt = "Explain the concept of quantum entanglement in simple terms."
inputs = tokenizer(prompt, return_tensors="pt")
# Generate text
outputs = model.generate(**inputs, max_length=200)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

6.3.TensorFlow/Keras

對于 TensorFlow 用戶,可通過 Keras 使用 Gemma 2:

import tensorflow as tf
from keras_nlp.models import GemmaCausalLM
# Load the model
model = GemmaCausalLM.from_preset("gemma_2b_en")
# Generate text
prompt = "Explain the concept of quantum entanglement in simple terms."
output = model.generate(prompt, max_length=200)
print(output)

7.高級用法:使用 Gemma 2 構建本地 RAG 系統

Gemma 2 的一個強大應用是構建檢索增強生成 (RAG) 系統。讓我們使用 Gemma 2 和 Nomic 嵌入創建一個簡單、完全本地的 RAG 系統。

第 1 步:設置環境

首先,確保已經安裝了必要的庫:

pip install langchain ollama nomic chromadb

第 2 步:索引文檔

創建一個索引器來處理的文檔:

import os
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import DirectoryLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
class Indexer:def __init__(self, directory_path):self.directory_path = directory_pathself.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)self.embeddings = HuggingFaceEmbeddings(model_name="nomic-ai/nomic-embed-text-v1")def load_and_split_documents(self):loader = DirectoryLoader(self.directory_path, glob="**/*.txt")documents = loader.load()return self.text_splitter.split_documents(documents)
def create_vector_store(self, documents):return Chroma.from_documents(documents, self.embeddings, persist_directory="./chroma_db")
def index(self):documents = self.load_and_split_documents()vector_store = self.create_vector_store(documents)vector_store.persist()return vector_store
# Usage
indexer = Indexer("path/to/your/documents")
vector_store = indexer.index()

步驟3:設置RAG系統

現在,使用 Gemma 2 創建 RAG 系統:

from langchain.llms import Ollama
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
class RAGSystem:def __init__(self, vector_store):self.vector_store = vector_storeself.llm = Ollama(model="gemma2:9b")self.retriever = self.vector_store.as_retriever(search_kwargs={"k": 3})
self.template = """Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
{context}
Question: {question}
Answer: """
self.qa_prompt = PromptTemplate(
template=self.template, input_variables=["context", "question"]
)
self.qa_chain = RetrievalQA.from_chain_type(
llm=self.llm,
chain_type="stuff",
retriever=self.retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": self.qa_prompt}
)
def query(self, question):
return self.qa_chain({"query": question})
# Usage
rag_system = RAGSystem(vector_store)
response = rag_system.query("What is the capital of France?")
print(response["result"])

該 RAG 系統使用 Gemma 2 到 Ollama 作為語言模型,并使用 Nomic 嵌入進行文檔檢索。它允許您根據索引文檔提出問題,并提供來自相關來源的上下文答案。

微調 Gemma 2

對于特定任務或領域,您可能需要對 Gemma 2 進行微調。這是一個使用 Hugging Face Transformers 庫的基本示例:

from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from datasets import load_dataset
# Load model and tokenizer
model_name = "google/gemma-2-9b-it"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Prepare dataset
dataset = load_dataset("your_dataset")
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# Set up training arguments
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=4,
per_device_eval_batch_size=4,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
)
# Initialize Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"],
)
# Start fine-tuning
trainer.train()
# Save the fine-tuned model
model.save_pretrained("./fine_tuned_gemma2")
tokenizer.save_pretrained("./fine_tuned_gemma2")

根據具體要求和計算資源調整訓練參數。

道德考量和限制

雖然 Gemma 2 提供了令人印象深刻的功能,但必須意識到它的局限性和道德考慮:

  • 偏見:與所有語言模型一樣,Gemma 2 可能反映出其訓練數據中存在的偏見。始終批判性地評估其輸出。
  • 事實準確性:盡管 Gemma 2 性能強大,但有時也會生成不正確或不一致的信息。請從可靠的來源驗證重要事實。
  • 上下文長度:Gemma 2 的上下文長度為 8192 個標記。對于較長的文檔或對話,您可能需要實施策略來有效地管理上下文。
  • 計算資源:特別是對于 27B 模型,可能需要大量計算資源才能進行有效推理和微調。
  • 負責任的使用: Adhere to Google’s Responsible AI practices and ensure your use of Gemma 2 aligns with ethical AI principles.

8.結論

Gemma 2 的高級功能(例如滑動窗口注意、軟上限和新穎的模型合并技術)使其成為廣泛自然語言處理任務的強大工具。

通過在您的項目中利用 Gemma 2,無論是通過簡單的推理、復雜的 RAG 系統還是針對特定領域的微調模型,您都可以利用 SOTA AI 的強大功能,同時保持對數據和流程的控制。

原文地址:https://www.unite.ai/complete-guide-on-gemma-2-googles-new-open-large-language-model/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44081.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hdfs大規模數據存儲底層原理詳解(第31天)

系列文章目錄 一、HDFS設計原理 二、HDFS系統架構 三、HDFS關鍵技術 四、HDFS應用實例 五、解決HDFS不能處理小文件詳解問題 文章目錄 系列文章目錄前言一、設計原理二、系統架構三、關鍵技術四、應用實例五、解決HDFS不能處理小文件詳解問題1. 合并小文件2. 優化Hive配置3. 使…

DDR3 SO-DIMM 內存條硬件總結(一)

最近在使用fpga讀寫DDR3&#xff0c;板子上的DDR3有兩種形式與fpga相連&#xff0c;一種是直接用ddr3內存顆粒&#xff0c;另一種是通過內存條的形式與fpga相連。這里我們正好記錄下和ddr3相關的知識&#xff0c;先從DDR3 SO-DIMM 內存條開始。 1.先看內存條的版本 從JEDEC下載…

Mysql練習題目【7月10日更新】

七、Mysql練習題目 https://zhuanlan.zhihu.com/p/38354000 1. 創建表 創建學生表 mysql> create table if not exists student(-> student_id varchar(255) not null,-> student_name varchar(255) not null,-> birthday date not null,-> gender varchar(…

前端面試題33(實時消息傳輸)

前端實時傳輸協議主要用于實現實時數據交換&#xff0c;特別是在Web應用中&#xff0c;它們讓開發者能夠構建具有實時功能的應用&#xff0c;如聊天、在線協作、游戲等。以下是幾種常見的前端實時傳輸協議的講解&#xff1a; 1. Short Polling (短輪詢) 原理&#xff1a;客戶…

【1】A-Frame整體介紹

1.A-Frame是什么&#xff1f; A-Frame 是一個用于構建虛擬現實 (VR) 體驗的 Web 框架。 A-Frame 基于 HTML 之上&#xff0c;因此上手簡單。但 A-Frame 不僅僅是 3D 場景圖或標記語言&#xff1b;它還是一種標記語言。其核心是一個強大的實體組件框架&#xff0c;為 Three.js …

Golang | Leetcode Golang題解之第226題翻轉二叉樹

題目&#xff1a; 題解&#xff1a; func invertTree(root *TreeNode) *TreeNode {if root nil {return nil}left : invertTree(root.Left)right : invertTree(root.Right)root.Left rightroot.Right leftreturn root }

AI機器人在未來的應用場景預測:是否會取代人類?華為、百度、特斯拉他們在AI領域都在做什么?

引言 隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;AI機器人在各個領域的應用變得越來越普遍。從工業自動化到日常生活&#xff0c;AI機器人已經開始展現出強大的潛力和實際應用價值。本文將深入探討AI機器人在未來的應用場景&#xff0c;并分析它們是否…

uniapp+vue3嵌入Markdown格式

使用的庫是towxml 第一步&#xff1a;下載源文件&#xff0c;那么可以git clone&#xff0c;也可以直接下載壓縮包 git clone https://github.com/sbfkcel/towxml.git 第二步&#xff1a;設置文件夾內的config.js&#xff0c;可以選擇自己需要的格式 第三步&#xff1a;安裝…

大模型/NLP/算法面試題總結3——BERT和T5的區別?

1、BERT和T5的區別&#xff1f; BERT和T5是兩種著名的自然語言處理&#xff08;NLP&#xff09;模型&#xff0c;它們在架構、訓練方法和應用場景上有一些顯著的區別。以下是對這兩種模型的詳細比較&#xff1a; 架構 BERT&#xff08;Bidirectional Encoder Representation…

【Web前端】JWT(JSON Web Tokens)概述

1、簡介 JWT&#xff08;JSON Web Tokens&#xff09;是一種用于雙方之間安全傳輸信息的簡潔的、URL安全的令牌標準。 它基于JSON對象&#xff0c;并通過數字簽名確保其完整性和真實性。 JWT因其小巧、自包含以及易于在客戶端和服務器之間傳輸的特性而被廣泛使用于身份驗證和…

python字符串驗證從基礎到進階的總結

引言 在數據處理和文本挖掘中&#xff0c;對字符串的驗證是確保數據符合特定要求的關鍵步驟之一。其中一個常見的驗證需求是確認字符串是否只包含字母。Python為此提供了多種實現的方法&#xff0c;我們將逐一討論它們。 方法1&#xff1a;使用 isalpha() 方法 def is_all_l…

UML 2.5圖的分類

新書速覽|《UML 2.5基礎、建模與設計實踐》新書速覽|《UML 2.5基礎、建模與設計實踐 UML 2.5在UML 2.4.1的基礎上進行了結構性的調整&#xff0c;簡化和重新組織了 UML規范文檔。UML規范被重新編寫&#xff0c;使其“更易于閱讀”&#xff0c;并且“盡可能減少前向引用”。 U…

php簡單實現利用飛書群里機器人推送消息的方法

這是一篇利用的飛書的自定義機器人&#xff0c;將系統中的錯誤信息推送給技術群的功能代碼示例。 飛書文檔地址&#xff1a;開發文檔 - 飛書開放平臺 自定義機器人只能在群聊中使用的機器人&#xff0c;在當前的群聊中通過調用webhook地址來實現消息的推送。 配置群邏輯可以看…

LLM應用構建前的非結構化數據處理(三)文檔表格的提取

1.學習內容 本節次學習內容來自于吳恩達老師的Preprocessing Unstructured Data for LLM Applications課程&#xff0c;因涉及到非結構化數據的相關處理&#xff0c;遂做學習整理。 本節主要學習pdf中的表格數據處理 2.環境準備 和之前一樣&#xff0c;可以參考LLM應用構建前…

金蝶部署常見問題解決

金蝶部署常見問題解決 金蝶版本&#xff1a; Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 報錯信息&#xff1a; 與金蝶官方人員溝通&#xff0c;發現lib包版本太低&#xff0c;升級后可正常使用。替換lib包后重啟服務。 下載lib: 鏈接: …

西瓜杯CTF(1)

#下班之前寫了兩個題&#xff0c;后面繼續發 Codeinject <?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);"); payload 閉合后面的括號來拼接 POST / HTTP/1.1 Host: 1dc86f1a-cccc-4298-955d-e9179f026d54…

公司內部配置GitLab,通過SSH密鑰來實現免密clone、push等操作

公司內部配置GitLab&#xff0c;通過SSH密鑰來實現免密clone、push等操作。以下是配置SSH密鑰以實現免密更新的步驟&#xff1a; 1.生成SSH密鑰 在本地計算機上打開終端或命令提示符。輸入以下命令以生成一個新的SSH密鑰&#xff1a;ssh-keygen -t rsa -b 4096 -C "your…

VBA實現Excel數據排序功能

前言 本節會介紹使用VBA如何實現Excel工作表中數據的排序功能。 本節會通過下表數據內容為例進行實操&#xff1a; 1. Sort 單列排序 語法&#xff1a;Sort key1,Order1 說明&#xff1a; Key1&#xff1a;表示需要按照哪列進行排序 Order1&#xff1a;用來指定是升序xlAsce…

D2D用戶的功率優化算法研究

D2D通信技術是指兩個對等的用戶節點之間直接進行通信的一種通信方式。在由D2D通信用戶組成的分布式網絡中&#xff0c;每個用戶節點都能發送和接收信號&#xff0c;并具有自動路由(轉發消息)的功能。網絡的參與者共享它們所擁有的一部分硬件資源&#xff0c;包括信息處理、存儲…

短視頻矩陣搭建,用云微客獲客更方便

你的同行都爆單了&#xff0c;你還在問什么是矩陣&#xff1f;讓我來告訴你。短視頻矩陣是短視頻獲客的一種全新玩法&#xff0c;是以品牌宣傳、產品推廣為核心的一個高端布局手段&#xff0c;也是非常省錢的一種方式。 1.0時代&#xff0c;一部手機一個賬號&#xff1b;2.0時代…