Voir sur ai.google.dev | Exécuter dans Google Colab | Afficher la 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. Ici, vous allez apprendre à régler le modèle de texte du service de génération de texte de l'API Gemini.
Préparation
Authentifier
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 ajustés, des contrôles d'accès plus stricts sont nécessaires que les clés API ne peuvent fournir.
Avant de pouvoir exécuter ce tutoriel, vous devez configurer OAuth pour votre projet.
Dans Colab, la méthode la plus simple pour configurer 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 du 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 les modèles réglés existants à l'aide de 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 transmettre votre ensemble de données au modèle dans la méthode genai.create_tuned_model
. Vous pouvez le faire en définissant directement les valeurs d'entrée et de sortie dans l'appel ou en important à partir d'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 de 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 est défini sur "Création" pendant le réglage.
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 avec 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 la tâche 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 job avant qu'il ne soit terminé.
# operation.cancel()
Une fois le réglage terminé, vous pouvez consulter 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
Pour tester les performances du modèle, vous pouvez utiliser la méthode genai.generate_text
et spécifier le nom de votre modèle.
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 八!
'八'
Même si le nombre d'exemples est limité, la tâche s'est réellement acquittée, mais le concept "suivant" est simple. Consultez le guide de réglages pour savoir comment améliorer vos performances.
Mettre à jour la description
Vous pouvez modifier 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 les modèles dont vous n'avez plus besoin. Utilisez la méthode genai.delete_tuned_model
pour supprimer un modèle. Si vous avez annulé des jobs 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.