Merasakan langsung cara kerja model bahasa dengan model bahasa kecil GuppyLM
(github.com/arman-bd)- Model bahasa superkecil dengan sekitar 9 juta parameter, dirancang agar bisa dilatih dalam kurang dari 5 menit hanya dengan satu notebook Colab
- Seluruh proses dari pembuatan data, tokenizer, pelatihan model, hingga inferensi dilakukan dalam satu lingkungan, dengan dukungan browser, Colab, dan lokal
- Dirancang sebagai karakter “Guppy” yang membayangkan lingkungan bawah air, berbicara dengan kalimat pendek dan sederhana dengan fokus pada transparansi untuk pembelajaran
- Menggunakan arsitektur Transformer dasar untuk memperlihatkan struktur inti model bahasa dengan jelas tanpa teknik yang rumit
- Proyek open source yang memungkinkan siapa pun bereksperimen dan belajar dengan dataset publik HuggingFace dan lisensi MIT
Gambaran umum GuppyLM
- GuppyLM adalah model bahasa superkecil dengan sekitar 9 juta parameter, yang bercakap-cakap seperti karakter ikan “Guppy”
- Dirancang dengan tujuan menjadi LLM yang bisa langsung dilatih sendiri dalam kurang dari 5 menit hanya dengan satu notebook Colab, sehingga seluruh proses dari pembuatan data, tokenizer, struktur model, loop pelatihan, hingga inferensi dapat dijalankan dalam satu lingkungan
- Dibuat agar pengguna dapat merasakan langsung cara kerja internal model bahasa tanpa perlu klaster GPU besar atau pengetahuan khusus
- Meski tidak menghasilkan teks panjang seperti model besar, ini adalah model edukasi yang secara transparan memperlihatkan seluruh alur input, pembelajaran bobot, dan pembuatan output
- Dapat dijalankan di browser, Colab, dan lingkungan lokal, dan dataset serta modelnya dibuka melalui HuggingFace
Karakteristik model
- GuppyLM adalah karakter yang berpikir terutama tentang lingkungan bawah air seperti air, suhu, cahaya, getaran, dan makanan
- Menggunakan kalimat pendek dengan huruf kecil, dan tidak memahami konsep abstrak manusia seperti uang atau politik
- Memiliki kepribadian yang ramah, penuh rasa ingin tahu, dan sederhana
- Data latih terdiri dari 60 topik dan 60 ribu sampel percakapan sintetis, dan dapat dilatih dalam sekitar 5 menit pada satu GPU
- Karena ukuran modelnya kecil, inferensi berbasis WebAssembly di dalam browser juga dimungkinkan
Arsitektur
- Jumlah parameter: 8.7M
- Jumlah layer: 6
- Dimensi hidden: 384
- Attention head: 6
- Dimensi FFN: 768 (ReLU)
- Ukuran kosakata: 4,096 (BPE)
- Panjang sekuens maksimum: 128 token
- Normalisasi: LayerNorm
- Embedding posisi: terlatih
- LM head: berbagi bobot dengan embedding
- Struktur Transformer dasar tanpa memakai teknik rumit seperti GQA, RoPE, SwiGLU, early exit
Kepribadian dan topik percakapan
- Guppy berbicara dengan kalimat pendek, ekspresi huruf kecil, dan cara berpikir berbasis indera
- Merespons berbagai topik seperti makanan, air, cahaya, akuarium, gelembung, pantulan, permukaan air, dan dunia luar
- 60 topik utama mencakup sapaan, emosi, suhu, makanan, cahaya, air, akuarium, kebisingan, kesepian, mimpi, musim, lelucon, cinta, kesehatan, TV dan lain-lain
Cara menjalankan dan menggunakan
-
Menjalankan di browser
- Menjalankan inferensi lokal berbasis WebAssembly
- Mengunduh model ONNX terkuantisasi berukuran sekitar 10MB dan dapat dijalankan tanpa server atau API key
-
Chat di Colab
- Mengunduh model pra-latih dari HuggingFace dan menggunakannya melalui antarmuka interaktif
- Jalankan semua sel dan bisa langsung mulai mengobrol
-
Pelatihan di Colab
- Atur runtime ke T4 GPU lalu jalankan semua sel
- Mengotomatisasi unduhan dataset, pelatihan tokenizer, pelatihan model, hingga pengujian
- Model hasilnya dapat diunggah ke HuggingFace atau disimpan secara lokal
-
Chat di lingkungan lokal
- Instal dengan
pip install torch tokenizerslalu jalankan perintahpython -m guppylm chat - Jika percakapan terlalu panjang, kualitas akan menurun karena batas 128 token
- Juga mendukung mode yang menerima satu prompt, memberikan jawaban, lalu langsung keluar
- Instal dengan
Dataset
- Menggunakan dataset HuggingFace arman-bd/guppylm-60k-generic
- Jumlah sampel: 60,000 (latih 57K / uji 3K)
- Format:
{"input": "...", "output": "...", "category": "..."} - Jumlah kategori: 60
- Metode pembuatan: data sintetis berbasis template
- Sekitar 60 template, 30 objek akuarium, 17 jenis makanan, dan 25 kombinasi aktivitas untuk menghasilkan sekitar 16.000 output unik
Struktur proyek
-
guppylm/
config.py: model dan hyperparameter pelatihanmodel.py: model Transformer dasardataset.py: pemuatan data dan pemrosesan batchtrain.py: loop pelatihan (cosine LR, AMP)generate_data.py: pembuatan data percakapan 60 topikeval_cases.py: kasus ujiprepare_data.py: persiapan data dan pelatihan tokenizerinference.py: antarmuka chat
-
tools/
make_colab.py: pembuatan notebook Colabexport_onnx.py: ekspor ke model ONNX (kuantisasi uint8)export_dataset.py: unggah dataset ke HuggingFacedataset_card.md: deskripsi dataset untuk HuggingFace
-
docs/
index.html: demo browser (ONNX + WASM)download.sh: unduh model dan tokenizermodel.onnx: model terkuantisasi (~10MB)tokenizer.json: tokenizer BPEguppy.png: gambar logo
Keputusan desain
-
Menghapus system prompt:Model 9M sulit mengikuti instruksi bersyarat, sehingga alih-alih memakai prompt yang sama di semua sampel, kepribadian langsung ditanamkan ke dalam bobot
- Dengan ini, saat inferensi dapat menghemat sekitar 60 token
- Percakapan satu giliran: karena batas 128 token, kualitas menurun setelah 3–4 giliran
- Ini cocok dengan konsep ‘ingatan ikan mas’ milik Guppy, tetapi satu giliran adalah yang paling stabil
- Mempertahankan Transformer dasar: GQA, SwiGLU, RoPE, early exit tidak memberi peningkatan kualitas pada skala 9M dan hanya menambah kompleksitas
- Kombinasi attention standar + ReLU FFN + LayerNorm sudah memberikan performa yang memadai
- Menggunakan data sintetis: untuk menjaga konsistensi karakter, dipilih metode pembuatan data berbasis template
Lisensi
- Lisensi MIT
1 komentar
Komentar Hacker News
Penasaran apakah ada dokumentasi untuk proyek ini
Kodenya sendiri terlihat seperti salah satu implementasi paling sederhana dari (Not So) Large Language Model, tetapi tidak mudah dipahami bagi developer yang belum akrab dengan multi-head attention, ReLU FFN, LayerNorm, positional embedding, dan sebagainya
Proyek ini punya sifat edukatif yang mirip dengan Minix. Seperti Minix digunakan sebagai alat untuk mempelajari desain sistem operasi, membiarkan mahasiswa menambahkan fitur ke GuppyLM untuk mempelajari desain LLM juga merupakan pendekatan yang baik
Penasaran apa perbedaan proyek ini dengan microgpt atau minGPT milik Andrej Karpathy
Ada contoh visualisasi 3D dari layer LLM kecil di bbycroft.net/llm. Itu sangat membantu untuk memahami cara kerja internalnya
Diskusi terkait juga bisa dilihat di sini
Ini benar-benar sangat bagus untuk pengantar LLM
Dulu saya pernah membuat model saya sendiri berbasis Paradise Lost karya Milton
Referensi: wvrk.org/works/milton
Ini mungkin terjadi karena data latihnya seluruhnya huruf kecil
Meski begitu, respons karakternya masih tetap terasa hidup
Jadi penasaran apakah mungkin membuat LLM yang dilatih hanya dengan Toki Pona
Lihat wiki Toki Pona
Saya sedang mengerjakan proyek di mana beberapa agen LLM berbagi satu dunia virtual dan berinteraksi secara otonom
Hal yang mengejutkan adalah bahwa keberadaan ‘dunia’ itu sangat memengaruhi perilaku model
Bahkan dengan model yang sama dan prompt yang sama, hasilnya bisa sepenuhnya berbeda jika elemen lingkungan seperti keterbatasan sumber daya, agen lain, atau memori persisten berubah
Kita terlalu fokus hanya pada optimasi model itu sendiri, dan terlalu sedikit memikirkan lingkungan operasinya
Rasanya akhirnya muncul LLM yang jujur tentang dunia
Jawaban “makna hidup adalah makanan” terasa tidak sekeliru jawaban yang diberikan model-model yang 10.000 kali lebih besar
Idenya bagus, tetapi contoh-contohnya tampak seperti disalin mentah-mentah dari data latih
Penasaran bagaimana ia menangani pertanyaan yang belum dikenal
Tujuan proyek ini adalah mendemonstrasikan prinsip kerja LLM
Kerja yang keren. Terima kasih sudah membagikannya
Tapi sekarang saya penasaran apakah LLM benar-benar terasa ‘sudah tidak lagi misterius’
Tetap saja mengejutkan bahwa hasil seperti ini bisa muncul hanya dari statistik sederhana dan komputasi dalam jumlah besar