العرض على ai.google.dev | التشغيل في Google Colab | الاطّلاع على المصدر على GitHub |
ستتعلم في هذا الدفتر كيفية بدء خدمة الضبط باستخدام مكتبة عملاء بايثون في واجهة برمجة تطبيقات Gemini. ستتعرّف هنا على كيفية ضبط النموذج النصي من خلال خدمة إنشاء النصوص في Gemini 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'
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 八!
'八'
يبدو أنّه تم اختيار هذه المهمة على الرغم من الأمثلة المحدودة، إلا أنّ كلمة "التالي" هي مفهوم بسيط. يمكنك الاطّلاع على دليل الضبط للحصول على مزيد من الإرشادات حول تحسين الأداء.
تعديل الوصف
يمكنك متى شئت تعديل وصف النموذج الذي تم ضبطه باستخدام طريقة 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.