الاستنتاج من "جيما" باستخدام JAX وFlax

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

نظرة عامة

"جيما" هي عائلة من النماذج اللغوية الكبيرة والبسيطة والمتطوّرة، استنادًا إلى أبحاث وتكنولوجيا Google DeepMind Gemini. يوضح هذا البرنامج التعليمي كيفية إجراء نموذج عينة أو استنتاج أساسي باستخدام نموذج Gemma 2B Instructer باستخدام مكتبة gemma في Google DeepMind التي تمت كتابتها باستخدام JAX (مكتبة حوسبة رقمية عالية الأداء)، وFlax (مكتبة الشبكة العصبونية المستندة إلى JAX)، وOrbax (مكتبة تستند إلى JAX للتدريب/أداة للرمز المميّز/TokenPaX، SentencePiece على الرغم من عدم استخدام الكتان مباشرة في هذا الدفتر، إلا أنه تم استخدام فلاكس لإنشاء جيما.

يمكن تشغيل هذا الكمبيوتر الدفتري باستخدام Google Colab مع وحدة معالجة الرسومات T4 المجانية (انتقِل إلى تعديل > إعدادات دفاتر الملاحظات > ضِمن مسرِّع الأجهزة، اختَر وحدة معالجة رسومات T4).

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

1- إعداد وصول جيما إلى Kaggle

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

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

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

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

اضبط متغيّرات البيئة للسمة KAGGLE_USERNAME وKAGGLE_KEY. عندما تظهر لك رسالة "هل تريد منح إمكانية الوصول؟"، عليك الموافقة على منح الإذن بالوصول السري.

import os
from google.colab import userdata # `userdata` is a Colab API.

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

3- تثبيت مكتبة "gemma"

يركز دفتر الملاحظات هذا على استخدام وحدة معالجة رسومات مجانية Colab. لتفعيل ميزة "تسريع الأجهزة"، انقر على تعديل > إعدادات دفتر الملاحظات > اختَر وحدة معالجة الرسومات T4 > حفظ.

بعد ذلك، عليك تثبيت مكتبة Google DeepMind gemma من github.com/google-deepmind/gemma. إذا ظهرت لك رسالة خطأ بشأن "برنامج تعيين التبعية لـ pip"، يمكنك عادةً تجاهله.

pip install -q git+https://github.com/google-deepmind/gemma.git

تحميل نموذج جيما وإعداده

  1. حمِّل نموذج Gemma باستخدام kagglehub.model_download، والذي يأخذ ثلاث وسيطات:
  • handle: اسم معرِّف النموذج من Kaggle
  • path: (سلسلة اختيارية) المسار المحلي
  • force_download: (قيمة منطقية اختيارية) تفرض إعادة تنزيل النموذج
GEMMA_VARIANT = '2b-it' # @param ['2b', '2b-it'] {type:"string"}
import kagglehub

GEMMA_PATH = kagglehub.model_download(f'google/gemma/flax/{GEMMA_VARIANT}')
Downloading from https://www.kaggle.com/api/v1/models/google/gemma/flax/2b-it/2/download...
100%|██████████| 3.67G/3.67G [00:35<00:00, 110MB/s]
Extracting model files...
print('GEMMA_PATH:', GEMMA_PATH)
GEMMA_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2
  1. تحقَّق من موقع قيم ترجيح النموذج وأداة إنشاء الرموز المميّزة، ثم حدِّد متغيرات المسار. سيكون دليل أداة إنشاء الرموز المميّزة في الدليل الرئيسي الذي نزّلت فيه النموذج، بينما ستكون قيم الترجيح للنموذج في دليل فرعي. مثال:
  • سيكون ملف tokenizer.model باللغة /LOCAL/PATH/TO/gemma/flax/2b-it/2).
  • ستكون النقطة المرجعية للنموذج في /LOCAL/PATH/TO/gemma/flax/2b-it/2/2b-it).
CKPT_PATH = os.path.join(GEMMA_PATH, GEMMA_VARIANT)
TOKENIZER_PATH = os.path.join(GEMMA_PATH, 'tokenizer.model')
print('CKPT_PATH:', CKPT_PATH)
print('TOKENIZER_PATH:', TOKENIZER_PATH)
CKPT_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2/2b-it
TOKENIZER_PATH: /root/.cache/kagglehub/models/google/gemma/flax/2b-it/2/tokenizer.model

تنفيذ أخذ العينات/الاستنتاج

  1. يمكنك تحميل نقطة اختيار نموذج Gemma وتنسيقها باستخدام الطريقة gemma.params.load_and_format_params:
from gemma import params as params_lib

params = params_lib.load_and_format_params(CKPT_PATH)
  1. تحميل أداة إنشاء الرموز المميّزة لـ Gemma التي تم إنشاؤها باستخدام sentencepiece.SentencePieceProcessor:
import sentencepiece as spm

vocab = spm.SentencePieceProcessor()
vocab.Load(TOKENIZER_PATH)
True
  1. لتحميل الإعدادات الصحيحة تلقائيًا من نقطة مراجعة نموذج Gemma، استخدِم gemma.transformer.TransformerConfig. الوسيطة cache_size هي عدد الخطوات الزمنية في ذاكرة التخزين المؤقت Transformer لـ Gemma. بعد ذلك، يمكنك إنشاء مثيل لنموذج Gemma على أنّه transformer باستخدام gemma.transformer.Transformer (الذي يتم اكتسابه من flax.linen.Module).
from gemma import transformer as transformer_lib

transformer_config = transformer_lib.TransformerConfig.from_params(
    params=params,
    cache_size=1024
)

transformer = transformer_lib.Transformer(transformer_config)
  1. أنشِئ sampler باستخدام gemma.sampler.Sampler أعلى نقطة تفتيش/أوزان نموذج Gemma وأداة إنشاء الرمز المميّز:
from gemma import sampler as sampler_lib

sampler = sampler_lib.Sampler(
    transformer=transformer,
    vocab=vocab,
    params=params['transformer'],
)
  1. كتابة طلب باللغة input_batch وإجراء استنتاج يمكنك تعديل total_generation_steps (عدد الخطوات التي يتم إجراؤها عند إنشاء استجابة — يستخدم هذا المثال 100 للاحتفاظ بذاكرة المضيف).
prompt = [
    "\n# What is the meaning of life?",
]

reply = sampler(input_strings=prompt,
                total_generation_steps=100,
                )

for input_string, out_string in zip(prompt, reply.text):
    print(f"Prompt:\n{input_string}\nOutput:\n{out_string}")
Prompt:

# What is the meaning of life?
Output:


The question of what the meaning of life is one that has occupied the minds of philosophers, theologians, and individuals for centuries. There is no single, universally accepted answer, but there are many different perspectives on this complex and multifaceted question.

**Some common perspectives on the meaning of life include:**

* **Biological perspective:** From a biological standpoint, the meaning of life is to survive and reproduce.
* **Existential perspective:** Existentialists believe that life is not inherently meaningful and that
  1. (اختياري) قم بتشغيل هذه الخلية لتحرير الذاكرة إذا كنت قد أكملت دفتر الملاحظات وتريد تجربة مطالبة أخرى. بعد ذلك، يمكنك إنشاء مثيل لعلامة sampler مرّة أخرى في الخطوة 3 وتخصيص الطلب وتشغيله في الخطوة 4.
del sampler

مزيد من المعلومات