REST API: মডেল টিউনিং

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

এই নোটবুকে, আপনি জেমিনি API কল করার জন্য কার্ল কমান্ড বা পাইথন অনুরোধ API ব্যবহার করে জেমিনি 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 কল করা হচ্ছে

REST API কল করার জন্য এই বিভাগটি কার্ল স্টেটমেন্টের উদাহরণ দেয়। আপনি শিখবেন কীভাবে একটি টিউনিং কাজ তৈরি করতে হয়, এর স্থিতি পরীক্ষা করে দেখুন এবং একবার সম্পূর্ণ হলে, একটি অনুমান কল করুন।

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

বাকি 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"

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

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


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

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

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

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


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

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

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

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

অনুমান চালান

আপনার টিউনিং কাজ শেষ হয়ে গেলে, আপনি পাঠ্য পরিষেবার সাথে পাঠ্য তৈরি করতে এটি ব্যবহার করতে পারেন। একটি রোমান সংখ্যা ইনপুট করার চেষ্টা করুন, বলুন, 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"
      }
    ]
  }
}

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

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

পাইথন অনুরোধ সহ REST API কল করুন

আপনি যেকোন লাইব্রেরির সাথে বাকি API কল করতে পারেন যা আপনাকে HTTP অনুরোধ পাঠাতে দেয়। উদাহরণগুলির পরবর্তী সেটগুলি পাইথন অনুরোধ লাইব্রেরি ব্যবহার করে এবং আরও উন্নত বৈশিষ্ট্যগুলির কিছু প্রদর্শন করে।

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

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

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

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

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 ক্ষেত্রের মাধ্যমে ডেটাসেটে পাস করেন।

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 মানে ট্রেনিনগুলি সম্পূর্ণ এবং টিউন করা মডেলটি ব্যবহারের জন্য প্রস্তুত৷

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'}

অনুমান চালান

টিউনিং কাজ শেষ হয়ে গেলে, আপনি এটিকে পাঠ্য তৈরি করতে ব্যবহার করতে পারেন যেভাবে আপনি বেস টেক্সট মডেল ব্যবহার করবেন। একটি জাপানি সংখ্যা ইনপুট করার চেষ্টা করুন, বলুন, 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-এ যান।