التشغيل السريع لشركة Keras CodeGemma

العرض على ai.google.dev التنفيذ في Google Colab عرض المصدر على GitHub

CodeGemma هي مجموعة من النماذج المتطوّرة والخفيفة المتاحة للجميع، والتي تم إنشاؤها بناءً على الأبحاث والتكنولوجيا نفسها المستخدَمة في إنشاء نماذج Gemini.

تم تدريب نماذج CodeGemma على أكثر من 500 مليار رمز مميّز في الأساس، وذلك باستخدام نفس البُنى الهندسية لعائلة نموذج جيما. ونتيجةً لذلك، تحقّق نماذج CodeGemma أداءً متطوّرًا للرموز البرمجية عند إكمال كلا الإجراءَين. وإنشاء المهام مع الحفاظ على مهارات الفهم والتحليل على نطاق واسع.

تتوفّر 3 خيارات في CodeGemma:

  • نموذج 7B المدرب مسبقًا
  • نموذج رمز برمجي مضبوط على التعليمات يبلغ 7 مليار
  • هو نموذج ثنائي الأبعاد، تم تدريبه خصيصًا لإدخال الرموز البرمجية والإنشاء المفتوح.

يرشدك هذا الدليل إلى استخدام نموذج CodeGemma 2B مع KerasNLP لمهمة إكمال التعليمات البرمجية.

ضبط إعدادات الجهاز

الوصول إلى CodeGemma

لإكمال هذا الدليل التعليمي، ستحتاج أولاً إلى إكمال تعليمات الإعداد في صفحة إعداد Gemma. توضح لك تعليمات إعداد Gemma كيفية إجراء ما يلي:

  • يمكنك الوصول إلى Gemma على kaggle.com.
  • يجب اختيار بيئة تشغيل Colab بها موارد كافية للتشغيل. نموذج Gemma 2B.
  • إنشاء وتكوين اسم مستخدم ومفتاح واجهة برمجة تطبيقات Kaggle.

بعد الانتهاء من إعداد Gemma، انتقِل إلى القسم التالي، حيث يمكنك ضبط متغيّرات البيئة لبيئة Colab.

اختيار بيئة التشغيل

لإكمال هذا الدليل التعليمي، يجب أن يتوفّر لديك وقت تشغيل Colab مع موارد كافية لتشغيل نموذج CodeGemma 2B. في هذه الحالة، يمكنك استخدام وحدة معالجة رسومات من النوع T4:

  1. في أعلى يسار نافذة Colab، اختَر Other (خيارات الاتصال الإضافية).
  2. اختَر تغيير نوع بيئة التشغيل.
  3. ضِمن مسرِّع الأجهزة، اختَر وحدة معالجة الرسومات T4.

ضبط مفتاح واجهة برمجة التطبيقات

لاستخدام Gemma، يجب عليك تقديم اسم مستخدم Kaggle ومفتاح واجهة برمجة تطبيقات Kaggle.

لإنشاء مفتاح واجهة برمجة تطبيقات Kaggle، انتقل إلى علامة التبويب الحساب في الملف الشخصي لمستخدم Kaggle وحدد إنشاء رمز مميز جديد. سيؤدي هذا الإجراء إلى بدء تنزيل ملف kaggle.json يتضمّن بيانات اعتماد واجهة برمجة التطبيقات الخاصة بك.

في Colab، اختَر الأسرار (🔑) في اللوحة اليمنى وأضف اسم مستخدم Kaggle ومفتاح واجهة برمجة تطبيقات Kaggle. يمكنك تخزين اسم المستخدم الخاص بك تحت الاسم 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، وهو نموذج 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 يتضمّن مليارَي مَعلمة.

ملء التعليمات البرمجية في المنتصف

يستخدم هذا المثال إمكانية التعبئة في المنتصف (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 لملء الرموز استنادًا إلى السياق المحيط. في الخطوة التالية، اطّلِع على دفتر الملاحظات المستنِد إلى الذكاء الاصطناعي (AI) بمساعدة CodeGemma وKerasNLP للحصول على مزيد من الأمثلة حول كيفية استخدام CodeGemma.

راجِع أيضًا بطاقة طراز CodeGemma للاطّلاع على المواصفات الفنية لطُرز CodeGemma.