Keras CodeGemma क्विकस्टार्ट

ai.google.dev पर देखें Google Colab में चलाएं GitHub पर सोर्स देखें

CodeGemma एक लाइटवेट और बेहतरीन ओपन मॉडल है. इसे Gemini मॉडल में इस्तेमाल की गई रिसर्च और टेक्नोलॉजी का इस्तेमाल करके बनाया गया है.

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

CodeGemma के तीन वैरिएंट हैं:

  • 7B कोड का पहले से ट्रेन किया गया मॉडल
  • निर्देशों के हिसाब से तैयार किया गया 7B कोड मॉडल
  • 2B मॉडल, जिसे खास तौर पर कोड डालने और ओपन-एंडेड जनरेशन के लिए ट्रेन किया गया है.

इस गाइड में, कोड को पूरा करने वाले टास्क के लिए KerasNLP के साथ CodeGemma 2B मॉडल का इस्तेमाल करने का तरीका बताया गया है.

सेटअप

CodeGemma का ऐक्सेस पाएं

इस ट्यूटोरियल को पूरा करने के लिए, आपको सबसे पहले Gemma सेटअप में दिए गए सेटअप के निर्देशों को पूरा करना होगा. Gemma के सेटअप से जुड़े निर्देशों में बताया गया है कि ये काम कैसे किए जा सकते हैं:

  • kaggle.com पर Gemma का ऐक्सेस पाएं.
  • ऐसा Colab रनटाइम चुनें जिसमें चलाने के लिए ज़रूरी संसाधन हों जेमा 2B मॉडल.
  • Kaggle उपयोगकर्ता नाम और एपीआई पासकोड को जनरेट और कॉन्फ़िगर करें.

Gemma का सेटअप पूरा करने के बाद, अगले सेक्शन पर जाएं. यहां अपने Colab एनवायरमेंट के लिए, एनवायरमेंट वैरिएबल सेट किए जा सकते हैं.

रनटाइम चुनें

इस ट्यूटोरियल को पूरा करने के लिए, आपके पास Colab रनटाइम होना चाहिए, जिसमें CodeGemma 2B मॉडल को चलाने के लिए ज़रूरी संसाधन हों. इस मामले में, T4 जीपीयू का इस्तेमाल किया जा सकता है:

  1. Colab विंडो के ऊपर दाईं ओर, 🛍 (कनेक्शन के अन्य विकल्प) चुनें.
  2. रनटाइम का टाइप बदलें को चुनें.
  3. Hardware Accelerator में जाकर, T4 जीपीयू चुनें.

अपनी एपीआई कुंजी कॉन्फ़िगर करें

Gemma का इस्तेमाल करने के लिए, आपको अपना Kaggle उपयोगकर्ता नाम और Kaggle API पासकोड देना होगा.

Kaggle API पासकोड को जनरेट करने के लिए, अपनी Kaggle उपयोगकर्ता प्रोफ़ाइल के खाता टैब पर जाएं और नया टोकन बनाएं चुनें. इससे kaggle.json में, आपके एपीआई क्रेडेंशियल वाली फ़ाइल डाउनलोड होगी.

Colab में, बाएं पैनल में Secrets (कंसोल) चुनें और अपना Kaggle उपयोगकर्ता नाम और Kaggle API पासकोड जोड़ें. अपना उपयोगकर्ता नाम KAGGLE_USERNAME नाम से और एपीआई पासकोड KAGGLE_KEY नाम से सेव करें.

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

KAGGLE_USERNAME और KAGGLE_KEY के लिए, एनवायरमेंट वैरिएबल सेट करें.

import os
from google.colab import userdata

os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

डिपेंडेंसी इंस्टॉल करें

pip install -q -U keras-nlp

बैकएंड चुनें

Keras एक हाई-लेवल, मल्टी-फ़्रेमवर्क डीप लर्निंग एपीआई है. इसे सरलता और इस्तेमाल में आसानी के लिए डिज़ाइन किया गया है. Keras 3 का इस्तेमाल करके, वर्कफ़्लो को इन तीन बैकएंड पर चलाया जा सकता है: TensorFlow, JAX या PyTorch.

इस ट्यूटोरियल के लिए, TensorFlow के लिए बैकएंड कॉन्फ़िगर करें.

os.environ["KERAS_BACKEND"] = "tensorflow"  # Or "jax" or "torch".

पैकेज इंपोर्ट करें

Keras और KerasNLP इंपोर्ट करें.

import keras_nlp
import keras

# Run at half precision.
keras.config.set_floatx("bfloat16")

मॉडल लोड करें

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

from_preset तरीके का इस्तेमाल करके मॉडल बनाएं:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("code_gemma_2b_en")
gemma_lm.summary()
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/config.json...
100%|██████████| 554/554 [00:00<00:00, 1.41MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/model.weights.h5...
100%|██████████| 4.67G/4.67G [05:06<00:00, 16.4MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/tokenizer.json...
100%|██████████| 401/401 [00:00<00:00, 382kB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm...
100%|██████████| 4.04M/4.04M [00:01<00:00, 2.41MB/s]

from_preset तरीका, मॉडल को प्रीसेट आर्किटेक्चर और वेट से इंस्टैंशिएट करता है. ऊपर दिए गए कोड में, code_gemma_2b_en स्ट्रिंग से प्रीसेट आर्किटेक्चर का पता चलता है. यह एक CodeGemma मॉडल है, जिसमें 2 अरब पैरामीटर हैं.

बीच में भरने के कोड को पूरा करना

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

CodeGemma आपको उपयोगकर्ता के तय किए गए चार टोकन इस्तेमाल करने की सुविधा देता है. तीन टोकन, एफ़आईएम के लिए और एक <|file_separator|> टोकन एक से ज़्यादा फ़ाइलों पर काम करने के लिए होता है. कॉन्सटेंट को परिभाषित करने के लिए इनका इस्तेमाल करें.

BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"

मॉडल के लिए स्टॉप टोकन तय करें.

END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token

stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)

stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)

कोड पूरा करने के लिए प्रॉम्प्ट को फ़ॉर्मैट करें. ध्यान दें कि:

  • किसी भी एफ़आईएम टोकन और प्रीफ़िक्स और सफ़िक्स के बीच खाली सफ़ेद जगह नहीं होनी चाहिए
  • एफ़आईएम का मिडल टोकन, मॉडल को प्राइम करने के लिए आखिर में होना चाहिए, ताकि उसे भरना जारी रखा जा सके
  • फ़ाइल में कर्सर इस समय कहां है या आपको मॉडल को कितना संदर्भ देना है, इस आधार पर प्रीफ़िक्स या सफ़िक्स खाली हो सकता है

प्रॉम्प्ट को फ़ॉर्मैट करने के लिए, हेल्पर फ़ंक्शन का इस्तेमाल करें.

def format_completion_prompt(before, after):
    return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"

before = "import "
after = """if __name__ == "__main__":\n    sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)
<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":
    sys.exit(0)<|fim_middle|>

प्रॉम्प्ट चलाएं. हमारा सुझाव है कि रिस्पॉन्स टोकन स्ट्रीम करें. उपयोगकर्ता की ओर से तय किए गए या खत्म होने वाले किसी टोकन का मिलने पर स्ट्रीमिंग बंद करें, ताकि कोड को पूरा किया जा सके.

gemma_lm.generate(prompt, stop_token_ids=stop_token_ids, max_length=128)
'<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>'

यह मॉडल, सुझाए गए कोड पूरा होने के तौर पर sys की सुविधा देता है.

खास जानकारी

इस ट्यूटोरियल में आपको आस-पास के कॉन्टेक्स्ट के आधार पर कोड डालने के लिए CodeGemma का इस्तेमाल करने का तरीका बताया गया है. इसके बाद, CodeGemma और KerasNLP notebook के साथ एआई की मदद से काम करने वाली प्रोग्रामिंग देखें. इससे आपको CodeGemma के इस्तेमाल के ज़्यादा उदाहरणों के बारे में जानने का मौका मिलेगा.

CodeGemma मॉडल की तकनीकी जानकारी के लिए, CodeGemma मॉडल का कार्ड भी देखें.