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.mzph.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 }

uniapp+vue3嵌入Markdown格式

使用的库是towxml 第一步&#xff1a;下载源文件&#xff0c;那么可以git clone&#xff0c;也可以直接下载压缩包 git clone https://github.com/sbfkcel/towxml.git 第二步&#xff1a;设置文件夹内的config.js&#xff0c;可以选择自己需要的格式 第三步&#xff1a;安装…

UML 2.5图的分类

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 UML 2.5在UML 2.4.1的基础上进行了结构性的调整&#xff0c;简化和重新组织了 UML规范文档。UML规范被重新编写&#xff0c;使其“更易于阅读”&#xff0c;并且“尽可能减少前向引用”。 U…

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时代…

GD 32中断系统实现

1.0 中断的概念 中断&#xff1a;简单来说就是打断的意思&#xff0c;在计算机系统中CPU在执行一个操作的时候&#xff0c;有一个比当前任务更为紧急的任务需要执行,cpu暂停当前任务转而去执行更为紧急任务的操作&#xff0c;执行完更为紧急任务之后再返回来执行原来未执行完的…

高铁站客运枢纽IPTV电视系统-盐城高铁站西广场IP电视系统应用浅析

高铁站客运枢纽IPTV电视系统-盐城高铁站西广场IP电视系统应用浅析 由北京海特伟业科技有限公司任洪卓于2024年7月9日发布 随着科技的飞速发展&#xff0c;特别是“互联网”战略的深入推进&#xff0c;高铁站客运枢纽的信息化建设成为提升服务质量、增强乘客体验的重要手段。盐…

【1.3】动态规划-解码方法

一、题目 一条包含字母A-Z的消息通过以下映射进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26 要解码已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&…

新能源汽车充电站远程监控系统S275钡铼技术无线RTU

新能源汽车充电站的远程监控系统在现代城市基础设施中扮演着至关重要的角色&#xff0c;而钡铼技术的S275无线RTU作为一款先进的物联网数据监测采集控制短信报警终端&#xff0c;为充电站的安全运行和高效管理提供了强大的技术支持。 技术特点和功能 钡铼S275采用了基于UCOSI…

Android11 窗口动画

窗口进入动画 应用端窗口绘制完成之后&#xff0c;调用finshDraw告知WMS&#xff0c;WMS这边最后就会调用WindowSurfacePlacer的performSurfacePlacement方法&#xff0c;最终调用到 WindowStateAnimator的commitFinishDrawingLocked方法 //frameworks/base/services/core/jav…