gemma.cpp — это облегченная реализация модели Gemma во время выполнения на чистом C++.
Дополнительную информацию о Джемме смотрите в карточке модели . Веса моделей, включая специфические артефакты gemma.cpp, доступны на Kaggle .
Для кого этот проект?
Современные механизмы вывода LLM представляют собой сложные системы, часто со специальными возможностями, выходящими за рамки традиционных сред работы нейронных сетей. Это открывает возможности для исследований и инноваций посредством совместной разработки алгоритмов высокого уровня и вычислений низкого уровня. Однако существует разрыв между средами выполнения вывода C++, ориентированными на развертывание, которые не предназначены для экспериментов, и исследовательскими средами машинного обучения, ориентированными на Python, которые абстрагируют низкоуровневые вычисления посредством компиляции.
gemma.cpp предоставляет минималистскую реализацию моделей Gemma 2B и 7B, уделяя особое внимание простоте и прямоте, а не полной универсальности. Это вдохновлено реализациями вертикально интегрированных моделей C++, такими как ggml , llama.c и llama.rs .
gemma.cpp предназначен для экспериментов и исследований, в частности, для изучения пространства разработки алгоритмов вывода ЦП и использования портативного SIMD через библиотеку Google Highway . Предполагается, что его будет легко встраивать в другие проекты с минимальными зависимостями, а также легко модифицировать с помощью небольшой базовой реализации LoC размером ~ 2 КБ (вместе с LoC ~ 4 КБ вспомогательных утилит).
Для периферийного развертывания, ориентированного на производство, мы рекомендуем стандартные пути развертывания с использованием зрелых платформ Python, таких как JAX, Keras, PyTorch и Transformers ( все варианты моделей здесь ).
Большой и маленький вклад сообщества приветствуются. Этот проект соответствует принципам сообщества открытого исходного кода Google .
Быстрый старт
Чтобы выполнить это краткое руководство, необходимо клонировать или загрузить gemma.cpp .
Системные Требования
Перед запуском у вас должно быть установлено:
- CMake
- Компилятор Clang C++
-
tar
для извлечения архивов из Kaggle.
Шаг 1. Получите веса модели и токенизатор от Kaggle.
Посетите страницу модели Gemma на Kaggle и выберите «Вариации модели».
Джемма С++
. On this tab, the
раскрывающийся список «Вариант» включает следующие параметры ниже. Обратите внимание, что параметры весов bfloat16 обеспечивают более высокую точность, а 8-битные переключаемые веса с плавающей запятой обеспечивают более быстрый вывод.
2B модели, настроенные по инструкциям ( it
) и предварительно обученные ( pt
):
Название модели | Описание |
---|---|
2b-it | Модель, настроенная с помощью инструкций, на 2 миллиарда параметров, bfloat16 |
2b-it-sfp | Модель, настроенная с помощью инструкций, на 2 миллиарда параметров, 8-битная переключаемая плавающая запятая |
2b-pt | Предварительно обученная модель на 2 миллиарда параметров, bfloat16 |
2b-pt-sfp | Предварительно обученная модель на 2 миллиарда параметров, 8-битная переключаемая плавающая запятая |
7B модели, настроенные по инструкциям ( 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
). Возможно, вы захотите переместить эти файлы в удобный каталог (например, каталог build/ в этом репозитории).
Шаг 3: Сборка
Система сборки использует CMake . Чтобы создать среду выполнения вывода gemma, создайте каталог сборки и сгенерируйте файлы сборки с помощью cmake
из каталога проекта верхнего уровня:
(cd build && cmake ..)
Затем запустите make
, чтобы создать исполняемый файл ./gemma
:
cd build
make -j [number of parallel threads to use] gemma
Например, make -j 8 gemma
. Если все прошло успешно, в каталоге build/
у вас должен появиться исполняемый файл gemma
.
Шаг 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 | Подробный | Показывает дополнительную информацию о разработчике и отладке. |
Приложение интерактивного терминала
По умолчанию для подробностей установлено значение 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 в CLI является экспериментальным и должно учитывать ограничения длины контекста.
Вывод приведенной выше команды должен выглядеть так:
$ 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.