RustGPT: LLM transformer murni yang sepenuhnya diimplementasikan dari nol dengan Rust
(github.com/tekaratzas)- RustGPT adalah model bahasa berbasis transformer yang diimplementasikan hanya dengan Rust murni dan
ndarray, tanpa framework machine learning eksternal - Dirancang agar dapat mempelajari pengetahuan berbasis fakta dan pola percakapan melalui pre-training dan instruction tuning
- Strukturnya mengikuti arsitektur LLM yang umum: tokenizer → embedding → blok transformer → output projection
- Menyediakan struktur kode sumber yang modular dan kode pengujian sehingga proses pelatihan, inferensi, dan optimisasi dapat dipahami secara rinci
- Menjadi referensi penting bagi pengembang atau pembelajar di ekosistem Rust yang ingin mengimplementasikan LLM dari nol tanpa ketergantungan pada framework
Gambaran proyek
- RustGPT adalah proyek open source yang mengimplementasikan LLM hanya dengan bahasa Rust murni dan pustaka operasi aljabar linear (
ndarray), tanpa framework machine learning eksternal atau dependensi yang rumit - Tujuan utamanya adalah mengimplementasikan langsung komponen inti LLM modern (transformer, attention, embedding, optimisasi, dan sebagainya) serta memahami proses pelatihannya
- Berbeda dari LLM arus utama lainnya, proyek ini merancang sendiri struktur transformer, backpropagation, tokenizer, optimizer, dan lainnya sepenuhnya dalam kode Rust, sehingga pengembang dan peneliti Rust dapat memahami serta memperluas prinsip deep learning langsung dari dasarnya
- Keunikan utamanya adalah penggunaan ndarray untuk operasi matriks dan tidak bergantung pada paket machine learning eksternal seperti PyTorch atau TensorFlow
- Modularitas dan cakupan pengujiannya kuat, sehingga cocok untuk berbagai eksperimen dan penyempurnaan, serta sesuai untuk tujuan edukasi LLM “dibuat sendiri dari nol” (From Scratch)
Fitur utama dan cara implementasi
- Arsitektur transformer: teks masukan → tokenisasi → embedding → blok transformer → prediksi akhir
- Teks masukan melalui proses tokenisasi lalu diubah menjadi vektor embedding
- Embedding melewati Transformer Block (multi-head attention + feedforward network)
- Terakhir, Output Projection Layer menghasilkan distribusi probabilitas kosakata untuk melakukan prediksi
Struktur implementasi
main.rs: pipeline pelatihan, persiapan data, menjalankan mode interaktifllm.rs: logika forward pass, backward pass, dan pelatihan untuk keseluruhan LLMtransformer.rs,self_attention.rs,feed_forward.rs: blok inti transformerembeddings.rs,output_projection.rs: embedding dan lapisan keluaran akhiradam.rs: implementasi optimizer Adam- Setiap modul menyertakan kode pengujian yang sesuai (
tests/) sehingga verifikasi fungsionalitas dapat dilakukan
Cara pelatihan·pengujian dan alur data
- Proses pelatihan
- Pembuatan kosakata → pre-training (100 epoch, data kalimat faktual) → instruction tuning (100 epoch, data percakapan)
- Contoh pre-training: "The sun rises in the east and sets in the west"
- Contoh instruction tuning: "User: How do mountains form? Assistant: ..."
- Dukungan mode interaktif
- Setelah pelatihan selesai, pengujian percakapan berbasis prompt-respons dapat dilakukan
- Contoh: "How do mountains form?" → "Mountains are formed through tectonic forces or volcanism..."
Susunan teknis rinci
- Ukuran kosakata: diatur secara dinamis berdasarkan data pelatihan
- Dimensi embedding: 128, hidden layer: 256
- Panjang sekuens maksimum: 80 token
- Arsitektur: 3 blok transformer + embedding + lapisan keluaran
- Algoritme pelatihan: optimizer Adam, gradient clipping (batas L2 norm 5.0)
- Learning rate: pre-training 0.0005, instruction tuning 0.0001
- Fungsi loss: cross-entropy loss
Karakteristik model dan kode
- Tokenizer kustom (penanganan tanda baca)
- Pembuatan teks berbasis greedy decoding
- Struktur lapisan modular dan antarmuka yang jelas
- Cakupan pengujian: dilengkapi kode unit test untuk tiap lapisan dan fungsi
- Dependensi: hanya menggunakan
ndarray(operasi matriks),rand/rand_distr(inisialisasi acak) (tanpa ML eksternal seperti PyTorch/TensorFlow) - Nilai edukatif: sangat cocok untuk mempelajari struktur internal dan prinsip pelatihan LLM modern yang representatif
Potensi pengembangan
- Adopsi arsitektur lanjutan: multi-head attention, RoPE, positional encoding, dan sebagainya
- Optimisasi performa: SIMD, pelatihan paralel, peningkatan efisiensi memori
- Dukungan penyimpanan/pemuatan model
- Penambahan sampling yang lebih baik (beam search, Top-k/Top-p) dan metrik evaluasi
Makna pentingnya
- Proyek pembelajaran dan eksperimen yang menunjukkan bahwa LLM dapat diimplementasikan langsung hanya dengan Rust tanpa bergantung pada framework berbasis Python seperti PyTorch atau TensorFlow
- Referensi yang berguna bagi pengembang yang ingin memahami cara kerja internal LLM dan membangun sistem ML di lingkungan Rust
7 komentar
Rapi sekali.
Lho, kenapa? Memangnya ini semacam, “saya juga bisa bikin sedikit yang beginian”?
Keagungan karma -47 wkwkwk
Kalau lihat huruf
rdi Rust saja rasanya sudah mulai gatal dan kesal, ya? wkwkwkwkwkwkPasti ada banyak hal yang bisa dipelajari sambil membuatnya.
Kalau belum mencoba, ya tidak akan bisa membuatnya.
Komentar Hacker News
Terlihat ada kode yang menuliskan ulang komentar yang dibuat otomatis oleh GPT atau konstanta yang sudah didefinisikan sebelumnya, jadi menurut saya bagian seperti itu perlu dihapus. Misalnya, konstanta seperti
const MAX_SEQ_LEN: usize = 80sudah ada di lib.rs, jadi akan lebih baik memakai konstanta tersebut apa adanya seperti yang diarahkan di komentarSaya pernah menghabiskan berhari-hari di neraka dependensi Python, jadi pendekatan Rust yang cukup dengan sekali
cargo runterasa seperti mimpi. Tapi saya penasaran, tanpa framework, bagian paling menyakitkan yang Anda hadapi itu apa. Tebakan saya, pasti debugging logika backpropagationcargo runterasa seperti mimpi, tapi sebenarnya pengalaman khascargo buildyang mengompilasi ulang seluruh internet sambil menghangatkan CPU di musim dingin menurut saya malah lebih baikSaya sedang mengerjakan proyek Rust yang mirip. Ada versi yang berjalan di browser lewat WebAssembly, dan saya juga membuka demo browser serta kode sumber
Susunan paket
ndarray,rand,rand_distrterlihat rapiSaya rasa keamanan memori Rust cukup berguna untuk mengurangi buffer overflow saat mengimplementasikan transformer. CUDA kernel tetap unggul dalam performa. Saya juga penasaran apakah tokenizer-nya membuat ulang BPE dari nol, atau memakai library yang sudah ada
Saya juga membuat picogpt dengan Rust dan banyak merujuk ke blog jaykmody GPT from scratch. Tautan proyek
Selamat, dan saya ingin memberi catatan kecil bahwa dalam LLM sebaiknya jangan memakai ulang transformer block, melainkan buat instans yang berbeda untuk masing-masing. Saya juga dulu pernah melakukan latihan serupa untuk membangun fondasi dengan Zig dan MLX, lalu perlahan menambah fitur sebelum akhirnya berpindah ke PyTorch/Transformers
Komentar penulis proyek dirangkum di Reddit
Saya suka karena keseluruhan proyeknya punya struktur yang sangat mudah dibaca
Saya penasaran dengan sumber dataset-nya. Saya akan mencarinya sendiri, tapi tetap ingin bertanya. Saya telah mengembangkan arsitektur yang berfokus pada CPU dan tanpa backpropagation, dan itu berjalan baik pada dataset klasifikasi. Karena mendukung incremental update per contoh tunggal, sepertinya juga bisa dipakai untuk continual learning. Saya baru pernah melatih toy demo pada tiny.txt, dan belum pernah mencoba LLM. Arsitektur saya tampaknya bisa bekerja cukup baik sebagai asisten on-device atau on-premise, jadi saya akan terus bereksperimen. Saya penasaran apakah ada dataset pelatihan LLM open source yang layak direkomendasikan