जेमा के साथ बोली जाने वाली भाषाओं में टास्क

कई कारोबारों के लिए, किसी खास बोली में आर्टिफ़िशियल इंटेलिजेंस (एआई) टेक्नोलॉजी का इस्तेमाल करना ज़रूरी है, ताकि वे इसका बेहतर तरीके से इस्तेमाल कर सकें. जेमा परिवार के पास कई भाषाओं में कुछ क्षमताएं होती हैं. हालाँकि, अंग्रेज़ी के अलावा, अन्य भाषाओं में इसका इस्तेमाल करने से अक्सर कम नतीजे मिलते हैं.

अच्छी बात यह है कि आपको उस भाषा में काम पूरे करने के लिए, जेमा को बोली जाने वाली पूरी भाषा पढ़ाने की ज़रूरत नहीं है. इसके अलावा, Gemma मॉडल को ट्यून करके, किसी भाषा में खास टास्क पूरे किए जा सकते हैं. इसके लिए, आपको ज़्यादा डेटा और मेहनत की ज़रूरत नहीं पड़ेगी. टारगेट की गई भाषा में अनुरोधों और संभावित जवाबों के करीब 20 उदाहरणों का इस्तेमाल करके, Gemma की मदद से कारोबार की कई अलग-अलग समस्याओं को हल किया जा सकता है. ऐसा उस भाषा में किया जा सकता है जो आपके और आपके ग्राहकों के लिए सबसे सही हो.

इस प्रोजेक्ट के बारे में खास जानकारी देने वाला वीडियो देखें. इसमें, इस प्रोजेक्ट को बनाने वाले लोगों की अहम जानकारी के साथ-साथ, इसे बेहतर बनाने का तरीका भी बताया गया है. इसके लिए, बोली को समझने वाली एआई असिस्टेंट को Google के एआई की मदद से बनाने वाला वीडियो देखें. Gemma Cookbook कोड रिपॉज़िटरी में जाकर, इस प्रोजेक्ट के कोड को देखा जा सकता है. इसके अलावा, नीचे दिए गए निर्देशों का पालन करके भी प्रोजेक्ट को बड़ा किया जा सकता है.

खास जानकारी

इस ट्यूटोरियल में, Gemma और Python की मदद से बनाए गए बोली को समझने वाले टास्क ऐप्लिकेशन को सेट अप करने, चलाने, और उसे बेहतर बनाने का तरीका बताया गया है. यह ऐप्लिकेशन, एक ऐसा बेसिक वेब यूज़र इंटरफ़ेस उपलब्ध कराता है जिसमें आपकी ज़रूरतों के हिसाब से बदलाव किया जा सकता है. इस ऐप्लिकेशन को एक काल्पनिक कोरियन बेकरी के लिए ग्राहकों के ईमेल के जवाब जनरेट करने के लिए बनाया गया है. साथ ही, भाषा से जुड़े सभी इनपुट और आउटपुट पूरी तरह से कोरियन भाषा में ही मैनेज किए जाते हैं. आप इस ऐप्लिकेशन पैटर्न का उपयोग किसी भी भाषा और ऐसे किसी भी व्यावसायिक काम के साथ कर सकते है जिसमें लेख इनपुट और लेख आउटपुट का उपयोग होता हो.

K-Mail वेब ऐप्लिकेशन के यूज़र इंटरफ़ेस का स्क्रीनशॉट

पहली इमेज. कोरियन बेकरी से जुड़ी ईमेल क्वेरी के लिए, प्रोजेक्ट का यूज़र इंटरफ़ेस

हार्डवेयर की ज़रूरी शर्तें

ग्राफ़िक्स प्रोसेसिंग यूनिट (जीपीयू) या टेन्सर प्रोसेसिंग यूनिट (टीपीयू) वाले कंप्यूटर पर ट्यूनिंग की इस प्रोसेस को चलाएं. साथ ही, मौजूदा मॉडल के साथ-साथ ट्यूनिंग डेटा को रखने के लिए काफ़ी मेमोरी उपलब्ध कराएं. इस प्रोजेक्ट में ट्यूनिंग कॉन्फ़िगरेशन को चलाने के लिए, आपके पास करीब 16 जीबी जीपीयू मेमोरी, करीब उतनी ही सामान्य रैम, और कम से कम 50 जीबी डिस्क स्पेस होना चाहिए.

इस ट्यूटोरियल में, Gemma मॉडल को ट्यून करने का तरीका बताया गया है. इसे चलाने के लिए, T4 GPU रनटाइम वाले Colab प्लैटफ़ॉर्म का इस्तेमाल करें. अगर आपको यह प्रोजेक्ट Google Cloud VM इंस्टेंस पर बनाना है, तो इन ज़रूरी शर्तों के मुताबिक इंस्टेंस कॉन्फ़िगर करें:

  • जीपीयू हार्डवेयर: इस प्रोजेक्ट को चलाने के लिए, NVIDIA T4 की ज़रूरत होती है. हमारा सुझाव है कि आप NVIDIA L4 या इसके बाद के वर्शन का इस्तेमाल करें.
  • ऑपरेटिंग सिस्टम: Linux पर डीप लर्निंग विकल्प चुनें. खास तौर पर, पहले से इंस्टॉल किए गए GPU सॉफ़्टवेयर ड्राइवर के साथ CUDA 12.3 M124 वाला डीप लर्निंग VM चुनें.
  • बूट डिस्क का साइज़: अपने डेटा, मॉडल, और सहायक सॉफ़्टवेयर के लिए, कम से कम 50 जीबी डिस्क स्पेस उपलब्ध कराएं.

प्रोजेक्ट सेटअप करना

इन निर्देशों की मदद से, इस प्रोजेक्ट को डेवलपमेंट और टेस्टिंग के लिए तैयार किया जा सकता है. सेटअप करने के सामान्य चरणों में, ज़रूरी सॉफ़्टवेयर इंस्टॉल करना, कोड डेटा स्टोर करने की जगह से प्रोजेक्ट को क्लोन करना, कुछ एनवायरमेंट वैरिएबल सेट करना, Python लाइब्रेरी इंस्टॉल करना, और वेब ऐप्लिकेशन की जांच करना शामिल है.

इंस्टॉल और कॉन्फ़िगर करना

यह प्रोजेक्ट, पैकेज मैनेज करने और ऐप्लिकेशन चलाने के लिए, Python 3 और वर्चुअल एनवायरमेंट (venv) का इस्तेमाल करता है. इंस्टॉल करने के लिए यहां दिए गए निर्देश, Linux होस्ट मशीन के लिए हैं.

ज़रूरी सॉफ़्टवेयर इंस्टॉल करने के लिए:

  • Python 3 और Python के लिए venv वर्चुअल एनवायरमेंट पैकेज इंस्टॉल करें.

    sudo apt update
    sudo apt install git pip python3-venv
    

प्रोजेक्ट का क्लोन बनाना

प्रोजेक्ट कोड को अपने डेवलपमेंट कंप्यूटर पर डाउनलोड करें. प्रोजेक्ट का सोर्स कोड वापस पाने के लिए, आपके पास git सोर्स कंट्रोल सॉफ़्टवेयर होना चाहिए.

प्रोजेक्ट कोड डाउनलोड करने के लिए:

  1. नीचे दिए गए निर्देश का इस्तेमाल करके, git रिपॉज़िटरी का क्लोन बनाएं.

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. इसके अलावा, अपनी लोकल git रिपॉज़िटरी को कॉन्फ़िगर करके, स्पैर्स चेकआउट का इस्तेमाल किया जा सकता है, ताकि आपके पास सिर्फ़ प्रोजेक्ट की फ़ाइलें हों.

    cd gemma-cookbook/
    git sparse-checkout set Gemma/spoken-language-tasks/
    git sparse-checkout init --cone
    

Python लाइब्रेरी इंस्टॉल करना

Python लाइब्रेरी को venv Python वर्चुअल एनवायरमेंट के साथ इंस्टॉल करें. इसे चालू करने से, Python पैकेज और डिपेंडेंसी को मैनेज किया जा सकता है. pip इंस्टॉलर की मदद से Python लाइब्रेरी इंस्टॉल करने से पहले, Python वर्चुअल एनवायरमेंट चालू करना न भूलें. Python वर्चुअल एनवायरमेंट इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Python venv दस्तावेज़ देखें.

Python लाइब्रेरी इंस्टॉल करने के लिए:

  1. टर्मिनल विंडो में, spoken-language-tasks डायरेक्ट्री पर जाएं:

    cd Gemma/spoken-language-tasks/
    
  2. इस प्रोजेक्ट के लिए, Python वर्चुअल एनवायरमेंट (venv) को कॉन्फ़िगर और चालू करें:

    python3 -m venv venv
    source venv/bin/activate
    
  3. setup_python स्क्रिप्ट का इस्तेमाल करके, इस प्रोजेक्ट के लिए ज़रूरी Python लाइब्रेरी इंस्टॉल करें.

    ./setup_python.sh
    

एनवायरमेंट वैरिएबल सेट करना

इस कोड प्रोजेक्ट को चलाने के लिए, कुछ एनवायरमेंट वैरिएबल सेट करें. इनमें Kaggle उपयोगकर्ता नाम और Kaggle टोकन पासकोड शामिल है. Gemma मॉडल डाउनलोड करने के लिए, आपके पास Kaggle खाता होना चाहिए. साथ ही, आपको Gemma मॉडल के ऐक्सेस का अनुरोध करना होगा. इस प्रोजेक्ट के लिए, आपको दो .env फ़ाइलों में अपना Kaggle उपयोगकर्ता नाम और Kaggle टोकन कुंजी जोड़नी होगी. ये फ़ाइलें, वेब ऐप्लिकेशन और ट्यूनिंग प्रोग्राम, दोनों के लिए पढ़ी जाती हैं.

एनवायरमेंट वैरिएबल सेट करने के लिए:

  1. Kaggle दस्तावेज़ में दिए गए निर्देशों का पालन करके, अपना Kaggle उपयोगकर्ता नाम और टोकन कुंजी पाएं.
  2. Gemma सेटअप पेज पर, Gemma का ऐक्सेस पाएं के निर्देशों का पालन करके, Gemma मॉडल का ऐक्सेस पाएं.
  3. प्रोजेक्ट के क्लोन में इन सभी जगहों पर .env टेक्स्ट फ़ाइल बनाकर, प्रोजेक्ट के लिए एनवायरमेंट वैरिएबल फ़ाइलें बनाएं:
    k-mail-replier/k_mail_replier/.env
    k-gemma-it/.env
    
  4. .env टेक्स्ट फ़ाइलें बनाने के बाद, दोनों फ़ाइलों में ये सेटिंग जोड़ें:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

ऐप्लिकेशन चलाएं और उसकी जांच करें

प्रोजेक्ट को इंस्टॉल और कॉन्फ़िगर करने के बाद, वेब ऐप्लिकेशन को चलाकर पुष्टि करें कि आपने इसे सही तरीके से कॉन्फ़िगर किया है. आपको अपने इस्तेमाल के लिए प्रोजेक्ट में बदलाव करने से पहले, इसे आधार के तौर पर जांचना चाहिए.

प्रोजेक्ट को चलाने और उसकी जांच करने के लिए:

  1. टर्मिनल विंडो में, /k_mail_replier/ डायरेक्ट्री पर जाएं:

    cd spoken-language-tasks/k-mail-replier/
    
  2. run_flask_app.sh स्क्रिप्ट का इस्तेमाल करके ऐप्लिकेशन चलाएं:

    ./run_flask_app.sh
    
  3. वेब ऐप्लिकेशन शुरू करने के बाद, प्रोग्राम कोड में एक यूआरएल दिखता है. इस यूआरएल पर जाकर, ऐप्लिकेशन को ब्राउज़ और टेस्ट किया जा सकता है. आम तौर पर, यह पता:

    http://127.0.0.1:5000/
    
  4. मॉडल से जवाब पाने के लिए, वेब इंटरफ़ेस में पहले इनपुट फ़ील्ड के नीचे मौजूद 답변 작성 बटन दबाएं.

ऐप्लिकेशन को चलाने के बाद, मॉडल से मिलने वाले पहले जवाब में ज़्यादा समय लगता है, क्योंकि उसे पहले जनरेशन के रन पर, शुरू करने के चरण पूरे करने होते हैं. पहले से चल रहे वेब ऐप्लिकेशन पर, बाद में किए जाने वाले अनुरोध और जनरेशन कम समय में पूरे हो जाते हैं.

आवेदन की समयसीमा बढ़ाना

ऐप्लिकेशन के चलने के बाद, यूज़र इंटरफ़ेस और कारोबार के लॉजिक में बदलाव करके, इसे और बेहतर बनाया जा सकता है. इससे यह आपके या आपके कारोबार के काम के टास्क के लिए काम करेगा. ऐप्लिकेशन कोड का इस्तेमाल करके, Gemma मॉडल के व्यवहार में भी बदलाव किया जा सकता है. इसके लिए, ऐप्लिकेशन के जनरेटिव एआई मॉडल को भेजे गए प्रॉम्प्ट के कॉम्पोनेंट में बदलाव करें.

ऐप्लिकेशन, उपयोगकर्ता से मिले इनपुट डेटा के साथ-साथ मॉडल को निर्देश देता है. मॉडल के व्यवहार को बदलने के लिए, इन निर्देशों में बदलाव किया जा सकता है. जैसे, यह बताना कि मॉडल को अनुरोध से जानकारी निकालनी चाहिए और उसे स्ट्रक्चर्ड डेटा फ़ॉर्मैट में डालना चाहिए, जैसे कि JSON. मॉडल के व्यवहार को बदलने का सबसे आसान तरीका यह है कि मॉडल के जवाब के लिए अतिरिक्त निर्देश या दिशा-निर्देश दिए जाएं. जैसे, यह बताना कि जनरेट किए गए जवाबों को विनम्रता के साथ लिखा जाना चाहिए.

प्रॉम्प्ट के निर्देशों में बदलाव करने के लिए:

  1. बोली गई भाषा के टास्क वाले प्रोजेक्ट में, k-mail-replier/k_mail_replier/app.py कोड फ़ाइल खोलें.
  2. app.py कोड में, get_prompt(): फ़ंक्शन में अतिरिक्त निर्देश जोड़ें:

    def get_prompt():
        return "발신자에게 요청에 대한 감사를 전하고, 곧 자세한 내용을
            알려드리겠다고 정중하게 답장해 주세요. 정중하게 답변해 주세요!:\n"
    

इस उदाहरण में कोरियन भाषा के निर्देशों में "कृपया एक विनम्र जवाब लिखो!" वाक्यांश जोड़ा गया है.

तुरंत निर्देश देने से, जनरेट किए गए आउटपुट पर काफ़ी असर पड़ सकता है. साथ ही, इसे लागू करने में कम मेहनत लगती है. आपको पहले यह तरीका आज़माना चाहिए, ताकि यह पता चल सके कि मॉडल से अपनी पसंद का व्यवहार किया जा सकता है या नहीं. हालांकि, Gemma मॉडल के व्यवहार में बदलाव करने के लिए प्रॉम्प्ट वाले निर्देशों का इस्तेमाल करने की अपनी सीमाएं होती हैं. खास तौर पर, मॉडल के इनपुट टोकन की कुल सीमा, Gemma 2 के लिए 8,192 टोकन है. इसलिए, आपको दिए गए नए डेटा के साइज़ के साथ, प्रॉम्प्ट के ज़्यादा जानकारी वाले निर्देशों को संतुलित करना होगा, ताकि आप इस सीमा के अंदर रहें.

इसके अलावा, अगर आपको Gemma को अंग्रेज़ी के अलावा किसी दूसरी भाषा में टास्क करने के लिए कहना है, तो हो सकता है कि सिर्फ़ बेस मॉडल को निर्देश देने पर, आपको भरोसेमंद और काम के नतीजे न मिलें. इसके बजाय, आपको मॉडल को टारगेट की गई भाषा में दिए गए उदाहरणों के साथ ट्यून करना चाहिए. इसके बाद, फिर प्रॉम्प्ट के निर्देशों में बदलाव करें, ताकि ट्यून किए गए मॉडल के आउटपुट में छोटे बदलाव किए जा सकें.

मॉडल को ट्यून करना

Gemma मॉडल को अंग्रेज़ी के अलावा किसी दूसरी भाषा में असरदार जवाब देने के लिए, हमारा सुझाव है कि आप उसमें बारीकी से बदलाव करें. हालांकि, टारगेट की गई भाषा में पूरी तरह से पारंगत होने की ज़रूरत नहीं है, ताकि मॉडल उस भाषा में टास्क पूरा कर सके. किसी टास्क के लिए, टारगेट की गई भाषा में बुनियादी फ़ंक्शन पाने के लिए, करीब 20 उदाहरणों का इस्तेमाल किया जा सकता है. ट्यूटोरियल के इस सेक्शन में, किसी ख़ास टास्क के लिए Gemma मॉडल को किसी ख़ास भाषा में सेट अप करने और उसे चलाने का तरीक़ा बताया गया है.

यहां दिए गए निर्देशों में, वर्चुअल मशीन (वीएम) एनवायरमेंट में, एआई मॉडल को बेहतर बनाने का तरीका बताया गया है. हालांकि, इस प्रोजेक्ट के लिए, इससे जुड़ी Colab नोटबुक का इस्तेमाल करके भी, एआई मॉडल को बेहतर बनाया जा सकता है.

हार्डवेयर की ज़रूरी शर्तें

बेहतर बनाने के लिए, कंप्यूट की ज़रूरी शर्तें, बाकी प्रोजेक्ट के लिए हार्डवेयर की ज़रूरी शर्तों जैसी ही होती हैं. T4 जीपीयू रनटाइम का इस्तेमाल करके, Colab के ज़रिए ट्यूनिंग ऑपरेशन को चलाया जा सकता है. अगर आपने इनपुट टोकन को 256 और बैच का साइज़ 1 पर सेट किया है.

डेटा तैयार करना

Gemma मॉडल को ट्यून करने से पहले, आपको ट्यूनिंग के लिए डेटा तैयार करना होगा. किसी खास टास्क और भाषा के लिए मॉडल को ट्यून करते समय, आपको टारगेट की गई भाषा में अनुरोध और जवाब के उदाहरणों का एक सेट चाहिए. इन उदाहरणों में, अनुरोध का टेक्स्ट और बिना किसी निर्देश के, अनुरोध का जवाब दिखना चाहिए. सबसे पहले, आपको करीब 20 उदाहरणों के साथ एक डेटासेट तैयार करना होगा. इन उदाहरणों में, अलग-अलग तरह के अनुरोध और उनका सही जवाब होना चाहिए. पक्का करें कि अनुरोध और जवाब एक जैसे न हों, क्योंकि इससे मॉडल के जवाब एक जैसे हो सकते हैं और अनुरोधों में बदलाव होने पर, वे ठीक से अडजस्ट नहीं हो पाते. इस टेबल में, इस कोड उदाहरण के डेटासेट के कुछ सैंपल रिकॉर्ड दिखाए गए हैं:

अनुरोध जवाब
안녕하세요, 2주 뒤에 있을 아이 생일을 위해 3호 케이क 3개를 주문하고 싶은데 क्या यह मुमकिन है? Ⱍ님, 사녕 जीडीपीआर खारिज है. दो हफ़्ते बाद अपने बच्चे के जन्मदिन के लिए, तीन नंबर का केक दो पीस ऑर्डर करने के लिए आपका धन्यवाद. 네, 3호 케이크 2개 주문 튥합니다. 아이 생일 케이크인 만큼 더욱 신경 써서 정성껏 तैयार करूंगा. 혹시 원하시는 디자인이나 특별한 요청 사항이 있으시면 편하게 말씀해주세요. 픽업 날짜와 세을 려주്면 더욱 자세한 인내를 도싈다. फिर से संपर्क करने के लिए धन्यवाद 감사드리며, 아이 생일 진심으로 축하합니다! [가게 이름] 드림
안녕하세요, 9월 15일에 있을 아들의 돌잔치를 위해 케이क को ऑर्डर करना है. - 케이크 종류: 생크림 케이크 - 크기: 2호 - 디자인: 아기자기한 동물 디자인 - 문구: "첫 생일 축하해, 사랑하는 아들!" - 픽अप 날짜 및 समय: 9월 14일 오후 3 बजे कीमत और ऑर्डर की उपलब्धता की जानकारी देने पर, हम आपका धन्यवाद करेंगे. 감사합니다. 김민지 드림 안녕하세요, 김민지 님, 9월 15일 아드님의 돌잔치를 위한 케이크 주문 문의 감사합니다. - 생크림 케이크 2호, 아 {3}자사한 동물 디자인, "첫 생 लेवल 축해, 사랑한는 아들!" 문구, 9월 14 सूर्य - 가격은 5만원입니다. 주문을 원하시면 연락 주세요 धन्यवाद. [드림]

टेबल 1. कोरियन बेकरी के ईमेल रिस्पॉन्स देने वाले एआई मॉडल के ट्यूनिंग डेटासेट की आंशिक लिस्टिंग.

डेटा फ़ॉर्मैट और लोड करना

ट्यूनिंग डेटा को अपने हिसाब से किसी भी फ़ॉर्मैट में सेव किया जा सकता है. जैसे, डेटाबेस रिकॉर्ड, JSON फ़ाइलें, CSV या सादा टेक्स्ट फ़ाइलें. हालांकि, इसके लिए ज़रूरी है कि आपके पास Python कोड की मदद से रिकॉर्ड वापस पाने का तरीका हो. उदाहरण के लिए, ट्यूनिंग प्रोग्राम को ऑनलाइन रिपॉज़िटरी से रिकॉर्ड मिलते हैं. टर्निंग प्रोग्राम के इस उदाहरण में, ट्यूनिंग डेटासेट को prepare_tuning_dataset() फ़ंक्शन का इस्तेमाल करके k-gemma-it/main.py मॉड्यूल में लोड किया गया है:

def prepare_tuning_dataset():
    tokenizer = keras_nlp.models.GemmaTokenizer.from_preset(model_id)

    # load data from repository (or local directory)
    from datasets import load_dataset
    ds = load_dataset(
        # Dataset : https://huggingface.co/datasets/bebechien/korean_cake_boss
        "bebechien/korean_cake_boss",
        split="train",
    )
    ...

जैसा कि पहले बताया गया है, डेटासेट को किसी भी ऐसे फ़ॉर्मैट में सेव किया जा सकता है जो आपके लिए काम का हो. हालांकि, यह ज़रूरी है कि आप उन अनुरोधों को उनके जवाबों के साथ वापस पा सकें और उन्हें टेक्स्ट स्ट्रिंग में इकट्ठा कर सकें. इस टेक्स्ट स्ट्रिंग का इस्तेमाल ट्यूनिंग रिकॉर्ड के तौर पर किया जाता है.

ट्यूनिंग रिकॉर्ड इकट्ठा करना

असल ट्यूनिंग प्रोसेस के लिए, हर अनुरोध और रिस्पॉन्स को एक स्ट्रिंग में इकट्ठा किया जाता है. इसमें अनुरोध और रिस्पॉन्स के कॉन्टेंट को दिखाने के लिए, प्रॉम्प्ट निर्देश और टैग होते हैं. इसके बाद, ट्यूनिंग प्रोग्राम, मॉडल के इस्तेमाल के लिए स्ट्रिंग को टोकन में बदल देता है. k-gemma-it/main.py मॉड्यूल prepare_tuning_dataset() फ़ंक्शन में, ट्यूनिंग रिकॉर्ड को इकट्ठा करने का कोड इस तरह से देखा जा सकता है:

def prepare_tuning_dataset():
    ...
    prompt_instruction = "다음에 대한 이메일 답장을 작성해줘."

    for x in data:
        item = f"<start_of_turn>user\n{prompt_instruction}\n\"{x['input']}\"<end_of_turn>\n<start_of_turn>model\n{x['output']}<end_of_turn>"
        length = len(tokenizer(item))
        # skip data if the token length is longer than our limit
        if length < token_limit:
            tuning_dataset.append(item)
            if(len(tuning_dataset)>=num_data_limit):
                break
    ...

यह फ़ंक्शन, डेटा को पढ़ता है और start_of_turn और end_of_turn टैग जोड़कर उसे फ़ॉर्मैट करता है. यह Gemma मॉडल को ट्यून करने के लिए डेटा उपलब्ध कराने के दौरान, ज़रूरी फ़ॉर्मैट होता है. यह कोड हर अनुरोध के लिए एक prompt_instruction भी डालता है. आपको अपने ऐप्लिकेशन के हिसाब से इसमें बदलाव करना चाहिए.

मॉडल के वेट जनरेट करना

ट्यूनिंग डेटा लोड होने के बाद, ट्यूनिंग प्रोग्राम चलाया जा सकता है. इस उदाहरण के ऐप्लिकेशन के लिए ट्यूनिंग की प्रोसेस, Keras NLP लाइब्रेरी का इस्तेमाल करती है. इससे, मॉडल को लो रैंक अडैप्टेशन या LoRA तकनीक की मदद से ट्यून किया जाता है. इससे, मॉडल के नए वेट जनरेट होते हैं. पूरी तरह से सटीक ट्यूनिंग की तुलना में, LoRA का इस्तेमाल करने से ज़्यादा मेमोरी बचती है. ऐसा इसलिए होता है, क्योंकि यह मॉडल के वेट में होने वाले बदलावों का अनुमान लगाता है. इसके बाद, मॉडल के व्यवहार को बदलने के लिए, इन अनुमानित वेट को मौजूदा मॉडल के वेट पर ओवरले किया जा सकता है.

ट्यूनिंग रन करने और नए वेट का हिसाब लगाने के लिए:

  1. टर्मिनल विंडो में, k-gemma-it/ डायरेक्ट्री पर जाएं.

    cd spoken-language-tasks/k-gemma-it/
    
  2. tune_model स्क्रिप्ट का इस्तेमाल करके, ट्यूनिंग की प्रोसेस चलाएं:

    ./tune_model.sh
    

ट्यून करने की प्रोसेस में कुछ मिनट लग सकते हैं. यह आपके उपलब्ध कंप्यूट रिसॉर्स पर निर्भर करता है. ट्यूनिंग पूरी होने के बाद, ट्यूनिंग प्रोग्राम k-gemma-it/weights डायरेक्ट्री में, इस फ़ॉर्मैट में नई *.h5 वज़न वाली फ़ाइलें लिखता है:

gemma2-2b_k-tuned_4_epoch##.lora.h5

समस्या का हल

अगर ट्यूनिंग पूरी नहीं होती, तो इसकी दो संभावित वजहें हो सकती हैं:

  1. मेमोरी खत्म हो गई / संसाधन खत्म हो गए: ये गड़बड़ियां तब होती हैं, जब ट्यूनिंग की प्रोसेस, जीपीयू या सीपीयू की उपलब्ध मेमोरी से ज़्यादा मेमोरी का अनुरोध करती है. पक्का करें कि ट्यून करने की प्रोसेस के दौरान, वेब ऐप्लिकेशन न चल रहा हो. अगर 16 जीबी जीपीयू मेमोरी वाले डिवाइस पर ट्यून किया जा रहा है, तो पक्का करें कि आपने token_limit को 256 और batch_size को 1 पर सेट किया हो.
  2. GPU ड्राइवर इंस्टॉल नहीं हैं या JAX के साथ काम नहीं करते: टर्निंग प्रोसेस के लिए ज़रूरी है कि कंप्यूट डिवाइस में ऐसे हार्डवेयर ड्राइवर इंस्टॉल हों जो JAX लाइब्रेरी के वर्शन के साथ काम करते हों. ज़्यादा जानकारी के लिए, JAX इंस्टॉलेशन का दस्तावेज़ देखें.

ट्यून किया गया मॉडल डिप्लॉय करना

ट्यूनिंग की प्रोसेस में, ट्यूनिंग डेटा और ट्यूनिंग ऐप्लिकेशन में सेट किए गए epoch की कुल संख्या के आधार पर कई वेट जनरेट होते हैं. डिफ़ॉल्ट रूप से, ट्यूनिंग प्रोग्राम 20 मॉडल वेट फ़ाइलें जनरेट करता है. हर ट्यूनिंग एपोच के लिए एक फ़ाइल जनरेट होती है. ट्यूनिंग के हर चरण में वेट बनते हैं, जो ट्यूनिंग डेटा के नतीजों को ज़्यादा सटीक तरीके से दिखाते हैं. ट्यूनिंग प्रोसेस के टर्मिनल आउटपुट में, हर एपोच के लिए सटीक दरें देखी जा सकती हैं. इसके लिए, यह तरीका अपनाएं:

...
Epoch 14/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 567ms/step - loss: 0.4026 - sparse_categorical_accuracy: 0.8235
Epoch 15/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 569ms/step - loss: 0.3659 - sparse_categorical_accuracy: 0.8382
Epoch 16/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 571ms/step - loss: 0.3314 - sparse_categorical_accuracy: 0.8538
Epoch 17/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 572ms/step - loss: 0.2996 - sparse_categorical_accuracy: 0.8686
Epoch 18/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 574ms/step - loss: 0.2710 - sparse_categorical_accuracy: 0.8801
Epoch 19/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2451 - sparse_categorical_accuracy: 0.8903
Epoch 20/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2212 - sparse_categorical_accuracy: 0.9021

आपको सटीक रेट 0.80 से 0.90 के आस-पास रखना चाहिए. हालांकि, यह रेट बहुत ज़्यादा या 1.00 के करीब नहीं होना चाहिए. ऐसा इसलिए, क्योंकि इसका मतलब है कि वेट, ट्यूनिंग डेटा को ओवरफ़िट करने के करीब आ गए हैं. ऐसा होने पर, मॉडल उन अनुरोधों पर अच्छा परफ़ॉर्म नहीं करता जो ट्यूनिंग के उदाहरणों से काफ़ी अलग होते हैं. डिफ़ॉल्ट रूप से, डिप्लॉयमेंट स्क्रिप्ट, 17वें इकोपॉच के वेट चुनती है. आम तौर पर, इनकी सटीक दर 0.90 के आस-पास होती है.

जनरेट किए गए वेट को वेब ऐप्लिकेशन में डिप्लॉय करने के लिए:

  1. टर्मिनल विंडो में, k-gemma-it/ डायरेक्ट्री पर जाएं.

    cd spoken-language-tasks/k-gemma-it/
    
  2. deploy_weights स्क्रिप्ट का इस्तेमाल करके, ट्यूनिंग की प्रोसेस चलाएं:

    ./deploy_weights.sh
    

इस स्क्रिप्ट को चलाने के बाद, आपको k-mail-replier/k_mail_replier/weights/ डायरेक्ट्री में एक नई *.h5 फ़ाइल दिखेगी.

नए मॉडल की जांच करें

ऐप्लिकेशन में नए वेट डिप्लॉय करने के बाद, अब नए मॉडल को आज़माने का समय आ गया है. ऐसा करने के लिए, वेब ऐप्लिकेशन को फिर से चलाएं और जवाब जनरेट करें.

प्रोजेक्ट को चलाने और उसकी जांच करने के लिए:

  1. टर्मिनल विंडो में, /k_mail_replier/ डायरेक्ट्री पर जाएं.

    cd spoken-language-tasks/k-mail-replier/
    
  2. run_flask_app.sh स्क्रिप्ट का इस्तेमाल करके ऐप्लिकेशन चलाएं:

    ./run_flask_app.sh
    
  3. वेब ऐप्लिकेशन शुरू करने के बाद, प्रोग्राम कोड में एक यूआरएल दिखता है. इस यूआरएल पर जाकर, ऐप्लिकेशन को ब्राउज़ और टेस्ट किया जा सकता है. आम तौर पर, यह पता इस तरह का होता है:

    http://127.0.0.1:5000/
    
  4. मॉडल से जवाब पाने के लिए, वेब इंटरफ़ेस में पहले इनपुट फ़ील्ड के नीचे मौजूद 답변 작성 बटन दबाएं.

अब आपने किसी ऐप्लिकेशन में Gemma मॉडल को ट्यून और डिप्लॉय कर लिया है! ऐप्लिकेशन को आज़माएं और अपने टास्क के लिए, ट्यून किए गए मॉडल की जनरेशन क्षमता की सीमाएं तय करने की कोशिश करें. अगर आपको ऐसे मामले मिलते हैं जिनमें मॉडल की परफ़ॉर्मेंस अच्छी नहीं है, तो उनमें से कुछ अनुरोधों को ट्यूनिंग के उदाहरण के तौर पर दिए गए डेटा की सूची में जोड़ें. इसके लिए, अनुरोध जोड़ें और सही जवाब दें. इसके बाद, ट्यूनिंग की प्रोसेस फिर से चलाएं, नए वेट को फिर से डिप्लॉय करें, और आउटपुट की जांच करें.

अन्य संसाधन

इस प्रोजेक्ट के बारे में ज़्यादा जानकारी के लिए, Gemma Cookbook कोड रिपॉज़िटरी देखें. अगर आपको ऐप्लिकेशन बनाने में मदद चाहिए या आपको दूसरे डेवलपर के साथ मिलकर काम करना है, तो Google Developers Community Discord सर्वर पर जाएं. 'Google के एआई का इस्तेमाल करके बनाए गए प्रोजेक्ट' के बारे में ज़्यादा जानने के लिए, वीडियो प्लेलिस्ट देखें.