Keras CodeGemma Quick Start

مشاهده در ai.google.dev در Google Colab اجرا شود مشاهده منبع در GitHub

CodeGemma خانواده ای از مدل های باز سبک وزن و پیشرفته است که از همان تحقیقات و فناوری استفاده شده برای ایجاد مدل های Gemini ساخته شده است.

مدل‌های CodeGemma بر روی بیش از 500 میلیارد توکن کد اصلی آموزش داده می‌شوند که از معماری‌های مشابه خانواده مدل Gemma استفاده می‌کنند. در نتیجه، مدل‌های CodeGemma به عملکرد کد پیشرفته‌ای در هر دو کار تکمیل و تولید دست می‌یابند، در حالی که مهارت‌های درک و استدلال قوی را در مقیاس حفظ می‌کنند.

CodeGemma دارای 3 نوع است:

  • یک مدل از پیش آموزش دیده با کد 7B
  • یک مدل کد تنظیم شده با دستورالعمل 7B
  • یک مدل 2B که به طور خاص برای تکمیل کد و تولید پایان باز آموزش داده شده است.

این راهنما شما را با استفاده از مدل CodeGemma 2B با KerasNLP برای یک کار تکمیل کد راهنمایی می کند.

برپایی

به CodeGemma دسترسی پیدا کنید

برای تکمیل این آموزش، ابتدا باید دستورالعمل‌های راه‌اندازی را در Gemma setup تکمیل کنید. دستورالعمل های راه اندازی Gemma به شما نشان می دهد که چگونه کارهای زیر را انجام دهید:

  • در kaggle.com به Gemma دسترسی پیدا کنید.
  • یک زمان اجرا Colab با منابع کافی برای اجرای مدل Gemma 2B انتخاب کنید.
  • نام کاربری و کلید API Kaggle را ایجاد و پیکربندی کنید.

پس از تکمیل تنظیمات Gemma، به بخش بعدی بروید، جایی که متغیرهای محیطی را برای محیط Colab خود تنظیم خواهید کرد.

زمان اجرا را انتخاب کنید

برای تکمیل این آموزش، باید یک زمان اجرا Colab با منابع کافی برای اجرای مدل CodeGemma 2B داشته باشید. در این مورد، می توانید از یک GPU T4 استفاده کنید:

  1. در سمت راست بالای پنجره Colab، ▾ ( گزینه های اتصال اضافی ) را انتخاب کنید.
  2. تغییر نوع زمان اجرا را انتخاب کنید.
  3. در بخش شتاب دهنده سخت افزار ، GPU T4 را انتخاب کنید.

کلید API خود را پیکربندی کنید

برای استفاده از Gemma، باید نام کاربری Kaggle و یک کلید Kaggle API ارائه دهید.

برای ایجاد یک کلید Kaggle API، به تب Account پروفایل کاربری Kaggle خود بروید و Create New Token را انتخاب کنید. با این کار دانلود فایل kaggle.json حاوی اطلاعات کاربری API شما راه اندازی می شود.

در Colab، Secrets (🔑) را در قسمت سمت چپ انتخاب کنید و نام کاربری Kaggle و کلید Kaggle API را اضافه کنید. نام کاربری خود را با نام KAGGLE_USERNAME و کلید API خود را با نام 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 یک API یادگیری عمیق چند چارچوبی و سطح بالا است که برای سادگی و سهولت استفاده طراحی شده است. با استفاده از Keras 3، می‌توانید گردش‌های کاری را روی یکی از سه Backend اجرا کنید: TensorFlow، JAX یا PyTorch.

برای این آموزش، Backend را برای 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 ، یک مدل Gemma سرتاسر برای مدل‌سازی زبان علی ایجاد می‌کنید. یک مدل زبان علی، نشانه بعدی را بر اساس نشانه های قبلی پیش بینی می کند.

مدل را با استفاده از متد 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 میلیارد پارامتر.

تکمیل کد میانی

این مثال از قابلیت Fill-in-the-Middle (FIM) CodeGemma برای تکمیل کد بر اساس زمینه اطراف استفاده می کند. این به ویژه در برنامه های ویرایشگر کد برای درج کد که مکان نما متن بر اساس کد اطراف آن است (قبل و بعد از مکان نما) مفید است.

CodeGemma به شما امکان می دهد از 4 نشانه تعریف شده توسط کاربر - 3 برای FIM و یک نشانه <|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)

درخواست تکمیل کد را فرمت کنید. توجه داشته باشید که:

  • بین هیچ نشانه FIM و پیشوند و پسوند نباید فضای خالی وجود داشته باشد
  • نشانه میانی FIM باید در انتها باشد تا مدل پر شود
  • پیشوند یا پسوند بسته به اینکه مکان نما در حال حاضر در کجای فایل قرار دارد یا اینکه چه مقدار زمینه را می خواهید به مدل ارائه دهید می تواند خالی باشد.

از یک تابع کمکی برای قالب بندی درخواست استفاده کنید.

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 ، برنامه‌نویسی به کمک هوش مصنوعی با نوت‌بوک CodeGemma و KerasNLP را بررسی کنید.

همچنین برای اطلاع از مشخصات فنی مدل های CodeGemma به کارت مدل CodeGemma مراجعه کنید.