ফাইন-টিউনিং টিউটোরিয়াল

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

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

প্রমাণীকরণ সেট আপ করুন

জেমিনি API আপনাকে আপনার নিজস্ব ডেটাতে মডেলগুলি টিউন করতে দেয়৷ যেহেতু এটি আপনার ডেটা এবং আপনার টিউন করা মডেলগুলি এর জন্য API-কীগুলি সরবরাহ করতে পারে তার চেয়ে কঠোর অ্যাক্সেস নিয়ন্ত্রণের প্রয়োজন৷

আপনি এই টিউটোরিয়ালটি চালানোর আগে, আপনাকে আপনার প্রকল্পের জন্য OAuth সেটআপ করতে হবে।

Colab-এ সেটআপ পাওয়ার সবচেয়ে সহজ উপায় হল আপনার client_secret.json ফাইলের বিষয়বস্তু Colab-এর "সিক্রেটস ম্যানেজার" (বাম প্যানেলে কী আইকনের নিচে) গোপন নাম CLIENT_SECRET দিয়ে কপি করা।

এই gcloud কমান্ডটি client_secret.json ফাইলটিকে শংসাপত্রে পরিণত করে যা পরিষেবার সাথে প্রমাণীকরণের জন্য ব্যবহার করা যেতে পারে।

try:
  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'
except ImportError:
  !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'
You are authorizing client libraries without access to a web browser. Please run the following command on a machine with a web browser and copy its output back here. Make sure the installed gcloud version is 372.0.0 or newer.

gcloud auth application-default login --remote-bootstrap="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=87071151422-n1a3cb6c7fvkfg4gmhdtmn5ulol2l4be.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgenerative-language.tuning&state=QIyNibWSaTIsozjmvZEkVBo6EcoW0G&access_type=offline&code_challenge=76c1ZiGvKN8cvlYfj3BmbCwE4e7tvrlwaX3REUX25gY&code_challenge_method=S256&token_usage=remote"

Enter the output of the above command: https://localhost:8085/?state=QIyNibWSaTIsozjmvZEkVBo6EcoW0G&code=4/0AeaYSHBKrY911S466QjKQIFODoOPXlO1mWyTYYdrbELIDV6Hw2DKRAyro62BugroSvIWsA&scope=https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/generative-language.tuning

Credentials saved to file: [/content/.config/application_default_credentials.json]

These credentials will be used by any library that requests Application Default Credentials (ADC).

ভেরিয়েবল সেট করুন

CURL

বাকি REST API কলগুলির জন্য ব্যবহার করার জন্য পুনরাবৃত্ত মানগুলির জন্য ভেরিয়েবল সেট করুন৷ কোডটি পরিবেশের ভেরিয়েবল সেট করতে পাইথন os লাইব্রেরি ব্যবহার করছে যা সমস্ত কোড কক্ষে অ্যাক্সেসযোগ্য।

এটি Colab নোটবুকের পরিবেশের জন্য নির্দিষ্ট। পরবর্তী কোড সেলের কোডটি একটি ব্যাশ টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালানোর সমতুল্য।

export access_token=$(gcloud auth application-default print-access-token)
export project_id=my-project-id
export base_url=https://generativelanguage.googleapis.com
import os

access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)

os.environ['access_token'] = access_token
os.environ['project_id'] = "[Enter your project-id here]"
os.environ['base_url'] = "https://generativelanguage.googleapis.com"

পাইথন

access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)

project = '[Enter your project-id here]'
base_url = "https://generativelanguage.googleapis.com"

requests লাইব্রেরি আমদানি করুন.

import requests
import json

টিউন করা মডেলের তালিকা করুন

উপলব্ধ টিউন করা মডেলগুলি তালিকাভুক্ত করে আপনার প্রমাণীকরণ সেটআপ যাচাই করুন৷

CURL


curl -X GET ${base_url}/v1beta/tunedModels \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}"

পাইথন

headers={
  'Authorization': 'Bearer ' + access_token,
  'Content-Type': 'application/json',
  'x-goog-user-project': project
}

result = requests.get(
  url=f'{base_url}/v1beta/tunedModels',
  headers = headers,
)
result.json()

টিউন করা মডেল তৈরি করুন

একটি টিউন করা মডেল তৈরি করতে, আপনাকে training_data ক্ষেত্রের মডেলটিতে আপনার ডেটাসেট পাস করতে হবে।

এই উদাহরণের জন্য, আপনি ক্রমানুসারে পরবর্তী সংখ্যা তৈরি করতে একটি মডেল টিউন করবেন। উদাহরণস্বরূপ, যদি ইনপুট 1 হয়, তাহলে মডেলটি 2 আউটপুট করবে। ইনপুট one hundred হলে আউটপুট one hundred one হতে হবে।

CURL


curl -X POST $base_url/v1beta/tunedModels \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" \
    -d '
      {
        "display_name": "number generator model",
        "base_model": "models/gemini-1.0-pro-001",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 2,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    "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",
                }
              ]
            }
          }
        }
      }' | tee tunemodel.json
{
"name": "tunedModels/number-generator-model-dzlmi0gswwqb/operations/bvl8dymw0fhw",
"metadata": {
  "@type": "type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata",
  "totalSteps": 38,
  "tunedModel": "tunedModels/number-generator-model-dzlmi0gswwqb"
}
}
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                              Dload  Upload   Total   Spent    Left  Speed
100  2280    0   296  100  1984    611   4098 --:--:-- --:--:-- --:--:--  4720

পাইথন

operation = requests.post(
    url = f'{base_url}/v1beta/tunedModels',
    headers=headers,
    json= {
        "display_name": "number generator",
        "base_model": "models/gemini-1.0-pro-001",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 4,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    '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',
                }
              ]
            }
          }
        }
      }
)
operation
<Response [200]>
operation.json()
{'name': 'tunedModels/number-generator-wl1qr34x2py/operations/41vni3zk0a47',
'metadata': {'@type': 'type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata',
  'totalSteps': 19,
  'tunedModel': 'tunedModels/number-generator-wl1qr34x2py'} }

বাকি কলগুলির জন্য ব্যবহার করার জন্য আপনার টিউন করা মডেলের নামের সাথে একটি পরিবর্তনশীল সেট করুন।

name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-wl1qr34x2py'

টিউন করা মডেল স্টেট পান

প্রশিক্ষণের সময় মডেলটির অবস্থা CREATING করা হয়েছে এবং এটি সম্পূর্ণ হয়ে গেলে ACTIVE হয়ে যাবে৷

CURL

JSON প্রতিক্রিয়া থেকে জেনারেট করা মডেলের নাম পার্স করার জন্য নীচে পাইথন কোডের একটি বিট রয়েছে। আপনি যদি এটি একটি টার্মিনালে চালান তবে আপনি প্রতিক্রিয়া বিশ্লেষণ করতে একটি bash JSON পার্সার ব্যবহার করার চেষ্টা করতে পারেন।

import json

first_page = json.load(open('tunemodel.json'))
os.environ['modelname'] = first_page['metadata']['tunedModel']

print(os.environ['modelname'])
tunedModels/number-generator-model-dzlmi0gswwqb

মডেল মেটাডেটা পেতে মডেল নামের সাথে আরেকটি GET অনুরোধ করুন যা রাজ্যের ক্ষেত্র অন্তর্ভুক্ত করে।


curl -X GET ${base_url}/v1beta/${modelname} \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" | grep state
"state": "ACTIVE",
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                              Dload  Upload   Total   Spent    Left  Speed
100  5921    0  5921    0     0  13164      0 --:--:-- --:--:-- --:--:-- 13157

পাইথন

tuned_model = requests.get(
    url = f'{base_url}/v1beta/{name}',
    headers=headers,
)
tuned_model.json()

নিচের কোডটি প্রতি 5 সেকেন্ডে স্টেট ফিল্ড চেক করে যতক্ষণ না এটি আর CREATING অবস্থায় না থাকে।

import time
import pprint

op_json = operation.json()
response = op_json.get('response')
error = op_json.get('error')

while response is None and error is None:
    time.sleep(5)

    operation = requests.get(
        url = f'{base_url}/v1/{op_json["name"]}',
        headers=headers,
    )

    op_json = operation.json()
    response = op_json.get('response')
    error = op_json.get('error')

    percent = op_json['metadata'].get('completedPercent')
    if percent is not None:
      print(f"{percent:.2f}% - {op_json['metadata']['snapshots'][-1]}")
      print()

if error is not None:
    raise Exception(error)
100.00% - {'step': 19, 'epoch': 5, 'meanLoss': 1.402067, 'computeTime': '2024-03-14T15:11:23.766989274Z'}

অনুমান চালান

আপনার টিউনিং কাজ শেষ হয়ে গেলে, আপনি পাঠ্য পরিষেবার সাথে পাঠ্য তৈরি করতে এটি ব্যবহার করতে পারেন।

CURL

একটি রোমান সংখ্যা ইনপুট করার চেষ্টা করুন, বলুন, 63 (LXIII):


curl -X POST $base_url/v1beta/$modelname:generateContent \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" \
    -d '{
        "contents": [{
        "parts": [{
          "text": "LXIII"
          }]
        }]
        }' 2> /dev/null
{
"candidates": [
  {
    "content": {
      "parts": [
        {
          "text": "LXIV"
        }
      ],
      "role": "model"
    },
    "finishReason": "STOP",
    "index": 0,
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
],
"promptFeedback": {
  "safetyRatings": [
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "probability": "NEGLIGIBLE"
    }
  ]
}
}

আপনার মডেল থেকে আউটপুট সঠিক হতে পারে বা নাও হতে পারে। যদি টিউন করা মডেলটি আপনার প্রয়োজনীয় মান অনুযায়ী কাজ না করে, আপনি আরও উচ্চ মানের উদাহরণ যোগ করার চেষ্টা করতে পারেন, হাইপারপ্যারামিটারগুলিকে টুইক করে বা আপনার উদাহরণগুলিতে একটি প্রস্তাবনা যোগ করার চেষ্টা করতে পারেন৷ আপনি এমনকি আপনার তৈরি করা প্রথমটির উপর ভিত্তি করে আরেকটি টিউন করা মডেল তৈরি করতে পারেন।

পারফরম্যান্সের উন্নতির বিষয়ে আরও নির্দেশনার জন্য টিউনিং গাইড দেখুন।

পাইথন

একটি জাপানি সংখ্যা ইনপুট করার চেষ্টা করুন, বলুন, 6 (六):

import time

m = requests.post(
    url = f'{base_url}/v1beta/{name}:generateContent',
    headers=headers,
    json= {
        "contents": [{
            "parts": [{
                "text": "六"
            }]
          }]
    })
import pprint
pprint.pprint(m.json())
{'candidates': [{'content': {'parts': [{'text': '七'}], 'role': 'model'},
                'finishReason': 'STOP',
                'index': 0,
                'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
                                    'probability': 'NEGLIGIBLE'},
                                  {'category': 'HARM_CATEGORY_HATE_SPEECH',
                                    'probability': 'NEGLIGIBLE'},
                                  {'category': 'HARM_CATEGORY_HARASSMENT',
                                    'probability': 'LOW'},
                                  {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
                                    'probability': 'NEGLIGIBLE'}]}],
'promptFeedback': {'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_HATE_SPEECH',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_HARASSMENT',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
                                      'probability': 'NEGLIGIBLE'}]} }

আপনার মডেল থেকে আউটপুট সঠিক হতে পারে বা নাও হতে পারে। যদি টিউন করা মডেলটি আপনার প্রয়োজনীয় মান অনুযায়ী কাজ না করে, আপনি আরও উচ্চ মানের উদাহরণ যোগ করার চেষ্টা করতে পারেন, হাইপারপ্যারামিটারগুলিকে টুইক করে বা আপনার উদাহরণগুলিতে একটি প্রস্তাবনা যোগ করার চেষ্টা করতে পারেন৷

উপসংহার

যদিও প্রশিক্ষণের ডেটাতে রোমান বা জাপানি সংখ্যার কোনো উল্লেখ ছিল না, মডেলটি সূক্ষ্ম-টিউনিংয়ের পরে ভালভাবে সাধারণীকরণ করতে সক্ষম হয়েছিল। এইভাবে, আপনি আপনার ব্যবহারের কেসগুলি পূরণ করতে মডেলগুলিকে সূক্ষ্ম-টিউন করতে পারেন।

পরবর্তী পদক্ষেপ

জেমিনি API-এর জন্য পাইথন SDK-এর সাহায্যে টিউনিং পরিষেবাটি কীভাবে ব্যবহার করবেন তা শিখতে, পাইথনের সাথে টিউনিং কুইকস্টার্ট দেখুন। Gemini API-এ অন্যান্য পরিষেবাগুলি কীভাবে ব্যবহার করবেন তা জানতে, Python quickstart-এ যান।