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 过大,从而在稳固练习过程的同时保存更多信息。
- Gemma 2 9B:90 亿参数模子
- Gemma 2 27B:更大的 270 亿参数模子
每种尺寸都有两种款式:
- 基础模子:在大量文本数据上举行预练习
- 指令调解(IT)模子:经过微调,可在特定任务上得到更好的性能
2.4. 知识蒸馏
对于 9B 模子,Gemma 2 采用知识提炼技术:
- 预练习:9B 模子在初始练习期间从更大的西席模子中学习
- 练习后:9B 和 27B 模子均利用在线计谋蒸馏来改善其性能
这个过程有助于较小的模子更有用地捕捉较大模子的功能。
2.5. 模子合并
Gemma 2 采用一种名为 Warp 的新型模子合并技术,该技术分三个阶段组合多个模子:
- 强化学习微调期间的指数移动平均线 (EMA)
- 经过多个计谋微调后的球面线性插值(SLERP)
- 线性插值初始化(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/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |