gemma.cpp, Gemma modelinin hafif, saf C++ çıkarım çalışma zamanı uygulamasıdır.
Gemma hakkında daha fazla bilgi için model kartına bakın. gemma.cpp'ye özgü yapıları içeren model ağırlıkları Kaggle'da mevcuttur.
Bu proje kimler için?
Modern LLM çıkarım motorları, genellikle geleneksel nöral ağ çalışma zamanlarının ötesine geçen özel özelliklere sahip karmaşık sistemlerdir. Bu sayede, yüksek düzeyli algoritmaların ve düşük düzeyli hesaplamanın birlikte tasarlanması yoluyla araştırma ve yenilik fırsatları elde edilir. Ancak deneme için tasarlanmamış, dağıtıma yönelik C++ çıkarım çalışma zamanları ile derleme yoluyla düşük düzeyli hesaplamayı soyutlayan Python merkezli makine öğrenimi araştırma çerçeveleri arasında bir boşluk vardır.
gemma.cpp, tam genellik yerine basitlik ve doğrudanlığa odaklanarak Gemma 2B ve 7B modellerinin minimalist bir uygulamasını sağlar. Bu, ggml, llama.c ve llama.rs gibi dikey olarak entegre C++ model uygulamalarından esinlenmiştir.
gemma.cpp, deneme ve araştırma kullanım alanlarını hedefler. Özellikle de Google Highway kitaplığı aracılığıyla taşınabilir SIMD'i kullanarak CPU çıkarım ve çıkarım algoritmalarının tasarım alanını keşfetmeyi amaçlar. Minimum bağımlılıkla diğer projelere kolayca yerleştirilebilmesi ve küçük bir ~2.000 satır kodluk temel uygulamayla (destekleyici yardımcı programların ~4.000 satır koduyla birlikte) kolayca değiştirilebilmesi amaçlanmıştır.
Üretime yönelik uç dağıtımlar için JAX, Keras, PyTorch ve Transformers gibi gelişmiş Python çerçevelerinin kullanıldığı standart dağıtım yollarını öneririz (tüm model varyasyonları burada).
Büyük veya küçük tüm topluluk katkıları memnuniyetle karşılanır. Bu proje, Google'ın Açık Kaynak Topluluk Kuralları'na uygundur.
Hızlı başlangıç kılavuzu
Bu hızlı başlangıç kılavuzunu tamamlamak için gemma.cpp dosyasını kopyalamanız veya indirmeniz gerekir.
Sistem gereksinimleri
Başlamadan önce şunları yüklemiş olmanız gerekir:
- CMake
- Clang C++ Derleyicisi
tar
için Kaggle'dan arşivleri ayıklayın.
1. Adım: Kaggle'den model ağırlıklarını ve tokenizer'ı alın
Kaggle'daki gemma model sayfasını ziyaret edin ve "Model Varyasyonları
Gemma C++
. On this tab, the
Variation` açılır menüsünde aşağıdaki seçenekler yer alır. bfloat16 ağırlık seçeneklerinin daha yüksek doğruluğa sahip olduğunu, 8 bit değiştirilmiş kayan nokta ağırlıklarının ise daha hızlı çıkarım sağladığını unutmayın.
2B talimat ayarlı (it
) ve önceden eğitilmiş (pt
) modeller:
Model adı | Açıklama |
---|---|
2b-it |
2 milyar parametre içeren talimat ayarlı model, bfloat16 |
2b-it-sfp |
2 milyar parametre talimat ayarlı model, 8 bit değiştirilmiş kayan nokta |
2b-pt |
2 milyar parametre içeren önceden eğitilmiş model, bfloat16 |
2b-pt-sfp |
2 milyar parametre içeren önceden eğitilmiş model, 8 bit değiştirilmiş kayan nokta |
7 milyar talimat ayarlı (it
) ve önceden eğitilmiş (pt
) model:
Model adı | Açıklama |
---|---|
7b-it |
7 milyar parametre içeren talimat ayarlı model, bfloat16 |
7b-it-sfp |
7 milyar parametre içeren talimat ayarlı model, 8 bit değiştirilmiş kayan nokta |
7b-pt |
7 milyar parametre içeren önceden eğitilmiş model, bfloat16 |
7b-pt-sfp |
7 milyar parametre içeren önceden eğitilmiş model, 8 bit değiştirilmiş kayan nokta |
NOT: Hesabınızı kullanmaya başlamak için 2b-it-sfp
ile başlamanızı öneririz.
2. Adım: Dosyaları Ayıklayın
İzin formu doldurulduktan sonra indirme işlemi, tar arşiv dosyasını archive.tar.gz
almak için devam eder. archive.tar.gz
'ten dosyaları çı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ı içeren bir dosya ve bir kelime öbekleyici dosyası (tokenizer.spm
) oluşturur. Bu dosyaları uygun bir dizin konumuna (ör. bu depoda build/ dizini) taşımak isteyebilirsiniz.
3. Adım: Oluşturma
Derleme sistemi CMake'i kullanır. Gemma çıkarım çalışma zamanını oluşturmak için bir derleme dizini oluşturun ve üst düzey proje dizininden cmake
kullanarak derleme dosyalarını oluşturun:
(cd build && cmake ..)
Ardından, ./gemma
yürütülebilir dosyasını oluşturmak için make
dosyasını ç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 gemma
yürütülebilir dosyanız olur.
4. Adım: Çalıştırın
Artık gemma
dosyasını build/
dizininden çalıştırabilirsiniz.
gemma
aşağıdaki zorunlu bağımsız değişkenlere sahiptir:
Bağımsız Değişken | Açıklama | Örnek değer |
---|---|---|
--model |
Model 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 |
Ayrıştırıcı 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ıklar dosyası
2b-it-sfp.sbs
(2B talimat ayarlı model, 8 bit değiştirilmiş kayan nokta). tokenizer.spm
dize ayırıcı dosyası.
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
Kullanım
gemma
, ayrıntı düzeyi işaretçisi tarafından kontrol edilen farklı kullanım modlarına sahiptir.
Tüm kullanım modları etkileşimlidir ve yeni satır girişi yapıldığında metin oluşturmayı tetikler.
Ayrıntı düzeyi | Kullanım modu | Ayrıntılar |
---|---|---|
--verbosity 0 |
Minimal | Yalnızca oluşturma çıktısını yazdırır. CLI aracı olarak uygundur. |
--verbosity 1 |
Varsayılan | Kullanıcılara yönelik standart terminal kullanıcı arayüzü. |
--verbosity 2 |
Ayrıntılı | Geliştirici ve hata ayıklamayla ilgili ek bilgileri gösterir. |
Etkileşimli Terminal Uygulaması
Varsayılan olarak ayrıntı düzeyi 1'e ayarlanır. Bu durumda, gemma
gerekli bağımsız değişkenlerle çağrıldığında terminal tabanlı bir etkileşimli arayüz açılır:
$ ./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
yürütülebilir dosyasını komut satırı aracı olarak kullanmak için bağımsız değişkenlerin tam olarak belirtildiği bir gemma.cpp takma adı oluşturmanız yararlı 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ı, indirme işleminden model ve parçalayıcı yollarınızla değiştirin.
gemma
için kesilmiş bir giriş istemi gösterilen bir örneği aşağıda bulabilirsiniz (yukarıda tanımlandığı gibi bir gemma2b
takma adı kullanılmıştır):
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ı dikkate alınmalıdır.
Yukarıdaki komutun çıktısı şu şekilde 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.