gemma.cpp هو عبارة عن C++ خفيف الوزن لاستنتاج وقت تشغيل نموذج Gemma.
لمزيد من المعلومات حول Gemma، يُرجى الاطّلاع على بطاقة النموذج. تتوفّر أوزان النماذج، بما في ذلك عناصر gemma.cpp المحدّدة، على Kaggle
لمن هذا المشروع؟
وتمثل محركات الاستنتاج اللغوية الكبيرة الحديثة أنظمة متطورة وغالبًا ما تستخدم إمكانات تتجاوز بيئات تشغيل الشبكة العصبونية التقليدية. مع هذا فرص للبحث والابتكار من خلال التصميم المشترك للنماذج الخوارزميات والعمليات الحسابية منخفضة المستوى. ومع ذلك، هناك فجوة بين بيئات تشغيل استنتاج C++ المرتكزة على النشر، وغير المصممة والتجريب وأطر أبحاث تعلُّم الآلة التي تركز على لغة بايثون، والتي تجري عملية حسابية منخفضة المستوى من خلال التجميع.
يوفر gemma.cpp تنفيذًا بسيطًا لنماذج Gemma 2B و7B، التركيز على البساطة والتوجيه بدلاً من التعميم الكامل. هذا هو التي تم استلهامها من عمليات تنفيذ نموذج C++ المتكامل رأسيًا، مثل ggml, llama.c، و llama.rs
تستهدف gemma.cpp حالات الاستخدام التجريبي والأبحاث، وعلى وجه الخصوص، استكشاف مساحة تصميم خوارزميات الاستنتاج والاستنتاج لوحدة المعالجة المركزية (CPU) باستخدام شريحة SIMD المحمولة من خلال طريق Google السريع المكتبة. من المفترض أن يكون بسيطًا لتضمينه في المشروعات الأخرى مع ويمكن تعديلها بسهولة أيضًا من خلال وحدة تحكُّم أساسية صغيرة تبلغ حوالي 2,000 نقطة. التنفيذ (إلى جانب ما يقارب 4 آلاف حالة متنقلة من المرافق الداعمة).
بالنسبة إلى عمليات النشر على الحافة نحو الإنتاج، ننصح بالنشر العادي. باستخدام أطر عمل بايثون متطورة، مثل JAX وKeras وPyTorch المحولات (جميع أشكال النماذج المختلفة هنا).
نرحّب بمساهمات المنتدى الكبيرة والصغيرة. يتبع هذا المشروع إرشادات منتدى Google للبرامج المفتوحة المصدر
البدء السريع
لإكمال هذا البدء السريع، يجب عليك نسخ أو تنزيل gemma.cpp.
متطلبات النظام
قبل البدء، يجب أن يكون لديك:
- CMake
- أداة تجميع لغة Clang C++
tar
لاستخراج الأرشيفات من Kaggle.
الخطوة 1: الحصول على أوزان النموذج وأداة إنشاء الرموز المميزة من Kaggle
انتقل إلى صفحة نموذج gemma على Kaggle واختَر "أشكال النماذج المختلفة"
تتضمّن القائمة المنسدلة "جيما C++
. On this tab, the
التنوع" ما يلي: الخيارات أدناه. لاحظ أن خيارات ترجيح bfloat16 أعلى دقة، في حين أن خيارات الترجيح 8 بت تتيح أوزان النقاط العائمة المتبدلة إمكانية استنتاج أسرع.
نماذج 2B التي تم ضبطها وفقًا للتعليمات (it
) والمدرّبة مسبقًا (pt
):
اسم الطراز | الوصف |
---|---|
2b-it |
نموذج 2 مليار معلمة وفقًا للتعليمات وهو bfloat16 |
2b-it-sfp |
نموذج من 2 مليار معلمة تم ضبطه على التعليمات، ونقطة عائمة بمعدَّل 8 بت |
2b-pt |
نموذج مدرّب مسبقًا لمليارَي معلمة، bfloat16 |
2b-pt-sfp |
نموذج مدرّب مسبقًا لـ 2 مليار معلمة، ونقطة عائمة بنظام 8 بت |
7 مليار نموذج خاضع للتعليم (it
) ونموذج مدرَّب مسبقًا (pt
):
اسم الطراز | الوصف |
---|---|
7b-it |
نموذج bfloat16 الذي يحتوي على 7 مليار معلَمة لتحسينه. |
7b-it-sfp |
نموذج مضبوط على تعليمات مؤلف من 7 مليار معلَمة، ونقطة عائمة بمعدَّل 8 بت |
7b-pt |
نموذج مدرّب مسبقًا لـ 7 مليار معلَمة، bfloat16 |
7b-pt-sfp |
نموذج مدرّب مسبقًا لـ 7 مليار معلمة، ونقطة عائمة بـ 8 بت |
ملاحظة: ننصحك بالبدء بـ 2b-it-sfp
لبدء استخدام التطبيق.
الخطوة 2: استخراج الملفات
بعد ملء نموذج الموافقة، يجب مواصلة عملية التنزيل لاسترداد
ملف أرشيف tar archive.tar.gz
. يمكنك استخراج الملفات من archive.tar.gz
(يمكن أن يؤدي هذا الإجراء إلى
بضع دقائق):
tar -xf archive.tar.gz
يُفترض أن يؤدي ذلك إلى إنشاء ملف يحتوي على ترجيحات النموذج مثل 2b-it-sfp.sbs
ملف أداة إنشاء الرموز المميّزة (tokenizer.spm
). قد ترغب في نقل هذه الملفات إلى
موقع الدليل الملائم (مثل الإصدار/ الدليل في هذا المستودع).
الخطوة 3: إنشاء
يستخدم نظام التصميم CMake. لبناء استنتاج جوهري
وقت التشغيل، وإنشاء دليل إنشاء وإنشاء ملفات الإصدار باستخدام cmake
من دليل المشروع ذي المستوى الأعلى:
(cd build && cmake ..)
بعد ذلك، شغِّل make
لإنشاء ملف ./gemma
القابل للتنفيذ:
cd build
make -j [number of parallel threads to use] gemma
مثلاً: make -j 8 gemma
إذا نجح ذلك، فيُفترض أن يكون لديك الآن
ملف gemma
قابل للتنفيذ في الدليل build/
.
الخطوة 4: التشغيل
يمكنك الآن تشغيل gemma
من داخل دليل build/
.
تتضمن الدالة gemma
الوسيطات المطلوبة التالية:
الوسيطة | الوصف | مثال على القيمة |
---|---|---|
--model |
نوع النموذج. | 2b-it و2b-pt و7b-it و7b-pt ... (انظر أعلاه) |
--compressed_weights |
ملف الأوزان المضغوطة | 2b-it-sfp.sbs ، ... (انظر أعلاه) |
--tokenizer |
اسم ملف أداة إنشاء الرموز المميّزة | tokenizer.spm |
تم استدعاء gemma
على أنّه:
./gemma \
--tokenizer [tokenizer file] \
--compressed_weights [compressed weights file] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt]
مثال على استدعاء للإعدادات التالية:
- ملف الأوزان المضغوطة
2b-it-sfp.sbs
(نموذج 2B المضبوط على هيئة تعليمات، 8 بت النقطة العائمة). - ملف الترميز المميّز
tokenizer.spm
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
الاستخدام
لدى gemma
أوضاع استخدام مختلفة، يتم التحكّم فيها من خلال علامة الإسهاب.
جميع أوضاع الاستخدام تفاعلية، ما يؤدي إلى إنشاء النص عند إدخال سطر جديد.
الإسهاب | وضع الاستخدام | التفاصيل |
---|---|---|
--verbosity 0 |
مبسَّط | طباعة مخرجات إنشاء المحتوى فقط مناسبة كأداة واجهة سطر الأوامر. |
--verbosity 1 |
تلقائي | واجهة مستخدم عادية موجَّهة للمستخدمين |
--verbosity 2 |
تفصيلي | يعرض معلومات إضافية عن المطوِّر وتصحيح الأخطاء. |
تطبيق Terminal التفاعلي
يتم ضبط الإسهاب تلقائيًا على 1، ما يؤدي إلى عرض عنصر تفاعلي يستند إلى الوحدة الطرفية.
عند استدعاء gemma
باستخدام الوسيطات المطلوبة:
$ ./gemma [...]
__ _ ___ _ __ ___ _ __ ___ __ _ ___ _ __ _ __
/ _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| | __/ | | | | | | | | | | (_| || (__| |_) | |_) |
\__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
__/ | | | | |
|___/ |_| |_|
tokenizer : tokenizer.spm
compressed_weights : 2b-it-sfp.sbs
model : 2b-it
weights : [no path specified]
max_tokens : 3072
max_generated_tokens : 2048
*Usage*
Enter an instruction and press enter (%Q quits).
*Examples*
- Write an email to grandma thanking her for the cookies.
- What are some historical attractions to visit around Massachusetts?
- Compute the nth fibonacci number in javascript.
- Write a standup comedy bit about WebGPU programming.
> What are some outdoorsy places to visit around Boston?
[ Reading prompt ] .....................
**Boston Harbor and Islands:**
* **Boston Harbor Islands National and State Park:** Explore pristine beaches, wildlife, and maritime history.
* **Charles River Esplanade:** Enjoy scenic views of the harbor and city skyline.
* **Boston Harbor Cruise Company:** Take a relaxing harbor cruise and admire the city from a different perspective.
* **Seaport Village:** Visit a charming waterfront area with shops, restaurants, and a seaport museum.
**Forest and Nature:**
* **Forest Park:** Hike through a scenic forest with diverse wildlife.
* **Quabbin Reservoir:** Enjoy boating, fishing, and hiking in a scenic setting.
* **Mount Forest:** Explore a mountain with breathtaking views of the city and surrounding landscape.
...
الاستخدام كأداة سطر أوامر
لاستخدام gemma
القابل للتنفيذ كأداة سطر أوامر، قد يكون من المفيد
إنشاء اسم مستعار لـ gemma.cpp باستخدام الوسيطات المحددة بالكامل:
alias gemma2b="~/gemma.cpp/build/gemma -- --tokenizer
~/gemma.cpp/build/tokenizer.spm --compressed_weights
~/gemma.cpp/build/2b-it-sfp.sbs --model 2b-it --verbosity 0"
استبدال المسارات أعلاه بمساراتك الخاصة إلى النموذج ومسارات أداة إنشاء الرموز المميّزة من عملية التنزيل.
في ما يلي مثال على طلب gemma
باستخدام إدخال مقتطَع (باستخدام
اسم مستعار gemma2b
كما هو موضح أعلاه):
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
ملاحظة: إنّ استخدام واجهة سطر الأوامر gemma.cpp تجريبي ويجب أن يأخذ طول السياق. القيود في الاعتبار.
يجب أن يبدو ناتج الأمر أعلاه كما يلي:
$ cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code do: " | gemma2b
[ Reading prompt ] ......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
The code defines two C++ structs, `ConfigGemma7B` and `ConfigGemma2B`, which are used for configuring a deep learning model.
**ConfigGemma7B**:
* `seq_len`: Stores the length of the sequence to be processed. It's set to 7168.
* `vocab_size`: Stores the size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 28.
* `dim_model`: Dimension of the model's internal representation. It's set to 3072.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 3072 / 2.
**ConfigGemma2B**:
* `seq_len`: Stores the length of the sequence to be processed. It's also set to 7168.
* `vocab_size`: Size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 18.
* `dim_model`: Dimension of the model's internal representation. It's set to 2048.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 2048 / 2.
These structs are used to configure a deep learning model with specific parameters for either Gemma7B or Gemma2B architecture.