Gemini API: Python के साथ मॉडल ट्यूनिंग

ai.google.dev पर देखें Google Colab में चलाएं GitHub पर सोर्स देखें

इस notebook में, आपको Gemini API के लिए Python क्लाइंट लाइब्रेरी का इस्तेमाल करके ट्यूनिंग सेवा शुरू करने का तरीका बताया जाएगा. यहां आपको 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'>

png

अपने मॉडल का आकलन करना

अपने मॉडल की परफ़ॉर्मेंस की जांच करने के लिए, 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.