العرض على ai.google.dev | التنفيذ في Google Colab | عرض المصدر على GitHub |
في هذا الدفتر، ستتعرّف على كيفية بدء استخدام خدمة الضبط باستخدام مكتبة برامج Python الخاصة بواجهة Gemini API. ستتعلّم هنا كيفية ضبط النموذج النصي المستخدَم في خدمة إنشاء النصوص في Gemini API
قبل البدء: عليك إعداد مشروعك ومفتاح واجهة برمجة التطبيقات.
قبل طلب 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.