ai.google.dev पर देखें | Colab notebook को आज़माएं | GitHub पर notebook देखें | नोटबुक डाउनलोड करना |
इस notebook में बताया गया है कि PaLM REST API को कॉल करने के लिए, कर्ल कमांड या Python अनुरोध एपीआई का इस्तेमाल करके, PaLM API की ट्यूनिंग सेवा को इस्तेमाल करने का तरीका जानें. यहां आपको PaLM API की टेक्स्ट जनरेशन सेवा के पीछे मौजूद टेक्स्ट मॉडल को ट्यून करने का तरीका पता चलेगा.
सेटअप
प्रमाणीकृत करें
PaLM API की मदद से, अपने डेटा के आधार पर मॉडल ट्यून किए जा सकते हैं. यह आपका डेटा और आपके ट्यून किए गए मॉडल हैं. इसलिए, एपीआई-बटन की तुलना में, ज़्यादा सख्त ऐक्सेस कंट्रोल की ज़रूरत होती है.
इस ट्यूटोरियल को चलाने से पहले, आपको अपने प्रोजेक्ट के लिए OAuth सेट अप करना होगा.
अगर आपको Colab में यह नोटबुक चलानी है, तो "फ़ाइल > अपलोड करें" विकल्प का इस्तेमाल करके अपनी client_secret*.json
फ़ाइल अपलोड करें.
cp client_secret*.json client_secret.json
ls
client_secret.json
यह gcloud कमांड client_secret.json
फ़ाइल को क्रेडेंशियल में बदल देता है. इसका इस्तेमाल सेवा में पुष्टि के लिए किया जा सकता है.
import os
if 'COLAB_RELEASE_TAG' in os.environ:
# 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'
CURL की मदद से REST API को कॉल करना
यह सेक्शन, REST API को कॉल करने के लिए कर्ल स्टेटमेंट के उदाहरण देता है. इस लेख में, ट्यूनिंग जॉब बनाने और उसका स्टेटस देखने का तरीका बताया गया है. साथ ही, जॉब पूरा होने के बाद, अनुमान लगाने का तरीका भी बताया गया है.
वैरिएबल सेट करना
बार-बार इस्तेमाल होने वाली वैल्यू के लिए वैरिएबल सेट करें, ताकि बाकी REST API कॉल के लिए उनका इस्तेमाल किया जा सके. कोड में, Python os
लाइब्रेरी का इस्तेमाल करके, ऐसे एनवायरमेंट वैरिएबल सेट किए जा रहे हैं जिन्हें सभी कोड सेल में ऐक्सेस किया जा सकता है.
यह Colab notebook एनवायरमेंट के लिए खास तौर पर है. अगले कोड सेल का कोड, bash टर्मिनल में नीचे दिए गए कमांड चलाने के बराबर है.
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'] = "project-id"
os.environ['base_url'] = "https://generativelanguage.googleapis.com"
ट्यून किए गए मॉडल की सूची
पुष्टि करने के लिए, ट्यून किए गए मौजूदा मॉडल की सूची बनाएं.
curl -X GET ${base_url}/v1beta3/tunedModels \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" | grep name
"name": "tunedModels/testnumbergenerator-fvitocr834l6", "name": "tunedModels/my-display-name-81-9wpmc1m920vq", "displayName": "my display name 81", "name": "tunedModels/number-generator-model-kctlevca1g3q", "name": "tunedModels/my-display-name-81-r9wcuda14lyy", "displayName": "my display name 81", "name": "tunedModels/number-generator-model-w1eabln5adwp", % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17583 0 17583 0 0 51600 0 --:--:-- --:--:-- --:--:-- 51563
ट्यून किया गया मॉडल बनाना
ट्यून किया गया मॉडल बनाने के लिए, आपको training_data
फ़ील्ड में अपना डेटासेट मॉडल को पास करना होगा.
इस उदाहरण के लिए, आपको क्रम में अगला नंबर जनरेट करने के लिए मॉडल को ट्यून करना होगा. उदाहरण के लिए, अगर इनपुट 1
है, तो मॉडल को 2
आउटपुट देना चाहिए. अगर इनपुट one hundred
है, तो आउटपुट one hundred one
होना चाहिए.
curl -X POST ${base_url}/v1beta3/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/text-bison-001",
"tuning_task": {
"hyperparameters": {
"batch_size": 2,
"learning_rate": 0.001,
"epoch_count":3,
},
"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-q2d0uism5ivd/operations/xvyx09sjxlmh", "metadata": { "@type": "type.googleapis.com/google.ai.generativelanguage.v1beta3.CreateTunedModelMetadata", "totalSteps": 23, "tunedModel": "tunedModels/number-generator-model-q2d0uism5ivd" } } % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2277 0 297 100 1980 146 975 0:00:02 0:00:02 --:--:-- 1121
ट्यून किए गए मॉडल की स्थिति पाना
ट्रेनिंग के दौरान मॉडल की स्थिति CREATING
पर सेट होती है. ट्रेनिंग पूरी होने के बाद, यह ACTIVE
पर सेट हो जाएगी.
यहां Python का एक छोटा कोड दिया गया है. इसका इस्तेमाल, रिस्पॉन्स 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-q2d0uism5ivd
मॉडल का मेटाडेटा पाने के लिए, मॉडल के नाम के साथ एक और GET
अनुरोध करें. इसमें स्टेटस फ़ील्ड भी शामिल होता है.
curl -X GET ${base_url}/v1beta3/${modelname} \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" \ | grep state
"state": "CREATING", % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 494 0 494 0 0 760 0 --:--:-- --:--:-- --:--:-- 760 curl: (3) URL using bad/illegal format or missing URL
अनुमान लगाना
ट्यूनिंग की प्रोसेस पूरी होने के बाद, टेक्स्ट सेवा की मदद से टेक्स्ट जनरेट करने के लिए इसका इस्तेमाल किया जा सकता है.
curl -X POST ${base_url}/v1beta3/${modelname}:generateText \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" \
-d '{
"prompt": {
"text": "4"
},
"temperature": 1.0,
"candidate_count": 2}' | grep output
"output": "3 2 1", "output": "3 2", % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1569 0 1447 100 122 183 15 0:00:08 0:00:07 0:00:01 310
आपके मॉडल का आउटपुट सही भी हो सकता है और नहीं भी. अगर ट्यून किया गया मॉडल आपके ज़रूरी स्टैंडर्ड के मुताबिक परफ़ॉर्म नहीं कर रहा है, तो ज़्यादा अच्छी क्वालिटी के उदाहरण जोड़ें. इसके अलावा, हाइपरपैरामीटर में बदलाव करें या अपने उदाहरणों में प्रीऐबल जोड़ें. पहले बनाए गए मॉडल के आधार पर, ट्यून किया गया दूसरा मॉडल भी बनाया जा सकता है.
परफ़ॉर्मेंस को बेहतर बनाने के बारे में ज़्यादा जानकारी के लिए, ट्यूनिंग गाइड देखें.
Python अनुरोधों की मदद से, REST API को कॉल करना
किसी भी ऐसी लाइब्रेरी की मदद से, REST API को कॉल किया जा सकता है जिससे एचटीटीपी रिक्वेस्ट भेजे जा सकते हैं. उदाहरणों के अगले सेट में, Python अनुरोधों की लाइब्रेरी का इस्तेमाल किया गया है. साथ ही, इसमें ज़्यादा बेहतर सुविधाओं के बारे में बताया गया है.
वैरिएबल सेट करना
access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)
project = 'project-id'
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}/v1beta3/tunedModels',
headers = headers,
)
result.json()
{'tunedModels': [{'name': 'tunedModels/testnumbergenerator-fvitocr834l6', 'baseModel': 'models/text-bison-001', 'displayName': 'test_number_generator', 'description': '{"description":"generates the next number in the sequence given the input text","exampleInput":"input: 1","exampleOutput":"output: 2","datasourceUrl":"https://drive.google.com/open?id=11Pdm6GNom4vlBMUHwO6yFjGQT3t1yi44WVShXMFnkVA&authuser=0&resourcekey=0-2d17tccbdBoThXMkNDvtag","showedTuningComplete":false}', 'state': 'ACTIVE', 'createTime': '2023-09-18T11:06:39.092786Z', 'updateTime': '2023-09-18T11:07:24.198359Z', 'tuningTask': {'startTime': '2023-09-18T11:06:39.461814784Z', 'completeTime': '2023-09-18T11:07:24.198359Z', 'snapshots': [{'step': 1, 'meanLoss': 16.613504, 'computeTime': '2023-09-18T11:06:44.532937624Z'}, {'step': 2, 'epoch': 1, 'meanLoss': 20.299532, 'computeTime': '2023-09-18T11:06:47.825134421Z'}, {'step': 3, 'epoch': 1, 'meanLoss': 8.169708, 'computeTime': '2023-09-18T11:06:50.580344344Z'}, {'step': 4, 'epoch': 2, 'meanLoss': 3.7588992, 'computeTime': '2023-09-18T11:06:53.219133748Z'}, {'step': 5, 'epoch': 3, 'meanLoss': 2.0643115, 'computeTime': '2023-09-18T11:06:55.828458606Z'}, {'step': 6, 'epoch': 3, 'meanLoss': 1.9765375, 'computeTime': '2023-09-18T11:06:58.426053772Z'}, {'step': 7, 'epoch': 4, 'meanLoss': 0.9276156, 'computeTime': '2023-09-18T11:07:01.231832398Z'}, {'step': 8, 'epoch': 5, 'meanLoss': 1.8424839, 'computeTime': '2023-09-18T11:07:03.822710074Z'}, {'step': 9, 'epoch': 5, 'meanLoss': 1.1747926, 'computeTime': '2023-09-18T11:07:06.441685551Z'}, {'step': 10, 'epoch': 6, 'meanLoss': 0.3079359, 'computeTime': '2023-09-18T11:07:08.793491157Z'}, {'step': 11, 'epoch': 7, 'meanLoss': 0.543368, 'computeTime': '2023-09-18T11:07:11.393264892Z'}, {'step': 12, 'epoch': 7, 'meanLoss': 0.35068464, 'computeTime': '2023-09-18T11:07:13.808021238Z'}, {'step': 13, 'epoch': 8, 'meanLoss': 0.026032856, 'computeTime': '2023-09-18T11:07:16.295972078Z'}, {'step': 14, 'epoch': 8, 'meanLoss': 0.108341046, 'computeTime': '2023-09-18T11:07:18.941247488Z'}, {'step': 15, 'epoch': 9, 'meanLoss': 0.016470395, 'computeTime': '2023-09-18T11:07:21.607654306Z'}, {'step': 16, 'epoch': 10, 'meanLoss': 0.063049875, 'computeTime': '2023-09-18T11:07:24.077271307Z'}], 'hyperparameters': {'epochCount': 10, 'batchSize': 16, 'learningRate': 0.02} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}, {'name': 'tunedModels/my-display-name-81-9wpmc1m920vq', 'baseModel': 'models/text-bison-tuning-test', 'displayName': 'my display name 81', 'state': 'ACTIVE', 'createTime': '2023-09-18T22:02:08.690991Z', 'updateTime': '2023-09-18T22:02:28.806318Z', 'tuningTask': {'startTime': '2023-09-18T22:02:09.161100369Z', 'completeTime': '2023-09-18T22:02:28.806318Z', 'snapshots': [{'step': 1, 'meanLoss': 7.2774773, 'computeTime': '2023-09-18T22:02:12.453056368Z'}, {'step': 2, 'meanLoss': 6.1902447, 'computeTime': '2023-09-18T22:02:13.789508217Z'}, {'step': 3, 'meanLoss': 5.5545835, 'computeTime': '2023-09-18T22:02:15.136220505Z'}, {'step': 4, 'epoch': 1, 'meanLoss': 7.9237704, 'computeTime': '2023-09-18T22:02:16.474358517Z'}, {'step': 5, 'epoch': 1, 'meanLoss': 7.6770706, 'computeTime': '2023-09-18T22:02:17.758261108Z'}, {'step': 6, 'epoch': 1, 'meanLoss': 7.378622, 'computeTime': '2023-09-18T22:02:19.114072224Z'}, {'step': 7, 'epoch': 1, 'meanLoss': 4.485537, 'computeTime': '2023-09-18T22:02:20.927434115Z'}, {'step': 8, 'epoch': 2, 'meanLoss': 6.815181, 'computeTime': '2023-09-18T22:02:22.267906011Z'}, {'step': 9, 'epoch': 2, 'meanLoss': 6.411363, 'computeTime': '2023-09-18T22:02:24.078114085Z'}, {'step': 10, 'epoch': 2, 'meanLoss': 8.585093, 'computeTime': '2023-09-18T22:02:25.441598938Z'}, {'step': 11, 'epoch': 2, 'meanLoss': 4.901249, 'computeTime': '2023-09-18T22:02:27.108985392Z'}, {'step': 12, 'epoch': 3, 'meanLoss': 7.073003, 'computeTime': '2023-09-18T22:02:28.441662034Z'}], 'hyperparameters': {'epochCount': 3, 'batchSize': 4, 'learningRate': 0.001} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}, {'name': 'tunedModels/number-generator-model-kctlevca1g3q', 'baseModel': 'models/text-bison-tuning-test', 'displayName': 'number generator model', 'state': 'ACTIVE', 'createTime': '2023-09-18T23:43:21.461545Z', 'updateTime': '2023-09-18T23:43:49.205493Z', 'tuningTask': {'startTime': '2023-09-18T23:43:21.542403958Z', 'completeTime': '2023-09-18T23:43:49.205493Z', 'snapshots': [{'step': 1, 'meanLoss': 7.342065, 'computeTime': '2023-09-18T23:43:23.356271969Z'}, {'step': 2, 'meanLoss': 7.255807, 'computeTime': '2023-09-18T23:43:24.620248223Z'}, {'step': 3, 'meanLoss': 5.4591417, 'computeTime': '2023-09-18T23:43:25.854505395Z'}, {'step': 4, 'meanLoss': 6.968665, 'computeTime': '2023-09-18T23:43:27.138260198Z'}, {'step': 5, 'meanLoss': 4.578809, 'computeTime': '2023-09-18T23:43:28.404943274Z'}, {'step': 6, 'meanLoss': 6.4862137, 'computeTime': '2023-09-18T23:43:29.631624883Z'}, {'step': 7, 'meanLoss': 9.781939, 'computeTime': '2023-09-18T23:43:30.801341449Z'}, {'step': 8, 'epoch': 1, 'meanLoss': 5.990006, 'computeTime': '2023-09-18T23:43:31.854703315Z'}, {'step': 9, 'epoch': 1, 'meanLoss': 8.846312, 'computeTime': '2023-09-18T23:43:33.075785103Z'}, {'step': 10, 'epoch': 1, 'meanLoss': 6.1585655, 'computeTime': '2023-09-18T23:43:34.310432174Z'}, {'step': 11, 'epoch': 1, 'meanLoss': 4.7877502, 'computeTime': '2023-09-18T23:43:35.381582526Z'}, {'step': 12, 'epoch': 1, 'meanLoss': 9.660514, 'computeTime': '2023-09-18T23:43:36.445446408Z'}, {'step': 13, 'epoch': 1, 'meanLoss': 5.6482882, 'computeTime': '2023-09-18T23:43:37.603237821Z'}, {'step': 14, 'epoch': 1, 'meanLoss': 3.162092, 'computeTime': '2023-09-18T23:43:38.671463397Z'}, {'step': 15, 'epoch': 2, 'meanLoss': 6.322996, 'computeTime': '2023-09-18T23:43:39.769742201Z'}, {'step': 16, 'epoch': 2, 'meanLoss': 6.781, 'computeTime': '2023-09-18T23:43:40.985967994Z'}, {'step': 17, 'epoch': 2, 'meanLoss': 5.136773, 'computeTime': '2023-09-18T23:43:42.235469710Z'}, {'step': 18, 'epoch': 2, 'meanLoss': 7.2091155, 'computeTime': '2023-09-18T23:43:43.415178581Z'}, {'step': 19, 'epoch': 2, 'meanLoss': 7.7508755, 'computeTime': '2023-09-18T23:43:44.775221774Z'}, {'step': 20, 'epoch': 2, 'meanLoss': 8.144815, 'computeTime': '2023-09-18T23:43:45.788824334Z'}, {'step': 21, 'epoch': 2, 'meanLoss': 5.485137, 'computeTime': '2023-09-18T23:43:46.812663998Z'}, {'step': 22, 'epoch': 2, 'meanLoss': 3.709197, 'computeTime': '2023-09-18T23:43:47.971764087Z'}, {'step': 23, 'epoch': 3, 'meanLoss': 6.0069466, 'computeTime': '2023-09-18T23:43:49.004191079Z'}], 'hyperparameters': {'epochCount': 3, 'batchSize': 2, 'learningRate': 0.001} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}, {'name': 'tunedModels/my-display-name-81-r9wcuda14lyy', 'baseModel': 'models/text-bison-tuning-test', 'displayName': 'my display name 81', 'state': 'ACTIVE', 'createTime': '2023-09-18T23:52:06.980185Z', 'updateTime': '2023-09-18T23:52:26.679601Z', 'tuningTask': {'startTime': '2023-09-18T23:52:07.616953503Z', 'completeTime': '2023-09-18T23:52:26.679601Z', 'snapshots': [{'step': 1, 'meanLoss': 7.2774773, 'computeTime': '2023-09-18T23:52:10.278936662Z'}, {'step': 2, 'meanLoss': 6.2793097, 'computeTime': '2023-09-18T23:52:11.630844790Z'}, {'step': 3, 'meanLoss': 5.540499, 'computeTime': '2023-09-18T23:52:13.027840389Z'}, {'step': 4, 'epoch': 1, 'meanLoss': 7.977523, 'computeTime': '2023-09-18T23:52:14.368199020Z'}, {'step': 5, 'epoch': 1, 'meanLoss': 7.6197805, 'computeTime': '2023-09-18T23:52:15.872428752Z'}, {'step': 6, 'epoch': 1, 'meanLoss': 7.3851357, 'computeTime': '2023-09-18T23:52:17.213094182Z'}, {'step': 7, 'epoch': 1, 'meanLoss': 4.5342345, 'computeTime': '2023-09-18T23:52:19.090698421Z'}, {'step': 8, 'epoch': 2, 'meanLoss': 6.8603754, 'computeTime': '2023-09-18T23:52:20.494844731Z'}, {'step': 9, 'epoch': 2, 'meanLoss': 6.418575, 'computeTime': '2023-09-18T23:52:21.815997555Z'}, {'step': 10, 'epoch': 2, 'meanLoss': 8.659064, 'computeTime': '2023-09-18T23:52:23.524287192Z'}, {'step': 11, 'epoch': 2, 'meanLoss': 4.856765, 'computeTime': '2023-09-18T23:52:24.864661291Z'}, {'step': 12, 'epoch': 3, 'meanLoss': 7.1078596, 'computeTime': '2023-09-18T23:52:26.225055381Z'}], 'hyperparameters': {'epochCount': 3, 'batchSize': 4, 'learningRate': 0.001} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}, {'name': 'tunedModels/number-generator-model-w1eabln5adwp', 'baseModel': 'models/text-bison-tuning-test', 'displayName': 'number generator model', 'state': 'ACTIVE', 'createTime': '2023-09-19T19:29:08.622497Z', 'updateTime': '2023-09-19T19:29:46.063853Z', 'tuningTask': {'startTime': '2023-09-19T19:29:08.806930486Z', 'completeTime': '2023-09-19T19:29:46.063853Z', 'snapshots': [{'step': 1, 'meanLoss': 7.342065, 'computeTime': '2023-09-19T19:29:13.023811994Z'}, {'step': 2, 'meanLoss': 7.1960244, 'computeTime': '2023-09-19T19:29:14.844046282Z'}, {'step': 3, 'meanLoss': 5.480289, 'computeTime': '2023-09-19T19:29:16.596884354Z'}, {'step': 4, 'meanLoss': 6.851822, 'computeTime': '2023-09-19T19:29:17.741735378Z'}, {'step': 5, 'meanLoss': 4.5535283, 'computeTime': '2023-09-19T19:29:18.914760812Z'}, {'step': 6, 'meanLoss': 6.449012, 'computeTime': '2023-09-19T19:29:20.053316042Z'}, {'step': 7, 'meanLoss': 9.842458, 'computeTime': '2023-09-19T19:29:21.371286675Z'}, {'step': 8, 'epoch': 1, 'meanLoss': 5.9831877, 'computeTime': '2023-09-19T19:29:22.915277044Z'}, {'step': 9, 'epoch': 1, 'meanLoss': 8.936815, 'computeTime': '2023-09-19T19:29:24.666461680Z'}, {'step': 10, 'epoch': 1, 'meanLoss': 6.14651, 'computeTime': '2023-09-19T19:29:26.793310451Z'}, {'step': 11, 'epoch': 1, 'meanLoss': 4.853589, 'computeTime': '2023-09-19T19:29:28.328297535Z'}, {'step': 12, 'epoch': 1, 'meanLoss': 9.6831045, 'computeTime': '2023-09-19T19:29:29.501236840Z'}, {'step': 13, 'epoch': 1, 'meanLoss': 5.706586, 'computeTime': '2023-09-19T19:29:30.612807978Z'}, {'step': 14, 'epoch': 1, 'meanLoss': 3.276942, 'computeTime': '2023-09-19T19:29:31.928747103Z'}, {'step': 15, 'epoch': 2, 'meanLoss': 6.1736736, 'computeTime': '2023-09-19T19:29:33.588699180Z'}, {'step': 16, 'epoch': 2, 'meanLoss': 6.857398, 'computeTime': '2023-09-19T19:29:35.239083809Z'}, {'step': 17, 'epoch': 2, 'meanLoss': 5.098094, 'computeTime': '2023-09-19T19:29:37.000705047Z'}, {'step': 18, 'epoch': 2, 'meanLoss': 7.27724, 'computeTime': '2023-09-19T19:29:38.532313231Z'}, {'step': 19, 'epoch': 2, 'meanLoss': 7.6310735, 'computeTime': '2023-09-19T19:29:39.696034301Z'}, {'step': 20, 'epoch': 2, 'meanLoss': 8.152623, 'computeTime': '2023-09-19T19:29:40.803342042Z'}, {'step': 21, 'epoch': 2, 'meanLoss': 5.451577, 'computeTime': '2023-09-19T19:29:42.445788199Z'}, {'step': 22, 'epoch': 2, 'meanLoss': 3.7990716, 'computeTime': '2023-09-19T19:29:43.866737307Z'}, {'step': 23, 'epoch': 3, 'meanLoss': 6.120624, 'computeTime': '2023-09-19T19:29:45.599248553Z'}], 'hyperparameters': {'epochCount': 3, 'batchSize': 2, 'learningRate': 0.001} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}]}
ट्यून किया गया मॉडल बनाएं
Curl के उदाहरण की तरह ही, डेटासेट को training_data
फ़ील्ड से पास किया जाता है.
operation = requests.post(
url = f'{base_url}/v1beta3/tunedModels',
headers=headers,
json= {
"display_name": "number generator",
"base_model": "models/text-bison-001",
"tuning_task": {
"hyperparameters": {
"batch_size": 4,
"learning_rate": 0.001,
"epoch_count":3,
},
"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-ncqqnysl74dt/operations/qqlbwzfyzn0k', 'metadata': {'@type': 'type.googleapis.com/google.ai.generativelanguage.v1beta3.CreateTunedModelMetadata', 'totalSteps': 12, 'tunedModel': 'tunedModels/number-generator-ncqqnysl74dt'} }
बाकी कॉल के लिए इस्तेमाल करने के लिए, ट्यून किए गए मॉडल के नाम के साथ एक वैरिएबल सेट करें.
name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-ncqqnysl74dt'
ट्यून किए गए मॉडल की स्थिति पाना
स्टेटस फ़ील्ड देखकर, ट्यूनिंग की प्रोग्रेस देखी जा सकती है. CREATING
का मतलब है कि ट्यूनिंग की प्रोसेस अब भी जारी है. वहीं, ACTIVE
का मतलब है कि ट्रेनिंग पूरी हो गई है और ट्यून किया गया मॉडल इस्तेमाल के लिए तैयार है.
tuned_model = requests.get(
url = f'{base_url}/v1beta3/{name}',
headers=headers,
)
tuned_model.json()
{'name': 'tunedModels/number-generator-ncqqnysl74dt', 'baseModel': 'models/text-bison-001', 'displayName': 'number generator', 'state': 'CREATING', 'createTime': '2023-09-19T19:56:25.999303Z', 'updateTime': '2023-09-19T19:56:25.999303Z', 'tuningTask': {'startTime': '2023-09-19T19:56:26.297862545Z', 'hyperparameters': {'epochCount': 3, 'batchSize': 4, 'learningRate': 0.001} }, 'temperature': 0.7, 'topP': 0.95, 'topK': 40}
नीचे दिया गया कोड हर 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(31)
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)
21.28% - {'step': 40, 'epoch': 10, 'meanLoss': 2.4871845, 'computeTime': '2023-09-20T00:23:55.255785843Z'} 21.28% - {'step': 40, 'epoch': 10, 'meanLoss': 2.4871845, 'computeTime': '2023-09-20T00:23:55.255785843Z'} 43.09% - {'step': 81, 'epoch': 21, 'meanLoss': 0.032220088, 'computeTime': '2023-09-20T00:24:56.302837803Z'} 43.09% - {'step': 81, 'epoch': 21, 'meanLoss': 0.032220088, 'computeTime': '2023-09-20T00:24:56.302837803Z'} 63.83% - {'step': 120, 'epoch': 32, 'meanLoss': 0.0030430648, 'computeTime': '2023-09-20T00:25:57.228615435Z'} 63.83% - {'step': 120, 'epoch': 32, 'meanLoss': 0.0030430648, 'computeTime': '2023-09-20T00:25:57.228615435Z'} 85.11% - {'step': 160, 'epoch': 42, 'meanLoss': -1.1145603e-06, 'computeTime': '2023-09-20T00:26:57.819011896Z'} 100.00% - {'step': 188, 'epoch': 50, 'meanLoss': 0.00040101097, 'computeTime': '2023-09-20T00:27:40.024132813Z'}
रन का अनुमान
ट्यूनिंग की प्रोसेस पूरी होने के बाद, टेक्स्ट जनरेट करने के लिए इसका इस्तेमाल उसी तरह किया जा सकता है जिस तरह बेस टेक्स्ट मॉडल का इस्तेमाल किया जाता है.
import time
m = requests.post(
url = f'{base_url}/v1beta3/{name}:generateText',
headers=headers,
json= {
"prompt": {
"text": "9"
},
})
import pprint
print(m.json()['candidates'][0]['output'])
9
आपके मॉडल का आउटपुट सही हो सकता है या नहीं. अगर ट्यून किया गया मॉडल आपके ज़रूरी स्टैंडर्ड के मुताबिक परफ़ॉर्म नहीं कर रहा है, तो ज़्यादा अच्छी क्वालिटी के उदाहरण जोड़ें. इसके अलावा, हाइपरपैरामीटर में बदलाव करें या अपने उदाहरणों में प्रीऐबल जोड़ें.
अगले चरण
- ट्यूनिंग सेवा की मदद से कोडिंग शुरू करने के लिए, Python की मदद से ट्यूनिंग की सुविधा को तुरंत इस्तेमाल करना लेख पढ़ें.
- अपने इस्तेमाल के उदाहरण के लिए, मॉडल को सबसे सही तरीके से ट्यून करने के बारे में ज़्यादा जानने के लिए, ट्यून करने से जुड़े दिशा-निर्देश देखें.