इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. परिचय
बेहतर बनाने की सुविधा क्यों ज़रूरी है
फ़ाउंडेशन मॉडल को सामान्य कामों के लिए ट्रेन किया जाता है. इसलिए, कभी-कभी ये टास्क उतने अच्छे से नहीं पूरे करते जितना आपको चाहिए. ऐसा इसलिए हो सकता है, क्योंकि आपको मॉडल से जो टास्क पूरे कराने हैं वे खास टास्क हैं. ऐसे में, सिर्फ़ प्रॉम्प्ट डिज़ाइन का इस्तेमाल करके मॉडल को सिखाना मुश्किल होता है. ऐसे मामलों में, खास टास्क के लिए मॉडल की परफ़ॉर्मेंस को बेहतर बनाने के लिए, मॉडल ट्यूनिंग का इस्तेमाल किया जा सकता है. निर्देशों के अभाव में, मॉडल ट्यूनिंग की मदद से, आउटपुट की खास ज़रूरतों को पूरा किया जा सकता है. लार्ज लैंग्वेज मॉडल (एलएलएम) में काफ़ी जानकारी हो सकती है और ये कई टास्क पूरे कर सकते हैं. हालांकि, ये सिर्फ़ तब बेहतर परफ़ॉर्म करते हैं, जब उन्हें खास ट्रेनिंग दी जाती है. फ़ाइन-ट्यूनिंग की मदद से, एलएलएम को ट्रेन किया जा सकता है. इससे, पहले से ट्रेन किए गए एलएलएम को अपनी ज़रूरतों के हिसाब से अडैप्ट किया जा सकता है.
इस कोडलैब में, आपको एलएलएम मॉडल के लिए, सुपरवाइज़्ड ट्यूनिंग के तरीके का इस्तेमाल करके, बेहतर बनाने का तरीका पता चलेगा.
सुपरवाइज़्ड ट्यूनिंग, किसी मॉडल को नई स्किल सिखाकर उसकी परफ़ॉर्मेंस को बेहतर बनाती है. लेबल किए गए सैकड़ों उदाहरणों वाले डेटा का इस्तेमाल, मॉडल को किसी वांछित व्यवहार या टास्क की नकल करने के लिए सिखाने के लिए किया जाता है. हम इनपुट टेक्स्ट (प्रॉम्प्ट) और आउटपुट टेक्स्ट (जवाब) के लिए लेबल किया गया डेटासेट उपलब्ध कराएंगे. इससे मॉडल को यह सिखाया जा सकेगा कि हमारे खास इस्तेमाल के उदाहरण के लिए, जवाबों को कैसे पसंद के मुताबिक बनाया जाए.
मॉडल को पसंद के मुताबिक बनाने के बारे में ज़्यादा जानकारी यहां उपलब्ध है.
आपको क्या बनाना है
इस्तेमाल का उदाहरण: खबरों के लेखों के लिए हेडलाइन जनरेट करना
मान लें कि आपको खबरों के लेखों के लिए, अपने-आप हेडलाइन जनरेट करनी हैं. Vertex AI का इस्तेमाल करके, एलएलएम को बेहतर बनाया जा सकता है. यह एलएलएम, खास स्टाइल में खास जानकारी वाला टाइटल जनरेट करता है. साथ ही, समाचार चैनल के दिशा-निर्देशों के हिसाब से टाइटल को पसंद के मुताबिक बनाता है.
इस कोडलैब में, आपको ये काम करने होंगे:
BBC FULLTEXT DATA
का इस्तेमाल करें (BigQuery के सार्वजनिक डेटासेटbigquery-public-data.bbc_news.fulltext
ने उपलब्ध कराया है).- एलएलएम (
text-bison@002
) को "bbc-news-summary-tuned
" नाम के नए मॉडल में फ़ाइन-ट्यून करें. इसके बाद, नतीजे की तुलना बेस मॉडल के जवाब से करें. इस कोडलैब के लिए, रिपॉज़िटरी में JSONL फ़ाइल का सैंपल उपलब्ध है. फ़ाइल को अपनी Cloud Storage बकेट में अपलोड करें और उसे बेहतर बनाने के लिए, यहां दिया गया तरीका अपनाएं: - अपना डेटा तैयार करना: खबरों के लेखों और उनसे जुड़ी हेडलाइन के डेटासेट से शुरुआत करें. जैसे, उदाहरण के कोड में इस्तेमाल किया गया BBC News का डेटासेट.
- पहले से ट्रेन किए गए मॉडल को फ़ाइन-ट्यून करना: "
text-bison@002
" जैसा कोई बेस मॉडल चुनें और Python के लिए Vertex AI SDK टूल का इस्तेमाल करके, अपने समाचार डेटा के साथ उसे फ़ाइन-ट्यून करें. - नतीजों का आकलन करें: हेडलाइन जनरेट करने की क्वालिटी में हुए सुधार को देखने के लिए, बेहतर किए गए मॉडल की परफ़ॉर्मेंस की तुलना बेस मॉडल से करें.
- अपने मॉडल को डिप्लॉय और इस्तेमाल करना: बेहतर बनाए गए मॉडल को एपीआई एंडपॉइंट के ज़रिए उपलब्ध कराएं और नए लेखों के लिए अपने-आप हेडलाइन जनरेट करने की सुविधा शुरू करें.
2. शुरू करने से पहले
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
- पक्का करें कि आपके Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें.
- Colab Notebook खोलें और उसी खाते में लॉगिन करें जिससे आपने Google Cloud का इस्तेमाल किया है.
3. बड़े लैंग्वेज मॉडल को बेहतर बनाना
इस कोडलैब में, मॉडल को बेहतर बनाने के लिए Python के लिए Vertex AI SDK का इस्तेमाल किया जाता है. एचटीटीपी, CURL कमांड, Java SDK, और Console जैसे अन्य विकल्पों का इस्तेमाल करके भी, ज़रूरत के मुताबिक बदलाव किए जा सकते हैं.
अपने हिसाब से जवाब पाने के लिए, पांच चरणों में अपने मॉडल को बेहतर बनाया जा सकता है और उसका आकलन किया जा सकता है. रिपॉज़िटरी में जाकर, llm_fine_tuning_supervised.ipynb फ़ाइल में पूरा कोड देखा जा सकता है.
4. पहला चरण: डिपेंडेंसी इंस्टॉल और इंपोर्ट करना
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
रिपो में मौजूद .ipynb फ़ाइल में दिखाए गए तरीके से बाकी चरण पूरे करें. पक्का करें कि आपने PROJECT_ID और BUCKET_NAME को अपने क्रेडेंशियल से बदल दिया हो.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. दूसरा चरण: ट्रेनिंग डेटा तैयार करना और लोड करना
YOUR_BUCKET की जगह अपनी बकेट डालें और उसमें सैंपल TRAIN.jsonl ट्रेनिंग डेटा फ़ाइल अपलोड करें. ऊपर दिए गए लिंक में, इस इस्तेमाल के उदाहरण के लिए सैंपल डेटा उपलब्ध कराया गया है.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
इस चरण के बाद, आपको यह दिखेगा:
6. तीसरा चरण: लार्ज लैंग्वेज मॉडल को बेहतर बनाना
इस समय, सहायता उपलब्ध होने पर किसी भी बड़े लैंग्वेज मॉडल को ट्यून किया जा सकता है. हालांकि, इस स्निपेट में हम पहले से ट्रेन किए गए मॉडल "text-bison@002" को उस डेटा फ़्रेम के साथ ट्यून कर रहे हैं जिसमें पिछले चरण में लोड किया गया ट्रेनिंग डेटा है.:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
इस चरण को पूरा होने में कुछ घंटे लगेंगे. नतीजे में दिए गए पाइपलाइन जॉब लिंक का इस्तेमाल करके, फ़ाइन-ट्यूनिंग की प्रोग्रेस को ट्रैक किया जा सकता है.
7. चौथा चरण: बेहतर बनाए गए नए मॉडल की मदद से अनुमान लगाना
फ़ाइन ट्यूनिंग की प्रोसेस पूरी होने के बाद, अपने नए मॉडल से अनुमान लगाया जा सकेगा. ट्यून किए गए नए मॉडल की मदद से अनुमान लगाने के लिए:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
आपको यह नतीजा दिखेगा:
तुलना के लिए, बेस मॉडल (text-bison@002
) का इस्तेमाल करके अनुमान लगाने के लिए, ये कमांड चलाएं:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
आपको यह नतीजा दिखेगा:
जनरेट किए गए दोनों टाइटल सही लगते हैं. हालांकि, पहला टाइटल (बेहतर किए गए मॉडल से जनरेट किया गया) उस डेटासेट में इस्तेमाल किए गए टाइटल के स्टाइल के हिसाब से ज़्यादा सही है.
बेहतर बनाया गया मॉडल लोड करना
हाल ही में जिस मॉडल में बदलाव किया गया है उसे लोड करना आसान हो सकता है. हालांकि, तीसरे चरण में, इसे कोड के दायरे में ही शुरू किया जाता है, ताकि यह tuned_model वैरिएबल में, ट्यून किया गया मॉडल अब भी सेव रखे. लेकिन, अगर आपको किसी ऐसे मॉडल को ट्रिगर करना है जिसे पहले ट्यून किया गया था, तो क्या होगा?
ऐसा करने के लिए, Vertex AI Model Registry से डिप्लॉय किए गए बेहतर बनाए गए मॉडल के पूरे एंडपॉइंट यूआरएल के साथ, एलएलएम पर get_tuned_model() तरीके को लागू किया जा सकता है. ध्यान दें कि इस मामले में, आपने उनके आईडी के बजाय PROJECT_NUMBER और MODEL_NUMBER डाला है.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. पांचवां चरण: बेहतर बनाए गए नए मॉडल का आकलन करना
जनरेट किए गए जवाब की क्वालिटी और काम के होने का आकलन करने के लिए, उसका मूल्यांकन करना ज़रूरी है. इसमें जनरेटिव भाषा मॉडल के आउटपुट की जांच की जाती है. इससे यह पता चलता है कि आउटपुट, दिए गए प्रॉम्प्ट के हिसाब से कितना सही है, कितना सटीक है, और कितना अलाइन है. मॉडल का आकलन करने से, उन चीज़ों की पहचान करने में मदद मिलती है जिनमें सुधार किया जा सकता है. साथ ही, मॉडल की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने और यह पक्का करने में भी मदद मिलती है कि जनरेट किया गया टेक्स्ट, क्वालिटी और काम के होने के लिए तय किए गए मानकों के मुताबिक हो. इसके बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें. फ़िलहाल, हम देखेंगे कि बेहतर बनाए गए मॉडल पर, आकलन की कुछ मेट्रिक कैसे मिल सकती हैं और बेस मॉडल के साथ उनकी तुलना कैसे की जा सकती है.
- EVALUATION डेटासेट लोड करें:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- बेहतर बनाए गए मॉडल पर, टेक्स्ट की खास जानकारी देने वाले टास्क के लिए, आकलन की खास जानकारी तय करें.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
इस चरण को पूरा होने में कुछ मिनट लगेंगे. नतीजे में मौजूद, पाइपलाइन जॉब के लिंक का इस्तेमाल करके, प्रोसेस की स्थिति को ट्रैक किया जा सकता है. पूरा होने के बाद, आपको जांच का यह नतीजा दिखेगा:
आकलन के नतीजे में मौजूद rougeLSum
मेट्रिक, समरी के लिए ROUGE-L स्कोर बताती है. ROUGE-L, रीकॉल पर आधारित मेट्रिक है. यह खास जानकारी और रेफ़रंस खास जानकारी के बीच ओवरलैप को मेज़र करती है. इसका हिसाब लगाने के लिए, दोनों खास जानकारी के बीच सबसे लंबे कॉमन सबसीक्वेंस (एलसीएस) को लिया जाता है और उसे रेफ़रंस खास जानकारी की लंबाई से भाग दिया जाता है.
दिए गए एक्सप्रेशन में rougeLSum
स्कोर 0.36600753600753694 है. इसका मतलब है कि खास जानकारी, रेफ़रंस खास जानकारी से 36.6% ओवरलैप करती है.
अगर बेसलाइन मॉडल पर आकलन का चरण चलाया जाता है, तो आपको पता चलेगा कि बेहतर बनाए गए मॉडल के लिए खास जानकारी का स्कोर अपेक्षाकृत ज़्यादा है.
आपको आकलन के नतीजे, उस Cloud Storage आउटपुट डायरेक्ट्री में मिल सकते हैं जिसे आपने आकलन जॉब बनाते समय तय किया था. फ़ाइल का नाम evaluation_metrics.json
है. ट्यून किए गए मॉडल के लिए, Google Cloud Console में Vertex AI मॉडल रजिस्ट्री पेज पर जाकर भी, आकलन के नतीजे देखे जा सकते हैं.
9. ज़रूरी बातें
- मॉडल के साथ काम करने की सुविधा: मॉडल के साथ काम करने की सुविधा के बारे में नई जानकारी पाने के लिए, मॉडल का दस्तावेज़ हमेशा देखें.
- तेज़ी से बदलाव: एलएलएम का फ़ील्ड तेज़ी से आगे बढ़ रहा है. नया और ज़्यादा बेहतर मॉडल, पुराने बेस पर बनाए गए बेहतर मॉडल से बेहतर परफ़ॉर्म कर सकता है. अच्छी बात यह है कि मॉडल को बेहतर बनाने की ये तकनीकें, नए मॉडल पर तब लागू की जा सकती हैं, जब यह सुविधा उपलब्ध हो.
- LoRA: LoRA, एलएलएम को बेहतर बनाने के लिए एक तकनीक है. यह पहले से ट्रेन किए गए मॉडल की लेयर में, ट्रेन की जा सकने वाली और कम रैंक वाली डिकंपोज़िशन मैट्रिक्स जोड़कर ऐसा करता है. इस बारे में ज़्यादा जानने के लिए यहां जाएं. बड़े एलएलएम के सभी पैरामीटर अपडेट करने के बजाय, LoRA छोटे मैट्रिक सीखता है. इन मैट्रिक को ओरिजनल मॉडल के वेट मैट्रिक में जोड़ा जाता है या उनका गुणा किया जाता है. इससे, फ़ाइन-ट्यूनिंग के दौरान जोड़े गए अतिरिक्त पैरामीटर की संख्या काफ़ी कम हो जाती है.
10. व्यवस्थित करें
इस कोडलैब में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाएं, इसके लिए यह तरीका अपनाएं:
- Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.
- इसके अलावा, मॉडल रजिस्ट्री पर जाकर, मॉडल डिप्लॉय और टेस्ट टैब पर जाएं. इसके बाद, एंडपॉइंट को अनडिप्लॉय करें और डिप्लॉय किया गया ट्यून किया गया मॉडल मिटाएं.
11. बधाई हो
बधाई हो! आपने एलएलएम मॉडल को बेहतर बनाने के लिए, Vertex AI का इस्तेमाल किया है. फ़ाइन-ट्यूनिंग एक बेहतरीन तकनीक है. इसकी मदद से, एलएलएम को अपने डोमेन और टास्क के हिसाब से बनाया जा सकता है. Vertex AI में आपको ऐसे टूल और संसाधन मिलते हैं जिनकी मदद से, अपने मॉडल को बेहतर और असरदार तरीके से बेहतर बनाया जा सकता है.
GitHub डेटा स्टोर करने की जगहों को एक्सप्लोर करें और सैंपल कोड के साथ प्रयोग करें. इससे, आपको बेहतर बनाने और आकलन की सुविधा का सीधे तौर पर अनुभव मिलेगा. देखें कि बेहतर तरीके से काम करने वाले एलएलएम, आपकी खास ज़रूरतों को कैसे पूरा कर सकते हैं. जैसे, टारगेट की गई मार्केटिंग कॉपी जनरेट करना, जटिल दस्तावेज़ों की खास जानकारी देना या भाषाओं का अनुवाद करना. Vertex AI के टूल और सेवाओं का इस्तेमाल करके, आसानी से बेहतर मॉडल बनाएं, उन्हें ट्रेनिंग दें, उनका आकलन करें, और उन्हें डिप्लॉय करें.