জেমিনি API: পাইথনের সাথে মডেল টিউনিং

ai.google.dev-এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন

এই নোটবুকে, আপনি জেমিনি API-এর জন্য পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে টিউনিং পরিষেবাটি কীভাবে শুরু করবেন তা শিখবেন। এখানে, আপনি শিখবেন কিভাবে Gemini API এর টেক্সট জেনারেশন সার্ভিসের পিছনে টেক্সট মডেল টিউন করতে হয়।

সেটআপ

প্রমাণীকরণ

জেমিনি API আপনাকে আপনার নিজস্ব ডেটাতে মডেলগুলি টিউন করতে দেয়৷ যেহেতু এটি আপনার ডেটা এবং আপনার টিউন করা মডেলগুলি এর জন্য 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
result = model.generate_content('123455')
result.text
'56'
'123456'
result = model.generate_content('four')
result.text
'five'
result = model.generate_content('quatre') # French 4
result.text                               # French 5 is "cinq"
result = model.generate_content('III')    # Roman numeral 3
result.text                               # Roman numeral 4 is IV
'cinq'
-placeholder29
'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.