Afficher sur ai.google.dev | Exécuter dans Google Colab | Consulter le code source sur GitHub |
Dans ce notebook, vous allez apprendre à utiliser le service de réglage à l'aide de la bibliothèque cliente Python pour l'API Gemini. Vous allez apprendre à régler le modèle de texte du service de génération de texte de l'API Gemini.
Avant de commencer: configurer votre projet et votre clé API
Avant d'appeler l'API Gemini, vous devez configurer votre projet et votre clé API.
Préparation
Configurer l'authentification
L'API Gemini vous permet de régler des modèles à partir de vos propres données. Étant donné qu'il s'agit de vos données et de vos modèles réglés, cela nécessite des contrôles d'accès plus stricts que ceux fournis par les clés API.
Avant de pouvoir exécuter ce tutoriel, vous devez configurer OAuth pour votre projet.
Le moyen le plus simple de se configurer dans Colab consiste à copier le contenu de votre fichier client_secret.json
dans le gestionnaire de secrets de Colab (sous l'icône en forme de clé dans le panneau de gauche) avec le nom de secret CLIENT_SECRET
.
Cette commande gcloud transforme le fichier client_secret.json
en identifiants permettant de s'authentifier auprès du service.
import os
if 'COLAB_RELEASE_TAG' in os.environ:
from google.colab import userdata
import pathlib
pathlib.Path('client_secret.json').write_text(userdata.get('CLIENT_SECRET'))
# Use `--no-browser` in colab
!gcloud auth application-default login --no-browser --client-id-file client_secret.json --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'
else:
!gcloud auth application-default login --client-id-file client_secret.json --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'
Installer la bibliothèque cliente
pip install -q google-generativeai
Importer des bibliothèques
import google.generativeai as genai
Vous pouvez vérifier vos modèles réglés existants avec la méthode genai.list_tuned_model
.
for i, m in zip(range(5), genai.list_tuned_models()):
print(m.name)
tunedModels/my-model-8527 tunedModels/my-model-7092 tunedModels/my-model-2778 tunedModels/my-model-1298 tunedModels/my-model-3883
Créer un modèle réglé
Pour créer un modèle réglé, vous devez lui transmettre votre ensemble de données via la méthode genai.create_tuned_model
. Pour ce faire, définissez directement les valeurs d'entrée et de sortie dans l'appel, ou importez un fichier dans un DataFrame à transmettre à la méthode.
Dans cet exemple, vous allez régler un modèle pour générer le nombre suivant dans la séquence. Par exemple, si l'entrée est 1
, le modèle doit générer 2
. Si l'entrée est one hundred
, la sortie doit être one hundred one
.
base_model = [
m for m in genai.list_models()
if "createTunedModel" in m.supported_generation_methods][0]
base_model
Model(name='models/gemini-1.0-pro-001', base_model_id='', version='001', display_name='Gemini 1.0 Pro', description=('The best model for scaling across a wide range of tasks. This is a stable ' 'model that supports tuning.'), input_token_limit=30720, output_token_limit=2048, supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'], temperature=0.9, top_p=1.0, top_k=1)
import random
name = f'generate-num-{random.randint(0,10000)}'
operation = genai.create_tuned_model(
# You can use a tuned model here too. Set `source_model="tunedModels/..."`
source_model=base_model.name,
training_data=[
{
'text_input': '1',
'output': '2',
},{
'text_input': '3',
'output': '4',
},{
'text_input': '-3',
'output': '-2',
},{
'text_input': 'twenty two',
'output': 'twenty three',
},{
'text_input': 'two hundred',
'output': 'two hundred one',
},{
'text_input': 'ninety nine',
'output': 'one hundred',
},{
'text_input': '8',
'output': '9',
},{
'text_input': '-98',
'output': '-97',
},{
'text_input': '1,000',
'output': '1,001',
},{
'text_input': '10,100,000',
'output': '10,100,001',
},{
'text_input': 'thirteen',
'output': 'fourteen',
},{
'text_input': 'eighty',
'output': 'eighty one',
},{
'text_input': 'one',
'output': 'two',
},{
'text_input': 'three',
'output': 'four',
},{
'text_input': 'seven',
'output': 'eight',
}
],
id = name,
epoch_count = 100,
batch_size=4,
learning_rate=0.001,
)
Votre modèle réglé est immédiatement ajouté à la liste des modèles réglés, mais son état passe à "création" pendant le réglage du modèle.
model = genai.get_tuned_model(f'tunedModels/{name}')
model
TunedModel(name='tunedModels/generate-num-2946', source_model='models/gemini-1.0-pro-001', base_model='models/gemini-1.0-pro-001', display_name='', description='', temperature=0.9, top_p=1.0, top_k=1, state=<State.CREATING: 1>, create_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 448050, tzinfo=datetime.timezone.utc), update_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 448050, tzinfo=datetime.timezone.utc), tuning_task=TuningTask(start_time=datetime.datetime(2024, 2, 21, 20, 4, 16, 890698, tzinfo=datetime.timezone.utc), complete_time=None, snapshots=[], hyperparameters=Hyperparameters(epoch_count=100, batch_size=4, learning_rate=0.001)))
model.state
<State.CREATING: 1>
Vérifier la progression du réglage
Utilisez metadata
pour vérifier l'état:
operation.metadata
total_steps: 375 tuned_model: "tunedModels/generate-num-2946"
Attendez la fin de l'entraînement en utilisant operation.result()
ou operation.wait_bar()
.
import time
for status in operation.wait_bar():
time.sleep(30)
0%| | 0/375 [00:00<?, ?it/s]
Vous pouvez annuler votre job de réglage à tout moment à l'aide de la méthode cancel()
. Annulez la mise en commentaire de la ligne ci-dessous et exécutez la cellule de code pour annuler votre tâche avant qu'elle ne soit terminée.
# operation.cancel()
Une fois le réglage terminé, vous pouvez afficher la courbe de fonction de perte à partir des résultats du réglage. La courbe de perte indique dans quelle mesure les prédictions du modèle s'écartent des résultats idéaux.
import pandas as pd
import seaborn as sns
model = operation.result()
snapshots = pd.DataFrame(model.tuning_task.snapshots)
sns.lineplot(data=snapshots, x = 'epoch', y='mean_loss')
<Axes: xlabel='epoch', ylabel='mean_loss'>
Évaluer votre modèle
Vous pouvez utiliser la méthode genai.generate_text
et spécifier le nom de votre modèle pour tester ses performances.
model = genai.GenerativeModel(model_name=f'tunedModels/{name}')
result = model.generate_content('55')
result.text
'56'
result = model.generate_content('123455')
result.text
'123456'
result = model.generate_content('four')
result.text
'five'
result = model.generate_content('quatre') # French 4
result.text # French 5 is "cinq"
'cinq'
result = model.generate_content('III') # Roman numeral 3
result.text # Roman numeral 4 is IV
'IV'
result = model.generate_content('七') # Japanese 7
result.text # Japanese 8 is 八!
'八'
Il semble que la tâche ait repris, malgré les exemples limités, mais "next" est un concept relativement simple. Consultez le guide de réglage pour obtenir plus de conseils sur l'amélioration des performances.
Mettre à jour la description
Vous pouvez mettre à jour la description de votre modèle réglé à tout moment à l'aide de la méthode genai.update_tuned_model
.
genai.update_tuned_model(f'tunedModels/{name}', {"description":"This is my model."});
model = genai.get_tuned_model(f'tunedModels/{name}')
model.description
'This is my model.'
Supprimer le modèle
Vous pouvez nettoyer votre liste de modèles réglés en supprimant ceux dont vous n'avez plus besoin.
Utilisez la méthode genai.delete_tuned_model
pour supprimer un modèle. Si vous avez annulé des tâches de réglage, vous pouvez les supprimer, car leurs performances peuvent être imprévisibles.
genai.delete_tuned_model(f'tunedModels/{name}')
Le modèle n'existe plus:
try:
m = genai.get_tuned_model(f'tunedModels/{name}')
print(m)
except Exception as e:
print(f"{type(e)}: {e}")
<class 'google.api_core.exceptions.NotFound'>: 404 Tuned model tunedModels/generate-num-2946 does not exist.