15 poin oleh GN⁺ 2026-02-23 | 1 komentar | Bagikan ke WhatsApp
  • Mesin inferensi LLM berbasis C++/CUDA yang memungkinkan model Llama 70B berjalan di RTX 3090 (24GB VRAM) melalui streaming memori GPU dan I/O langsung NVMe
  • Menggunakan struktur caching adaptif 3 tingkat untuk membagi otomatis antara VRAM, RAM pinned, dan fallback NVMe/mmap, serta mencapai peningkatan kecepatan hingga 83x dibanding mmap
  • Backend gpu-nvme-direct mentransfer data langsung dari NVMe ke GPU dengan sepenuhnya melewati CPU, sehingga bandwidth PCIe dapat dimanfaatkan semaksimal mungkin
  • Fitur Layer skip dan self-speculative decoding mengurangi komputasi yang tidak perlu dan meningkatkan kecepatan pemrosesan tanpa penurunan kualitas
  • Memungkinkan model berukuran sangat besar berjalan efisien di hardware konsumen, sehingga membuka kemungkinan akses yang lebih luas ke inferensi LLM berkinerja tinggi

Ikhtisar NTransformer

  • Mesin inferensi LLM C++/CUDA berisiensi tinggi yang menjalankan model Llama 70B pada RTX 3090 (24GB VRAM)
    • Melakukan streaming layer model melalui memori GPU, dengan opsi direct I/O NVMe untuk sepenuhnya melewati CPU
  • Tidak memiliki dependensi eksternal selain CUDA Toolkit, tidak memerlukan PyTorch atau cuBLAS
  • Mendukung format model GGUF, dengan format kuantisasi Q4_0, Q8_0, Q4_K_M, Q5_K, Q6_K, F16, F32

Performa dan struktur caching

  • Caching adaptif 3 tingkat (3-Tier Adaptive Caching)
    • Layer yang menetap di VRAM (0 I/O)
    • RAM pinned (khusus transfer H2D)
    • Fallback NVMe/mmap
  • Pada lingkungan RTX 3090 + RAM 48GB, mencapai peningkatan kecepatan 83x dibanding mmap
  • Bandwidth PCIe Gen3 x8 (sekitar 6.5 GB/s) menjadi bottleneck
  • Kuantisasi Q4_K_M memuat 10 layer lebih banyak di VRAM (36 vs 26), sehingga mengurangi volume transfer
  • Layer skip (berbasis cosine similarity) melewati 20 dari 80 layer dengan kehilangan kualitas minimal

Fitur utama

  • Streaming SLEP: pembacaan NVMe, PCIe DMA, dan komputasi GPU ditumpangtindihkan dengan double buffer
  • Backend gpu-nvme-direct: membaca data NVMe langsung ke memori pinned yang dapat diakses GPU
  • Self-speculative decoding: memanfaatkan layer yang menetap di VRAM sebagai model draft, tanpa memerlukan model tambahan
  • Pemilihan jalur data otomatis: menetap di VRAM > H2D RAM pinned > mmap pinned > memcpy CPU
  • Dukungan arsitektur Llama: termasuk RoPE, GQA, SwiGLU, RMSNorm, dan cache KV

Kebutuhan sistem

  • Linux (Ubuntu, kernel 6.17+), CUDA Toolkit 13.1, gcc/g++ 14, CMake 3.24+
  • GPU Compute Capability 8.0+ (RTX 3090 telah diuji)
  • Untuk direct I/O NVMe, diperlukan NVMe SSD pada slot PCIe terpisah serta library gpu-nvme-direct

Streaming langsung NVMe

  • Jika model tidak muat di VRAM, jalur NVMe → GPU langsung sepenuhnya mengeluarkan CPU dari alur
    • Alur data: NVMe SSD → DMA → memori staging pinned → PCIe H2D → buffer GPU → komputasi
  • NVMe di-bind ke VFIO agar dapat diakses langsung dari user space
  • Tiap layer (sekitar 670MB untuk 70B Q6_K) dibaca dalam sekitar 202ms melalui 670 perintah NVMe
  • Pembacaan NVMe, H2D DMA, dan komputasi GPU diproses paralel dalam pipeline double buffer

Konfigurasi sistem dan peringatan risiko

  • Skrip setup otomatis (setup_system.sh) mengonfigurasi GRUB, NVIDIA DKMS, header CUDA, VFIO, dan binding NVMe secara berurutan
  • Mencakup pekerjaan berisiko tinggi seperti menonaktifkan IOMMU, patch modul kernel, dan binding NVMe ke VFIO
  • Konfigurasi yang salah dapat menyebabkan gagal boot, kehilangan data NVMe, dan ketidakstabilan sistem
  • Jangan pernah gunakan drive boot, diperlukan perangkat NVMe terpisah khusus
  • Backup dan skrip pemulihan disediakan untuk semua perubahan

Arsitektur dan struktur kode

  • Komponen utama dalam direktori src/
    • core/: tensor, alokasi memori, manajemen perangkat GPU
    • cuda/: kernel GEMV, RMSNorm, RoPE, SwiGLU, softmax
    • memory/: mesin streaming SLEP berbasis NVMe dan mmap
    • model/: komponen Transformer, loader GGUF, attention, FFN, normalization
    • inference/: tokenizer, sampler, engine
  • scripts/: mencakup skrip setup sistem, binding NVMe, dan pemulihan

Roadmap tahap pengembangan

  • Tahap 1: Llama 8B Q8_0, kernel CUDA kustom, 48.9 tok/s (selesai)
  • Tahap 2: Streaming SLEP, menjalankan 70B di single GPU, peningkatan kecepatan 33x (selesai)
  • Tahap 3: dukungan Q4_K_M/Q5_K, Layer skip, self-speculative decoding, cache KV F16 (selesai)
  • Tahap 4: backend NVMe Direct, pembacaan NVMe yang dikendalikan GPU 3.35 GB/s (selesai)
  • Tahap 5: optimasi inferensi dan C API publik (direncanakan)

Lisensi

  • Menggunakan lisensi BSD-2-Clause

1 komentar

 
GN⁺ 2026-02-23
Komentar Hacker News
  • Saya pikir pendekatan transfer langsung dari NVMe ke GPU dengan melewati CPU ini benar-benar cerdas
    Saat menjalankan model besar secara lokal, bottleneck-nya selalu ada di hierarki memori, dan ini pada dasarnya memperlakukan NVMe seperti VRAM yang diperluas yang diakses langsung lewat DMA
    Menarik untuk dibandingkan dengan pendekatan unified memory pada Apple M-series. M4 Max bisa memuat seluruh model 70B ke memori, tetapi throughput-nya lebih rendah daripada 3090
    Akan menarik jika ada benchmark yang membandingkan performa native 3090 dengan pendekatan NVMe melawan M4 Max berdasarkan batch inference

    • Saya punya M3 dan berencana mengujinya di Metal
  • Dengan GPUdirect, dimungkinkan melakukan transfer DMA langsung ke perangkat penyimpanan
    Saya sempat berpikir, bagaimana jika penyimpanan m.2 itu sebenarnya adalah DRAM? Saat melakukan spill model dari GPU, persistensi tidak diperlukan, jadi RAM sistem bisa tetap disisakan untuk CPU

    • Sepertinya akan jauh lebih baik jika memakai RAM disk. Sayang Intel Optane tidak menjadi standar. Itu terasa seperti teknologi yang pas sekali untuk alur kerja seperti ini
    • Saya juga memikirkan hal yang sama. Dulu saya pernah memberikan presentasi tentang dask-cudf di Dask Summit, dan mempercepat analisis log dengan arsitektur array SSD paralel → GPUDirect Storage → PCIe → GPU A100. Sekarang sepertinya menarik untuk menerapkan arsitektur seperti ini ke LLM atau model MoE
    • Sebenarnya, penyimpanan m.2 berbasis DRAM sudah ada dalam bentuk CXL (Compute Express Link). Hanya saja RAM terlalu mahal, sehingga sulit memanfaatkan bandwidth 31GB/s per konektor NVMe
  • Kecepatan 0,2 token per detik memang lambat untuk chat, tetapi cukup untuk pekerjaan batch/asinkron
    Saya menjalankan pipeline pembuatan konten otomatis dan mengeksekusi beberapa panggilan LLM secara bersamaan. Pembuatan gambar adalah bottleneck-nya, jadi seluruh pekerjaan tetap memakan waktu sekitar 20 menit
    Jika model 70B bisa dijalankan secara lokal, itu bisa menjadi penghematan biaya besar karena mengurangi biaya token API

    • Dari sisi biaya, ini tidak efisien. Dengan asumsi 0,5 tok/s, itu berarti 3600 token per jam, sementara sistem 3090 mengonsumsi 200~300W. Menjalankan jumlah token yang sama lewat llama 3.1 di OpenRouter jauh lebih murah daripada biaya listrik. Meski begitu, ini tetap bermakna dari sisi inferensi privat
    • Biaya listrik saat menjalankan 3090 di 350W dalam waktu lama juga perlu dipertimbangkan
  • 0,2 tok/s oke untuk eksperimen, tetapi tidak cukup untuk penggunaan interaktif
    Dalam kebanyakan kasus, model 8B atau 13B yang dikuantisasi dengan baik memberi keseimbangan latensi-kualitas yang lebih baik

    • Saya hanya ingin menguji kemungkinan bahwa ini bisa dilakukan. Dulu saya mendapat 3000 token per detik dengan transformer klasik di PS2, berkat arsitektur yang mengirim perintah langsung dari memori ke GPU. PC biasa lambat karena harus melewati CPU. GPU kelas profesional menyelesaikan masalah ini, tetapi terlalu mahal
    • Meski begitu, dalam situasi tertentu kualitas model besar bisa lebih penting
    • Menjalankannya dengan kombinasi CPU+GPU lebih cepat. Saya mendapat sekitar 1,5 tok/s dengan kombinasi 7950X+3090
    • Baru setelah melihat tabel performa saya sadar bahwa entri teratas adalah model 8B. 5 detik/token itu terlalu lambat. Dengan sistem 5950X+128GB RAM saya, kombinasi CPU dan GPU 3060 sepertinya bisa lebih cepat. Saya juga kurang yakin dengan klaim bahwa 2 detik/token adalah batas komputasi di 3090
  • Ini eksperimen yang benar-benar menarik. Saya mestinya mencoba hal seperti ini lebih dulu
    Saya penasaran dengan angka throughput nyata dibanding bandwidth teoretis PCIe. Saya ingin tahu apakah ini masalah latency atau bandwidth

    • Dalam praktiknya ini adalah bottleneck bandwidth. Motherboard B450 saya hanya mendukung PCIe3 x8, jadi GPU-nya terbatas. Jika upgrade ke X570, kecepatannya mungkin bisa 2~3 kali lebih tinggi
  • Ini hack yang keren, tetapi 0,5 tok/s pada model 70B tetap lambat dibanding model 7B yang bisa mencapai 30+ tok/s pada kartu yang sama
    Menurut riset NVIDIA, model di bawah 10B sudah bisa menangani 40~70% tugas agen, dan kesenjangan kualitasnya juga cepat menyempit

  • Bidang ini sangat layak dieksplorasi ke depan
    Dalam jangka panjang, yang tampaknya akan jadi kunci adalah optimisasi model, yaitu penelitian untuk menemukan bagian model yang bisa dihilangkan tanpa memengaruhi performa. Pada akhirnya model juga merupakan semacam struktur kompresi lossy. Arah seperti ini juga membantu demokratisasi AI

    • Analogi kompresinya menarik. Fine-tuning juga bisa dilihat dengan cara yang mirip. Misalnya, jika model 3B di-tune untuk tugas tertentu, kebutuhan akan generalitas model 70B jadi hilang
  • Proyek yang sangat keren. Saya penasaran latar belakang sistem/perangkat keras seperti apa yang dibutuhkan untuk bisa memikirkan ide seperti ini
    Saya bekerja di lingkungan yang perangkat kerasnya sangat diabstraksikan, jadi sulit membayangkan pendekatan seperti ini. Rasanya bukan cuma soal kreativitas, tetapi juga perlu pemahaman tingkat sistem

    • Ini eksperimen yang dimaksud: proyek ps2-llm
      Saat mencoba menjalankan LLM di PS2, saya terbentur batas RAM 32MB dan VRAM 4MB lalu merancang pendekatan layer streaming. PS2 bisa memproses alamat 32-bit secara langsung di VRAM sehingga sangat cepat, dan saya mencoba mereplikasikannya di PC
    • Saya juga berpikir serupa. Konsol lama punya CPU yang lambat, jadi transfer DMA adalah kunci. Mungkin pengalaman itu yang mengarah ke ide seperti ini. Smart memory card di PS2 juga punya fungsi DMA yang cukup kompleks
  • Saya juga sedang mencoba hal serupa. Saya bereksperimen menjalankan model 1T dengan VRAM kurang dari setengah kebutuhan
    Saya rasa dengan memodifikasi routing layer SGLang, kita bisa mengimplementasikan expert swap berbasis prediksi JIT dari Gen5 NVMe ke memori GPU. Saya memanfaatkan primitive NVIDIA Dynamo dan NIXL
    Saya penasaran apakah sudah ada yang pernah mencobanya

    • Saya juga ingin melihat itu. Saya sedang mempertimbangkan membeli satu 3090 lagi dan upgrade motherboard untuk mengatasi bottleneck PCIe3. Sepertinya glm 4.7~5 bisa dijalankan dengan q4_k_m
  • Proyek yang keren. Saya ingin tahu lebih detail soal proses patch DKMS pada GPU umum. Saya juga ingin mencobanya

    • Dokumennya sudah diperbarui untuk menambahkan proses patch dan informasi risikonya
    • Ada juga kasus memodifikasi driver open-source NVIDIA untuk membuka fitur enterprise seperti komunikasi GPU P2P atau pembagian vGPU
      Tautan terkait: RTX4090 P2P Unlock, vGPU Unlock