microgpt
(karpathy.github.io)- Struktur model bahasa minimal yang mengimplementasikan seluruh proses pelatihan dan inferensi model GPT dalam satu file Python murni sepanjang 200 baris
- Mencakup dataset, tokenizer, mesin autodiff, jaringan saraf mirip GPT-2, optimizer Adam, serta loop pelatihan dan inferensi
- Melatih dataset nama untuk menghasilkan nama baru, sekaligus memperlihatkan prinsip inti GPT melalui autograd dan struktur Transformer buatan sendiri
- Berbeda dari LLM skala besar, ia berjalan dengan Python murni tanpa dependensi, menyisakan hanya esensi algoritmisnya
- Dengan memahami microgpt, kita dapat memahami struktur algoritme dasar model besar seperti ChatGPT
Gambaran umum microgpt
- microgpt adalah implementasi GPT minimal yang ditulis dalam 200 baris kode Python, tanpa dependensi library eksternal
- Mencakup dataset, tokenizer, autodiff, struktur mirip GPT-2, optimizer Adam, serta loop pelatihan dan inferensi
- Proyek artistik yang dibuat Karpathy untuk menyederhanakan LLM ke tingkat esensinya, sebagai kelanjutan dari micrograd, makemore, dan nanogpt
- Seluruh kode tersedia di GitHub Gist, halaman web, dan Google Colab
Dataset
- Menggunakan file teks yang berisi sekitar 32.000 nama, satu nama per baris
- Setiap nama dianggap sebagai satu dokumen, dan model mempelajari pola ini untuk menghasilkan nama baru
- Contoh hasil generasi setelah pelatihan: kamon, ann, karai, jaire, vialan dan lain-lain
Tokenizer
- Tokenizer berbasis karakter sederhana yang memberikan ID integer pada setiap karakter unik
- Total 27 token, mencakup alfabet a–z dan token BOS (beginning of sequence)
- Setiap dokumen dibungkus dalam bentuk
[BOS, e, m, m, a, BOS]saat dilatih
Autodiff
- Kelas
Valuemelacak nilai skalar dan gradien, sekaligus membentuk grafik komputasi - Menyimpan gradien lokal (local gradient) untuk operasi dasar seperti penjumlahan, perkalian, perpangkatan, log, eksponensial, dan ReLU
- Metode
backward()melakukan backpropagation dengan menerapkan chain rule - Algoritme yang sama seperti
.backward()di PyTorch diimplementasikan langsung pada level skalar
Inisialisasi parameter
- Model memiliki sekitar 4.192 parameter
- Terdiri dari tabel embedding, bobot attention, bobot MLP, proyeksi output, dan lain-lain
- Setiap parameter diinisialisasi dengan bilangan acak dari distribusi Gaussian
Arsitektur model
- Bentuk yang menyederhanakan struktur GPT-2, menggunakan RMSNorm, ReLU, dan residual connection
- Komponen utama:
- Tahap embedding: menjumlahkan embedding token dan posisi
- Multi-head attention: menghitung vektor Q, K, V lalu memanfaatkan informasi token sebelumnya melalui KV cache
- Blok MLP: jaringan feedforward 2 lapis untuk komputasi lokal
- Tahap output: menghasilkan logit untuk ukuran kosakata 27
- KV cache tetap aktif selama pelatihan, sehingga backpropagation juga mengalir melalui cache
Loop pelatihan
- Pada setiap step, sebuah dokumen dipilih lalu ditokenisasi menjadi
[BOS, ... , BOS] - Model memprediksi probabilitas token berikutnya dan menghitung loss cross-entropy
- Setelah gradien dihitung dengan
loss.backward(), parameter diperbarui memakai optimizer Adam - Learning rate menggunakan skema linear decay
- Selama 1.000 step, loss turun dari sekitar 3.3 → 2.37
Inferensi
- Setelah pelatihan selesai, model memulai dari token BOS untuk menghasilkan nama baru
- Pada tiap langkah, token berikutnya di-sample berdasarkan probabilitas softmax
- Nilai temperature mengatur kreativitas (lebih rendah lebih konservatif, lebih tinggi lebih beragam)
- Contoh output: kamon, ann, karai, jaire, vialan, karia, yeran, anna dan lain-lain
Cara menjalankan
- Bisa dijalankan hanya dengan Python (
python train.py) - Pelatihan selesai dalam sekitar 1 menit, dengan nilai loss dicetak di setiap tahap
- Bisa dijalankan dengan cara yang sama di notebook Colab
Tahap perkembangan kode
- Berkembang bertahap dari
train0.pyhinggatrain5.py- Bigram → MLP → Autograd → Attention → Multi-head → Adam
- Setiap tahap dapat dilihat di revisi build_microgpt.py pada Gist
Perbedaan dengan LLM nyata
- Data: microgpt memakai 32K nama, sedangkan LLM nyata memakai triliunan token
- Tokenizer: level karakter vs. subword berbasis BPE
- Autodiff: Python berbasis skalar vs. operasi tensor GPU
- Arsitektur: 4K parameter vs. ratusan miliar parameter
- Pelatihan: pengulangan satu dokumen vs. pelatihan batch besar dan mixed precision
- Optimisasi: Adam sederhana vs. hyperparameter dan scheduling yang disetel sangat presisi
- Pascapemrosesan: berkembang menjadi bentuk ChatGPT melalui tahap SFT dan RL
- Infrastruktur inferensi: distribusi GPU, pengelolaan KV cache, kuantisasi, speculative decoding, dan lain-lain
Ringkasan FAQ
- Model adalah fungsi matematis yang mengubah token masukan menjadi probabilitas token berikutnya
- Tidak ada “pemahaman”; prediksi dilakukan melalui pembelajaran pola statistik
- Mengimplementasikan loop prediksi token yang sama seperti ChatGPT dalam bentuk yang diperkecil
- “Halusinasi (hallucination)” adalah hasil alami dari sampling probabilistik
- Meski lambat, model ini mereproduksi algoritme inti LLM secara utuh
- Untuk hasil lebih baik, step pelatihan, ukuran model, dan dataset dapat disesuaikan
- Dengan mengganti dataset, model dapat mempelajari berbagai pola seperti nama kota, nama Pokémon, puisi, dan lain-lain
microgpt adalah model edukatif dan eksperimental yang mengimplementasikan semua algoritme inti LLM dalam bentuk paling minimal, sehingga menjadi contoh yang sepenuhnya memperlihatkan prinsip kerja model bahasa skala besar.
1 komentar
Pendapat Hacker News
Seseorang memodifikasi microgpt untuk membuat GPT kecil yang menghasilkan nama Korea
Ada juga halaman web yang memvisualisasikan seluruh proses — dari tokenisasi hingga inferensi, kamu bisa menjelajahi seluruh pipeline
Bisa langsung dicoba di English GPT lab
Cukup lihat tutorial PyTorch char_rnn
Penjelasannya bagus, mencakup tokenisasi, embedding, attention, loss·gradient, training, inferensi, dan perbandingan dengan Real GPT
Situsnya sendiri lebih dekat ke visualisasi buatan AI yang didasarkan pada posting blog aslinya
Saya melakukan porting microgpt ke C++
Tautan kode
Jumlah baris kode 2x lebih banyak, tapi kecepatannya 10x lebih cepat
Bagian tersulit adalah merepresentasikan kelas Value di C++, dan akhirnya saya memakai shared_ptr
Saya penasaran apa sebenarnya yang dimaksud dengan “halusinasi (hallucination)”
Model hanya melakukan sampling token dari distribusi probabilitas, tidak punya konsep kebenaran
Jadi muncul pertanyaan apakah LLM bisa memiliki skor kepercayaan terhadap jawabannya sendiri
Model pra-pelatihan memang terkalibrasi, tetapi setelah mengikuti instruksi (post-training) hal itu rusak
Riset terkait: makalah1, makalah2
Seperti interval kepercayaan dalam statistik tanpa mengetahui populasinya, probabilitas LLM juga tidak punya hubungan langsung dengan dunia nyata
Pada akhirnya LLM itu seperti orang yang hanya membaca buku tanpa pengalaman dunia nyata
Tapi probabilitas ini bukan “peluang bahwa ini benar”, melainkan “peluang saya mengeluarkan token ini dalam situasi ini”
Saya mengonversi microgpt ke Rust untuk belajar
microgpt-rs
Bagian paling rumit adalah merepresentasikan struktur graph autograd sebagai tipe Rust
Sekarang sedang dimodifikasi agar bisa berjalan di browser lewat WebAssembly, dan nanti akan saya tulis di blog
Kode Karpathy benar-benar punya desain yang puitis dan ringkas
Kodenya indah dan mudah dibaca, tetapi akan lebih bagus kalau ada penjelasan dengan komentar baris per baris seperti backbone.js
Lihat dokumentasi Backbone
Proyek Docco juga alat keren dari pembuat yang sama
Ada juga versi kode HTML
blog microgpt
Berkat video dan kode Karpathy, saya merasa untuk pertama kalinya benar-benar paham gradient descent, backpropagation, dan chain rule
Saat hanya melihat matematikanya saya bingung, tapi ketika dilihat bersama kodenya semuanya jadi jelas
Secara pribadi rasanya seperti pencapaian besar dalam hidup
Seperti kata Karpathy, kalau benar-benar ingin paham, penting untuk mencoba mengajarkannya kepada orang lain
Saya heran proyek ini baru sekarang muncul di HN
Saya membuat versi JS 35 baris dan versi Python bernama PicoGPT,
dan bisa langsung dijalankan di web
Bahkan ini adalah LLM super kecil yang bisa dijalankan lewat kode QR
Thread terkait: tautan1, tautan2
Saya membuat kode microgpt menjadi posting blog visualisasi
Tautan blog
Ditampilkan secara interaktif sambil mengikuti alur kode
tetapi sebenarnya keempat nama itu semua sudah ada di dalam dataset
Akhir-akhir ini tren ‘micro’ di AI terasa menarik
Dibanding sekadar terus memperbesar model, efisiensinya justru makin besar pada model kecil yang fokus
Saya sendiri memakai Gemini Flash untuk analisis domain, dan rasio kecepatan·biayanya jauh lebih baik
Hanya dari perbedaan latency saja, jenis produk yang bisa dibuat sudah berubah
Untuk disebut microgpt rasanya ini bahkan lebih kecil daripada nanogpt, jadi menurut saya picogpt lebih cocok
Meski begitu, ini tetap proyek yang keren