技術共有

Gemma2 - Google の新しいオープンソースの大規模言語モデルの完全なアプリケーション ガイド

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

0 まえがき

ジェマ2前任者を基にして、強化されたパフォーマンスと効率、さらには一連の革新的な機能を提供し、研究と実用的なアプリケーションの両方にとって特に魅力的なものとなっています。 Gemma 2 の特徴は、より大型の独自モデルと同等のパフォーマンスを提供することですが、ソフトウェアパッケージより幅広いアクセシビリティと、より控えめなハードウェア設定で使用できるように設計されています。

Gemma 2 の技術仕様とアーキテクチャを詳しく調べるにつれて、その設計の洗練さにますます感銘を受けるようになりました。このモデルには、新しい技術を含むさまざまな先進技術が組み込まれています。注意メカニズム革新的なトレーニング安定性メソッド、これらすべてがその卓越したパフォーマンスに貢献しています。

この包括的なガイドでは、Gemma 2 のアーキテクチャ、主な機能、実際のアプリケーションを見て、Gemma 2 について詳しく説明します。あなたが経験豊富な AI 実践者であろうと、この分野の熱心な初心者であろうと、この記事は、Gemma 2 がどのように機能するか、そしてその機能を独自のプロジェクトでどのように活用できるかについて貴重な洞察を提供することを目的としています。

1. ジェマ2とは何ですか?

Gemma 2 は、Google の最新のオープンソース大規模ソフトウェアです。言語モデル 、絶妙なデザインでありながら強力です。 Google Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築されており、よりアクセスしやすいパッケージで最先端のパフォーマンスを提供します。 Gemma 2 には 2 つのサイズがあります。

ジェマ2 9B: 90億パラメータモデル
ジェマ2 27B: より大規模な 270 億パラメータ モデル

各サイズには 2 つのスタイルがあります。

ベーシックモデル: 大量のテキストデータの事前トレーニング
命令チューニング (IT) モデル: 特定のタスクのパフォーマンスを向上させるために微調整されています

Google AI Studio のモデルにアクセスするGoogle AI スタジオ – ジェマ 2
ここで論文を読む: ジェマ 2 技術レポート

2.主な機能と改良点

Gemma 2 では、以前のバージョンに比べていくつかの重要な改良が加えられています。

2.1. トレーニングデータを追加する

これらのモデルは、より多くのデータでトレーニングされています。

ジェマ2 27B: 13兆トークンでトレーニング後
ジェマ2 9B: 8兆トークンでトレーニング後

この拡張データセットは主にネットワーク データ (ほとんどが英語)、コード、数学で構成されており、モデルのパフォーマンスと汎用性の向上に役立ちます。

2.2. スライディングウィンドウの注意

Gemma 2 は、新しいアテンション メカニズム メソッドを実装しています。

他のすべてのレイヤーはスライディング ウィンドウ アテンション メカニズムを使用し、ローカル コンテキストは 4096 トークンです。
交互層は、8192 トークン コンテキスト全体に対して完全に二次的なグローバル アテンション メカニズムを採用します。

このハイブリッド アプローチは、効率性と入力の長距離依存性を捕捉する機能のバランスを取ることを目的としています。

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

この手法により、ハード トランケーションを行わずにロジットが大きくなりすぎることが防止され、トレーニング プロセスを安定させながらより多くの情報が保持されます。

  1. ジェマ2 9B: 90億パラメータモデル
  2. ジェマ2 27B: より大規模な 270 億パラメータ モデル

各サイズには 2 つのスタイルがあります。

  • 基本モデル: 大量のテキスト データで事前トレーニング済み
  • 命令チューニング (IT) モデル: 特定のタスクのパフォーマンスを向上させるために微調整されています。

2.4. 知識の蒸留

9B モデルの場合、Gemma 2 は知識抽出テクノロジーを使用します。

  • 事前トレーニング: 9B モデルは、初期トレーニング中に大規模な教師モデルから学習します。
  • トレーニング後: 9B モデルと 27B モデルの両方で、オンライン ポリシー蒸留を使用してパフォーマンスを向上させます。

このプロセスは、小さいモデルが大きいモデルの機能をより効果的に取り込むのに役立ちます。

2.5. モデルの結合

Gemma 2 は、Warp と呼ばれる新しいモデル結合テクノロジーを使用しており、複数のモデルを 3 段階で結合します。

  1. 強化学習微調整中の指数移動平均 (EMA)
  2. 複数の戦略で微調整した後の球面線形補間 (SLERP)
  3. 最終ステップとしての線形補間初期化 (LITI)

このアプローチは、より堅牢で堅牢な最終モデルを作成することを目的としています。

3. パフォーマンスのベンチマーク

Gemma 2 は、さまざまなベンチマークにわたって優れたパフォーマンスを示します。

Gemma 2 は、優れたパフォーマンスと推論効率を実現するように設計された再設計されたアーキテクチャを備えています

6. Gemma 2 の使用を開始する

プロジェクトで Gemma 2 の使用を開始するには、次のオプションがあります。

6.1. Google人工知能スタジオ

Gemma 2 には Google AI Studio を通じてアクセスできます。Google 人工知能スタジオ.

6.2. 顔を抱きしめる

ジェマ2とハグフェイス トランスフォーマーライブラリの統合。使用方法は次のとおりです。

<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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6.3.TensorFlow/Keras

TensorFlow ユーザーの場合、Gemma 2 は Keras を通じて入手できます。

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7. 高度な使用法: Gemma 2 を使用してローカル RAG システムを構築する

Gemma 2 の強力なアプリケーションは、検索拡張生成 (RAG) システムの構築です。 Gemma 2 と Nomic 埋め込みを使用して、シンプルで完全にネイティブな RAG システムを作成してみましょう。

ステップ 1: 環境をセットアップする

まず、必要なライブラリがインストールされていることを確認します。

pip install langchain ollama nomic chromadb
  • 1

ステップ 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

ステップ 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"])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

この RAG システムは、言語モデルとして Gemma 2 to 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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

特定の要件とコンピューティング リソースに基づいてトレーニング パラメーターを調整します。

倫理的考慮事項と制限

Gemma 2 は優れた機能を提供しますが、その制限と倫理的考慮事項に注意する必要があります。

  • バイアス : すべての言語モデルと同様に、Gemma 2 はトレーニング データに存在するバイアスを反映している可能性があります。その出力を常に批判的に評価してください。
  • 事実の正確さ : Gemma 2 は強力ですが、誤った情報や一貫性のない情報が生成されることがあります。信頼できる情報源から重要な事実を確認してください。
  • コンテキストの長さ : Gemma 2 のコンテキスト長は 8192 トークンです。長い文書や会話の場合は、コンテキストを効果的に管理するための戦略を実装する必要がある場合があります。
  • コンピューティングリソース: 特に 27B モデルの場合、効果的な推論と微調整には大量のコンピューティング リソースが必要になる場合があります。
  • 責任ある使用: Google の責任ある AI の実践を遵守し、Gemma 2 の使用が倫理的な AI 原則に沿っていることを確認してください。

8.結論

Gemma 2 の高度な機能 (スライディング ウィンドウ アテンション、ソフト上限、新しいモデル結合技術など) により、Gemma 2 は幅広い自然言語処理タスクのための強力なツールになります。

単純な推論、複雑な RAG システム、ドメイン固有の微調整されたモデルなど、プロジェクトで Gemma 2 を活用することで、データとプロセスの制御を維持しながら SOTA AI のパワーを活用できます。

元のアドレス:https://www.unite.ai/complete-guide-on-gemma-2-googles-new-open-large-language-model/