- Train Your Own LLM From Scratch adalah workshop praktik untuk menulis sendiri semua bagian dari pipeline pelatihan GPT sambil memahami apa yang dilakukan tiap komponen dan mengapa komponen itu diperlukan
- Tujuannya adalah menghasilkan teks bergaya Shakespeare dengan model GPT yang dilatih dari nol di laptop, dan agar bisa selesai dalam satu sesi workshop, skalanya diperkecil menjadi model sekitar 10M parameter
- Sementara nanoGPT bertujuan mereproduksi GPT-2 dengan 124M parameter, proyek ini dirancang dengan hanya menyisakan inti yang penting agar bisa dilatih di laptop dalam kurang dari 1 jam
- Komponen yang ditulis sendiri mencakup Tokenizer, arsitektur model berbasis Transformer, loop pelatihan, dan generasi teks; pada akhirnya peserta akan menyelesaikan sendiri
model.py, train.py, dan generate.py
- Pengetahuan awal yang dibutuhkan cukup sebatas terbiasa membaca kode Python, tidak perlu pengalaman machine learning, dan memerlukan Python 3.12+
- Lingkungan eksekusi mendukung laptop atau desktop Mac, Linux, dan Windows; pelatihan akan otomatis menggunakan MPS pada GPU Apple Silicon, CUDA pada GPU NVIDIA, atau CPU
- Untuk instalasi lokal, alur yang direkomendasikan adalah menjalankan
uv sync dengan uv; jika tidak memiliki lingkungan lokal, file dapat diunggah ke Google Colab lalu dijalankan dengan !python train.py
- Workshop membahas secara berurutan tokenizer berbasis karakter, embedding, self-attention, LayerNorm, blok MLP, fungsi loss, AdamW, gradient clipping, penjadwalan learning rate, serta sampling temperature dan top-k
- Arsitektur dasarnya mengubah teks masukan menjadi ID token berbasis karakter, melewatkannya melalui embedding token dan embedding posisi, lalu beberapa blok Transformer, sebelum menghasilkan logits untuk probabilitas token berikutnya
- Konfigurasi model yang disediakan adalah Tiny sekitar 0.5M parameter dengan waktu pelatihan sekitar 5 menit pada M3 Pro, Small sekitar 4M dengan sekitar 20 menit, dan Medium sebagai nilai default sekitar 10M dengan waktu pelatihan sekitar 45 menit
- Semua konfigurasi menggunakan tokenisasi berbasis karakter dengan
vocab_size=65 dan block_size=256, serta disesuaikan untuk dataset kecil sekitar 1MB seperti Shakespeare
- Tokenisasi BPE memiliki kosakata yang besar seperti 50,257 vocab pada GPT-2, sehingga pada dataset kecil sebagian besar bigram token terlalu jarang untuk mempelajari pola; materi juga membahas peralihan ke BPE untuk dataset yang lebih besar
- Referensi utama yang diberikan mencakup nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019), dan TinyStories paper
1 komentar
Opini Hacker News
Jika materi ini menarik, sangat direkomendasikan juga kelas CS336 dari Stanford. Kelas itu membahas kurikulum yang sama dengan jauh lebih mendalam, dan juga memperkenalkan intuisi teoretis seperti scaling laws serta sudut pandang sistem seperti optimisasi kernel/profiling
Tentu saja, tugasnya harus dikerjakan sendiri: https://cs336.stanford.edu/
Sedikit promosi, ada seri notebook Jupyter yang menjelaskan cara kerja machine learning dari nol
https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
Dan tentu saja juga membahas cara membangun LLM dari nol
https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...
Kebetulan saya baru mulai dengan repositori/buku/kursus Sebastian Raschka, Build a Large Language Model (From Scratch). Mungkin ini termasuk masalah yang menyenangkan: harus memilih materi belajar yang akan dipakai
[0] https://github.com/rasbt/LLMs-from-scratch
[1] https://www.manning.com/books/build-a-large-language-model-f...
[2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...
Saya sudah melakukannya sejak hari saya lahir. Awalnya sulit, tapi makin lama makin membaik
Saya pernah mencobanya dengan ULMFiT saat fast.ai masih relatif baru. Mungkin saat itu BERT adalah state of the art terbaru, dan strukturnya memungkinkan pelatihan model dasar lalu spesialisasi dengan head
Model dasarnya memakai seluruh Wikipedia, lalu ditambah beberapa GB tweet yang dikumpulkan lewat firehose. Saya bisa memakai lab dengan 20 komputer untuk pengembangan game, sepertinya kira-kira setara GTX 2080. Satu kali pelatihan pada Wikipedia yang sudah ditokenisasi memakan waktu sekitar setengah hari, jadi saya menjalankan konfigurasi berbeda di tiap komputer untuk hyperparameter tuning dan keesokan harinya memakai hasil terbaik sebagai titik awal. Selalu menyenangkan datang ke kantor pagi-pagi untuk melihat hasilnya
Engineering-nya mengerikan dan serba dadakan, tapi saya belajar banyak. Hasilnya lumayan, saya melakukan klasifikasi tweet, tetapi saya jadi punya gambaran tentang betapa banyak tenaga GPU dan tantangan engineering yang dibutuhkan kalau ingin mengerjakannya dengan serius. Saya belum sepenuhnya memahami potensi generatifnya, tetapi saya sempat tertawa cukup lama melihat tweet yang saya buat hanya karena penasaran
Ini terlihat seperti hampir menyalin persis video Andrej Karpathy ini(https://youtu.be/kCc8FmEb1nY) ke bentuk tulisan, atau saya salah lihat?
Katanya kurang lebih, “nanoGPT bertujuan mereproduksi GPT-2 (124 juta parameter) dan mencakup banyak hal. Proyek ini menyisakan inti utamanya saja, lalu mengecilkannya menjadi model sekitar 10 juta parameter yang bisa dilatih di laptop dalam waktu 1 jam…”
Sebagai tambahan konteks, dia adalah salah satu developer MLX dan peneliti machine learning yang mumpuni
Tertulis, “workshop praktik menulis sendiri setiap bagian dari pipeline pelatihan GPT sambil memahami apa yang dilakukan tiap komponen dan mengapa itu diperlukan”, tetapi karena ada dependensi torch, tampaknya tensor dan backpropagation tidak diimplementasikan sendiri melainkan diambil begitu saja. Tetap saja, apakah ini bisa dibilang dibuat “dari nol”?
Saya pernah mencoba hal serupa dengan Rust dan juga bantuan AI, tetapi membatasi diri agar tanpa dependensi dan hanya memakai standard library. Akibatnya saya harus mengimplementasikan jauh lebih banyak hal seperti desain tensor, konsep kernel, optimizer gradient descent sederhana, parser JSON buatan sendiri, abstraksi paralelisme data CPU mirip rayon, dan sebagainya. Cukup menyenangkan saat semuanya tersambung dan akhirnya berjalan. Sangat lambat, tetapi memang berfungsi
Saya tidak yakin memakai PyTorch masih bisa disebut “dari nol”. Bukan berarti saya mendorong ke ekstrem seperti harus menghindari sampai standard library, tetapi begitu Anda mengambil library yang memang sangat pas untuk tujuan itu, rasanya sudah tidak seperti “dari nol” lagi
Mungkin lebih tepat disebut “melatih LM dari nol”. Saya ragu ada mesin yang cukup untuk membuat model sebesar yang layak disebut “Large”
Bukan berarti itu layak dilakukan, tetapi untuk belajar Anda tidak perlu membeli GPU sendiri
Ada juga 48 core prosesor! Memang tidak mendukung AVX512, tapi tetap bisa berhitung
Seharusnya cukup untuk melatih LLM. Atau setidaknya keluarga kami mungkin bisa… anak saya mungkin harus mewarisi proyek itu dan melanjutkannya
Serius, menurut saya Anda entah melewatkan inti pembahasannya, terlalu mengada-ada mencari celah, atau memang salah. Ini soal mempelajari konsepnya, dan sisanya sebagian besar hanya hal sekunder
Kalau dilihat dari sisi bahwa ini terlalu mengada-ada atau salah, apa sebenarnya baseline terdokumentasi untuk menyebut language model sebagai “large”? GPT-2 dulu dan sekarang tetap disebut large language model, dan jumlah parameternya 1,5 miliar. Sekarang GPU konsumen yang bisa melatih ukuran seperti itu bisa didapat dengan harga sekitar 400 dolar