Посмотреть на ai.google.dev | Запустить в Google Colab | Посмотреть исходный код на GitHub |
Из этой записной книжки вы узнаете, как начать работу со службой настройки с использованием клиентской библиотеки Python для API Gemini. Здесь вы узнаете, как настроить текстовую модель службы генерации текста Gemini API.
Настраивать
Аутентификация
API Gemini позволяет настраивать модели на основе ваших собственных данных. Поскольку это ваши данные и ваши настроенные модели, требуется более строгий контроль доступа, чем может обеспечить API-ключи.
Прежде чем вы сможете запустить это руководство, вам необходимо настроить OAuth для вашего проекта .
В Colab проще всего выполнить настройку — скопировать содержимое файла client_secret.json
в «Менеджер секретов» Colab (под значком ключа на левой панели) с секретным именем CLIENT_SECRET
.
Эта команда gcloud превращает файл client_secret.json
в учетные данные, которые можно использовать для аутентификации в службе.
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'
Установите клиентскую библиотеку
pip install -q google-generativeai
Импортировать библиотеки
import google.generativeai as genai
Вы можете проверить существующие настроенные модели с помощью метода 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
Создать настроенную модель
Чтобы создать настроенную модель, вам необходимо передать свой набор данных в модель в методе genai.create_tuned_model
. Вы можете сделать это, напрямую определив входные и выходные значения в вызове или импортировав их из файла в фрейм данных для передачи методу.
В этом примере вы настроите модель для генерации следующего числа в последовательности. Например, если входное значение равно 1
, модель должна вывести 2
. Если на входе one hundred
, на выходе должно быть 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,
)
Ваша настроенная модель сразу же добавляется в список настроенных моделей, но на время настройки модели ее статус устанавливается на «создается».
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>
Проверьте прогресс настройки
Используйте metadata
для проверки состояния:
operation.metadata
total_steps: 375 tuned_model: "tunedModels/generate-num-2946"
Дождитесь завершения обучения, используя operation.result()
или operation.wait_bar()
import time
for status in operation.wait_bar():
time.sleep(30)
0%| | 0/375 [00:00<?, ?it/s]
Вы можете отменить задание по настройке в любое время, используя метод cancel()
. Раскомментируйте строку ниже и запустите ячейку кода, чтобы отменить задание до его завершения.
# operation.cancel()
После завершения настройки вы можете просмотреть кривую потерь по результатам настройки. Кривая потерь показывает, насколько прогнозы модели отклоняются от идеальных результатов.
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'>
Оцените свою модель
Вы можете использовать метод genai.generate_text
и указать имя вашей модели, чтобы проверить ее производительность.
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'-placeholder29
'IV'
result = model.generate_content('III') # Roman numeral 3
result.text # Roman numeral 4 is IV
result = model.generate_content('七') # Japanese 7
result.text # Japanese 8 is 八!
'八'
Кажется, что он действительно справился с задачей, несмотря на ограниченное количество примеров, но «следующий» — это простая концепция; дополнительные рекомендации по повышению производительности см. в руководстве по настройке .
Обновить описание
Вы можете обновить описание настроенной модели в любое время, используя метод 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.'
Удалить модель
Вы можете очистить список настроенных моделей, удалив модели, которые вам больше не нужны. Используйте метод genai.delete_tuned_model
для удаления модели. Если вы отменили какие-либо задания по настройке, возможно, вы захотите удалить их, поскольку их производительность может быть непредсказуемой.
genai.delete_tuned_model(f'tunedModels/{name}')
Модель больше не существует:
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.