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

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:

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, theVaryantı" 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.