23 poin oleh GN⁺ 2025-09-16 | 7 komentar | Bagikan ke WhatsApp
  • 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 interaktif
  • llm.rs: logika forward pass, backward pass, dan pelatihan untuk keseluruhan LLM
  • transformer.rs, self_attention.rs, feed_forward.rs: blok inti transformer
  • embeddings.rs, output_projection.rs: embedding dan lapisan keluaran akhir
  • adam.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

 
t7vonn 2025-09-18

Rapi sekali.

 
ahwjdekf 2025-09-16

Lho, kenapa? Memangnya ini semacam, “saya juga bisa bikin sedikit yang beginian”?

 
cosine20 2025-09-22

Keagungan karma -47 wkwkwk

 
skrrgang 2025-09-16

Kalau lihat huruf r di Rust saja rasanya sudah mulai gatal dan kesal, ya? wkwkwkwkwkwk

 
aer0700 2025-09-16

Pasti ada banyak hal yang bisa dipelajari sambil membuatnya.

 
devjeonghwan 2025-09-16

Kalau belum mencoba, ya tidak akan bisa membuatnya.

 
GN⁺ 2025-09-16
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 = 80 sudah ada di lib.rs, jadi akan lebih baik memakai konstanta tersebut apa adanya seperti yang diarahkan di komentar

    • Bagian seperti ini yang masih tersisa menurut saya menunjukkan bahwa hasilnya bukan sesuatu yang benar-benar dibuat dengan pemahaman langsung oleh pengembang
    • Saya penasaran apakah sudah mengirim PR terkait hal ini
    • Soal cara penggunaan konstanta, bisa jadi penulisnya memang belum tahu caranya. Pada minggu pertama saya belajar Rust juga saya banyak memikirkan penamaan dan struktur kode
    • Saya penasaran bagaimana pendapat orang tentang kemungkinan gaya vibe coding di Rust menurunkan kualitas kode bahasa ini secara keseluruhan
    • Saya rasa kritik ini memang sangat tepat
  • Saya pernah menghabiskan berhari-hari di neraka dependensi Python, jadi pendekatan Rust yang cukup dengan sekali cargo run terasa seperti mimpi. Tapi saya penasaran, tanpa framework, bagian paling menyakitkan yang Anda hadapi itu apa. Tebakan saya, pasti debugging logika backpropagation

    • Saya merekomendasikan alat bernama uv. Setelah memakainya sendiri, menjalankan proyek Python jadi 90% lebih nyaman lihat uv
    • Menurut saya bagian tersulit adalah pemanfaatan resource seperti GPU
    • Ungkapan soal masalah dependensi Python mungkin masih masuk akal sekitar tahun 2010, tapi di 2025 rasanya itu terlalu berlebihan
    • Anda bilang cargo run terasa seperti mimpi, tapi sebenarnya pengalaman khas cargo build yang mengompilasi ulang seluruh internet sambil menghangatkan CPU di musim dingin menurut saya malah lebih baik
    • Saya merasa orang-orang yang memuji cargo sering kali kurang memahami trade-off dalam manajemen dependensi. Membangun ulang semua library setiap kali seperti di C memang tidak efisien, tetapi jika dependensi terlalu mudah diambil seperti di npm atau cargo, muncul kelemahan serius seperti ledakan jumlah dependensi, waktu build, dan masalah keamanan. Sistem build yang baik tidak selalu sama dengan mudahnya menambah dependensi, dan pola keterikatan dependensi oleh siapa saja lewat repositori paket terpusat juga menurut saya bukan pola yang sehat
  • Saya 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_distr terlihat rapi

    • Karena rasa ingin tahu, saya melihat pohon dependensinya dengan cargo tree, dan sejauh ini tampak masih rapi
    • Saya rasa pohon ini sendiri tidak terlalu berarti. Bisa saja implementasi langsungnya justru tidak efisien, dan dalam beberapa kasus memakai library eksternal dengan tepat malah bisa lebih baik
    • Saya penasaran apakah penilaian ini sindiran, atau memang butuh konteks tambahan
  • Saya 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

    • Namun, menurut saya latihan seperti ini hanya bermakna jika benar-benar menulis kodenya sendiri. Pengalaman membuatnya sendiri tanpa bantuan GPT itulah yang bernilai
  • Komentar penulis proyek dirangkum di Reddit

  • Saya suka karena keseluruhan proyeknya punya struktur yang sangat mudah dibaca

    • Saya ingin menyebutkan bahwa ini adalah kode yang dihasilkan AI
    • Gaya prosedural/berorientasi objeknya cukup kuat, jadi sulit disebut gaya Rust yang benar-benar baik secara ketat. Gaya yang lebih fungsional dengan iterator dan enum dianggap lebih ringkas dan ideal. Meski begitu, sebagai eksperimen ide ini sudah cukup bagus
    • Saya tidak tahu Rust bisa semudah ini dibaca. Malah saya mendapat kesan bahwa para engineer Rust menghindari kode sesederhana ini dan menjadikannya semacam kontes menyiksa diri. Semua pengalaman saya dengan komunitas Rust, budaya rekrutmen, dan sejenisnya jadi terasa masuk akal
  • 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

    • Hermes-3 Dataset cukup bagus
    • Di huggingface ada berbagai rantai user-assistant dari openai dan anthropic, tetapi yang perlu diperhatikan adalah banyak halusinasi di sana. Untuk instruction fine-tuning itu cukup bagus. Kalau yang diinginkan adalah instruction following, saya merekomendasikan kimi k2 distillation
    • Proyek ini memasukkan data pelatihan langsung ke dalam file main.rs. Isinya sekitar 50 kalimat pendek tentang pengetahuan umum, kemungkinan dipilih untuk mengurangi waktu pelatihan. Karena itu, performanya turun tajam jika bukan untuk pola berbasis skrip. Contoh prompt dan hasil:
      • saat memasukkan "hello": menghasilkan "Eclipses occur when one celestial body moves into the shadow of another" dan semacamnya, cukup sesuai
      • saat memasukkan "what are facts": mengulang deretan kata tanpa makna
      • saat memasukkan "how are mountains formed?": menghasilkan kata-kata yang tidak konsisten dan keluaran yang tidak bermakna