gemma.cpp, Gemma modelinin basit bir C++ çıkarım çalışma zamanı uygulamasıdır.
Gemma hakkında ek bilgi için model kartına bakın. gemma.cpp'ye özgü yapılar dahil olmak üzere model ağırlıkları Kaggle'da kullanılabilir.
Bu proje kimin için?
Modern LLM çıkarım motorları, genellikle geleneksel nöral ağı çalışma zamanlarının ötesine geçen özel yeteneklere sahip gelişmiş sistemlerdir. Bu durum, üst düzey algoritmaların ve düşük seviyeli hesaplamanın ortak tasarlanması yoluyla araştırma ve inovasyon fırsatları sağlıyor. Ancak deneme için tasarlanmamış dağıtım odaklı C++ çıkarım çalışma zamanları ile derleme aracılığıyla alt düzey hesaplamayı soyutlayan Python merkezli makine öğrenimi araştırma çerçeveleri arasında bir boşluk vardır.
gemma.cpp, Gemma 2B ve 7B modellerinin, tam genellik yerine basitliğe ve açıklığa odaklanarak minimalist bir uygulamasını sunar. Bu çalışma, ggml, llama.c ve llama.rs gibi dikey olarak entegre edilmiş C++ modeli uygulamalarından esinlenmiştir.
gemma.cpp, özellikle Google Highway kitaplığı üzerinden taşınabilir SIMD'yi kullanarak CPU çıkarım ve çıkarım algoritmalarının tasarım alanını keşfetmeyi hedefliyor. Minimum bağımlılığı olan diğer projelere yerleştirilmesinin kolay olması ve yaklaşık 2.000 LoC çekirdek uygulamasıyla (yaklaşık 4.000 konum desteği sunan yardımcı programlar ile birlikte) kolayca değiştirilebilir olması amaçlanmıştır.
Üretim odaklı uç dağıtımlar için JAX, Keras, PyTorch ve Transformers gibi olgun Python çerçevelerini kullanan standart dağıtım yollarını (tüm model varyasyonları burada bulabilirsiniz) kullanmanızı öneririz.
Büyük veya küçük ölçekli topluluk katkıları kabul edilir. Bu proje, Google'ın Açık Kaynak Topluluk Kuralları'na uygundur.
Hızlı Başlangıç
Bu hızlı başlangıç kılavuzunu tamamlamak için gemma.cpp'yi klonlamanız veya indirmeniz gerekir.
Sistem gereksinimleri
Başlamadan önce, şunları yüklemiş olmanız gerekir:
- CMake
- Clang C++ Derleyici
- Kaggle'dan arşiv çıkarmak için
tar
.
1. Adım: Kaggle'dan model ağırlıkları ve belirteçleştirici alın
Kaggle'daki gemma modeli sayfasını ziyaret edin ve "Model Varyasyonları"nı seçin.
Gemma C++
. On this tab, the
Varyantı" açılır menüsü, aşağıdaki seçenekleri içerir. bfloat16 ağırlık seçeneklerinin daha yüksek doğruluk oranına sahip olduğunu, 8 bit anahtarlı kayan nokta ağırlıklarının ise daha hızlı çıkarım sağladığını unutmayın.
Talimatlı (it
) ve önceden eğitilmiş (pt
) 2 milyar model:
Model adı | Açıklama |
---|---|
2b-it |
2 milyar parametreye göre ayarlanmış talimat modeli, bfloat16 |
2b-it-sfp |
2 milyar parametreli talimat ayarı yapılmış model, 8 bit anahtarlı kayan nokta |
2b-pt |
2 milyar parametreye sahip önceden eğitilmiş model, bfloat16 |
2b-pt-sfp |
2 milyar parametre önceden eğitilmiş model, 8 bit anahtarlı kayan nokta |
Talimat ayarlı (it
) ve önceden eğitilmiş (pt
) model 7 milyar:
Model adı | Açıklama |
---|---|
7b-it |
7 milyar parametreye göre ayarlanmış talimat modeli, bfloat16 |
7b-it-sfp |
7 milyar parametreli talimat ayarı yapılmış model, 8 bit anahtarlı kayan nokta |
7b-pt |
7 milyar parametreye sahip önceden eğitilmiş model, bfloat16 |
7b-pt-sfp |
7 milyar parametre önceden eğitilmiş model, 8 bit anahtarlı kayan nokta |
NOT: Kullanmaya başlamak için 2b-it-sfp
ile başlamanızı öneririz.
2. Adım: Dosyaları Çıkarın
İzin formu doldurulduktan sonra indirme işlemine devam ederek tar arşiv dosyası archive.tar.gz
alınacaktır. Dosyaları archive.tar.gz
konumundan çıkarın (bu işlem birkaç dakika sürebilir):
tar -xf archive.tar.gz
Bu işlem, 2b-it-sfp.sbs
gibi model ağırlıkları ve bir tokenizer dosyası (tokenizer.spm
) gibi model ağırlıkları içeren bir dosya oluşturur. Bu dosyaları uygun bir dizin konumuna (ör. bu depodaki derleme/ dizin) taşımak isteyebilirsiniz.
3. Adım: Oluşturma
Derleme sistemi CMake'i kullanır. Gemma çıkarımı çalışma zamanını derlemek için bir derleme dizini oluşturun ve derleme dosyalarını üst düzey proje dizininden cmake
kullanarak oluşturun:
(cd build && cmake ..)
Ardından, ./gemma
yürütülebilir dosyasını derlemek için make
komutunu çalıştırın:
cd build
make -j [number of parallel threads to use] gemma
Örneğin, make -j 8 gemma
. Bu işlem başarılı olursa build/
dizininde şimdi yürütülebilir bir gemma
dosyanızın olması gerekir.
4. Adım: Çalıştırma
Artık gemma
uygulamasını build/
dizininden çalıştırabilirsiniz.
gemma
, aşağıdaki gerekli bağımsız değişkenlere sahip:
Argüman | Açıklama | Örnek değer |
---|---|---|
--model |
Modelin türü. | 2b-it , 2b-pt , 7b-it , 7b-pt , ... (yukarıya bakın) |
--compressed_weights |
Sıkıştırılmış ağırlıklar dosyası. | 2b-it-sfp.sbs , ... (yukarıya bakın) |
--tokenizer |
Belirteç oluşturucu dosya adı. | tokenizer.spm |
gemma
şu şekilde çağrılır:
./gemma \
--tokenizer [tokenizer file] \
--compressed_weights [compressed weights file] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt]
Aşağıdaki yapılandırma için örnek çağrı:
- Sıkıştırılmış ağırlık dosyası
2b-it-sfp.sbs
(2B talimata göre ayarlanmış model, 8 bit anahtarlı kayan nokta). - Jetonlar dosyası
tokenizer.spm
.
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
Kullanım
gemma
, ayrıntı düzeyi işaretiyle kontrol edilen farklı kullanım modlarına sahiptir.
Tüm kullanım modları etkileşimlidir ve yeni satır girişiyle metin oluşturulmasını tetikler.
Ayrıntı düzeyi | Kullanım modu | Ayrıntılar |
---|---|---|
--verbosity 0 |
Minimum | Yalnızca baskı oluşturma çıktısı. KSA aracı olarak uygundur. |
--verbosity 1 |
Varsayılan | Kullanıcıya yönelik standart terminal kullanıcı arayüzü. |
--verbosity 2 |
Ayrıntılı | Ek geliştirici ve hata ayıklama bilgilerini gösterir. |
Etkileşimli Terminal Uygulaması
Varsayılan olarak ayrıntı düzeyi 1'e ayarlanır. Böylece, gemma
gerekli bağımsız değişkenlerle çağrıldığında terminal tabanlı etkileşimli bir arayüz sunulur:
$ ./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.
...
Komut Satırı Aracı Olarak Kullanım
gemma
çalıştırılabilir dosyasını komut satırı aracı olarak kullanmak amacıyla, gemma.cpp için tam bağımsız değişkenlerle bir takma ad oluşturmak faydalı olabilir:
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"
Yukarıdaki yolları, indirmeden modele ve tokenizer yollarına giden kendi yollarınızla değiştirin.
Kısaltılmış girişle (yukarıda tanımlandığı gibi gemma2b
takma adı kullanılarak) gemma
istemeyle ilgili bir örneği burada bulabilirsiniz:
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
NOT: gemma.cpp'nin CLI kullanımı deneyseldir ve bağlam uzunluğu sınırlamalarını dikkate almalıdır.
Yukarıdaki komutun çıkışı aşağıdaki gibi görünmelidir:
$ 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.