ดูใน ai.google.dev | เรียกใช้ใน Google Colab | ดูแหล่งที่มาใน GitHub |
ในสมุดบันทึกนี้ คุณจะได้ดูวิธีเริ่มต้นใช้งานบริการปรับแต่งโดยใช้ไลบรารีของไคลเอ็นต์ Python สำหรับ Gemini API คุณจะได้เรียนรู้วิธีปรับแต่งโมเดลข้อความ ที่อยู่เบื้องหลังบริการสร้างข้อความของ Gemini API
ก่อนเริ่มต้น: ตั้งค่าโปรเจ็กต์และคีย์ API
คุณต้องตั้งค่าโปรเจ็กต์และกำหนดค่าคีย์ API ก่อนที่จะเรียกใช้ Gemini API
ตั้งค่า
ตั้งค่าการตรวจสอบสิทธิ์
Gemini API ช่วยให้คุณปรับแต่งโมเดลจากข้อมูลของคุณเองได้ เนื่องจากเป็นข้อมูลของคุณและโมเดลที่คุณปรับแต่ง จึงต้องใช้การควบคุมการเข้าถึงที่เข้มงวดกว่าคีย์ API
คุณจะต้องตั้งค่า OAuth สำหรับโปรเจ็กต์ก่อน จึงจะเรียกใช้บทแนะนำนี้ได้
วิธีที่ง่ายที่สุดในการตั้งค่าใน Colab คือการคัดลอกเนื้อหาของไฟล์ client_secret.json
ไปยัง "Secret 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"
'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.