Gemma C++ Eğitimi (gemma.cpp)

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:

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, theVariation` 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.