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_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.mfbz.cn/a/788511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北斗防爆手持终端在化工厂的安全性能分析

北斗防爆手持终端在化工厂中的应用显著提升了安全性能&#xff0c;其卓越的防爆设计、高精度定位与监控功能、实时通信能力以及多功能集成特性&#xff0c;共同构筑了化工厂安全生产的坚实防线&#xff0c;确保了巡检人员与设备在复杂环境下的安全作业与高效管理。 北斗防爆手持…

[Linux][Shell][Shell基础] -- [Shebang][特殊符号][变量][父子Shell]详细讲解

目录 0.前置知识1.Shebang2.Linux特殊符号整理3.变量4.环境变量5.父子shell0.概念1.创建进程列表(创建子shell执行命令) 6.内置命令 vs 外置命令 0.前置知识 #用于注释shell脚本语⾔属于⼀种弱类型语⾔&#xff1a;⽆需声明变量类型&#xff0c;直接定义使⽤shell三剑客&#…

148. 排序链表

https://leetcode.cn/problems/sort-list/description/https://leetcode.cn/problems/sort-list/description/ 解题思路&#xff1a; 归并排序&#xff0c;先拿到链表长度&#xff0c;每次遍历到一半&#xff0c;进行分割&#xff0c;后序双指针合并。 /*** Definition for sin…

图论---匈牙利算法求二分图最大匹配的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 求解二分图最大匹配问题的算法&#xff0c;寻找一个边的子集&#xff0c;使得每个左部点都与右部点相连&#xff0c;并且没有两条边共享…

操作系统|day1.了解操作系统

文章目录 了解操作系统定义目的操作系统体系结构功能特征操作系统的区别(64位与32位)操作系统的地址内存管理缓存 了解操作系统 定义 操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件 目的 方便性,有效性(提高系统资源的利用率,提高系统的吞吐量) 操作系统体…

android13 固定U盘链接 SD卡链接 TF卡链接 硬盘链接

1.前言 有些客户使用的应用并不带有自动监听U盘 sd卡广播的代码,使用的代码是固定的地址,这样的话,就需要我们将系统的挂载目录固定了。 原始路径 /storage/3123-19FA 增加链接 /storage/upan_000 -> /storage/3123-19FA 2. 首先如果是应用本身监听的话,使用的是 /…

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…

CentOS 8升级gcc版本

1、查看gcc版本 gcc -v发现gcc版本为8.x.x&#xff0c;而跑某个项目的finetune需要gcc-9&#xff0c;之前搜索过很多更新gcc版本的方式&#xff0c;例如https://blog.csdn.net/xunye_dream/article/details/108918316?spm1001.2014.3001.5506&#xff0c;但执行指令 sudo yu…

S32V234平台开发(一)快速使用

快速使用 准备供电复位选择串口通信启动选择显示登陆系统 准备供电 s32v234可以使用两种电源供电 一种是左边电源端子&#xff0c;一种是右边电源适配器(12V 3A) 注意:不要同时使用两种电源同时供电 复位选择 Pressing POR RESET pulls active low EXT_POR signal on S32V2…

使用bypy丝滑传递百度网盘-服务器文件

前言 还在为百度网盘的数据集难以给服务器做同步而痛苦吗&#xff0c;bypy来拯救你了&#xff01;bypy是一个强大而灵活的百度网盘命令行客户端工具。它是基于Python开发的开源项目&#xff0c;为用户提供了一种通过命令行界面与百度网盘进行交互的方式。使用bypy&#xff0c;…

自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo

参考&#xff1a;金书世界 540度全景影像是什么 540度全景影像是在360度全景影像基础上的升级功能&#xff0c;它增加了更多的摄像头来收集周围的图像数据。通常&#xff0c;这些摄像头分布在车辆的更多位置&#xff0c;例如车顶、车底等&#xff0c;以便更全面地捕捉车辆周围…

C++ | Leetcode C++题解之第226题翻转二叉树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}TreeNode* left invertTree(root->left);TreeNode* right invertTree(root->right);root->left right;root->right …

内网信息收集:手动、脚本和工具查IP、端口

1.手动查IP和端口 2.工具查IP 3.工具查端口 我们在内网中拿下目标机器后&#xff0c;需要进行一系列的信息收集&#xff0c;以下为总结的收集方法 1.手动信息收集&#xff1a; 以下命令在CS执行时命令前须加shell,如&#xff1a;shell ipconfig 1.收集IP网卡&#xff1a; ip…

【UE5.3】笔记9

1、如何将BSP笔刷转换为静态网格体&#xff1f; 在笔刷的细节的高级里面找到创建静态网格体&#xff1b; 2、如何将自己创建的一个由多个网格体或其他组件组合成的道具转换为个整体即蓝图类&#xff1f;---即把多个Actor转换成蓝图类 选中所要整合的对象&#xff0c;要全选中…

基于Spring Boot的旅游信息推荐信息系统设计与实现(源码+lw+部署+讲解)

技术指标 开发语言&#xff1a;Java 框架&#xff1a;Spring BootJSP JDK版本&#xff1a;JDK1.8 数据库&#xff1a;MySQL5.7 数据库工具&#xff1a;Navicat16 开发软件&#xff1a;IDEA Maven包&#xff1a;Maven3.6.3 浏览器&#xff1a;IE浏览器 功能描述 旅游信…

压缩感知3——重构算法正交匹配追踪算法

算法流程 问题的实质是&#xff1a;AX Y 求解&#xff08;A是M维&#xff0c;Y是N维且N>>M并且稀疏度K<M&#xff09;明显X有无穷多解&#xff0c;重构过程是M次采样得到的采样值升维的过程。OMP算法的具体步骤&#xff1a;(1)用X表示信号&#xff0c;初始化残差e0 …

bash: redi-cli: 未找到命令...

问题描述 在执行命令&#xff1a;redi-cli --bigkeys 提示&#xff1a;bash: redi-cli: 未找到命令... 确定服务器是否有Redis进程 ps -ef | grep redis查找Redis 文件信息 find / -name "redis-*"进入到当前目录 cd /usr/bin/再次执行命令 涉及redis-cli 连…

GOJS去除水印

GOJS gojs 去除水印 **查找go.js库搜索下面这段文本 String.fromCharCode(a.charCodeAt(g)^b[(b[c]b[d])%256]) 加入这段文本 if(f.indexOf(GoJS 2.1 evaluation)>-1|| f.indexOf(© 1998-2021 Northwoods Software)>-1|| f.indexOf(Not for distribution or produ…

最新知识付费系统3.0整站+自动采集同步插件

支持分类替换 将主站同步过来的文章分类进行替换 支持自定义文章作者&#xff08;选择多个作者则同步到的文章作者将会随机分配&#xff09; 支持添加黑名单分类 添加后 如果同步过来的文章包含黑名单分类将不会发布文章 自动检测同步&#xff0c;无需人工值守以及挂采集软件…

Ensp配置防火墙的web界面

Ensp配置防火墙的web界面 准备工作新建网卡配置网卡 启动防火墙配置防火墙注意事项和错误如果云里面没有网卡选项防火墙启动不了没有web界面启动不了没有web界面 准备工作 新建网卡 我用的是win10系统&#xff0c;新建网卡 先右键管理 再点击设备管理器 --- 再网络适配器 接…