इस ट्यूटोरियल की मदद से, Gemini API को ट्यून करने की सुविधा का इस्तेमाल शुरू किया जा सकता है Python SDK या REST API का इस्तेमाल करके, curl. यहां दिए गए उदाहरणों में, पीछे के टेक्स्ट मॉडल को ट्यून करने का तरीका बताया गया है Gemini API की टेक्स्ट जनरेट करने की सेवा.
ai.google.dev पर देखें | Colab notebook को आज़माएं | GitHub पर notebook देखें |
पुष्टि करने की सुविधा सेट अप करें
Gemini API की मदद से, अपने डेटा का इस्तेमाल करके मॉडल को ट्यून किया जा सकता है. क्योंकि इसमें आपका डेटा और आपके ट्यून किए गए मॉडल, एपीआई कुंजियों की तुलना में ज़्यादा सख्त ऐक्सेस कंट्रोल का इस्तेमाल करते हैं.
इस ट्यूटोरियल को चलाने से पहले, आपको अपने प्रोजेक्ट और फिर "OAuth क्लाइंट आईडी" "client_secret.json" के तौर पर जोड़ा जाएगा.
यह gcloud कमांड client_secret.json
फ़ाइल को क्रेडेंशियल में बदल देता है
का इस्तेमाल अपनी सेवा की पुष्टि करने के लिए किया जा सकता है.
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'
वैरिएबल सेट करें
कर्ल
REST API के बाकी हिस्सों में इस्तेमाल करने के लिए, बार-बार इस्तेमाल होने वाली वैल्यू के वैरिएबल सेट करें
कॉल. एनवायरमेंट को सेट करने के लिए, कोड Python os
लाइब्रेरी का इस्तेमाल कर रहा है
वैरिएबल , जिसे सभी कोड सेल से ऐक्सेस किया जा सकता है.
यह खास तौर पर Colab notebook के एनवायरमेंट के लिए है. अगले कोड में कोड सेल, बैश में नीचे दिए गए कमांड चलाने के बराबर है टर्मिनल.
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"
Python
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 -X GET ${base_url}/v1beta/tunedModels \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}"
Python
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 -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
Python
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'
epoch काउंट, बैच साइज़, और लर्निंग रेट के लिए सबसे सही वैल्यू इन बातों पर निर्भर करती हैं अपने डेटासेट और इस्तेमाल के उदाहरण की दूसरी कंस्ट्रेंट के लिए. इस बारे में ज़्यादा जानने के लिए इन मानों की पहचान कर सकते हैं, तो ट्यून करने की बेहतर सेटिंग और हाइपर पैरामीटर.
ट्यून किए गए मॉडल की स्थिति देखें
ट्रेनिंग के दौरान मॉडल की स्थिति CREATING
पर सेट है. इसके बाद, यह स्थिति हो जाएगी
पूरा हो जाने पर ACTIVE
.
कर्ल
नीचे दिए गए टेंप्लेट से, जनरेट किए गए मॉडल का नाम पार्स करने के लिए, एक Python कोड दिया गया है जवाब JSON. अगर इसे किसी टर्मिनल में चलाया जा रहा है, तो बैश का इस्तेमाल करके देखें जवाब को पार्स करने के लिए 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
Python
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'}
रन का अनुमान
ट्यूनिंग का काम पूरा हो जाने पर, इसका इस्तेमाल टेक्स्ट के साथ टेक्स्ट जनरेट करने के लिए किया जा सकता है सेवा.
कर्ल
एक रोमन संख्या डालें, जैसे कि 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" } ] } }
इस मॉडल से मिला आउटपुट सही हो भी सकता है और नहीं भी. अगर ट्यून किया गया मॉडल आपके ज़रूरी मानकों के मुताबिक परफ़ॉर्म नहीं कर रहा है, तो और बेहतर कीवर्ड जोड़े जा सकते हैं क्वालिटी के उदाहरण, हाइपर पैरामीटर में बदलाव करना या अपने उदाहरण. आप पहले से मौजूद मॉडल के आधार पर एक अन्य ट्यून किया गया मॉडल भी बना सकते हैं बनाया गया.
ट्यूनिंग गाइड देखें की मदद ली जा सकती है.
Python
एक जापानी संख्या डालने की कोशिश करें, जैसे कि 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'}]} }
इस मॉडल से मिला आउटपुट सही हो भी सकता है और नहीं भी. अगर ट्यून किया गया मॉडल आपके ज़रूरी मानकों के मुताबिक परफ़ॉर्म नहीं कर रहा है, तो और बेहतर कीवर्ड जोड़े जा सकते हैं क्वालिटी के उदाहरण, हाइपर पैरामीटर में बदलाव करना या अपने उदाहरण.
नतीजा
हालांकि, ट्रेनिंग डेटा में रोमन या जैपनीज़ भाषा का कोई रेफ़रंस नहीं था अंकों के साथ, ये मॉडल फ़ाइन-ट्यून करने के बाद अच्छी तरह से सामान्य बना पाए. इस तरह, आपको आपके इस्तेमाल के हिसाब से, मॉडल को बेहतर बना सकता है.
अगले चरण
Python SDK टूल की मदद से, ट्यूनिंग सेवा इस्तेमाल करने का तरीका जानने के लिए Gemini API के साथ, ट्यूनिंग वाले क्विकस्टार्ट पेज पर जाएँ Python. इसका तरीका जानने के लिए Gemini API की अन्य सेवाओं का इस्तेमाल करने के लिए, शुरू करने के बारे में जानकारी पर जाएँ ट्यूटोरियल देखें.