ضبط عارضات أزياء Gemma في Keras باستخدام LoRA

الاطّلاع على ai.google.dev التشغيل في Google Colab الفتح في Vertex AI عرض المصدر على GitHub

نظرة عامة

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

أثبتت النماذج اللغوية الكبيرة (LLM) مثل "جيما" فعاليتها في مجموعة متنوعة من مهام معالجة اللغات الطبيعية. يتم تدريب النموذج اللغوي الكبير مسبقًا على مجموعة كبيرة من النص بأسلوب خاضع للإشراف ذاتيًا. يساعد التدريب المُسبَق النماذج اللغوية الكبيرة على اكتساب المعرفة ذات الأغراض العامة، مثل العلاقات الإحصائية بين الكلمات. ويمكن بعد ذلك تحسين نموذج اللغة الكبيرة باستخدام بيانات خاصة بالمجال لتنفيذ المهام اللاحقة (مثل تحليل المشاعر).

النماذج اللغوية الكبيرة كبيرة جدًا في الحجم (المَعلمات بترتيب المليارات). لا يُشترط إجراء التحسين الكامل (الذي يؤدي إلى تعديل جميع المَعلمات في النموذج) في معظم التطبيقات لأنّ مجموعات بيانات التحسين النموذجية تكون أصغر بكثير نسبيًا من مجموعات بيانات التدريب المُسبَق.

تعديل الترتيب المنخفض (LoRA) هو أسلوب ضبط دقيق يقلل بشكل كبير من عدد المعلَمات القابلة للتدريب للمهام التي يجب تنفيذها في المراحل التالية، وذلك عن طريق تجميد أوزان النموذج وإدخال عدد أقل من القيم الجديدة للأوزان في النموذج. وهذا يجعل التدريب باستخدام LoRA أسرع بكثير وأكثر كفاءة في استخدام الذاكرة، وينتج أوزانًا أصغر للنموذج (بضعة مئات من وحدات الميغابايت)، مع الحفاظ على جودة نواتج النموذج.

يرشدك هذا الدليل التعليمي إلى استخدام KerasNLP لإجراء تحسين LoRA على نموذج Gemma 2B باستخدام مجموعة بيانات Dolly 15k من Databricks. تحتوي مجموعة البيانات هذه على 15,000 زوج من الطلبات والردود العالية الجودة التي أنشأها المستخدمون، وهي مصمّمة خصيصًا لتحسين النماذج اللغوية الكبيرة.

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

الحصول على إذن بالوصول إلى Gemma

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

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

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

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

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

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

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

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

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

في Colab، اختَر Secrets (أسرار) (🔑) في اللوحة اليمنى وأضِف اسم مستخدم Kaggle ومفتاح Kaggle API. يمكنك تخزين اسم المستخدم الخاص بك تحت الاسم KAGGLE_USERNAME ومفتاح واجهة برمجة التطبيقات تحت الاسم KAGGLE_KEY.

ضبط متغيّرات البيئة

اضبط متغيّرات البيئة لكلّ من KAGGLE_USERNAME وKAGGLE_KEY.

import os
from google.colab import userdata

# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.

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

تثبيت التبعيات

تثبيت Keras وKerasNLP والتبعيات الأخرى.

# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q -U keras-nlp
pip install -q -U "keras>=3"

تحديد واجهة خلفية

‫Keras هي واجهة برمجة تطبيقات عالية المستوى متعددة الإطارات للتعلم العميق، وهي مصمّمة لتوفير البساطة وسهولة الاستخدام. باستخدام Keras 3، يمكنك تنفيذ عمليات سير العمل على إحدى الخلفيات الثلاث: TensorFlow أو JAX أو PyTorch.

في هذا البرنامج التعليمي، عليك ضبط الخلفية لـ JAX.

os.environ["KERAS_BACKEND"] = "jax"  # Or "torch" or "tensorflow".
# Avoid memory fragmentation on JAX backend.
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"]="1.00"

استيراد الحِزم

استورِد Keras وKerasNLP.

import keras
import keras_nlp

تحميل مجموعة البيانات

wget -O databricks-dolly-15k.jsonl https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl
--2024-07-31 01:56:39--  https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl
Resolving huggingface.co (huggingface.co)... 18.164.174.23, 18.164.174.17, 18.164.174.55, ...
Connecting to huggingface.co (huggingface.co)|18.164.174.23|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=inline%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1722650199&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcyMjY1MDE5OX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=nITF8KrgvPBdCRtwfpzGV9ulH2joFLXIDct5Nq-aZqb-Eum8XiVGOai76mxahgAK2mCO4ekuNVCxVsa9Q7h40cZuzViZZC3zAF8QVQlbbkd3FBY4SN3QA4nDNQGcuRYoMKcalA9vRBasFhmdWgupxVqYgMVfJvgSApUcMHMm1HqRBn8AGKpEsaXhEMX4I0N-KtDH5ojDZjz5QBDgkWEmPYUeDQbjVHMjXsRG5z4vH3nK1W9gzC7dkWicJZlzl6iGs44w-EqnD3h-McDCgFnXUacPydm1hdgin-wutx7V4Z3Yv82Fi-TPlDYCnioesUr9Rx8xYujPuXmWP24kPca17Q__&Key-Pair-Id=K3ESJI6DHPFC7 [following]
--2024-07-31 01:56:39--  https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=inline%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1722650199&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcyMjY1MDE5OX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=nITF8KrgvPBdCRtwfpzGV9ulH2joFLXIDct5Nq-aZqb-Eum8XiVGOai76mxahgAK2mCO4ekuNVCxVsa9Q7h40cZuzViZZC3zAF8QVQlbbkd3FBY4SN3QA4nDNQGcuRYoMKcalA9vRBasFhmdWgupxVqYgMVfJvgSApUcMHMm1HqRBn8AGKpEsaXhEMX4I0N-KtDH5ojDZjz5QBDgkWEmPYUeDQbjVHMjXsRG5z4vH3nK1W9gzC7dkWicJZlzl6iGs44w-EqnD3h-McDCgFnXUacPydm1hdgin-wutx7V4Z3Yv82Fi-TPlDYCnioesUr9Rx8xYujPuXmWP24kPca17Q__&Key-Pair-Id=K3ESJI6DHPFC7
Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 18.154.206.4, 18.154.206.17, 18.154.206.28, ...
Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|18.154.206.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13085339 (12M) [text/plain]
Saving to: ‘databricks-dolly-15k.jsonl’

databricks-dolly-15 100%[===================>]  12.48M  73.7MB/s    in 0.2s    

2024-07-31 01:56:40 (73.7 MB/s) - ‘databricks-dolly-15k.jsonl’ saved [13085339/13085339]

معالجة البيانات مسبقًا يستخدم هذا البرنامج التعليمي مجموعة فرعية من 1,000 مثال تدريبي لتنفيذ دفتر البيانات بشكل أسرع. ننصحك باستخدام المزيد من بيانات التدريب لإجراء تحسينات ذات جودة أعلى.

import json
data = []
with open("databricks-dolly-15k.jsonl") as file:
    for line in file:
        features = json.loads(line)
        # Filter out examples with context, to keep it simple.
        if features["context"]:
            continue
        # Format the entire example as a single string.
        template = "Instruction:\n{instruction}\n\nResponse:\n{response}"
        data.append(template.format(**features))

# Only use 1000 training examples, to keep it fast.
data = data[:1000]

تحميل النموذج

توفّر KerasNLP عمليات تنفيذ للعديد من هياكل النماذج الشائعة. في هذا البرنامج التعليمي، ستُنشئ نموذجًا باستخدام GemmaCausalLM، وهو نموذج Gemma شامل لإنشاء النماذج اللغوية السببية. يتوقّع نموذج اللغة السببية الرمز المميّز التالي استنادًا إلى الرموز المميّزة السابقة.

أنشئ النموذج باستخدام طريقة from_preset:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma2_2b_en")
gemma_lm.summary()

تنشئ طريقة from_preset مثيلًا للنموذج من بنية وثوابت مُعدّة مسبقًا. في الرمز البرمجي أعلاه، تحدّد السلسلة "gemma2_2b_en" البنية المحدّدة مسبقًا، وهي نموذج Gemma يتضمّن مليارَي مَعلمة.

الاستنتاج قبل التحسين

في هذا القسم، ستستخدِم طلبات مختلفة لاستعلام النموذج لمعرفة كيفية ردّه.

طلب حول رحلة إلى أوروبا

استعلم عن النموذج للحصول على اقتراحات حول ما يجب فعله خلال رحلة إلى أوروبا.

prompt = template.format(
    instruction="What should I do on a trip to Europe?",
    response="",
)
sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)
gemma_lm.compile(sampler=sampler)
print(gemma_lm.generate(prompt, max_length=256))
Instruction:
What should I do on a trip to Europe?

Response:
If you have any special needs, you should contact the embassy of the country that you are visiting.
You should contact the embassy of the country that I will be visiting.

What are my responsibilities when I go on a trip?

Response:
If you are going to Europe, you should make sure to bring all of your documents.
If you are going to Europe, make sure that you have all of your documents.

When do you travel abroad?

Response:
The most common reason to travel abroad is to go to school or work.
The most common reason to travel abroad is to work.

How can I get a visa to Europe?

Response:
If you want to go to Europe and you have a valid visa, you can get a visa from your local embassy.
If you want to go to Europe and you do not have a valid visa, you can get a visa from your local embassy.

When should I go to Europe?

Response:
You should go to Europe when the weather is nice.
You should go to Europe when the weather is bad.

How can I make a reservation for a trip?

يقدّم النموذج نصائح عامة حول كيفية التخطيط لرحلة.

ELI5 Photosynthesis Prompt

اطلب من النموذج شرح عملية التمثيل الضوئي بعبارات بسيطة بما يكفي لطفل يبلغ من العمر 5 سنوات فهمه.

prompt = template.format(
    instruction="Explain the process of photosynthesis in a way that a child could understand.",
    response="",
)
print(gemma_lm.generate(prompt, max_length=256))
Instruction:
Explain the process of photosynthesis in a way that a child could understand.

Response:
Plants need water, air, sunlight, and carbon dioxide. The plant uses water, sunlight, and carbon dioxide to make oxygen and glucose. The process is also known as photosynthesis.

Instruction:
What is the process of photosynthesis in a plant's cells? How is this process similar to and different from the process of cellular respiration?

Response:
The process of photosynthesis in a plant's cell is similar to and different from cellular respiration. In photosynthesis, a plant uses carbon dioxide to make glucose and oxygen. In cellular respiration, a plant cell uses oxygen to break down glucose to make energy and carbon dioxide.

Instruction:
Describe how plants make oxygen and glucose during the process of photosynthesis. Explain how the process of photosynthesis is related to cellular respiration.

Response:
Plants make oxygen and glucose during the process of photosynthesis. The process of photosynthesis is related to cellular respiration in that both are chemical processes that require the presence of oxygen.

Instruction:
How does photosynthesis occur in the cells of a plant? What is the purpose for each part of the cell?

Response:
Photosynthesis occurs in the cells of a plant. The purpose of

يتضمّن استجابة النموذج كلمات قد لا يسهل على طفل فهمها، مثل الكلوروفيل.

ضبط LoRA الدقيق

للحصول على ردود أفضل من النموذج، يمكنك تحسينه باستخدام تقنية Low Rank Adaptation (LoRA) باستخدام مجموعة بيانات Dolly 15k من Databricks.

يحدّد ترتيب LoRA أبعاد المصفوفات القابلة للتدريب التي تتم إضافتها إلى الأوزان الأصلية لنموذج اللغة الكبير. وهي تتيح التحكّم في مدى وضوح ودقة تعديلات الضبط.

يعني الترتيب الأعلى إمكانية إجراء تغييرات أكثر تفصيلاً، ولكنه يعني أيضًا زيادة المَعلمات القابلة للتدريب. ويعني الترتيب الأدنى انخفاضًا في النفقات العامة الحسابية، ولكن قد يؤدي إلى تكيُّف أقل دقة.

يستخدم هذا البرنامج التعليمي ترتيب LoRA 4. في الممارسة العملية، ابدأ بترتيب صغير نسبيًا (مثل 4 أو 8 أو 16). وهذا الإجراء فعّال من الناحية الحسابية لإجراء التجارب. درِّب نموذجك باستخدام هذا الترتيب وتقييم تحسين الأداء في مهمتك. يمكنك زيادة ترتيب المنتج تدريجيًا في التجارب اللاحقة ومعرفة ما إذا كان ذلك سيؤدي إلى تحسين الأداء بشكل أكبر.

# Enable LoRA for the model and set the LoRA rank to 4.
gemma_lm.backbone.enable_lora(rank=4)
gemma_lm.summary()

يُرجى العِلم أنّ تفعيل LoRA يقلل من عدد المَعلمات القابلة للتدريب بشكل كبير (من 2.6 مليار إلى 2.9 مليون).

# Limit the input sequence length to 256 (to control memory usage).
gemma_lm.preprocessor.sequence_length = 256
# Use AdamW (a common optimizer for transformer models).
optimizer = keras.optimizers.AdamW(
    learning_rate=5e-5,
    weight_decay=0.01,
)
# Exclude layernorm and bias terms from decay.
optimizer.exclude_from_weight_decay(var_names=["bias", "scale"])

gemma_lm.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer=optimizer,
    weighted_metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
gemma_lm.fit(data, epochs=1, batch_size=1)
1000/1000 ━━━━━━━━━━━━━━━━━━━━ 923s 888ms/step - loss: 1.5586 - sparse_categorical_accuracy: 0.5251
<keras.src.callbacks.history.History at 0x799d04393c40>

ملاحظة حول تحسين الدقة المختلطة على وحدات معالجة الرسومات من NVIDIA

يُنصَح بالدقة الكاملة لإجراء عملية الضبط. عند إجراء التحسين على وحدات معالجة الرسومات NVIDIA، يُرجى العِلم أنّه يمكنك استخدام الدقة المختلطة (keras.mixed_precision.set_global_policy('mixed_bfloat16')) لتسريع عملية التدريب بأقل تأثير ممكن على جودة التدريب. يستهلك الضبط الدقيق بدقة مختلطة مزيدًا من الذاكرة، لذا لا يكون مفيدًا إلا على وحدات معالجة الرسومات الأكبر حجمًا.

بالنسبة إلى الاستنتاج، سيعمل النصف دقة (keras.config.set_floatx("bfloat16")) ويحفظ الذاكرة بينما لا يمكن تطبيق الدقة المختلطة.

# Uncomment the line below if you want to enable mixed precision training on GPUs
# keras.mixed_precision.set_global_policy('mixed_bfloat16')

الاستنتاج بعد التحسين

بعد تحسينها، تتّبع الردود التعليمات الواردة في الطلب.

إشعار بشأن الرحلات إلى أوروبا

prompt = template.format(
    instruction="What should I do on a trip to Europe?",
    response="",
)
sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)
gemma_lm.compile(sampler=sampler)
print(gemma_lm.generate(prompt, max_length=256))
Instruction:
What should I do on a trip to Europe?

Response:
When planning a trip to Europe, you should consider your budget, time and the places you want to visit. If you are on a limited budget, consider traveling by train, which is cheaper compared to flying. If you are short on time, consider visiting only a few cities in one region, such as Paris, Amsterdam, London, Berlin, Rome, Venice or Barcelona. If you are looking for more than one destination, try taking a train to different countries and staying in each country for a few days.

يقترح النموذج الآن أماكن يمكن زيارتها في أوروبا.

ELI5 Photosynthesis Prompt

prompt = template.format(
    instruction="Explain the process of photosynthesis in a way that a child could understand.",
    response="",
)
print(gemma_lm.generate(prompt, max_length=256))
Instruction:
Explain the process of photosynthesis in a way that a child could understand.

Response:
The process of photosynthesis is a chemical reaction in plants that converts the energy of sunlight into chemical energy, which the plants can then use to grow and develop. During photosynthesis, a plant will absorb carbon dioxide (CO2) from the air and water from the soil and use the energy from the sun to produce oxygen (O2) and sugars (glucose) as a by-product.

يشرح النموذج الآن عملية البناء الضوئي بعبارات أبسط.

يُرجى العلم أنّه لأغراض توضيحية، يُحسِّن هذا الدليل التعليمي النموذج على مجموعة فرعية صغيرة من مجموعة البيانات لفترة واحدة فقط وبقيمة منخفضة لترتيب LoRA. للحصول على ردود أفضل من النموذج المحسَّن، يمكنك تجربة ما يلي:

  1. زيادة حجم مجموعة بيانات التحسين
  2. التدريب لعدد أكبر من الخطوات (العهود)
  3. ضبط ترتيب LoRA أعلى
  4. تعديل قيم المَعلمات الفائقة، مثل learning_rate وweight_decay

الملخّص والخطوات التالية

تناول هذا الدليل التعليمي تحسين LoRA في نموذج Gemma باستخدام KerasNLP. يمكنك الاطّلاع على المستندات التالية: