gemma.cpp یک پیادهسازی زمان اجرا استنتاج C++ خالص از مدل Gemma است.
برای اطلاعات بیشتر درباره Gemma، به مدل کارت مراجعه کنید. وزنهای مدل، از جمله مصنوعات خاص gemma.cpp، در Kaggle موجود است.
این پروژه برای چه کسانی است؟
موتورهای استنتاج LLM مدرن، سیستمهای پیچیدهای هستند که اغلب با قابلیتهای سفارشی فراتر از زمانهای اجرا شبکه عصبی سنتی گسترش مییابند. با این کار فرصت هایی برای تحقیق و نوآوری از طریق طراحی مشترک الگوریتم های سطح بالا و محاسبات سطح پایین به وجود می آید. با این حال، بین زمانهای اجرا استنتاج C++ مبتنی بر استقرار، که برای آزمایش طراحی نشدهاند، و چارچوبهای تحقیقاتی ML پایتون محور، که محاسبات سطح پایین را از طریق کامپایل انتزاعی میکنند، فاصله وجود دارد.
gemma.cpp یک پیادهسازی مینیمالیستی از مدلهای Gemma 2B و 7B را ارائه میکند که به جای کلیت کامل، بر سادگی و مستقیم بودن تمرکز دارد. این از پیادهسازیهای مدل C++ یکپارچه عمودی مانند ggml ، llama.c و llama.rs الهام گرفته شده است.
gemma.cpp آزمایش ها و موارد استفاده تحقیقاتی را هدف قرار می دهد - به ویژه، کاوش فضای طراحی الگوریتم های استنتاج و استنتاج CPU با استفاده از SIMD قابل حمل از طریق کتابخانه Google Highway . در نظر گرفته شده است که جاسازی آن در پروژه های دیگر با حداقل وابستگی ها ساده باشد و همچنین به راحتی با یک هسته کوچک ~2K LoC (همراه با ~4K LoC از ابزارهای پشتیبانی) قابل تغییر است.
برای استقرار لبه های تولید محور، ما مسیرهای استقرار استاندارد را با استفاده از چارچوب های بالغ پایتون مانند JAX، Keras، PyTorch و Transformers توصیه می کنیم ( همه تغییرات مدل در اینجا ).
مشارکت های کوچک و بزرگ جامعه استقبال می شود. این پروژه از دستورالعمل های انجمن منبع باز Google پیروی می کند.
شروع سریع
برای تکمیل این شروع سریع، باید gemma.cpp را شبیه سازی یا دانلود کنید.
سیستم مورد نیاز
قبل از شروع، باید نصب کرده باشید:
- CMake
- کامپایلر Clang C++
-
tar
برای استخراج آرشیو از Kaggle.
مرحله 1: وزن مدل و توکنایزر را از Kaggle دریافت کنید
از صفحه مدل gemma در Kaggle دیدن کنید و «Model Variations» را انتخاب کنید
جما C++
. On this tab, the
منوی کشویی Variation شامل گزینه های زیر است. توجه داشته باشید که گزینههای وزن bfloat16 از وفاداری بالاتری برخوردار هستند، در حالی که وزنهای ممیز شناور سوئیچینگ ۸ بیتی استنتاج سریعتری را امکانپذیر میکنند.
2B مدلهای تنظیمشده دستورالعمل ( it
) و از پیش آموزشدیده ( pt
):
نام مدل | شرح |
---|---|
2b-it | مدل تنظیم شده با دستورالعمل 2 میلیارد پارامتر، bfloat16 |
2b-it-sfp | مدل تنظیم شده با دستورالعمل 2 میلیارد پارامتر، نقطه شناور سوئیچ 8 بیتی |
2b-pt | مدل از پیش آموزش داده شده 2 میلیارد پارامتر bfloat16 |
2b-pt-sfp | مدل از پیش آموزش داده شده 2 میلیارد پارامتر، نقطه شناور سوئیچ 8 بیتی |
مدلهای تنظیمشده دستورالعمل ۷B ( it
) و از پیش آموزشدیده ( pt
):
نام مدل | شرح |
---|---|
7b-it | مدل تنظیم شده با دستورالعمل 7 میلیارد پارامتر، bfloat16 |
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 استفاده می کند. برای ساخت زمان اجرا استنتاج gemma، یک پوشه ساخت ایجاد کنید و فایل های ساخت را با استفاده از 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 | حداقل | فقط خروجی تولید چاپ می کند. مناسب به عنوان یک ابزار CLI. |
--verbosity 1 | پیش فرض | رابط کاربری ترمینال استاندارد رو به روی کاربر. |
--verbosity 2 | به تفصیل | اطلاعات برنامهنویس و اشکالزدایی اضافی را نشان میدهد. |
برنامه ترمینال تعاملی
به طور پیشفرض، verbosity روی 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
توجه : استفاده از CLI از 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.