مشاهده در ai.google.dev | در Google Colab اجرا شود | مشاهده منبع در GitHub |
در این نوت بوک، نحوه شروع به کار با سرویس تنظیم با استفاده از کتابخانه کلاینت پایتون برای Gemini API را خواهید آموخت. در اینجا، نحوه تنظیم مدل متن پشت سرویس تولید متن Gemini API را یاد خواهید گرفت.
قبل از شروع: پروژه و کلید API خود را تنظیم کنید
قبل از فراخوانی Gemini API، باید پروژه خود را راه اندازی کرده و کلید API خود را پیکربندی کنید.
کلید API خود را دریافت و ایمن کنید
برای فراخوانی Gemini API به یک کلید API نیاز دارید. اگر قبلاً یکی ندارید، یک کلید در Google AI Studio ایجاد کنید.
اکیداً توصیه می شود که یک کلید API را در سیستم کنترل نسخه خود بررسی نکنید . درعوض، باید کلید API خود را در یک فروشگاه محرمانه (به عنوان مثال، Secret Manager ) ذخیره کنید.
بسته SDK را نصب کنید و کلید API خود را پیکربندی کنید
Python SDK برای Gemini API در بسته google-generativeai
موجود است.
وابستگی را با استفاده از pip نصب کنید:
pip install -U google-generativeai
بسته را وارد کنید و سرویس را با کلید API خود پیکربندی کنید:
import os import google.generativeai as genai genai.configure(api_key=os.environ['API_KEY'])
برپایی
احراز هویت را تنظیم کنید
Gemini API به شما امکان می دهد مدل ها را بر اساس داده های خود تنظیم کنید. از آنجایی که دادههای شما و مدلهای تنظیمشده شما هستند، به کنترلهای دسترسی دقیقتری نسبت به API-Keys نیاز دارد.
قبل از اینکه بتوانید این آموزش را اجرا کنید، باید OAuth را برای پروژه خود راه اندازی کنید .
ساده ترین راه برای راه اندازی در Colab این است که محتویات فایل client_secret.json
خود را در "Secrets manager" 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"
result = model.generate_content('III') # Roman numeral 3
result.text # Roman numeral 4 is IV
'cinq'
'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.