Gemma2——Google 新开源大型语言模型完整应用指南

news2024/10/6 11:26:01

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_path
    self.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_store
        self.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.coloradmin.cn/o/1903484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《梦醒蝶飞:释放Excel函数与公式的力量》9.3.1PV 函数

9.3.1 函数简介 PV函数用于计算一系列未来付款的现值&#xff0c;考虑了一定的利率。现值是未来金额的贴现值&#xff0c;表示在当前时刻相当于未来某一时间点的总价值。 9.3.2 语法 PV函数的语法如下&#xff1a; PV(rate, nper, pmt, [fv], [type]) rate&#xff1a;每期…

JavaEE初阶-网络原理1

文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议&#xff0c;最主要就是学习的报文格式&#xff0c;对于UDP来说&#xff0c;应用层数据到达UDP之后&#xff0c;会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…

中英双语介绍美国苹果公司(Apple Inc.)

中文版 苹果公司简介 苹果公司&#xff08;Apple Inc.&#xff09;是一家美国跨国科技公司&#xff0c;总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一&#xff0c;苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…

算法刷题笔记 滑动窗口(C++实现,非常详细)

文章目录 题目描述基本思路实现代码 题目描述 给定一个大小为n ≤ 10^6的数组。有一个大小为k的滑动窗口&#xff0c;它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子&#xff1a; 该数组为 [1 3 -1 -3 5 3 6 7]&…

SAP PS学习笔记02 - 网络,活动,PS文本,PS文书(凭证),里程碑

上一章讲了PS 的概要&#xff0c;以及创建Project&#xff0c;创建WBS。 SAP PS学习笔记01 - PS概述&#xff0c;创建Project和WBS-CSDN博客 本章继续讲PS的后续内容。包括下面的概念和基本操作&#xff0c;以及一些Customize&#xff1a; - 网络&#xff08;Network&#xf…

CC工具箱使用指南:【相交占比分析】

一、简介 需求场景如下&#xff0c;有【待分析地块】和【面积占比参考】2个图层。2个图层之间存在空间上的重叠。工具的目的是为了分析出【待分析地块】的每1个图斑中&#xff0c;和【面积占比参考】相交的面积&#xff0c;以及和总面积的占比。 举一个应用场景为例&#xff0…

java信号量(Semaphore)

Java中的信号量&#xff08;Semaphore&#xff09;是一种用于控制多个线程对共享资源的访问的同步工具。它可以用来限制可以同时访问某些资源的线程数量。Semaphore 提供了一个计数器来管理许可证的获取和释放&#xff0c;每个许可证代表对资源的一次访问权限。 import java…

阶段三:项目开发---搭建项目前后端系统基础架构:任务11:搭建项目后台系统基础架构

任务描述 1、了解搭建民航后端框架 2、使用IDEA创建基于SpringBoot、MyBatis、MySQL、Redis的Java项目 3、以原项目为参照搭建项目所涉及到的各个业务和底层服务 4、以原项目为例&#xff0c;具体介绍各个目录情况并参照创建相关文件夹 任务指导 1、讲框架的选择和原理 …

解决Unable to Correct Problems ‘You have Held Broken Packages’

进入 Software & Updates 后下拉 Download from&#xff0c;点击 Other… 点击 Select Best Server 等待测试服务器 测试完成后会默认标红测试出的最好的那个服务器&#xff0c;直接点击 Choose Server&#xff0c;可能需要输入系统用户密码5. 输入然后返回上级界面 点击 C…

实现ubuntu的任务计划反弹shell

1.实验目的 使用Ubuntu定时任务反弹shell 2实验环境 ubuntu&#xff1a;ip地址&#xff1a;192.168.80.133 kali&#xff1a;ip地址&#xff1a;192.168.80.134 3.编写crontab计划任务 在ubuntu的系统中使用crontab -e命令编写计划任务 作用&#xff1a;是将一个交互式的…

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时&#xff0c;也没有想过同时叫两个或两个以上的led灯闪烁的想法&#xff0c;接触后&#xff0c;发现如果想叫两个灯同时以不同的频率闪烁&#xff0c;不能说是不可能&#xff0c;就算是做到了也要非常的麻烦。但是学习了FreeRTOS后&#xff0c;发现要想同…

26 华三防火墙安全区域

防火墙区域规划 配置网络网卡的地址在同一网段 第一个问题 为什么防火墙直连在同一个网段ping不通? 配置IP地址 local区域: 将local区域的所有接口启用 华三防火墙的local区域是指设备本地接口所在的区域&#xff0c;也称为局域网&#xff08;LAN&#xff09;或内部网络 Int…

机器学习与深度学习:区别(含工作站硬件推荐)

一、机器学习与深度学习区别 机器学习&#xff08;ML&#xff1a;Machine Learning&#xff09;与深度学习&#xff08;DL&#xff1a;Deep Learning&#xff09;是人工智能&#xff08;AI&#xff09;领域内两个重要但不同的技术。它们在定义、数据依赖性以及硬件依赖性等方面…

硬件开发笔记(二十四):贴片电容的类别、封装介绍,AD21导入贴片电容、原理图和封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140241817 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

VUE3初学入门-02-VUE创建项目

创建VUE项目的另一个方法 三种方法通过vue-cli进行创建通过npm进行创建比较 部署到nginx修改配置生成部署文件 三种方法 上一篇是在VSCODE中建立工作区&#xff0c;然后创建&#xff0c;属于命令加鼠标方式。个人感觉&#xff0c;在VSCODE基本上都是这样的操作&#xff0c;不是…

C++模板元编程(一)——可变参数模板

这个系列主要记录C模板元编程的常用语法 文章目录 引言语法应用函数模板可变参数的打印可变参数的最小/最大函数 类模板 参考文献 引言 在C11之前&#xff0c;函数模板和类模板只支持含有固定数量的模板参数。C11增强了模板功能&#xff0c;允许模板定义中包含任意个(包括0个)…

Pytorch 实践手写数字识别深度学习网络 LeNet-5

Pytorch 实践手写数字识别深度学习网络 LeNet-5 文章目录 Pytorch 实践手写数字识别深度学习网络 LeNet-5认识 LeNet-5认识数据集处理数据集下载数据集读取数据定义Dataset的继承类把数据进行载入载入dataloader 编写网络编写训练与测试代码实践结果展示完整代码 训练手写体识别…

什么是反射?

什么是反射&#xff1f; 1、反射的基本概念2、 获取Class对象3、获取类的成员变量、方法和构造方法3.1 获取成员变量3.2 获取方法3.3 获取构造方法3.4 动态调用方法 4、反射的优缺点 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 反射&…

Unity3D 转换微信小游戏指引 02

Unity3D 转换微信小游戏指引系列&#xff08;第二期&#xff09; 云开发 当小游戏打包后的首包占用内存比较大&#xff08;大约是 14M 左右&#xff09;&#xff0c;首包资源加载方式就不能选择小游戏包内了。 这时就需要购买服务器&#xff0c;把首包放到服务器上&#xff…

Drools开源业务规则引擎(二)- Drools规则语言(DRL)

文章目录 1.DRL文件的组成&#xff1a;2.package3.import4.function5.query6.declare7.global8.rule8.1.规则属性8.2.LHS8.2.1.语法格式8.2.2.运算符优先级8.2.3.特殊的运算符1.matches, not matches2.contains, not contains3.memberOf, not memberOf4.in, notin5.soundslike6…