gemma.cpp, hafif ve saf C++ çıkarımlarını ve Gemma modelinin çalışma zamanını uygulamasını öğreteceğim.
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.
Bu proje kimler için oluşturuldu?
Modern LLM çıkarım motorları, çoğu zaman istek üzerine özelleştirilen gelişmiş sistemlerdir. özellikleri, geleneksel sinir ağı çalışma zamanlarının ötesine geçen yeni özellikler içerir. Bununla üst düzey tasarımcıların ortak çalışması sayesinde araştırma ve yenilik algoritmaları ve alt düzey hesaplama. Ancak her bir görev için dağıtım odaklı C++ çıkarım çalışma zamanları için de ve Python merkezli makine öğrenimi araştırma çerçevelerini düşük düzeyli hesaplama yapabilirsiniz.
gemma.cpp, Gemma 2B ve 7B modellerinin minimalist bir şekilde uygulanmasını sağlar. eksiksiz bir genellik yerine sadeliğe ve doğrudanlığa odaklanıyor. Bu gibi dikey entegre C++ modeli uygulamalarından ggml, llama.c ve llama.rs.
gemma.cpp, özellikle deneme ve araştırma amaçlı kullanım alanlarını kullanarak CPU çıkarım ve çıkarım algoritmalarının tasarım alanını Google Otoyolu üzerinden taşınabilir SIMD kitaplığını tanıtır. Kolayca e-tablo içeren diğer projelere yerleştirilebilecek bağımlılıkları çok azdır ve ~2.000 LoC çekirdekle kolayca değiştirilebilir. (yaklaşık 4.000 LoC, destekleyici kamu hizmeti kuruluşuyla birlikte).
Üretim odaklı uç dağıtımlar için standart dağıtımı öneririz ve JAX, Keras, PyTorch gibi olgun Python çerçeveleri ve Transformatörler (tüm model varyasyonları) burada) bulabilirsiniz.
Her ölçekten topluluk katkısı kabul edilir. Bu proje kapsamında Google'ın Açık Kaynak Topluluk Kuralları.
Hızlı başlangıç kılavuzu
Bu hızlı başlangıç kılavuzunu tamamlamak için dosyayı klonlamanız veya indirmeniz gerekir gemma.cpp.
Sistem gereksinimleri
Başlamadan önce şunları yüklemiş olmanız gerekir:
- CMake
- Clang C++ Derleyici
- Kaggle'dan arşivleri çıkarmak için
tar
.
1. adım: Kaggle'dan model ağırlıkları ve jeton oluşturucu alın
Şu sayfadaki gemma model sayfasını ziyaret edin: Kaggle'ı tıklayın ve "Model Varyasyonları"nı seçin.
Gemma C++
. On this tab, the
Varyasyon açılır menüsü şunları içerir: göz atın. bfloat16 ağırlık seçeneklerinin daha yüksek kalitede, 8 bit ise daha yüksek kalitede olduğunu unutmayın anahtarlı kayan nokta ağırlıkları daha hızlı çıkarım sağlar.
Talimat ayarlanmış (it
) ve önceden eğitilmiş (pt
) 2 milyar model:
Model adı | Açıklama |
---|---|
2b-it |
2 milyar parametreli talimat ayarlamalı model, bfloat16 |
2b-it-sfp |
2 milyar parametreli talimat ayarlı model, 8 bit anahtarlı kayan nokta |
2b-pt |
2 milyar parametreli önceden eğitilmiş model, bfloat16 |
2b-pt-sfp |
2 milyar parametreli önceden eğitilmiş model, 8 bit anahtarlı kayan nokta |
7 milyar talimat ayarlanmış (it
) ve önceden eğitilmiş (pt
) model:
Model adı | Açıklama |
---|---|
7b-it |
7 milyar parametreli talimat ayarlamalı model, bfloat16 |
7b-it-sfp |
7 milyar parametreli talimat ayarlı model, 8 bit anahtarlı kayan nokta |
7b-pt |
7 milyar parametre için önceden eğitilmiş model, bfloat16 |
7b-pt-sfp |
7 milyar parametre için önceden eğitilmiş model, 8 bit anahtarlı kayan nokta |
NOT: Reklam yayınlamaya başlamak için 2b-it-sfp
ile başlamanızı öneririz.
2. Adım: Dosyaları Çıkarın
İzin formunu doldurduktan sonra indirme işlemi,
tar arşiv dosyası archive.tar.gz
. Dosyaları archive.tar.gz
klasöründen çıkarın (bu işlem
birkaç dakika sürer):
tar -xf archive.tar.gz
Bu işlem, 2b-it-sfp.sbs
ve
jeton oluşturucu dosyası (tokenizer.spm
). Bu dosyaları taşımak isteyebilirsiniz.
(ör. bu depodaki derleme/ dizin) dizin konumuna erişmeli.
3. Adım: Oluşturma
Derleme sistemi CMake'i kullanır. Gemma çıkarımı oluşturmak için
bir derleme dizini oluşturun ve derleme dosyalarını cmake
kaynak dizinden şunu ekleyelim:
(cd build && cmake ..)
Ardından, yürütülebilir ./gemma
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 başarılı olursa, artık bir
build/
dizininde gemma
yürütülebilir dosya.
4. Adım: Çalıştırın
Artık gemma
öğesini build/
dizininden çalıştırabilirsiniz.
gemma
, aşağıdaki gerekli bağımsız değişkenleri içeriyor:
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ık dosyası. | 2b-it-sfp.sbs , ... (yukarıya bakın) |
--tokenizer |
Jeton 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 talimat ayarlı model, 8 bit kayan nokta). - Tokenizer dosyası
tokenizer.spm
.
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
Kullanım
gemma
, ayrıntı işaretiyle kontrol edilen farklı kullanım modlarına sahip.
Tüm kullanım modları etkileşimlidir ve aşağıdaki durumlarda metin üretimini tetikler yeni satır girişi.
Ayrıntı düzeyi | Kullanım modu | Ayrıntılar |
---|---|---|
--verbosity 0 |
Minimal | Yalnızca oluşturma çıktısı yazdırılır. 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ı
Ayrıntı düzeyi varsayılan olarak 1'e ayarlanır ve böylece terminal tabanlı etkileşimli bir sonuç ortaya çıkar
gemma
gerekli bağımsız değişkenlerle çağrıldığında arayüz arayüzü:
$ ./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 şunu yapmak yararlı olabilir:
gemma.cpp için, bağımsız değişkenleri tam olarak belirtilen bir takma ad oluşturun:
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ı, modele ve jeton oluşturucuya giden kendi yollarınızla değiştirin kaldırın.
Kısaltılmış bir girişle (gemma
Yukarıda tanımlanan şekilde gemma2b
takma adı):
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
NOT: gemma.cpp'nin KSA kullanımı deneyseldir ve bağlam süresi kadar uzun olmalıdır. göz önünde bulundurmalısınız.
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.