RustGPT: Baştan Sona Rust ile Tamamen Yazılmış Saf Transformer LLM
(github.com/tekaratzas)- RustGPT, harici makine öğrenimi framework'leri olmadan, yalnızca saf Rust ve
ndarrayile uygulanan transformer tabanlı bir dil modeli - Ön eğitim (Pre-training) ve instruction tuning ile olgusal bilgi ve diyalog kalıplarını öğrenmesi için tasarlanmış
- Yapı, tokenizer → embedding → transformer blokları → çıktı projeksiyonu şeklinde ilerleyen tipik bir LLM mimarisini izliyor
- Modüler kaynak yapısı ve test kodları sunarak eğitim, çıkarım ve optimizasyon süreçlerinin ayrıntılı biçimde anlaşılmasını sağlıyor
- Rust ekosisteminde framework bağımlılığı olmadan sıfırdan LLM uygulamak isteyen geliştiriciler ve öğrenenler için önemli bir referans
Proje genel bakışı
- RustGPT, harici makine öğrenimi framework'leri veya karmaşık bağımlılıklar olmadan, yalnızca saf Rust dili ve doğrusal cebir kütüphanesi (
ndarray) ile LLM uygulayan bir açık kaynak proje - Temel amaç, modern LLM'lerin çekirdek bileşenlerini (transformer, attention, embedding, optimizasyon vb.) doğrudan uygulamak ve eğitim sürecini anlamak
- Diğer ana akım LLM'lerden farklı olarak transformer yapısı, backpropagation, tokenizer ve optimizer gibi tüm parçaları Rust koduyla doğrudan tasarlıyor; bu da Rust geliştiricileri ve araştırmacıların derin öğrenmenin prensiplerini sıfırdan anlayıp genişletebilmesini sağlıyor
- Matris işlemlerini ndarray ile yürütmesi ve PyTorch ya da TensorFlow gibi harici makine öğrenimi paketlerine bağımlı olmaması ayırt edici yönü
- Modülerlik ve test kapsamı güçlü olduğu için çeşitli deneyler ve iyileştirmeler için uygun; ayrıca "sıfırdan LLM geliştirme (From Scratch)" eğitim amacı için de elverişli
Başlıca özellikler ve uygulama yaklaşımı
- Transformer mimarisi: giriş metni → tokenizasyon → embedding → transformer blokları → nihai tahmin
- Giriş metni, tokenizasyon sürecinden geçerek embedding vektörlerine dönüştürülür
- Embedding'ler Transformer Block içinden geçer (multi-head attention + feedforward network)
- Son olarak Output Projection Layer, kelime hazinesi üzerindeki olasılık dağılımını üreterek tahmini gerçekleştirir
Uygulama yapısı
main.rs: eğitim pipeline'ı, veri hazırlama, interaktif modun çalıştırılmasıllm.rs: LLM genelinde forward·backward pass ve eğitim mantığıtransformer.rs,self_attention.rs,feed_forward.rs: çekirdek transformer bloklarıembeddings.rs,output_projection.rs: embedding ve nihai çıktı katmanıadam.rs: Adam optimizer uygulaması- Her modül, karşılık gelen test kodlarını (
tests/) içerir ve işlev doğrulaması yapılabilir
Eğitim·test yöntemi ve veri akışı
- Eğitim süreci
- Sözlük oluşturma → ön eğitim (100 epoch, olgusal cümle verisi) → instruction tuning (100 epoch, diyalog verisi)
- Ön eğitim örneği: "The sun rises in the east and sets in the west"
- Instruction tuning örneği: "User: How do mountains form? Assistant: ..."
- İnteraktif mod desteği
- Eğitim tamamlandıktan sonra prompt-yanıt tabanlı diyalog testi yapılabiliyor
- Örnek: "How do mountains form?" → "Mountains are formed through tectonic forces or volcanism..."
Teknik ayrıntılar
- Kelime haznesi boyutu: eğitim verisine göre dinamik olarak ayarlanıyor
- Embedding boyutu: 128, gizli katman: 256
- Maksimum dizi uzunluğu: 80 token
- Mimari: 3 transformer bloğu + embedding + çıktı katmanı
- Eğitim algoritması: Adam optimizer, gradient clipping (L2 normu 5.0 ile sınırlı)
- Öğrenme oranı: pre-training 0.0005, instruction tuning 0.0001
- Kayıp fonksiyonu: cross-entropy loss
Model ve kod özellikleri
- Özel tokenizer (noktalama işaretlerini işler)
- Greedy decoding tabanlı metin üretimi
- Modüler katman yapısı ve açık arayüzler
- Test kapsamı: her katman ve işlev için birim test kodları içerir
- Bağımlılıklar: yalnızca
ndarray(matris işlemleri),rand/rand_distr(rastgele başlatma) kullanılır (PyTorch/TensorFlow gibi harici ML kullanılmaz) - Eğitsel değer: modern LLM'lerin iç yapısını ve eğitim prensiplerini öğrenmek için ideal
Gelişim potansiyeli
- Gelişmiş mimarilerin eklenmesi: multi-head attention, RoPE, positional encoding vb.
- Performans optimizasyonu: SIMD, paralel eğitim, bellek verimliliği iyileştirmeleri
- Model kaydetme/yükleme desteği
- Gelişmiş sampling (beam search, Top-k/Top-p) ve değerlendirme metriklerinin eklenmesi
Önemi
- Python tabanlı PyTorch ve TensorFlow framework'lerine bağımlı olmadan yalnızca Rust ile doğrudan LLM uygulanabileceğini gösteren, öğrenme ve deney amaçlı bir proje
- LLM'lerin iç çalışma prensiplerini anlamak ve Rust ortamında ML sistemleri geliştirmek isteyen geliştiriciler için faydalı bir referans
7 yorum
Oldukça temiz görünüyor.
Neden ki? Ben de biraz yapabilirim, mesele bu mu?
karma -47'nin görkemi haha
rustın sadecerharfini görünce içiniz kıpır kıpır olup sinirleniyorsunuz, değil mi? hahahahahaYaparken öğreneceğiniz şeyler olacaktır.
Denemeden yapılamaz ki.
Hacker News görüşleri
GPT’nin otomatik ürettiği yorumlar veya daha önce tanımlanmış sabitleri tekrar yazan kodlar görünüyor; bence bu tür kısımların kaldırılması gerekiyor. Örneğin
const MAX_SEQ_LEN: usize = 80gibi sabitler zatenlib.rsiçinde var, bu yüzden yorumlarda belirtildiği gibi o sabitleri doğrudan kullanmak daha iyi olurvibe codingtarzı Rust’ın, dilin genel kod kalitesini düşürebileceği fikri hakkında ne düşünüyorsunuz?Python bağımlılık cehenneminde günler harcamış biri olarak, tek bir
cargo runile işin bitmesi gerçekten rüya gibi geliyor. Ama framework olmadan en acı verici kısmın ne olduğunu merak ediyorum. Bahse girerim backpropagation mantığını debug etmektiuvadlı aracı tavsiye ederim. Ben kullandıktan sonra Python projelerini çalıştırmak %90 daha kolaylaştı uv bağlantısıcargo runın rüya gibi olduğundan bahsediliyor ama bencecargo build’in tüm interneti yeniden derleyip kışın CPU’yu ısıtma deneyimi daha baskıncargoyu övenlerin çoğunun bağımlılık yönetiminin trade-off’larını tam kavramadığını düşünüyorum. C’deki gibi tüm kütüphaneleri her seferinde baştan derlemek verimsiz amanpmveyacargogibi sistemlerde bağımlılık eklemek fazla kolay olunca bağımlılık patlaması, build süreleri ve güvenlik sorunları gibi ciddi dezavantajlar doğuyor. İyi bir build sistemi ile bağımlılık eklemenin kolay olması aynı şey değil; ayrıca merkezi bir paket deposunda herkesin birbirine rastgele bağımlanması da sağlıklı bir model değilBen de benzer bir Rust projesi üzerinde çalışıyorum. WebAssembly ile tarayıcıda çalışan bir sürümü var; tarayıcı demosu ve kaynak kodu da açık
ndarray,rand,rand_distrpaket yapısı temiz görünüyorcargo treeile bağımlılık ağacına baktım, şimdilik temiz görünüyorRust’ın bellek güvenliğinin, transformer implementasyonunda buffer overflow’ları azaltmak için oldukça faydalı olduğunu düşünüyorum. CUDA kernel’ları performansta hâlâ önde. Tokenizer tarafında da BPE’yi baştan mı yazıyorlar, yoksa mevcut bir kütüphane mi kullanılıyor merak ediyorum
Ben de Rust ile picogpt yaparken jaykmody’nin GPT from scratch blogunu çok referans aldım. Proje bağlantısı
Tebrikler; küçük bir not olarak, LLM’de transformer block’u yeniden kullanmak yerine her birinin ayrı bir instance olması daha iyi olur demek isterim. Ben de daha önce Zig ve MLX ile benzer şekilde temelden öğrenmeye yönelik çalışmalar yapmış, sonra yavaş yavaş özellik ekleyip en sonunda PyTorch/Transformers tarafına geçmiştim
Proje yazarının yorumları Reddit’te derlenmiş
Tüm projenin gerçekten okunması kolay bir yapıda olması hoşuma gitti
enumkullanan daha işlevsel bir tarzın daha kısa ve ideal olduğu düşünülür. Ama fikir deneyi olarak gayet yeterliVeri setinin kaynağını merak ediyorum. Kendim de bakacağım ama soruyu bırakayım dedim. Ben CPU ağırlıklı çalışan ve backpropagation içermeyen bir mimari geliştiriyorum; sınıflandırma veri setlerinde iyi çalışıyor. Tek örnek üzerinden artımlı güncelleme yapabildiği için continual learning için de uygun olabilir. Şimdiye kadar sadece
tiny.txtüzerinde bir oyuncak demo eğittim; büyük dil modelleriyle hiç denemedim. Mimarimin on-device veya on-premise yardımcılar için epey iyi çalışabileceğini düşündüğümden denemeye devam edeceğim. Önerebileceğiniz açık kaynak LLM eğitim veri setleri var mı?main.rsdosyasının içine koyuyor. İçerik, genel bilgiye dair yaklaşık 50 kısa cümleden oluşuyor ve muhtemelen eğitim süresini kısaltmak için böyle seçilmiş. Bu yüzden script tabanlı olmayan girişlerde performans hızla düşüyor. Örnek promptlar ve sonuçlar: