Küçük dil modeli GuppyLM ile dil modellerinin nasıl çalıştığını bizzat deneyimlemek
(github.com/arman-bd)- 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 tokenizerskurduktan sonrapython -m guppylm chatkomutuyla ç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 hiperparametrelerimodel.py: temel Transformer modelidataset.py: veri yükleme ve batch işlemetrain.py: eğitim döngüsü (cosine LR, AMP)generate_data.py: 60 konu için diyalog verisi üretimieval_cases.py: test senaryolarıprepare_data.py: veri hazırlama ve tokenizer eğitimiinference.py: sohbet arayüzü
-
tools/
make_colab.py: Colab not defteri oluşturmaexport_onnx.py: ONNX modeline aktarma (uint8 kuantizasyon)export_dataset.py: veri kümesini HuggingFace’e yüklemedataset_card.md: HuggingFace için veri kümesi açıklaması
-
docs/
index.html: tarayıcı demosu (ONNX + WASM)download.sh: model ve tokenizer indirmemodel.onnx: kuantize model (~10MB)tokenizer.json: BPE tokenizerguppy.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
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
Bu projenin Andrej Karpathy'nin microgpt veya minGPT projelerinden nasıl farklı olduğunu merak ediyorum
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
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
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
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
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
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ı