15 puan yazan GN⁺ 2026-02-23 | 1 yorum | WhatsApp'ta paylaş
  • C++/CUDA tabanlı bir LLM çıkarım motoru olarak, GPU bellek akışı ve NVMe doğrudan G/Ç sayesinde Llama 70B modelini RTX 3090 (24GB VRAM) üzerinde çalıştırabiliyor
  • 3 aşamalı uyarlanabilir önbellekleme yapısı kullanarak VRAM, sabitlenmiş RAM ve NVMe/mmap alanlarını otomatik olarak bölüyor; mmap'e kıyasla 83 kata kadar hız artışı sağlıyor
  • gpu-nvme-direct arka ucu, CPU'yu tamamen atlayarak veriyi NVMe'den doğrudan GPU'ya aktarıyor ve PCIe bant genişliğini azami ölçüde kullanıyor
  • Layer skip ve self-speculative decoding özellikleriyle gereksiz hesaplamayı azaltıp kalite kaybı olmadan işlem hızını artırıyor
  • Tüketici donanımında son derece büyük modellerin verimli çalıştırılmasını mümkün kılarak yüksek performanslı LLM çıkarımının erişilebilirliğini genişletme potansiyeli gösteriyor

NTransformer'a genel bakış

  • RTX 3090 (24GB VRAM) üzerinde Llama 70B modelini çalıştıran yüksek verimli bir C++/CUDA LLM çıkarım motoru
    • Model katmanlarını GPU belleği üzerinden akış halinde taşır; isteğe bağlı olarak NVMe doğrudan G/Ç kullanarak CPU'yu tamamen devre dışı bırakır
  • CUDA Toolkit dışında harici bağımlılık yok, PyTorch veya cuBLAS gerektirmez
  • GGUF model formatını destekler; Q4_0, Q8_0, Q4_K_M, Q5_K, Q6_K, F16, F32 niceleme biçimleri kullanılabilir

Performans ve önbellekleme yapısı

  • 3 aşamalı uyarlanabilir önbellekleme (3-Tier Adaptive Caching)
    • VRAM'de yerleşik katmanlar (0 G/Ç)
    • Sabitlenmiş RAM (yalnızca H2D aktarımı için)
    • NVMe/mmap geri dönüş yolu
  • RTX 3090 + 48GB RAM ortamında mmap'e kıyasla 83 kat hız artışı
  • PCIe Gen3 x8 bant genişliği (yaklaşık 6.5 GB/s) darboğaz olarak çalışıyor
  • Q4_K_M nicelemesi, VRAM'e 10 katman daha fazla yükleyerek (36'ya karşı 26) aktarım miktarını azaltıyor
  • Layer skip (kosinüs benzerliği tabanlı) ile 80 katmandan 20'si atlanıyor, kalite kaybı en aza indiriliyor

Başlıca özellikler

  • SLEP akışı: NVMe okuma, PCIe DMA ve GPU hesaplamasını çift tamponla örtüştürerek işler
  • gpu-nvme-direct arka ucu: NVMe verisini GPU'nun erişebildiği sabitlenmiş belleğe doğrudan okur
  • Self-speculative decoding: VRAM'de yerleşik katmanları taslak model olarak kullanır, ek model gerektirmez
  • Otomatik veri yolu seçimi: VRAM'de yerleşik > sabitlenmiş RAM H2D > mmap sabitlenmiş > CPU memcpy
  • Llama mimarisi desteği: RoPE, GQA, SwiGLU, RMSNorm, KV önbelleği dahil

Sistem gereksinimleri

  • Linux (Ubuntu, kernel 6.17+), CUDA Toolkit 13.1, gcc/g++ 14, CMake 3.24+
  • Compute Capability 8.0+ GPU (RTX 3090 üzerinde test edildi)
  • NVMe doğrudan G/Ç kullanımı için ayrı bir PCIe yuvasındaki NVMe SSD ve gpu-nvme-direct kütüphanesi gerekir

NVMe doğrudan akışı

  • Model VRAM'e sığmadığında, NVMe → GPU doğrudan yolu ile CPU tamamen devre dışı bırakılır
    • Veri akışı: NVMe SSD → DMA → sabitlenmiş staging belleği → PCIe H2D → GPU arabelleği → hesaplama
  • Kullanıcı alanından doğrudan erişim için NVMe, VFIO'ya bağlanır
  • Her katman (70B Q6_K için yaklaşık 670MB) yaklaşık 202ms içinde 670 NVMe komutuyla okunur
  • NVMe okuma, H2D DMA ve GPU hesaplaması çift tamponlu işlem hattı ile paralel yürütülür

Sistem kurulumu ve risk uyarısı

  • Otomatik kurulum betiği (setup_system.sh), GRUB, NVIDIA DKMS, CUDA başlıkları, VFIO, NVMe bağlama adımlarını sırasıyla yapılandırır
  • IOMMU devre dışı bırakma, çekirdek modülü yaması, NVMe VFIO bağlama gibi yüksek riskli işlemler içerir
  • Hatalı yapılandırma durumunda önyükleme başarısızlığı, NVMe veri kaybı, sistem kararsızlığı yaşanabilir
  • Önyükleme sürücüsü kesinlikle kullanılmamalıdır; ayrı, yalnızca NVMe için ayrılmış bir aygıt gerekir
  • Tüm değişiklikler için yedekleme ve geri yükleme betikleri sağlanır

Mimari ve kod yapısı

  • src/ dizinindeki başlıca bileşenler
    • core/: tensörler, bellek ayırma, GPU aygıt yönetimi
    • cuda/: GEMV, RMSNorm, RoPE, SwiGLU, softmax çekirdekleri
    • memory/: NVMe ve mmap tabanlı SLEP akış motoru
    • model/: Transformer bileşenleri, GGUF yükleyici, attention, FFN, normalization
    • inference/: tokenizer, sampler, motor
  • scripts/: sistem kurulumu, NVMe bağlama ve geri yükleme betiklerini içerir

Geliştirme aşaması yol haritası

  • Aşama 1: Llama 8B Q8_0, özel CUDA çekirdekleri, 48.9 tok/s (tamamlandı)
  • Aşama 2: SLEP akışı, tek GPU'da 70B çalıştırma, 33 kat hız artışı (tamamlandı)
  • Aşama 3: Q4_K_M/Q5_K desteği, Layer skip, self-speculative decoding, F16 KV önbelleği (tamamlandı)
  • Aşama 4: NVMe Direct arka ucu, GPU güdümlü NVMe okuma 3.35 GB/s (tamamlandı)
  • Aşama 5: çıkarım optimizasyonu ve herkese açık C API (planlanıyor)

Lisans

  • BSD-2-Clause lisansı uygulanır

1 yorum

 
GN⁺ 2026-02-23
Hacker News yorumları
  • CPU'yu atlayıp NVMe'den GPU'ya doğrudan aktarım yapma yaklaşımının gerçekten zekice olduğunu düşünüyorum
    Yerelde büyük modeller çalıştırırken darboğaz her zaman bellek hiyerarşisiydi; bu, NVMe'yi adeta genişletilmiş VRAM gibi doğrudan DMA ile ele almak anlamına geliyor
    Apple M serisinin birleşik bellek (unified memory) yaklaşımıyla karşılaştırıldığında nasıl olur merak ediyorum. M4 Max 70B modeli tamamen belleğe alabiliyor ama throughput'u 3090'dan daha düşük
    NVMe yaklaşımını kullanan 3090 ile M4 Max'in yerel performansını batch inference temelinde karşılaştıran benchmark'lar görmek ilginç olurdu

    • Bende M3 var, Metal üzerinde test etmeyi planlıyorum
  • GPUdirect kullanılırsa depolama aygıtına doğrudan DMA aktarımı mümkün oluyor
    Eğer m.2 depolama aslında DRAM olsaydı nasıl olurdu diye düşünüyorum. GPU'dan modeli spill ederken kalıcılık gerekmiyor, böylece sistem RAM'i CPU için bırakılabilir

    • RAM disk kullanmak çok daha iyi olabilir. Intel Optane'ın standart haline gelememesi üzücü. Tam da bu tür workflow'lara uygun bir teknolojiydi
    • Ben de aynı şeyi düşündüm. Eskiden Dask Summit'te dask-cudf ile ilgili bir sunum yapmıştım; paralel SSD dizisi → GPUDirect Storage → PCIe → A100 GPU yapısıyla log analizini hızlandırmıştık. Şimdi bunu LLM veya MoE modellerine uygulamak ilginç olabilir
    • Aslında DRAM tabanlı m.2 depolama zaten CXL (Compute Express Link) biçiminde mevcut. Ancak RAM fiyatları çok yüksek olduğu için NVMe konektörü başına 31GB/s bant genişliğini kullanmak zor
  • Saniyede 0.2 token hızı sohbet için yavaş, ama batch/asenkron işler için yeterli
    Ben otomatik içerik üretim pipeline'ları çalıştırıyorum ve birden fazla LLM çağrısını aynı anda yürütüyorum. Görsel üretimi darboğaz olduğu için tüm iş zaten yaklaşık 20 dakika sürüyor
    70B modeli yerelde çalıştırabilmek, API token maliyetinden tasarruf sağlayacağı için büyük bir maliyet avantajı olurdu

    • Maliyet açısından verimli değil. 0.5 tok/s ile saatte 3600 token ediyor ve 3090 sistemi 200~300W tüketiyor. Aynı miktarda token'ı OpenRouter'da llama 3.1 ile çalıştırmak elektrik ücretinden çok daha ucuz. Yine de gizlilik odaklı inference açısından anlamlı
    • 3090'ı uzun süre 350W'da çalıştırmanın elektrik maliyetini de hesaba katmak gerek
  • 0.2 tok/s deneysel kullanım için fena değil ama etkileşimli kullanım için yetersiz
    Çoğu durumda iyi quantize edilmiş 8B veya 13B modeller daha iyi bir gecikme-kalite dengesi sunuyor

    • Ben de sadece bunun mümkün olup olmadığını test etmek istemiştim. Eskiden PS2'de klasik transformer ile saniyede 3000 token üretmiştim; bu, bellekten GPU'ya doğrudan komut gönderme mimarisi sayesinde oluyordu. Normal PC'ler CPU üzerinden geçmek zorunda olduğu için yavaş. Profesyonel GPU'lar bu sorunu çözüyor ama çok pahalı
    • Yine de bazı durumlarda büyük modellerin kalitesi daha önemli olabiliyor
    • CPU+GPU kombinasyonuyla çalıştırmak daha hızlı. Ben 7950X+3090 ile yaklaşık 1.5 tok/s alıyorum
    • Performans tablosunu gördükten sonra üst sıradaki girdinin 8B model olduğunu anladım. 5 saniye/token çok yavaş. Benim 5950X+128GB RAM sistemimde CPU ile 3060 GPU kombinasyonu muhtemelen daha hızlı olurdu. 3090'da 2 saniye/token'un hesaplama sınırı olduğu iddiası da bana pek inandırıcı gelmiyor
  • Gerçekten ilginç bir deney. Keşke ben de bunu önce deneseydim
    PCIe'nin teorik bant genişliğine kıyasla gerçek throughput değerleri nasıl merak ediyorum. Bunun latency mi yoksa bant genişliği sorunu mu olduğunu bilmek isterdim

    • Pratikte bu bir bant genişliği darboğazı. B450 anakartım yalnızca PCIe3 x8 desteklediği için GPU kısıtlanıyor. X570'e yükseltirsem hız muhtemelen 2~3 kat artar
  • Harika bir hack, ama 70B modelde 0.5 tok/s aynı kartta 7B modelin 30+ tok/s vermesiyle karşılaştırıldığında yavaş kalıyor
    NVIDIA araştırmasına göre 10B altı modeller bile ajan görevlerinin %40~70'ini halledebiliyor ve kalite farkı da hızla kapanıyor

  • Bu alan gelecekte deney yapmaya fazlasıyla değer
    Uzun vadede asıl kritik nokta model optimizasyonu olacak gibi görünüyor; yani modelin bazı kısımlarını atlayıp performansı etkilemeyen bölümleri bulmaya yönelik araştırmalar. Sonuçta model de bir tür kayıplı sıkıştırma (lossy compression) yapısı
    Bu tür bir yönelim yapay zekanın demokratikleşmesine de katkı sağlar

    • Sıkıştırma benzetmesi ilginç. Fine-tuning de benzer şekilde görülebilir. Örneğin 3B modeli belirli bir göreve göre ayarlarsanız, 70B modelin genel amaçlı yapısına ihtiyaç kalmaz
  • Gerçekten çok havalı bir proje. Böyle bir fikri akla getirmek için nasıl bir sistem/donanım bilgisi altyapısı gerektiğini merak ediyorum
    Ben donanımın büyük ölçüde soyutlandığı ortamlarda çalışıyorum, bu yüzden böyle bir yaklaşımı düşünmek zor. Sadece yaratıcılık değil, sistem seviyesinde anlayış da gerekiyor gibi görünüyor

    • Tam da bu deney işte: ps2-llm projesi
      PS2'de LLM çalıştırmaya uğraşırken 32MB RAM ve 4MB VRAM sınırına takılıp katman akışlama (layer streaming) yöntemini geliştirmiştim. PS2'de VRAM 32 bit adresleri doğrudan işleyebildiği için çok hızlıydı; ben de bunu PC'de yeniden üretmeye çalıştım
    • Ben de benzer düşünüyorum. Eski konsollarda CPU yavaştı, bu yüzden DMA aktarımı kritik öneme sahipti. Muhtemelen o deneyim böyle bir fikre dönüştü. PS2'nin akıllı hafıza kartı da DMA açısından epey karmaşıktı
  • Ben de benzer bir şey deniyorum. VRAM'in yarısından daha azıyla 1T model çalıştırma deneyi yapıyorum
    SGLang'in yönlendirme katmanını değiştirerek Gen5 NVMe'den GPU belleğine JIT tahmin tabanlı expert swap uygulayabileceğimi düşünüyorum. NVIDIA Dynamo ve NIXL primitive'lerini kullanıyorum
    Bunu daha önce deneyen biri var mı merak ediyorum

    • Ben de onu görmek isterim. Bir 3090 daha alıp PCIe3 darboğazını çözmek için anakart yükseltmesi yapmayı düşünüyorum. glm 4.7~5'i q4_k_m ile çalıştırmak mümkün olabilir
  • Harika proje. Tüketici sınıfı GPU'larda DKMS patch süreci hakkında biraz daha fazla ayrıntı duymak isterim. Ben de denemek istiyorum

    • Dokümantasyonu güncelleyip patch süreciyle ilgili risk bilgilerini ekledim
    • NVIDIA'nın açık kaynak sürücüsünü değiştirerek P2P GPU iletişimi veya vGPU bölme gibi kurumsal özelliklerin kilidini açan örnekler de oldu
      İlgili bağlantılar: RTX4090 P2P Unlock, vGPU Unlock