Modèles et plateformes d’IA

Guide complet sur Gemma 2 : le nouveau modèle de langage ouvert de Google

mm
Ajouter Unite.AI à vos sources préférées sur Google

Gemma 2 s’appuie sur son prédécesseur, offrant des performances et une efficacité améliorées, ainsi qu’un ensemble de fonctionnalités innovantes qui le rendent particulièrement attrayant pour les applications de recherche et pratiques. Ce qui distingue Gemma 2, c’est sa capacité à offrir des performances comparables à celles de modèles propriétaires beaucoup plus grands, mais dans un package conçu pour une accessibilité plus large et une utilisation sur des configurations matérielles plus modestes.

Alors que j’ai plongé dans les spécifications techniques et l’architecture de Gemma 2, j’ai été de plus en plus impressionné par l’ingéniosité de sa conception. Le modèle intègre plusieurs techniques avancées, notamment des mécanismes d’attention novateurs et des approches innovantes pour la stabilité de l’entraînement, qui contribuent à ses capacités remarquables.

Google Open Source LLM Gemma

Google [securities_stock_price_tag symbol="GOOGL" exchange="NASDAQ"] Open Source LLM Gemma

Dans ce guide complet, nous allons explorer Gemma 2 en profondeur, en examinant son architecture, ses fonctionnalités clés et ses applications pratiques. Que vous soyez un praticien expérimenté de l’IA ou un nouveau venu enthousiaste dans le domaine, cet article vise à fournir des insights précieux sur le fonctionnement de Gemma 2 et sur la façon de tirer parti de son pouvoir dans vos propres projets.

Qu’est-ce que Gemma 2 ?

Gemma 2 est le dernier modèle de langage ouvert de Google, conçu pour être léger mais puissant. Il est basé sur les mêmes recherches et technologies utilisées pour créer les modèles Gemini de Google, offrant des performances de pointe dans un package plus accessible. Gemma 2 est disponible en deux tailles :

Gemma 2 9B : un modèle de 9 milliards de paramètres
Gemma 2 27B : un modèle plus grand de 27 milliards de paramètres

Chaque taille est disponible en deux variants :

Modèles de base : pré-entraînés sur un vaste corpus de données textuelles
Modèles à instruction (IT) : affinés pour de meilleures performances sur des tâches spécifiques

Accéder aux modèles dans Google AI Studio : Google AI Studio – Gemma 2

Lire le rapport technique ici : Rapport technique Gemma 2

Fonctionnalités clés et améliorations

Gemma 2 introduit plusieurs avancées significatives par rapport à son prédécesseur :

1. Données d’entraînement accrues

Les modèles ont été entraînés sur beaucoup plus de données :

Gemma 2 27B : entraîné sur 13 billions de jetons
Gemma 2 9B : entraîné sur 8 billions de jetons

Ce jeu de données élargi, composé principalement de données web (en anglais pour la plupart), de code et de mathématiques, contribue aux performances améliorées et à la polyvalence des modèles.

2. Attention à fenêtre glissante

Gemma 2 met en œuvre une approche novatrice des mécanismes d’attention :

Chaque couche alterne entre une attention à fenêtre glissante avec un contexte local de 4096 jetons
Les couches alternées emploient une attention globale quadratique sur l’ensemble du contexte de 8192 jetons

Cette approche hybride vise à équilibrer l’efficacité avec la capacité de capturer les dépendances à longue portée dans les entrées.

3. Soft-Capping

Pour améliorer la stabilité et les performances de l’entraînement, Gemma 2 introduit un mécanisme de soft-capping :


<p>def soft_cap(x, cap):
return cap * torch.tanh(x / cap)</p>

<p># Appliqué aux logits d'attention
attention_logits = soft_cap(attention_logits, cap=50.0)</p>

# Appliqué aux logits de la dernière couche

<p>final_logits = soft_cap(final_logits, cap=30.0)

Cette technique empêche les logits de devenir excessivement grands sans troncature dure, en conservant plus d’informations tout en stabilisant le processus d’entraînement.

  1. Gemma 2 9B : un modèle de 9 milliards de paramètres
  2. Gemma 2 27B : un modèle plus grand de 27 milliards de paramètres

Chaque taille est disponible en deux variants :

  • Modèles de base : pré-entraînés sur un vaste corpus de données textuelles
  • Modèles à instruction (IT) : affinés pour de meilleures performances sur des tâches spécifiques

4. Distillation des connaissances

Pour le modèle 9B, Gemma 2 emploie des techniques de distillation des connaissances :

  • Pré-entraînement : le modèle 9B apprend d’un modèle enseignant plus grand lors de l’entraînement initial
  • Post-entraînement : les modèles 9B et 27B utilisent une distillation des politiques pour affiner leurs performances

Ce processus aide le modèle plus petit à capturer les capacités des modèles plus grands de manière plus efficace.

5. Fusion de modèles

Gemma 2 utilise une technique de fusion de modèles appelée Warp, qui combine plusieurs modèles en trois étapes :

  1. Moyenne mobile exponentielle (EMA) pendant l’affinement par apprentissage par renforcement
  2. Interpolation linéaire sphérique (SLERP) après l’affinement de plusieurs politiques
  3. Interpolation linéaire vers l’initialisation (LITI) comme étape finale

Cette approche vise à créer un modèle final plus robuste et capable.

Benchmarks de performance

Gemma 2 démontre des performances impressionnantes sur divers benchmarks :

Gemma 2 sur une architecture révisée, conçue pour des performances exceptionnelles et une efficacité d'inférence

Gemma 2 sur une architecture révisée, conçue pour des performances exceptionnelles et une efficacité d’inférence

 

Premiers pas avec Gemma 2

Pour commencer à utiliser Gemma 2 dans vos projets, vous avez plusieurs options :

1. Google AI Studio

Pour une expérimentation rapide sans exigences matérielles, vous pouvez accéder à Gemma 2 via Google AI Studio.

2. Hugging Transformers

Gemma 2 est intégré à la bibliothèque Hugging Face Transformers. Voici comment vous pouvez l’utiliser :

&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;
&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;

<p>from transformers import AutoTokenizer, AutoModelForCausalLM</p>

<p># Charger le modèle et le tokenizeur
model_name = &quot;google/gemma-2-27b-it&quot; # ou &quot;google/gemma-2-9b-it&quot; pour la version plus petite
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)</p>

<p># Préparer l'entrée
prompt = &quot;Expliquez le concept d'intrication quantique en termes simples.&quot;
inputs = tokenizer(prompt, return_tensors=&quot;pt&quot;)</p>

<p># Générer du texte
outputs = model.generate(**inputs, max_length=200)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)</p>

print(response)

3. TensorFlow/Keras

Pour les utilisateurs de TensorFlow, Gemma 2 est disponible via Keras :


<p>import tensorflow as tf
from keras_nlp.models import GemmaCausalLM</p>

<p># Charger le modèle
model = GemmaCausalLM.from_preset(&quot;gemma_2b_en&quot;)</p>

<p># Générer du texte
prompt = &quot;Expliquez le concept d'intrication quantique en termes simples.&quot;
output = model.generate(prompt, max_length=200)</p>

print(output)

Utilisation avancée : construction d’un système RAG local avec Gemma 2

Une application puissante de Gemma 2 est la construction d’un système de génération augmentée par récupération (RAG). Créons un système RAG local simple en utilisant Gemma 2 et les embeddings Nomic.

Étape 1 : configuration de l’environnement

Tout d’abord, assurez-vous d’avoir les bibliothèques nécessaires installées :


<p>pip install langchain ollama nomic chromadb</p>

Étape 2 : indexation des documents

Créez un indexeur pour traiter vos documents :


<p>import os
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import DirectoryLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings</p>

<p>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=&quot;nomic-ai/nomic-embed-text-v1&quot;)</p>

<p>def load_and_split_documents(self):
loader = DirectoryLoader(self.directory_path, glob=&quot;**/*.txt&quot;)
documents = loader.load()
return self.text_splitter.split_documents(documents)</p>

<p>def create_vector_store(self, documents):
return Chroma.from_documents(documents, self.embeddings, persist_directory=&quot;./chroma_db&quot;)</p>

<p>def index(self):
documents = self.load_and_split_documents()
vector_store = self.create_vector_store(documents)
vector_store.persist()
return vector_store</p>

<p># Utilisation
indexer = Indexer(&quot;chemin/vers/vos/documents&quot;)
vector_store = indexer.index()</p>

Étape 3 : configuration du système RAG

Maintenant, créons le système RAG en utilisant Gemma 2 :


<p>from langchain.llms import Ollama
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate</p>

<p>class RAGSystem:
def __init__(self, vector_store):
self.vector_store = vector_store
self.llm = Ollama(model=&quot;gemma2:9b&quot;)
self.retriever = self.vector_store.as_retriever(search_kwargs={&quot;k&quot;: 3})</p>

<p>self.template = &quot;&quot;&quot;Utilisez les éléments de contexte suivants pour répondre à la question à la fin.
Si vous ne connaissez pas la réponse, dites simplement que vous ne la connaissez pas, n'essayez pas de fabriquer une réponse.</p>

{context}

<p>Question: {question}
Réponse: &quot;&quot;&quot;</p>

<p>self.qa_prompt = PromptTemplate(
template=self.template, input_variables=[&quot;context&quot;, &quot;question&quot;]
)</p>

<p>self.qa_chain = RetrievalQA.from_chain_type(
llm=self.llm,
chain_type=&quot;stuff&quot;,
retriever=self.retriever,
return_source_documents=True,
chain_type_kwargs={&quot;prompt&quot;: self.qa_prompt}
)</p>

<p>def query(self, question):
return self.qa_chain({&quot;query&quot;: question})</p>

<p># Utilisation
rag_system = RAGSystem(vector_store)
response = rag_system.query(&quot;Quelle est la capitale de la France ?&quot;)
print(response[&quot;result&quot;])</p>

Ce système RAG utilise Gemma 2 via Ollama pour le modèle de langage et les embeddings Nomic pour la récupération de documents. Il vous permet de poser des questions en fonction des documents indexés, en fournissant des réponses avec contexte à partir des sources pertinentes.

Affiner Gemma 2

Pour des tâches ou des domaines spécifiques, vous pourriez vouloir affiner Gemma 2. Voici un exemple de base en utilisant la bibliothèque Hugging Face Transformers :

from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from datasets import load_dataset

<p># Charger le modèle et le tokenizeur
model_name = &quot;google/gemma-2-9b-it&quot;
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)</p>

<p># Préparer le jeu de données
dataset = load_dataset(&quot;votre_jeu_de_données&quot;)</p>

<p>def tokenize_function(examples):
return tokenizer(examples[&quot;text&quot;], padding=&quot;max_length&quot;, truncation=True)</p>

<p>tokenized_datasets = dataset.map(tokenize_function, batched=True)</p>

<p># Configurer les arguments d'entraînement
training_args = TrainingArguments(
output_dir=&quot;./results&quot;,
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=&quot;./logs&quot;,
)</p>

<p># Initialiser le Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets[&quot;train&quot;],
eval_dataset=tokenized_datasets[&quot;test&quot;],
)</p>

# Démarrer l'affinement
trainer.train()

<p># Enregistrer le modèle affiné
model.save_pretrained(&quot;./fine_tuned_gemma2&quot;)
tokenizer.save_pretrained(&quot;./fine_tuned_gemma2&quot;)</p>

N’oubliez pas d’ajuster les paramètres d’entraînement en fonction de vos besoins spécifiques et de vos ressources computationnelles.

Considérations éthiques et limites

Bien que Gemma 2 offre des capacités impressionnantes, il est crucial d’être conscient de ses limites et de ses considérations éthiques :

  • Biais : comme tous les modèles de langage, Gemma 2 peut refléter les biais présents dans ses données d’entraînement. Évaluez toujours de manière critique ses sorties.
  • Exactitude factuelle : bien que très capable, Gemma 2 peut parfois générer des informations incorrectes ou incohérentes. Vérifiez les faits importants à partir de sources fiables.
  • Longueur de contexte : Gemma 2 a une longueur de contexte de 8192 jetons. Pour des documents ou des conversations plus longs, vous pourriez devoir mettre en œuvre des stratégies pour gérer le contexte de manière efficace.
  • Ressources computationnelles : en particulier pour le modèle 27B, des ressources computationnelles significatives peuvent être nécessaires pour une inférence et un affinement efficaces.
  • Utilisation responsable : suivez les pratiques d’IA responsables de Google et assurez-vous que votre utilisation de Gemma 2 s’aligne sur les principes éthiques de l’IA.

Conclusion

Gemma 2, avec ses fonctionnalités avancées telles que l’attention à fenêtre glissante, le soft-capping et les techniques de fusion de modèles novatrices, constitue un outil puissant pour une large gamme de tâches de traitement du langage naturel.

En exploitant Gemma 2 dans vos projets, que ce soit par inférence simple, des systèmes RAG complexes ou des modèles affinés pour des domaines spécifiques, vous pouvez tirer parti du pouvoir de l’IA de pointe tout en maintenant le contrôle sur vos données et vos processus.

J'ai passé les cinq dernières années à plonger dans le monde fascinant de l'apprentissage automatique et du deep learning. Ma passion et mon expertise m'ont conduit à contribuer à plus de 50 projets de génie logiciel divers, avec un focus particulier sur l'IA/ML. Ma curiosité continue m'a également attiré vers le traitement automatique des langues, un domaine que je suis impatient d'explorer plus en profondeur.