46 puan yazan GN⁺ 23 일 전 | 1 yorum | WhatsApp'ta paylaş
  • Yaklaşık 9 milyon parametreye sahip ultra küçük bir dil modeli; tek bir Colab not defteriyle 5 dakika içinde eğitilebilecek şekilde tasarlandı
  • Veri üretiminden tokenizer’a, model eğitiminden çıkarıma kadar tüm süreci tek bir ortamda yürütür; tarayıcı, Colab ve yerel ortamların tamamını destekler
  • Su altı ortamını hayal eden ‘Guppy’ karakteri etrafında tasarlandı; kısa ve basit cümlelerle konuşur, eğitsel şeffaflığa odaklanır
  • Karmaşık teknikler olmadan dil modelinin temel yapısını açıkça göstermek için temel Transformer mimarisi kullanır
  • HuggingFace üzerindeki açık veri kümesi ve MIT lisansı ile herkesin deney yapıp öğrenebileceği bir açık kaynak proje

GuppyLM genel bakış

  • GuppyLM, yaklaşık 9 milyon parametreye sahip ultra küçük bir dil modeli; balık karakteri “Guppy” gibi konuşur
  • Tek bir Colab not defteriyle 5 dakika içinde doğrudan eğitilebilen bir LLM hedefiyle tasarlandı; veri üretiminden tokenizer’a, model yapısından eğitim döngüsüne ve çıkarıma kadar tüm süreci tek bir ortamda yürütmek mümkün
  • Büyük GPU kümeleri veya uzmanlık gerektirmeden dil modellerinin iç çalışma prensibini doğrudan deneyimleyebilmeniz için geliştirildi
  • Büyük modeller gibi uzun metinler üretmese de, girdi, ağırlık öğrenimi ve çıktı üretiminin tüm sürecini şeffaf biçimde gösteren eğitsel bir model
  • Tarayıcı, Colab ve yerel ortamda çalıştırılabilir; veri kümesi ve model HuggingFace üzerinden açık olarak sunulur

Model özellikleri

  • GuppyLM; su, sıcaklık, ışık, titreşim ve yem gibi su altı ortamı etrafında düşünen bir karakterdir
  • Kısa ve küçük harfli cümleler kullanır; insanlara özgü soyut kavramları (para, siyaset vb.) anlamaz
  • Dost canlısı, meraklı ve sade bir kişiliğe sahiptir
  • Eğitim verisi 60 konu ve 60 bin sentetik diyalog örneğinden oluşur; tek bir GPU üzerinde yaklaşık 5 dakikada eğitilebilir
  • Model küçük olduğu için tarayıcı içinde WebAssembly tabanlı çıkarım da mümkündür

Mimari

  • Parametre sayısı: 8.7M
  • Katman sayısı: 6
  • Gizli boyut: 384
  • Attention head sayısı: 6
  • FFN boyutu: 768 (ReLU)
  • Sözlük boyutu: 4,096 (BPE)
  • Maksimum dizi uzunluğu: 128 token
  • Normalizasyon: LayerNorm
  • Konum gömmesi: öğrenilebilir
  • LM head: embedding ile ağırlık paylaşımı
  • GQA, RoPE, SwiGLU, early exit gibi karmaşık teknikler kullanılmadan oluşturulmuş temel Transformer yapısı

Kişilik ve konuşma konuları

  • Guppy; kısa cümleler, küçük harfli ifade biçimi ve duyu merkezli düşünme ile konuşur
  • Yemek, su, ışık, akvaryum, kabarcıklar, yansımalar, su yüzeyi ve dış dünya gibi çeşitli konulara tepki verir
  • Başlıca 60 konu arasında selamlaşma, duygular, sıcaklık, yem, ışık, su, akvaryum, gürültü, yalnızlık, rüyalar, mevsimler, şakalar, aşk, sağlık ve TV bulunur

Çalıştırma ve kullanım

  • Tarayıcıda çalıştırma

    • WebAssembly tabanlı yerel çıkarım yapar
    • Yaklaşık 10 MB boyutunda kuantize ONNX modeli indirerek sunucu veya API anahtarı olmadan çalıştırılabilir
  • Colab’de sohbet

    • HuggingFace’ten önceden eğitilmiş modeli indirip etkileşimli arayüz olarak kullanabilirsiniz
    • Tüm hücreler çalıştırıldığında hemen sohbet etmeye başlayabilirsiniz
  • Colab’de eğitim

    • Çalışma zamanını T4 GPU olarak ayarlayıp tüm hücreleri çalıştırın
    • Veri kümesi indirme, tokenizer eğitimi, model eğitimi ve test otomatik olarak yürütülür
    • Ortaya çıkan modeli HuggingFace’e yükleyebilir veya yerel olarak kaydedebilirsiniz
  • Yerel ortamda sohbet

    • pip install torch tokenizers kurduktan sonra python -m guppylm chat komutuyla çalıştırın
    • Konuşma uzadıkça 128 token sınırı nedeniyle kalite düşebilir
    • Tek bir prompt verip yalnızca yanıt aldıktan sonra çıkan mod da desteklenir

Veri kümesi

  • HuggingFace üzerindeki arman-bd/guppylm-60k-generic veri kümesi kullanılır
  • Örnek sayısı: 60,000 (eğitim 57K / test 3K)
  • Biçim: {"input": "...", "output": "...", "category": "..."}
  • Kategori sayısı: 60
  • Üretim yöntemi: şablon tabanlı sentetik veri
    • Yaklaşık 60 şablon, 30 akvaryum nesnesi, 17 yem türü ve 25 etkinlik kombinasyonuyla yaklaşık 16.000 benzersiz çıktı üretilir

Proje yapısı

  • guppylm/

    • config.py: model ve eğitim hiperparametreleri
    • model.py: temel Transformer modeli
    • dataset.py: veri yükleme ve batch işleme
    • train.py: eğitim döngüsü (cosine LR, AMP)
    • generate_data.py: 60 konu için diyalog verisi üretimi
    • eval_cases.py: test senaryoları
    • prepare_data.py: veri hazırlama ve tokenizer eğitimi
    • inference.py: sohbet arayüzü
  • tools/

    • make_colab.py: Colab not defteri oluşturma
    • export_onnx.py: ONNX modeline aktarma (uint8 kuantizasyon)
    • export_dataset.py: veri kümesini HuggingFace’e yükleme
    • dataset_card.md: HuggingFace için veri kümesi açıklaması
  • docs/

    • index.html: tarayıcı demosu (ONNX + WASM)
    • download.sh: model ve tokenizer indirme
    • model.onnx: kuantize model (~10MB)
    • tokenizer.json: BPE tokenizer
    • guppy.png: logo görseli

Tasarım kararları

  • Sistem prompt’unun kaldırılması:9M model koşullu talimatları takip etmekte zorlandığı için, tüm örneklerde aynı prompt’u kullanmak yerinekişilik doğrudan ağırlıklara gömüldü

    • Bu sayede çıkarım sırasında yaklaşık 60 token tasarrufu sağlanır
    • Tek turlu konuşma: 128 token sınırı nedeniyle 3-4 turun ardından kalite düşer
    • Bu durum Guppy’nin “japon balığı hafızası” konseptiyle uyumludur, ancak en kararlı kullanım tek turlu konuşmadır
    • Temel Transformer’ın korunması: GQA, SwiGLU, RoPE, early exit gibi teknikler 9M ölçeğinde kaliteyi artırmadı, sadece karmaşıklığı yükseltti
    • Standart attention + ReLU FFN + LayerNorm birleşimi yeterli performans sağladı
    • Sentetik veri kullanımı: tutarlı karakter kişiliğini korumak için şablon tabanlı veri üretimi benimsendi

Lisans

  • MIT lisansı

1 yorum

 
GN⁺ 23 일 전
Hacker News yorumları
  • Bu proje için bir dokümantasyon olup olmadığını merak ediyorum
    Kodun kendisi, (Not So) Large Language Model'in en basit uygulamalarından biri gibi görünüyor, ancak multi-head attention, ReLU FFN, LayerNorm, positional embedding gibi kavramlara aşina olmayan geliştiriciler için anlaması kolay değil
    Bu proje, Minix'e benzer bir eğitsel niteliğe sahip. Minix işletim sistemi tasarımını öğrenmek için nasıl kullanıldıysa, öğrencilerin GuppyLM'e özellik ekleyerek LLM tasarımını öğrenmesi de iyi bir yaklaşım

    • Kodu bir LLM'e verip onun hakkında sohbet etmek de iyi bir yöntem olabilir
  • Bu projenin Andrej Karpathy'nin microgpt veya minGPT projelerinden nasıl farklı olduğunu merak ediyorum

    • Henüz karşılaştırmadım ama öneri için teşekkür ederim. İki projeye de bakacağım
    • Karşılaştırma o kadar da önemli değil. Bu bir ürün değil, harika bir deneysel proje
  • bbycroft.net/llm üzerinde küçük bir LLM katmanının 3D görselleştirmesi örneği var. İç işleyişi anlamakta çok yardımcı oluyor
    İlgili tartışma burada da görülebilir

    • Oldukça hoş! Biraz daha derinlemesine inceleyeceğim
    • Doğrudan ilgili değil ama proje gerçekten harika. Biraz daha UI eklenirse iyi olabilir
    • İlginç bir görselleştirme
  • LLM'e giriş için gerçekten mükemmel
    Eskiden Milton'ın Paradise Lost eserini temel alarak kendi modelimi yapmıştım
    Referans: wvrk.org/works/milton

  • Bu muhtemelen eğitim verisinin tamamen küçük harflerden oluşmasından kaynaklanan bir durum

    You> hello
    Guppy> hi. did you bring micro pellets.
    You> HELLO
    Guppy> i don't know what it means but it's mine.
    
    • Güzel yakalama! Görünüşe göre tokenizer'da büyük harf token'ları hiç yok
      Yine de karakterin tepkisi hâlâ canlı
  • Sadece Toki Pona ile eğitilmiş bir LLM yapmanın mümkün olup olmadığını merak ettim
    Toki Pona vikisi referans olabilir

    • Ama yeterli eğitim verisi yok. LLM'lerin özü muazzam veri ve hesaplama kaynağıdır
  • Birden fazla LLM ajanının tek bir sanal dünyayı paylaşarak otonom biçimde etkileşime girdiği bir proje üzerinde çalışıyorum
    Şaşırtıcı olan, 'dünya'nın varlığının modelin davranışı üzerinde büyük etki yaratması
    Aynı model, aynı prompt olsa bile kaynak kısıtları, diğer ajanlar, kalıcı bellek gibi çevresel unsurlar değiştiğinde sonuçlar tamamen farklılaşıyor
    Biz yalnızca modelin kendisini optimize etmeye odaklanıyoruz ve onun çalışma ortamı hakkında çok az düşünüyoruz

  • Sonunda dünya hakkında dürüst bir LLM çıkmış gibi hissettiriyor
    “Hayatın anlamı yemektir” cevabı, 10 bin kat daha büyük modellerin verdiği yanıtlardan daha az yanlış gibi geliyor

    • Hatta o meşhur cevaptan daha iyi bir yorum bile olabilir
    • Yaşamın amacı üremektir. Yemek sadece bunun aracıdır; tüm kaynaklar ve özellikler çiftleşmeye yardımcı olmak için vardır
  • Fikir iyi ama örnekler sanki eğitim verisinden birebir kopyalanmış gibi görünüyor
    Bilinmeyen sorgulara nasıl yanıt verdiğini merak ediyorum

    • Neredeyse hiç veremiyor. 9M parametreyle kapasite çok sınırlı
      Bu projenin amacı LLM'nin çalışma prensibini göstermek
  • Harika bir çalışma. Paylaştığın için teşekkürler
    Ama şimdi LLM'lerin gerçekten 'gizemini yitirmiş' gibi hissedilip hissedilmediğini merak ediyorum
    Hâlâ yalnızca basit istatistikler ve devasa hesaplama ile böyle sonuçlar çıkması şaşırtıcı