बेहतर बनाने का ट्यूटोरियल

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

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

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.