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

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:

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, theVaryasyon 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.