11 puan yazan GN⁺ 2024-02-24 | 1 yorum | WhatsApp'ta paylaş
  • Google'ın Gemma modeli için hafif, bağımsız çalışabilen bir C++ çıkarım motoru
  • Bu proje kimler için?
    • Modern büyük dil modeli (LLM) çıkarım motorları, geleneksel sinir ağı çalışma zamanlarının ötesine geçen özelleştirilmiş özelliklere sahip karmaşık sistemlerdir
    • Üst düzey algoritmalar ile alt düzey hesaplamaların birlikte tasarlanması üzerinden araştırma ve inovasyon fırsatları olsa da, deneyler için tasarlanmamış C++ çıkarım çalışma zamanları ile alt düzey hesaplamaları soyutlayan Python merkezli ML araştırma çerçeveleri arasında bir boşluk vardır
    • gemma.cpp, Gemma 2B ve 7B modellerinin minimal bir uygulamasını sunar ve genellikten çok sadelik ile doğrudanlığa odaklanır
    • gemma.cpp, deney ve araştırma kullanım senaryolarını hedefler; minimum bağımlılıkla diğer projelere kolayca entegre edilebilir ve yaklaşık 2K LoC çekirdek uygulama ile 4K LoC destek yardımcı araçları sayesinde kolayca değiştirilebilir
    • CPU çıkarımı için Google Highway Library'nin taşınabilir SIMD yapısından yararlanır
    • Üretim dağıtımları için JAX, Keras, PyTorch ve Transformers gibi Python çerçevelerini kullanan standart dağıtım yolu önerilir

Hızlı başlangıç

Sistem gereksinimleri

  • Başlamadan önce CMake, Clang C++ derleyicisi (C++17 veya üzeri desteğiyle) ve Kaggle'dan indirilen arşivi çıkarmak için tar kurulu olmalıdır

Adım 1: Kaggle'dan model ağırlıklarını ve tokenizer'ı edinme

  • Kaggle'daki Gemma model sayfasını ziyaret edip Model Variations |> Gemma C++ seçeneğini seçin
  • Variation açılır menüsünde bfloat16 ağırlıkları (daha yüksek doğruluk) ve 8 bitlik ölçeklenmiş kayan nokta ağırlıkları (daha hızlı çıkarım) seçenekleri bulunur
  • Genellikle başlangıç için -sfp checkpoint'leri önerilir

Adım 2: Dosyaları çıkarma

  • Onay formunu doldurduktan sonra archive.tar.gz dosyasını indirip çıkarın
  • Çıkarılan dosyalar arasında model ağırlıkları (ör. 2b-it-sfp.sbs) ve tokenizer dosyası (tokenizer.spm) yer alır
  • Bu dosyaları uygun bir dizine taşıyabilirsiniz (ör. bu deponun build/ dizini)

Adım 3: Derleme

  • Derleme sistemi CMake kullanır
  • gemma çıkarım çalışma zamanını derlemek için bir derleme dizini oluşturun ve en üst proje dizininde cmake ile derleme dosyalarını üretin
  • 8 bitlik ölçeklenmiş kayan nokta ağırlıkları (sfp) için cmake komutunu ek seçenek olmadan çalıştırın
  • Eğer bfloat16 ağırlıkları indirdiyseniz, yukarıdaki gibi seçeneksiz cmake çalıştırmak yerine, WEIGHT_TYPE'ı highway'in hwy::bfloat16_t türüne ayarlayarak cmake çalıştırın
  • Uygun cmake komutunu çalıştırdıktan sonra build/ dizinine geçip make çalıştırarak ./gemma yürütülebilir dosyasını derleyin

Adım 4: Çalıştırma

  • build/ dizini içinde gemmayı çalıştırabilirsiniz
  • gemma zorunlu argümanlar alır; örneğin 2b-it-sfp.sbs ağırlık dosyası ve tokenizer.spm tokenizer dosyasıyla çalıştırılabilir

Kullanım

  • gemma, verbosity bayrağıyla kontrol edilen çeşitli kullanım modlarına sahiptir
  • Tüm kullanım modları şu anda etkileşimlidir; yeni bir satır girişi metin üretimini tetikler

Etkileşimli terminal uygulaması

  • Varsayılan olarak verbosity 1'e ayarlıdır ve gemma çağrıldığında terminal tabanlı etkileşimli bir arayüz sunar

Komut satırı aracı olarak kullanım

  • gemma yürütülebilir dosyasını komut satırı aracı olarak kullanmak için, gemma.cpp için tüm argümanları tam tanımlanmış bir takma ad oluşturmak faydalı olabilir

Projeye gemma.cpp kütüphanesini dahil etme

  • gemma.cpp'yi kendi projenize dahil etmenin en kolay yolu, FetchContent kullanarak gemma.cpp'yi ve bağımlılıklarını çekmektir
  • CMakeLists.txt dosyasına aşağıdakileri ekleyebilirsiniz

gemma.cpp'yi kütüphane olarak derleme

  • gemma.cpp kendi projenizde bir kütüphane bağımlılığı olarak kullanılabilir ve paylaşımlı kütüphane çıktısı üretmek için libgemma hedefi derlenebilir

Teşekkür ve iletişim

  • gemma.cpp, 2023 sonbaharında Austin Huang ve Jan Wassenberg tarafından başlatıldı; Phil Culliton, Paul Chang ve Dan Zheng'in katkılarıyla Şubat 2024'te yayımlandı
  • Bu, resmi olarak desteklenen bir Google ürünü değildir.

GN⁺ görüşü:

  1. gemma.cpp, büyük dil modelleri üzerinde deney ve araştırma yapmak için yararlı bir araçtır; C++ tabanlı hafif bir çıkarım motoru sunarak mevcut Python merkezli çerçevelerle arasındaki boşluğu kapatmaya yardımcı olur
  2. Bu proje, açık kaynak topluluğuna katkı sunma fırsatı verir ve Google'ın açık kaynak yönergelerine uymanın önemini vurgular
  3. gemma.cpp, geliştiricilerin ve araştırmacıların kendi projelerine kolayca entegre edip kullanabilmesi için çeşitli kullanım modları sunacak şekilde tasarlanmıştır; bu da AI ve ML alanlarında inovasyonu teşvik etme potansiyeli taşır

1 yorum

 
GN⁺ 2024-02-24
Hacker News görüşleri
  • Hacker News yorum özeti:
    • Austin'in tanıtımı ve proje açıklaması:

      • Austin, projenin ortak yazarlarından biri olduğunu ve soruları yanıtlayacağını belirtiyor.
      • gemma.cpp, llama.cpp/ggml'den bağımsız ve llama.cpp projesinden ilham almış.
      • gemma.cpp, gemma'nın doğrudan bir implementasyonu; deney ve araştırmaya, ayrıca taşınabilirlik ve kolay değiştirilebilirliğe odaklanıyor.
      • İlk implementasyon CPU SIMD odaklı ve GPU desteği için seçenekler araştırılıyor.
      • Gemma modelinin kendisine dair soruları başka ekip arkadaşlarının yanıtlayacağı, bunun C++ implementasyonu olduğu ancak modelin eğitimiyle nispeten bağımsız olduğu belirtiliyor.
      • Google içinde küçük bir ekip tarafından geliştirildiği ve başkalarının da bunu faydalı bulmasının umulduğu ifade ediliyor.
      • Projeyle ilgili bir Twitter flood'una bağlantı paylaşılıyor.
    • Google'ın LLM alanındaki rekabet gücüne dair görüşler:

      • Google'ın ticari ürünlerde OpenAI'nin gerisinde kaldığı yönünde eleştiriler olsa da, LLM alanında oldukça yetkin olduğu söyleniyor.
      • Google harekete geçtiğinde etkileyici sonuçlar ortaya koyacağı görüşü paylaşılıyor.
      • Facebook ve Llama sayesinde açık kaynak rekabetinin sürmesi umuluyor; OpenAI'nin ilk misyonundan uzaklaşmış olsa da ilk vizyonunun önemli olduğu hatırlatılıyor.
    • Build sistemi hakkında soru:

      • Google'ın neden build sistemi olarak bazel kullanmadığını merak eden bir yorum.
    • Gemma'nın performansına övgü:

      • Gemma'nın HHEM leaderboard'una eklendiği ve küçük modeller arasında düşük halüsinasyon oranı gösterdiği belirtiliyor.
    • LLM açık kaynak ekosisteminin gelişim hızına hayranlık:

      • LLM açık kaynak ekosisteminin çok hızlı geliştiği, yeni bilgi ve kodların sürekli ortaya çıktığı ifade ediliyor.
    • Model formatları hakkında soru:

      • GGUF, GGML gibi çeşitli model formatları arasındaki farklar ve bunların nasıl yönetildiği hakkında açıklama istenen bir yorum.
    • LLM'lerin matematik yeteneği üzerine tartışma:

      • LLM'lerin matematik problemlerini iyi çözemediğine dair açıklamalar ve ChatGPT'nin matematikte iyiymiş gibi görünmesinin nedenine dair bir tartışma.
      • LLM projelerinin plugin modelini destekleyip desteklemediği ve llama.cpp kullanılarak geliştirilen bir sisteme plugin yaklaşımının uygulanıp uygulanamayacağı soruluyor.
    • Gemma'da içerik kısıtlaması olup olmadığına dair soru:

      • Gemma'nın Gemini gibi içerik kısıtlama özelliğini gömülü olarak içerip içermediği, yoksa bunun Gemini uygulamasına özgü bir özellik olup olmadığı soruluyor.
    • gemma.cpp için teşekkür ve gelecekte eklenecek özelliklere dair beklenti:

      • gemma.cpp deposu için teşekkür edilerek bir Python wrapper geliştirildiği belirtiliyor.
      • gemma.cpp ekibi yeni teknikleri güncelledikçe bunları kolayca kullanabilmek için bir Python wrapper geliştirildiği ifade ediliyor.
    • Gemma modelinin çalıştırılabilir dosya boyutuna dair soru:

      • Gemma modelinin en temel command line interface ile derlenip çevrimdışı çalışabilen bağımsız bir executable dosyaya dönüştürülmesi durumunda nihai dosya boyutunun ne olacağının sorulduğu bir yorum.