Fine-Tune Gemma 2 2b باستخدام Keras و LoRA (الجزء الثالث)
تم النشر:
استكمالًا لسلسلة الدروس التعليمية التي تركز على اللغة العربية في التعامل مع النماذج اللغوية الضخمة، في هذا الجزء سنواصل استكشاف كيفية إعادة ضبط نموذج Gemma2-9b على مجموعة بيانات عربية باستخدام مكتبة Keras وKeras_nlp وتقنية LoRA. سنتناول كيفية إعداد البيئة، تحميل النموذج، إجراء التعديلات اللازمة، ثم تدريب النموذج باستخدام التوازي النموذجي لتوزيع معلمات النموذج عبر عدة وحدات تسريع.
Fine-Tune Gemma2 9b باستخدام Keras وLoRA (الجزء الثالث)
نظرة عامة
نموذج Gemma هو مجموعة من النماذج الخفيفة والمطورة التي تم إنشاؤها باستخدام أبحاث وتقنيات مشابهة لتلك المستخدمة في نماذج Google Gemini. يمكن تعديل نماذج Gemma لتلبية احتياجات محددة، ولكن قد يكون من الصعب التعامل مع النماذج الكبيرة جدًا على وحدة تسريع واحدة.
في حالة نموذج Gemma2-9b، قد يكون حجمه كبيرًا جدًا ليتناسب مع وحدة تسريع واحدة مثل Kaggle، مما يجعل عملية التعديل والتنبؤ صعبة. هناك بعض الخيارات المتاحة مثل التكميم لتسهيل الاستدلال، أو استخدام التوازي النموذجي لتوزيع معلمات النموذج عبر عدة وحدات تسريع.
خطوات إعداد البيئة
1. قبول شروط الاستخدام:
- تأكد من قبولك لشروط استخدام Gemma من خلال صفحة Keras Gemma 2.
2. تثبيت المكتبات:
!pip install -q -U keras-nlp tensorflow-text
!pip install -q -U tensorflow-cpu
!pip install -q -U huggingface_hub
!pip install -q -U datasets
3. إعداد Keras مع JAX:
import jax
jax.devices()
import os
os.environ["KERAS_BACKEND"] = "jax"
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "1.0"
تحميل النموذج وتكوين التوزيع
4. تحميل النموذج:
import keras
import keras_nlp
device_mesh = keras.distribution.DeviceMesh(
(1, 8),
["batch", "model"],
devices=keras.distribution.list_devices(),
)
model_dim = "model"
layout_map = keras.distribution.LayoutMap(device_mesh)
layout_map["token_embedding/embeddings"] = (model_dim, None)
layout_map["decoder_block.*attention.*(query|key|value)/kernel"] = (model_dim, None, None)
layout_map["decoder_block.*attention_output/kernel"] = (model_dim, None, None)
layout_map["decoder_block.*ffw_gating.*/kernel"] = (None, model_dim)
layout_map["decoder_block.*ffw_linear/kernel"] = (model_dim, None)
model_parallel = keras.distribution.ModelParallel(
layout_map=layout_map,
batch_dim_name="batch",
)
keras.distribution.set_distribution(model_parallel)
gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma2_9b_en")
5. إجراء اختبار للتنبؤ قبل التعديل:
print(gemma_lm.generate("أنشئ خمسة أسماء مستخدم واقعية بالعربي.", max_length=512))
إعداد مجموعة البيانات
6. تحميل مجموعة بيانات CIDAR:
from datasets import load_dataset
dataset = load_dataset("arbml/CIDAR", split="train")
df = dataset.to_pandas()
df.head(10)
7. تنسيق البيانات:
import json
data = []
for index, row in df.iterrows():
template = "Instruction:\n{instruction}\n\nResponse:\n{output}"
formatted_example = template.format(instruction=row['instruction'], output=row['output'])
data.append(formatted_example)
data = data[:2500]
تفعيل LoRA وتدريب النموذج
8. تفعيل LoRA للنموذج:
gemma_lm.backbone.enable_lora(rank=8)
gemma_lm.preprocessor.sequence_length = 512
gemma_lm.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.Adam(learning_rate=5e-5),
weighted_metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
gemma_lm.summary()
9. بدء التدريب:
gemma_lm.fit(data, epochs=1, batch_size=4)
10. إجراء اختبار للتنبؤ بعد التعديل:
```python
print(gemma_lm.generate("Instruction:\n أنشئ خمسة أسماء مستخدم واقعية بالعربي.\n\nResponse:\n", max_length=512))
```
حفظ النموذج المعدل
11. إعداد الدخول وحفظ النموذج على Hugging Face:
```python
from kaggle_secrets import UserSecretsClient
from huggingface_hub import login
user_secrets = UserSecretsClient()
HF = user_secrets.get_secret("HF_WRITE")
login(token=HF)
gemma_lm.save("hf://Ruqiya/gemma2_9b_en_fine_tuned_arabic_dataset")
```
الخاتمة
بهذا نكون قد أكملنا الجزء الثالث من سلسلة دروسنا حول ضبط نموذج Gemma2-9b باستخدام Keras وLoRA. من خلال هذه الخطوات، تعلمت كيفية تحسين أداء النماذج الكبيرة للبيانات باللغة العربية وتوفير نموذج مخصص يمكنه تنفيذ مهام متعددة. كما تعلمت كيفية رفع النموذج على منصة Hugging Face ليكون متاحًا للتجربة والاستخدام في المشاريع المستقبلية.
يرجى ملاحظة أن هذا الدرس التعليمي يهدف إلى فهم الخطوات الأساسية، ولكن لتحقيق أداء مرضٍ، قد تحتاج إلى خطوات تحسين إضافية.
لمزيد من الاستكشاف، يمكنك الاطلاع على الروابط أدناه.